老瓶装新酒-基于工作引擎的OA手机App开发(2)

简介:

    OA流程表单信息查询实现

    如果要实现OA流程表单信息的查询,需要理解工作引擎的表单展示机制。工作引擎它封装了一套独有的表单控件,其可以设置控件的DataField绑定数据项,例如:

    <SheetControls:SheetDataTrackLink ID="SheetDataTrackLink1" DataField="申请内容" runat="server" />  

    如上所示,控件绑定了数据项“申请内容”。


    而数据项“申请内容”来自于设计流程时的表单模板,具体的值存放在了数据库的相关表的特定字段中。比如我们在流程设计器设计了一个流程,添加数据“申请内容”,设置模板类型为“公文类”,设置模板名称为“12345”,并发布。则,数据库中会新增表“I_公文类_12345”,其中表有字段“申请内容”。

    这里我们要指出,一般地,我们将表单信息以及一些决定流程流转的关键性数据添加到流程模板(即数据库中对应的表中)。

    

    另外我们需要关注的是,数据库的表InstanceContext存放了所有的流程,每一条流程诞生的时候,都会向其插入一条记录。H3数据库的表WorkItem存放了所有的工作项,每生成一条工作项,都会向其插入一条记录。


    通过以上,我们得出流程信息查询的sql:    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
             declare  @var_WorkFlowName nvarchar(36);
             select  @var_WorkFlowName=t.WorkflowName  from  WorkItem t  where  t.ObjectID=@pWorkItemID;
             if (@var_WorkFlowName =  '123456' )
             begin
                 select  user_. Name  as  drafter, 
             context.CreatedTime  as  draft_time, 
             unit. Name  as  draft_department,
             context.InstanceName  as  document_name, 
             case  context.Priority  when  then  '普通' when  then  '急件' when  then  '特急'  end   as  emergency, 
             I_.备注  as  remarks, 
             I_.拟稿人意见  as  comments
             from  WorkItem item
             join  InstanceContext context  on  item.InstanceId=context.ObjectID
             join  User  user_  on  user_.ObjectID=context.Originator
             join  OrganizationUnit unit  on  unit.ObjectID=context.OrgUnit
             join  I_公文类_123456 I_  on  I_.InstanceId=context.ObjectID
             where  item.ObjectID=@pWorkItemID;
             end ;

    我们首先获取流程模板的名称,然后根据不同的查询模板执行不同查询语句,获取需要展示的表单信息。

    以下我们对相关表进行解释:

    1、WorkItem,工作项表,每生成一条工作项,即在此表插入一条记录;

    2、InstanceContext,流程表,每发起一个流程,即在此表插入一条记录;

    3、User,用户表,存放所有用户信息;

    4、OrganizationUnit,部门表,存放所有部门信息;

    5、I_公文类_123456,特定流程模板表,存在流程表单信息;


    然后我们建立一张表FormField,其决定了每个流程模板应该展示的表单数据,内容如下:

wKioL1g83nizijOBAACjArflUdc720.png    字段解释如下:

    Name: 展示的名称;

    type:展示的类型;

    queryName:对应于表单查询语句的字段;

    sortedIndex:决定了表单字段展示的先后顺序;


    具体实现代码如下:

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
     DAL.FlowInfoManger dal =  new  DAL.FlowInfoManger();
      // 流程需要收集的表字段
      DataTable dtFormField = dal.GetFlowData(WorkItemID);
      Flow flow =  new  Flow();
      // 初始化流程id
      flow.flowguid = WorkItemID;
      // 流程的实际展示内容
      DataTable dtFormMessage =  new  DataTable();
      dtFormMessage = dal.GetFlowData(WorkItemID, procName);
             if  (dtFormMessage.Rows.Count > 0)
             {
                 foreach  (DataRow dr  in  dtFormField.Rows)
                 {
                     FormField form =  new  FormField();
                     form.name = (dr[ "Name" ] == DBNull.Value) ?  ""  : dr[ "Name" ].ToString();
                     form.type = (dr[ "type" ] == DBNull.Value) ?  ""  : dr[ "type" ].ToString();
                     string  queryName = (dr[ "queryName" ] == DBNull.Value) ?  ""  :
                         dr[ "queryName" ].ToString();
                     if  (queryName !=  string .Empty)
                     {
                         form.value = (dtFormMessage.Rows[0][queryName] == DBNull.Value) ?  ""
                             : dtFormMessage.Rows[0][queryName].ToString();
                     }
                     flow.info.Add(form);
                 }
             }


    以上则完成了表单信息的查询展示。



本文转自 许大树 51CTO博客,原文链接:http://blog.51cto.com/abelxu/1877581,如需转载请自行联系原作者

相关文章
|
27天前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
83 3
|
28天前
|
Android开发 开发者 UED
个人开发 App 成功上架手机应用市场的关键步骤
个人开发 App 成功上架手机应用市场的关键步骤
|
28天前
|
开发工具 数据安全/隐私保护 Android开发
【教程】APP 开发后如何上架?
【教程】APP 开发后如何上架?
|
27天前
|
Java Android开发 开发者
【Uniapp开发】APP的真机调试指南,从开发到上架全过程
【Uniapp开发】APP的真机调试指南,从开发到上架全过程
36 3
游戏直播APP平台开发多少钱成本:定制与成品源码差距这么大
开发一款游戏直播APP平台所需的费用是多少?对于计划投身这一领域的投资者来说,首要关心的问题之一就是。本文将探讨两种主要的开发模式——定制开发与成品源码二次开发的成本差异及其优劣势。
|
1月前
|
开发框架 移动开发 JavaScript
SpringCloud微服务实战——搭建企业级开发框架(四十六):【移动开发】整合uni-app搭建移动端快速开发框架-环境搭建
正如优秀的软件设计一样,uni-app把一些移动端常用的功能做成了独立的服务或者插件,我们在使用的时候只需要选择使用即可。但是在使用这些服务或者插件时一定要区分其提供的各种服务和插件的使用场景,例如其提供的【uni-starter快速开发项目模版】几乎集成了移动端所需的所有基础功能,使用非常方便,但是其许可协议只允许对接其uniCloud的JS开发服务端,不允许对接自己的php、java等其他后台系统。
137 2
|
1月前
|
移动开发 数据安全/隐私保护
HC05蓝牙模块与手机APP连接
HC05蓝牙模块与手机APP连接
34 1
|
1月前
|
移动开发 负载均衡 小程序
代驾app开发丨代驾系统开发玩法详情丨代驾系统开发网页版/H5/小程序及源码部署
**司机/代驾员端**:司机可以通过APP接收订单,查看订单详情、路线和导航,提供现场服务并进行确认。
|
1月前
|
人工智能 算法 数据处理
App Inventor 2 Personal Image Classifier (PIC) 拓展:自行训练AI图像识别模型,开发图像识别分类App
这里仅仅介绍一下AI图像识别App的实现原理,AI的基础技术细节不在本文讨论范围。通过拓展即可开发出一款完全自行训练AI模型,用于特定识别场景的App了。
41 1
app开发的一些思路
<p><br></p> <p><br></p> <p></p> <h3 style="margin:0px; padding:0px; border:0px; vertical-align:baseline; clear:both; font-weight:normal; list-style:none; color:rgb(102,102,102); font-family:宋体;
2864 0

热门文章

最新文章