老瓶装新酒-基于工作引擎的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,如需转载请自行联系原作者

相关文章
|
8月前
|
缓存 移动开发 JavaScript
如何优化UniApp开发的App的启动速度?
如何优化UniApp开发的App的启动速度?
1325 139
|
8月前
|
移动开发 JavaScript weex
UniApp开发的App在启动速度方面有哪些优势和劣势?
UniApp开发的App在启动速度方面有哪些优势和劣势?
590 137
|
8月前
|
数据采集 JavaScript 前端开发
开发比分App?你缺的不是程序员
开发体育比分App,关键不在代码,而在懂体育、懂数据、懂用户。明确定位、理清需求、选好数据源,再找专业的产品、数据与技术人才协同,才能少走弯路。程序员最后入场,效率最高。
358 154
|
9月前
|
移动开发 小程序 Android开发
基于 uni-app 开发的废品回收类多端应用功能与界面说明
本文将对一款基于 uni-app 开发的废品回收类多端应用,从多端支持范围、核心功能模块及部分界面展示进行客观说明,相关资源信息也将一并呈现。
271 0
|
12月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
11月前
|
Rust 安全 前端开发
Github 轻松斩获30k+ Star,桌面应用开发太丝滑啦,Tauri框架能重塑桌面App开发?别错过,抓紧上车
Tauri 是一个基于 Rust 的开源框架,用于构建轻量级、高性能、安全的跨平台桌面及移动应用。它利用系统 WebView 渲染前端界面,后端由 Rust 编写,具备出色的性能和安全性。相比 Electron,Tauri 应用体积更小、启动更快,且默认权限更安全。它支持 React、Vue、Svelte 等主流前端框架,并提供自动更新、CLI 工具链、资源注入优化等功能,适用于生产力工具、开发者工具、数据分析、AI 应用等多种场景。目前 Tauri 在 GitHub 上已获得超过 30,000 Star,社区活跃,是现代桌面应用开发的理想选择。
1453 0
|
8月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1402 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
8月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1013 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
8月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1110 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡

热门文章

最新文章