一、创建或更新包含子表的表单
二、流程事件变化后执行某些逻辑
三、发送消息提醒

一、创建或更新包含子表的表单
1、首先介绍关于在后端创建包含子表的表单

//根据ID查询当前表单数据
string sql1 = "select Warehouse1 as Warehouse1,MyProject as MyProject,Class1 as Class1,People as People,Dept as Dept," +"Principal as Principal from I_D000399SgProductionAcquisition where Objectid = '" + ObjectId + "'";
System.Data.DataTable table1 = this.Engine.Query.QueryTable(sql1, null);
int rowCount1 = table1.Rows.Count;//根据ID查询当前表单子表数据
string sql2 = "select ControlCatalogue as ControlCatalogue,No as No,MaterialName as MaterialName,Type as Type,Unit1 as Unit1 " +"from I_D000399SgBugApplyDetails where parentobjectid = '" + ObjectId + "'";
System.Data.DataTable table2 = this.Engine.Query.QueryTable(sql2, null);
int rowCount2 = table2.Rows.Count;List < H3.DataModel.BizObject > _list = new List<H3.DataModel.BizObject>();
for(int i = 0;i < rowCount2; i++) {//创建子表对象H3.DataModel.BizObject childBo = new H3.DataModel.BizObject(this.Request.Engine, this.Request.Engine.BizObjectManager.GetPublishedSchema("D000399SqOutbound01"), this.Request.UserContext.UserId);childBo["ControlCatalogue"] = table2.Rows[i]["ControlCatalogue"].ToString();childBo["No"] = table2.Rows[i]["No"].ToString();childBo["MaterialName"] = table2.Rows[i]["MaterialName"].ToString();childBo["Type"] = table2.Rows[i]["Type"].ToString();childBo["Unit1"] = table2.Rows[i]["Unit1"].ToString();childBo.Create();_list.Add(childBo);
}//创建主表对象
H3.DataModel.BizObject bo = new H3.DataModel.BizObject(this.Engine, this.Engine.BizObjectManager.GetPublishedSchema("D000399SqOutbound"), this.Request.UserContext.UserId);
bo["WDate"] = DateTime.Today.ToString("yyyy-MM-dd");
bo["YearMonth"] = DateTime.Today.ToString("yyyyMM");
bo["Title"] = "审核批量,生产领用出库";
bo["Acquisition"] = ObjectId;
bo["No"] = No;
bo["Money"] = AllMoney;
for(int i = 0;i < rowCount1; i++) {bo["Warehouse1"] = table1.Rows[i]["Warehouse1"].ToString();bo["MyProject"] = table1.Rows[i]["MyProject"].ToString();bo["Class"] = table1.Rows[i]["Class1"].ToString();bo["People"] = table1.Rows[i]["People"].ToString();bo["Dept"] = table1.Rows[i]["Dept"].ToString();bo["Principal"] = table1.Rows[i]["Principal"].ToString();
}
bo["D000399SqOutbound01"] = _list.ToArray();
bo.Status = H3.DataModel.BizObjectStatus.Effective;
bo.Create();

上述代码是根据ID,查询某表单以及其子表数据,再将数据对应赋值给创建的表单以及创建表单的子表,这里表单或者其子表的ID都是系统自己随机生成,同时可以设置创建表单的状态,需要注意的是这里创建后的表单继续会触发它对应的业务规则。

2、再介绍关于在后端更新包含子表的表单:

//查询当前表单子表中需要冲减的数量
string sql1 = "select ControlCatalogue as ControlCatalogue,Num3 as Num3 from I_D000399SgBuyDetails" +" where parentobjectId = '" + BuyApply + "' and Num3 != 0";
System.Data.DataTable table1 = this.Engine.Query.QueryTable(sql2, null);
int rowCount1 = table1.Rows.Count;H3.Data.Filter.Filter filter = new H3.Data.Filter.Filter();
H3.Data.Filter.And andMatcher = new H3.Data.Filter.And();andMatcher.Add(new H3.Data.Filter.ItemMatcher("ObjectId", H3.Data.ComparisonOperatorType.Equal, UseAllPlan));
filter.Matcher = andMatcher;
H3.DataModel.BizObjectSchema accountSchema = this.Request.Engine.BizObjectManager.GetPublishedSchema("D000399SgUseAllPlan");
H3.DataModel.BizObject[] customers = H3.DataModel.BizObject.GetList(this.Request.Engine, this.Request.UserContext.UserId,accountSchema, H3.DataModel.GetListScopeType.GlobalAll, filter);
if(customers != null && customers.Length > 0)
{H3.DataModel.BizObject[]  details = (H3.DataModel.BizObject[]) customers[0]["D000399SgUseAllDetails"];List < H3.DataModel.BizObject > boList = new List<H3.DataModel.BizObject>();//保存原子表记录,先获取子表内容,循环将其原有数据添加到boListif(details != null){foreach(H3.DataModel.BizObject dt in details){for(int i = 0;i < rowCount1; i++) {string ControlCatalogue = table1.Rows[i]["ControlCatalogue"].ToString();string Num3 = table1.Rows[i]["Num3"].ToString();if(string.Equals(dt["ControlCatalogue"], ControlCatalogue)){int temp1 = Convert.ToInt32(dt["Num4"]) - Convert.ToInt32(Num3);dt["Num4"] = Convert.ToString(temp1);int temp2 = Convert.ToInt32(dt["Num5"]) + Convert.ToInt32(Num3);dt["Num5"] = Convert.ToString(temp2);}}boList.Add(dt);}}H3.DataModel.BizObjectSchema schema = this.Request.Engine.BizObjectManager.GetPublishedSchema("D000399SgUseAllPlan");H3.DataModel.BizObject schemaObject = new H3.DataModel.BizObject(this.Request.Engine, schema, this.Request.UserContext.UserId);schemaObject.ObjectId = UseAllPlan;  //更新的表单ID为UseAllPlanschemaObject.Load();schemaObject["D000399SgUseAllDetails"] = boList.ToArray();schemaObject.Update();
}

上述代码是根据ID,更新目标表单的子表数据,需要注意的是这里更新后的表单同样会触发它对应的业务规则,如果不想触发业务规则,也可采用sql语句更新的方式,如下所示。

string UpdateSql = "update I_D150876F9b6ce658d6854729aa83d8ad3afcff86 set F0000048='" + controlValue + "' where F0000027='" + objId + "'";
this.Engine.Query.QueryTable(UpdateSql, null);

二、流程事件变化后执行某些逻辑

当一个表单生效或作废后,若有业务规则首先会执行业务规则,通常有更新或新增等操作。然后再执行流程变化后事件。前提是当前表单已经开启了表单流程。代码如下:

protected override void OnWorkflowInstanceStateChanged(H3.Workflow.Instance.WorkflowInstanceState oldState, H3.Workflow.Instance.WorkflowInstanceState newState){//流程审批结束,业务规则执行。还有个审批流程结束(finished状态下直接删除),就直接删除也会触发业务规则执行。在submit里面处理if(oldState == H3.Workflow.Instance.WorkflowInstanceState.Running && newState == H3.Workflow.Instance.WorkflowInstanceState.Finished){DoAfterPass1(this.Request.BizObject.ObjectId);}//流程审批结束后,重新激活,业务规则会执行。还有个审批流程结束(finished状态下直接删除),就直接删除也会触发业务规则执行。在submit里面处理if(oldState == H3.Workflow.Instance.WorkflowInstanceState.Finished && newState == H3.Workflow.Instance.WorkflowInstanceState.Running){DoAfterPass2(this.Request.BizObject.ObjectId);}base.OnWorkflowInstanceStateChanged(oldState, newState);}

this.Request.BizObject.ObjectId; //当前表单的ID

三、发送消息提醒

H3.Task.UserTask task = new H3.Task.UserTask();
task.ObjectId = Guid.NewGuid().ToString();
task.Sender = this.Request.UserContext.UserId; //任务的发送人ID
task.UserId = this.Request.UserContext.UserId; //任务的接收人ID
task.AppCode = ""; //应用的Code
task.TaskType = H3.Task.TaskType.Reminder; //任务类型为提醒
task.SchemaCode = ""; //表单的Code
task.TargetType = LinkTargetType.BizObject; //链接类型
task.TargetId = ""; //链接表单对象的ID
task.TargetName = ""; //链接表单对象的名称
task.Name = "这是测试提醒标题!"; //提醒标题
task.Summary = "这是测试提醒内容!"; //提醒的内容
task.AlertTime = DateTime.Now;  // 提醒时间
task.ReminderType = H3.Task.ReminderType.Once; //提醒的类型
task.StartTime = DateTime.Now;    //开始时间
task.TaskState = H3.Task.TaskState.Unfinished;  //任务的状态
task.AlertState = H3.Task.AlertState.Waiting;  //提醒的状态
this.Request.Engine.TaskManager.AddTask(task);//添加任务

氚云后台代码-创建、更新子表以及发送消息相关推荐

  1. “破局者”氚云——低代码应用搭建工具,基于钉钉敏捷搭建企业专属应用

    关键词:低代码开发.氚云.企业信息化.丰富模板.移动办公 通过信息化来提升管理效率,减低管理成本,增强企业竞争力,是绝大部分企业在发展过程中都绕不开的关键点. 对于大型企业而言,专业的IT人才配备以及 ...

  2. php对接AliGenie天猫精灵服务器控制智能硬件esp8266③ 渗入熟悉AliGenie 对接协议,揭开第三方云平台是如何让天猫精灵是发送消息到私有服务器的!

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. php对接AliGenie天猫精灵服务器控制智能硬件esp82 ...

  3. 代码创建数据库_表--SqlServer数据库

    /*1.创建数据库的时候需要设置的基本属性:数据库名称 逻辑名称 初始大小 文件增长 路径*/--语法:-- create database 数据库名称-- on [primary]--创建数据文件 ...

  4. mysql 更新子表_mysql 在update中实现子查询的方式

    当使用mysql条件更新时--最先让人想到的写法 UPDATE buyer SET is_seller=1 WHERE uid IN (SELECT uid FROM seller) 此语句是错误的, ...

  5. Java 仿QQ空间评论 后台代码实现 一张表

    因为项目业务需要,特此写出此仿QQ空间的评论功能,项目如下图所示,records下的是一级评论 里面的commentList是二级评论,前端根据此数据格式渲染即可 表结构如下,其中father_id与 ...

  6. SQL Server基础学习——用代码创建数据库和表

    1.连接成功后出现下述页面,那么我们学习第一步先建个数据库和表 2.建立之前要了解基础SQL语言 SQL语言是集DDL.DML.DCL 于一体的数据库语言. 1)DDL语句引导词:Create(建立) ...

  7. 13.13通过代码创建数据库和表

    --在这里编写sql命令 --1.创建一个数据库(直接创建一个数据库,没有设置任何特殊选项,都是使用默认的) create database MyDatabaseOne; --2.删除数据库 drop ...

  8. asp.net中用后台代码创建datatable和html表格,ASP.NET中用后台代码创建DataTable和HTML表格...

    HTML表格测试 tr { line-height:22px; } A { color:#669966; } .table_tr_Over { background-color:#F6F6F6; } ...

  9. MYSQL - 创建/更新/删除表

    目录 一.创建表 CREATE PS1 数据类型 PS2 创建视图 PS3 创建索引 二.更新表 alter 1 添加列 2 删除列 3 改变数据类型 4 改变表名 三.删除表 PS1 删除视图or触 ...

  10. oracle外键如何创建索引,子表建立外键的索引问题

    本帖最后由 Yong Huang 于 2013-9-30 09:31 编辑 An index on the child table foreign key column is to prevent l ...

最新文章

  1. 高并发之并发容器详解(从入门到超神)
  2. sql server 替换有反斜杠的字符串_SQL注入思维导图
  3. BZOJ 1920 Luogu P4217 [CTSC2010]产品销售 (模拟费用流、线段树)
  4. 离开当前屏幕的判断方法_EXCEL 一个工作表如何快速拆分多个工作表的方法
  5. 学web前端一定要这样学,不然学完找不到工作哭都来不及!
  6. vimdiff和vim-fugitive安装,使用教程
  7. mybatis xml文件 id冲突错误 findUserIDById is ambiguous in Mapped Statements collection
  8. js来读写cookie操作
  9. 使用Supervisor监控代码的修改 - cmd安装激活篇
  10. 精华文稿 | 工业场景中机器人定位导航技术
  11. 《Cortex-M0权威指南》之体系结构---存储器系统
  12. 解决mavencommons-cli:commons-cli:jar:1.0 下载不下来的错误
  13. c语言 背包算法,c语言背包问题(背包最大容量c语言算法)
  14. scratch做了个病毒大战的游戏,欢迎朋友们试玩,多提意见
  15. 测试的阿萨德萨达阿萨德
  16. 绝知此事要躬行|fatal: not in a git directoryError: Command failed with exit 128: git
  17. QQ能上,但是网页打不开?
  18. Element ui 组件中用键盘事件
  19. 规则引擎解决方案浅析
  20. 斗地主手牌最少手数的搜索

热门文章

  1. 区块链专利正从量向质转变 智慧金融、医疗健康和能源三领域质量最高
  2. 无人机倾斜摄影三维建模技术在智慧城市中的应用
  3. PICkits3调试功能
  4. python怎么开发服务器_Python服务器开发(1)
  5. 使用信号量机制实现独木桥问题
  6. opencv双目测距
  7. 运行 Visual Studio 2019当前页面的脚本发生错误解决方法
  8. 常用的webservice接口(转)
  9. 上三角数字三角形(Java)
  10. 定时任务Quartz基础