老瓶装新酒-基于工作引擎的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  0  then  '普通' when  1  then  '急件' when  2  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,如需转载请自行联系原作者

相关文章
|
11月前
|
缓存 移动开发 JavaScript
如何优化UniApp开发的App的启动速度?
如何优化UniApp开发的App的启动速度?
1705 139
|
11月前
|
移动开发 JavaScript weex
UniApp开发的App在启动速度方面有哪些优势和劣势?
UniApp开发的App在启动速度方面有哪些优势和劣势?
768 137
|
11月前
|
数据采集 JavaScript 前端开发
开发比分App?你缺的不是程序员
开发体育比分App,关键不在代码,而在懂体育、懂数据、懂用户。明确定位、理清需求、选好数据源,再找专业的产品、数据与技术人才协同,才能少走弯路。程序员最后入场,效率最高。
458 154
|
11月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1912 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
11月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1219 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
11月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1278 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
11月前
|
人工智能 前端开发 JavaScript
最佳实践3:用通义灵码开发一款 App
本示例演示使用通义灵码,基于React Native与Node.js开发跨平台类通义App,重点展示iOS端实现。涵盖前端页面生成、后端代码库自动生成、RTK Query通信集成及Qwen API调用全过程,体现灵码在全栈开发中的高效能力。(238字)
1078 11
|
11月前
|
人工智能 小程序 开发者
【一步步开发AI运动APP】十二、自定义扩展新运动项目03
继【一步步开发AI运动小程序】后,我们推出新系列【一步步开发AI运动APP】,助开发者打造高性能、优体验的AI运动应用。本文详解自定义扩展运动分析器的统一管理实现,提升代码复用性与可维护性,涵盖APP与小程序插件差异及完整代码示例,助力AI运动场景深度拓展。
|
11月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
526 0

热门文章

最新文章