立即注册 登录
度量快速开发平台-专业、快速的软件定制快开平台 返回首页

张军勇的个人空间 http://bbs.delit.cn/?4 [收藏] [复制] [RSS]

日志

如何编写数据扩展服务

已有 2692 次阅读2020-6-24 17:45 |个人分类:二次开发|系统分类:二次开发| 快速开发平台, 数据服务, 业务表

如何编写自定义数据扩展服务
     编写数据扩展服务,我们可以通过调用平台数据操作类(DataService ),很方便的实现自己的数据服务,本文主要讲解如何用vs编写、配置、调用扩展服务的方法。阅读本文需要有vs编程基础及度量快速开发平台基础。
一、编写及配置数据扩展服务。
我们以vs2005中创建类库为例,来说明如何创建服务。
1、在vs中新建一个项目,类型为类库:
 
2、找到服务端的bin目录,添加度量快速开发平台服务端文件的引用:
 
3、编写服务程序
引用完成后,就可以开始服务编写,首先,服务编写需要从ServiceBase基类继承,并实现其中的关键属性和方法:
ServiceName属性为服务名;
CheckCommand方法主要用于在命令执行前进行判断,如是否已登录等,默认为必须登录系统后才能获取数据。
RunCommand 主要用于执行命令,返回数据,返回值为FWReturnData,需要返回的值设置到其Value属性中。
 
以下是实现代码:
using System;
using System.Collections.Generic;
using System.Text;
using FWFramework.Service.Common;
using FWFramework.Common;
using System.Data;
using FWFramework.Data;
using FWFramework.TableReader;
 
namespace MyDataService
{
    /// <summary>
    /// 数据服务,必须继承ServiceBase 或IService
    /// </summary>
    public class MyDataService1: ServiceBase
    {
 
        //定义一个数据服务。数据服务可访问所有平台连接的数据库。
        //可进行数据库读取,写入操作。
        DataService service = new DataService();
 
        /// <summary>
        /// 重写ServiceName属性,定义名称。
        /// </summary>
        public override string ServiceName
        {
            get { return "MY_SERVICE1"; }
        }
 
        /// <summary>
        /// 可通过重写此方法,绕过登录验证,此方法一般不需要重写。
        /// 以下示例是绕过验证的写法。
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="errMessage"></param>
        /// <returns></returns>
        protected override int CheckCommand(FWCommand cmd, out string errMessage)
        {
            //
            //可注销下面一行绕过验证,即没有登录也可以获取数据,请谨慎使用。
            //return base.CheckCommand(cmd, out errMessage);
 
            errMessage = string.Empty;
            return 0;
        }
 
        protected override FWReturnData RunCommand(FWCommand cmd, out bool done)
        {
            done = true;
            FWReturnData rd = new FWReturnData();
            switch (cmd.Command)
            {
                case 1000:
                    DataTable dt = getMyData();
                    rd.Value = dt;
                    return rd;
                case 1001:
                    DataTable dt1 = getMyData(cmd.CommandData as Dictionary<string, object>);
                    rd.Value = dt1;
                    return rd;
            }
 
            //如果没有处理到,一定要将done置为false,以便后续程序继续处理。
            done = false;
            return null;
        }
 
        /// <summary>
        /// 不带参数
        /// </summary>
        /// <returns></returns>
        private DataTable getMyData()
        {
            //这个是示例程序,一般需要编写服务的情况是在业务表SQL无法完成的情况下才需要通过服务方式进行。
 
            string sql = "SELECT * FROM SA_DEPT_DICT";
 
            DataTable dt = service.CustomSelect("default", sql);
           
            return dt;
        }
 
        /// <summary>
        /// 带参数,参数是通过Dictionary<string, object>传输的。
        /// </summary>
        /// <param name="deptType"></param>
        /// <param name="deptName"></param>
        /// <returns></returns>
        private DataTable getMyData(Dictionary<string, object> p)
        {
            if (!p.ContainsKey("DEPT_TYPE"))
            {
                throw new Exception("参数不足");
            }
            if (!p.ContainsKey("DEPT_NAME"))
            {
                throw new Exception("参数不足");
            }
            int deptType = Convert.ToInt32(p["DEPT_TYPE"]);
            string deptName = p["DEPT_NAME"].ToString();
 
            string sql = string.Format("SELECT * FROM SA_DEPT_DICT where DEPT_TYPE={0} and DEPT_NAME ='{1}'", deptType, deptName);
 
            DataTable dt = service.CustomSelect("default", sql);
 
            return dt;
        }
    }
}
 
 
4、配置扩展服务:
编译后,成生MyDataService.dll ,将此文件复制到服务端的bin目录下。然后打开服务端配置工具,将扩展服务配置好,配置方式为填写生成的DLL(程序集)名称,和服务类名“MyDataService.MyDataService1”(这儿需要填写完整的名字空间和类名)。如下图:
 
 
注意,添加服务后,不会即时生效,需要重启IIS。
 
经过以上配置,扩展服务就配置完成了。重启服务后,登录系统初始化数据时,就会加载服务,在服务端log目录下的日志文件中,可以查看到服务加载成功或是失败。
 
二、业务表调用数据扩展服务
1、业务表调用扩展服务(无参数):
 
 
根据程序编写的服务名,命令编号,填写到服务调用处,然后点击测试,正常情况下即可查看到数据。
 
2、业务表调用扩展服务(有参数):
服务名称和命令编号按照服务类中填写,这儿主要是变量名称及变量类型,实际上,我们这儿的变量名称和类型都只是用来传输的,所以并不象构建的SQL语句业务表那样严格要求变量类型,这儿只是传输到服务端,通过服务端获取,然后进行类型的处理。所以根据编程中的变量名称和变量类型定义即可,如下图:测试时我们需要传入两个变量的值,我这儿传输的是”1”和“主任”,所以筛选出来了所有名称为主任的岗位。
 
三、客户端编程调用业务表扩展服务:
         引用客户端Service.dll、FWFramework.Common.dll、FWFramework.TableReader.dll文件,然后调用其中的方法:
            //定义服务
            DataService dservice = new DataService();
 
            //定义命令
            FWCommand cmd = new FWCommand();
            cmd.ServiceName = "MY_SERVICE1";
            cmd.Command = 1001;
 
            //如果有参数,则将参数和值一起传递到服务端。
            Dictionary<string, object> param = new Dictionary<string, object>();
            param.Add("DEPT_TYPE", 1);
            param.Add("DEPT_NAME", "主任");
 
            cmd.CommandData = param;
 
            FWReturnData rd = dservice.GetExtendData(cmd, true);
            DataTable dt1 = rd.Value as DataTable;
 
 
至此,扩展服务编写、配置及调用已全部讲完,希望能够帮助大家通过扩展服务,实现更多更丰富的功能。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-12-5 06:23 , Processed in 0.076146 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部