基于氚云平台的应用开发学习(三)

基于氚云平台的应用开发学习(三)这篇将继续围绕上篇所说的第二种方法 记录说明一下自己遇到的问题以及解决方法 一 创建或更新包含子表的表单二 流程事件变化后执行某些逻辑三 发送消息提醒一 创建或更新包含子表的表单 1 首先介绍关于在后端创建包含子表的表单 1 根据 ID 查询当前表单数据 2stringsql1 selectWareho M

这篇将继续围绕上篇所说的第二种方法,记录说明一下自己遇到的问题以及解决方法。

一、创建或更新包含子表的表单

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

三、发送消息提醒

 

一、创建或更新包含子表的表单

1、首先介绍关于在后端创建包含子表的表单:

 

 1 //根据ID查询当前表单数据  2 string sql1 = "select Warehouse1 as Warehouse1,MyProject as MyProject,Class1 as Class1,People as People,Dept as Dept," +  3 "Principal as Principal from I_D000399SgProductionAcquisition where Objectid = '" + ObjectId + "'";  4 System.Data.DataTable table1 = this.Engine.Query.QueryTable(sql1, null);  5 int rowCount1 = table1.Rows.Count;  6  7 //根据ID查询当前表单子表数据  8 string sql2 = "select ControlCatalogue as ControlCatalogue,No as No,MaterialName as MaterialName,Type as Type,Unit1 as Unit1 " +  9 "from I_D000399SgBugApplyDetails where parentobjectid = '" + ObjectId + "'"; 10 System.Data.DataTable table2 = this.Engine.Query.QueryTable(sql2, null); 11 int rowCount2 = table2.Rows.Count; 12 13 List < H3.DataModel.BizObject > _list = new List 
    
    ();  
    14 
    for( 
    int i = 
    0;i < rowCount2; i++ 
    ) {  
    15 
    // 
    创建子表对象 
    16 H3.DataModel.BizObject childBo = 
    new H3.DataModel.BizObject( 
    this.Request.Engine, 
    this.Request.Engine.BizObjectManager.GetPublishedSchema( 
    " 
    D000399SqOutbound01 
    "), 
    this 
    .Request.UserContext.UserId);  
    17 childBo[ 
    " 
    ControlCatalogue 
    "] = table2.Rows[i][ 
    " 
    ControlCatalogue 
    " 
    ].ToString();  
    18 childBo[ 
    " 
    No 
    "] = table2.Rows[i][ 
    " 
    No 
    " 
    ].ToString();  
    19 childBo[ 
    " 
    MaterialName 
    "] = table2.Rows[i][ 
    " 
    MaterialName 
    " 
    ].ToString();  
    20 childBo[ 
    " 
    Type 
    "] = table2.Rows[i][ 
    " 
    Type 
    " 
    ].ToString();  
    21 childBo[ 
    " 
    Unit1 
    "] = table2.Rows[i][ 
    " 
    Unit1 
    " 
    ].ToString();  
    22 
     childBo.Create();  
    23 
     _list.Add(childBo);  
    24 
    }  
    25 
    26 
    // 
    创建主表对象 
    27 H3.DataModel.BizObject bo = 
    new H3.DataModel.BizObject( 
    this.Engine, 
    this.Engine.BizObjectManager.GetPublishedSchema( 
    " 
    D000399SqOutbound 
    "), 
    this 
    .Request.UserContext.UserId);  
    28 bo[ 
    " 
    WDate 
    "] = DateTime.Today.ToString( 
    " 
    yyyy-MM-dd 
    " 
    );  
    29 bo[ 
    " 
    YearMonth 
    "] = DateTime.Today.ToString( 
    " 
    yyyyMM 
    " 
    );  
    30 bo[ 
    " 
    Title 
    "] = 
    " 
    审核批量,生产领用出库 
    " 
    ;  
    31 bo[ 
    " 
    Acquisition 
    "] = 
     ObjectId;  
    32 bo[ 
    " 
    No 
    "] = 
     No;  
    33 bo[ 
    " 
    Money 
    "] = 
     AllMoney;  
    34 
    for( 
    int i = 
    0;i < rowCount1; i++ 
    ) {  
    35 bo[ 
    " 
    Warehouse1 
    "] = table1.Rows[i][ 
    " 
    Warehouse1 
    " 
    ].ToString();  
    36 bo[ 
    " 
    MyProject 
    "] = table1.Rows[i][ 
    " 
    MyProject 
    " 
    ].ToString();  
    37 bo[ 
    " 
    Class 
    "] = table1.Rows[i][ 
    " 
    Class1 
    " 
    ].ToString();  
    38 bo[ 
    " 
    People 
    "] = table1.Rows[i][ 
    " 
    People 
    " 
    ].ToString();  
    39 bo[ 
    " 
    Dept 
    "] = table1.Rows[i][ 
    " 
    Dept 
    " 
    ].ToString();  
    40 bo[ 
    " 
    Principal 
    "] = table1.Rows[i][ 
    " 
    Principal 
    " 
    ].ToString();  
    41 
    }  
    42 bo[ 
    " 
    D000399SqOutbound01 
    "] = 
     _list.ToArray();  
    43 bo.Status = 
     H3.DataModel.BizObjectStatus.Effective;  
    44 bo.Create(); 
   

 

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

 

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

 1 //查询当前表单子表中需要冲减的数量  2 string sql1 = "select ControlCatalogue as ControlCatalogue,Num3 as Num3 from I_D000399SgBuyDetails" +  3 " where parentobjectId = '" + BuyApply + "' and Num3 != 0";  4 System.Data.DataTable table1 = this.Engine.Query.QueryTable(sql2, null);  5 int rowCount1 = table1.Rows.Count;  6  7 H3.Data.Filter.Filter filter = new H3.Data.Filter.Filter();  8 H3.Data.Filter.And andMatcher = new H3.Data.Filter.And();  9 10 andMatcher.Add(new H3.Data.Filter.ItemMatcher("ObjectId", H3.Data.ComparisonOperatorType.Equal, UseAllPlan)); 11 filter.Matcher = andMatcher; 12 H3.DataModel.BizObjectSchema accountSchema = this.Request.Engine.BizObjectManager.GetPublishedSchema("D000399SgUseAllPlan"); 13 H3.DataModel.BizObject[] customers = H3.DataModel.BizObject.GetList(this.Request.Engine, this.Request.UserContext.UserId, 14  accountSchema, H3.DataModel.GetListScopeType.GlobalAll, filter); 15 if(customers != null && customers.Length > 0) 16 { 17 H3.DataModel.BizObject[] details = (H3.DataModel.BizObject[]) customers[0]["D000399SgUseAllDetails"]; 18 List < H3.DataModel.BizObject > boList = new List 
    
    ();  
    19 
    // 
    保存原子表记录,先获取子表内容,循环将其原有数据添加到boList 
    20 
    if(details != 
    null 
    )  
    21 
     {  
    22 
    foreach(H3.DataModel.BizObject dt 
    in 
     details)  
    23 
     {  
    24 
    for( 
    int i = 
    0;i < rowCount1; i++ 
    ) {  
    25 
    string ControlCatalogue = table1.Rows[i][ 
    " 
    ControlCatalogue 
    " 
    ].ToString();  
    26 
    string Num3 = table1.Rows[i][ 
    " 
    Num3 
    " 
    ].ToString();  
    27 
    28 
    if( 
    string.Equals(dt[ 
    " 
    ControlCatalogue 
    " 
    ], ControlCatalogue))  
    29 
     {  
    30 
    int temp1 = Convert.ToInt32(dt[ 
    " 
    Num4 
    "]) - 
     Convert.ToInt32(Num3);  
    31 dt[ 
    " 
    Num4 
    "] = 
     Convert.ToString(temp1);  
    32 
    int temp2 = Convert.ToInt32(dt[ 
    " 
    Num5 
    "]) + 
     Convert.ToInt32(Num3);  
    33 dt[ 
    " 
    Num5 
    "] = 
     Convert.ToString(temp2);  
    34 
     }  
    35 
     }  
    36 
     boList.Add(dt);  
    37 
     }  
    38 
     }  
    39 H3.DataModel.BizObjectSchema schema = 
    this.Request.Engine.BizObjectManager.GetPublishedSchema( 
    " 
    D000399SgUseAllPlan 
    " 
    );  
    40 H3.DataModel.BizObject schemaObject = 
    new H3.DataModel.BizObject( 
    this.Request.Engine, schema, 
    this 
    .Request.UserContext.UserId);  
    41 schemaObject.ObjectId = UseAllPlan; 
    // 
    更新的表单ID为UseAllPlan 
    42 
     schemaObject.Load();  
    43 schemaObject[ 
    " 
    D000399SgUseAllDetails 
    "] = 
     boList.ToArray();  
    44 
     schemaObject.Update();  
    45 } 
   

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

1 //将'项目信息'中项目成员赋值给‘我的项目’的项目成员 2 string sql1 = "update I_D000399SgProjectMy set I_D000399SgProjectMy.Members = (select Members from I_D000399SgProject "+ 3 "where I_D000399SgProjectMy.Project = I_D000399SgProject.Objectid)"; 4 this.Engine.Query.QueryTable(sql1, null);

 

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

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

 

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

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


三、发送消息提醒
 1 H3.Task.UserTask task = new H3.Task.UserTask();  2 task.ObjectId = Guid.NewGuid().ToString();  3 task.Sender = this.Request.UserContext.UserId; //任务的发送人ID  4 task.UserId = this.Request.UserContext.UserId; //任务的接收人ID  5 task.AppCode = ""; //应用的Code  6 task.TaskType = H3.Task.TaskType.Reminder; //任务类型为提醒  7 task.SchemaCode = ""; //表单的Code  8 task.TargetType = LinkTargetType.BizObject; //链接类型  9 task.TargetId = ""; //链接表单对象的ID 10 task.TargetName = ""; //链接表单对象的名称 11 task.Name = "这是测试提醒标题!"; //提醒标题 12 task.Summary = "这是测试提醒内容!"; //提醒的内容 13 task.AlertTime = DateTime.Now; // 提醒时间 14 task.ReminderType = H3.Task.ReminderType.Once; //提醒的类型 15 task.StartTime = DateTime.Now; //开始时间 16 task.TaskState = H3.Task.TaskState.Unfinished; //任务的状态 17 task.AlertState = H3.Task.AlertState.Waiting; //提醒的状态 18 this.Request.Engine.TaskManager.AddTask(task);//添加任务






至此是对氚云部分功能的一个简单介绍,后续会继续说明其它部分功能所遇到的问题以及解决方法。

如有疏漏错误之处,还请不吝赐教!

 

 

转载于:https://www.cnblogs.com/yijialong/p/9579331.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224504.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午11:46
下一篇 2026年3月17日 上午11:47


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号