数据服务对象模式

在业务组件上使用数据对象服务模式,是设置业务组件数据来源的一种方法。业务组件数据默认是来自挂接的数据库表,通过“数据服务对象模式”可以设置为来自服务端函数、存储过程、第三方服务等。

UCMLFramework版平台下,需在BC的基本配置界面勾上“数据服务对象模式(SDO)”:

image.png

UCMLCore版平台下,需在解决方案中新建业务组件项目,然后在业务组件项目中新建BC,BC的基本配置界面勾上“数据服务对象模式(SDO)”

图片.png

数据服务对象模式-菜单功能:

image.png

1、读取数据接口函数:在业务组件下添加一个获取数据的ReadData函数,在函数中用编程的方式获取第三方的数据,并将数据填充到业务组件BC(业务组件在服务端是DataTable对象)中。

    image.png

 ReadData函数参数说明:

参数名称说明
StartPos读取数据的开始位置
PageCount每页显示的记录数
totalRecord共多少条记录
readRecordCount共读取多少条记录
parentBCObject主子业务时如果当前组件为子业务组件,此对象为主业务组件对象
defaultFieldList查询条件字段名列表,默认以分号分隔
defaultValueList查询条件字段值列表,默认以分号分隔
defaultCondiIndentList查询条件逻辑表达式列表,默认以分号分隔
defaultSQLCondi自定义SQL查询where条件表达式,格式为:字段名=值 and 字段2<>值。。。等
SQLFix条件字段的连接方式 0--AND 1--OR



2、包装存储过程函数:自动在ReadData函数中生成调用存储过程的代码。需要执行“根据BC创建存储过程”创建这里调用的存储过程

3、修改数据接口函数:创建数据提交时对应服务端函数UpdateData,在此函数中写代码将修改的数据更新到数据库中。

      image.png

  参数:DeltaXml为前端变化数据,以XML格式传到服务器端,在服务器端解析该函数获取要更新的数据。参考代码如下:         

  XmlDataDocument xmldoc = new XmlDataDocument(); 
        DeltaXmldoc = xmldoc; xmldoc.LoadXml(xmlData); 
        XmlNodeList nodes; 
        try { 
            this.OpenSession(); 
            for (int i = 0; i < UseEntityArray.Length; i++) { 
                UseEntityClass item = UseEntityArray[i]; 
                nodes = xmldoc.DocumentElement.SelectNodes("//" + item.BCName); 
                if (nodes != null && nodes.Count > 0) {
                    MergeDataTable(item, BPODataSet.Tables[item.BCName], xmldoc); 
                } 
                try 
                { 
                    DataTable dt = item.dataTable; 
                    for (int j = 0; j < dt.Rows.Count; j++) { 
                        if (dt.Rows[j].RowState == DataRowState.Added) { } 
                        else if (dt.Rows[j].RowState == DataRowState.Modified) { } 
                        else if (dt.Rows[j].RowState == DataRowState.Deleted) { } 
                        else if (dt.Rows[j].RowState == DataRowState.Unchanged) { } } 
                } catch (Exception e) {
                    UCMLCommon.UCMLLog.WriteLog(e.Message + e.Source + e.TargetSite);
                    onsubmitexception(e); 
                    this.FBPODataSet.RejectChanges(); 
                    this.Rollback(); 
                    throw new Exception(e.Message);
                } 
            } 
            this.Commit(); 
            return ""; 
        }
        catch (Exception e) { 
            this.Rollback(); 
            throw new Exception(e.Message); 
        }
        finally { 
            this.CloseSession();
        }

4、根据POCO结构动态构建列信息:弹出“对象名称”界面,输入POCO对象的名称,然后点击【确定】生成OnCustomPrepareCoulmns函数,如下图:

  image.png

     image.png

5、根据DataTable对象动态构建列信息:弹出“对象名称”界面,输入DataTable对象的名称,然后点击【确定】生成OnCustomPrepareCoulmns函数,如下图:

     image.png

     image.png

6、从ESB服务构造全部BC数据:参考下文专题介绍《ESB服务总线定义与使用》

7、从ESB服务构造部分BC数据:参考下文专题介绍《ESB服务总线定义与使用》

8、从UCML开发的业务Web服务构造BC数据:参考下文专题介绍《ESB服务总线定义与使用》

9、数据提交时刻调用ESB服务操作数据:参考下文专题介绍《ESB服务总线定义与使用》

10、根据BC创建存储过程:直接在对应的业务数据库中创建一个与BC对应的支持分页读取数据的存储过程供“包装存储过程函数”调用,具体使用示例见根据BC创建存储过程并调用

11、生成服务对象源码:将定义好的读取数据或更新数据函数代码生成一个以业务组件命名的类。UCMLFramework版平台下,类文件所在路径:BPObject\BusiComponent;UCMLCore版平台下,类文件所在路径:解决方案目录\BusinessComponent

12、编译服务对象源码:UCMLFramework版平台下,编译“生成服务对象源码”生成的C#代码,生成的dll为:BPObject\bin\UCMLBC.dll

  UCMLCore版平台下,BC工程源码生成并编译后,生成的dll为:解决方案目录\BusinessComponent\bin\输出程序名称.dll,如下图:

  图片.png

       注意:如在解决方案下使用SDO模式时报类似下图的错误,UCMLFramework版平台下需要在解决方案业务单元包中引用UCMLBC.dll,UCMLCore版平台下需要在解决方案业务单元包中引用BC工程或dll

image.png

      image.png

13、 编译存储过程访问代码:编译“生成服务对象源码”生成的调用存储过程的C#代码

评论

暂无评论!

发表评论