本帖最后由 郝勇 于 2020-4-25 16:20 编辑
2、开发者手册-后端常用接口示例-业务对象
添加业务对象 在实际应用开发中,需要在某一个表单中创建或是添加另一个表单的数据,比如:CRM中把线索转为客户,在线索状态设置转为新客户就自动在客户表单中新增一条客户信息。
注:业务对象只可操作表单数据,无法操作氚云系统表的数据。
以下示例涉及两张表单:当前表单“A”和另一表单“B”。即在A表单中编写代码已实现向B表单中添加数据。 ================================= H3.DataModel.BizObjectSchema:业务对象的模式,在该类中定义了这个类型的业务对象的属性名称、属性类型、方法名称、方法返回值等信息 this.Request.Engine.BizObjectManager.GetPublishedSchema("D001321Sqcuqmkisn1aa0gs6j76y9c355"):获取模块(表单)Schema H3.DataModel.BizObject:业务对象。业务对象默认提供对象的创建、获取、更新和删除方法;业务对象不支持序列化,但是其中ValueTable属性是可以序列化 H3.DataModel.BizObject.Status:业务对象的状态,生效、草稿和作废 this.Request.UserContext.UserId:当前登录用户ID H3.DataModel.BizObjectStatus.Effective:对象状态生效 H3.DataModel. BizObject.Create():创建业务对象 this.Request.BizObject.OwnerId:所有人,即拥有者
================================= 主表业务对象创建: //得到一个IEngine对象 H3.IEngine engine = this.Request.Engine; //获取系统虚拟用户的人员Id(表单设计后端类、列表设计后端类、定时器类、自定义接口类中都可以获取) string systemUserId = H3.Organization.User.SystemUserId;
//获取当前登录人的人员Id(只能在表单设计后端类、列表设计后端类中获取) string currentUserId = this.Request.UserContext.UserId;
//获取D00021**table表单的表单结构对象 H3.DataModel.BizObjectSchema aSchema = engine.BizObjectManager.GetPublishedSchema("D00021**table");
//new一个D00021**table表单的业务对象 H3.DataModel.BizObject aBo = new H3.DataModel.BizObject(engine, aSchema, systemUserId);
//设置业务对象的创建人为当前登录人 aBo.CreatedBy = currentUserId;
//设置业务对象的归属人为当前登录人 aBo.OwnerId = currentUserId;
//设置控件编码为F0000027(单行文本控件)的值 aBo["F0000027"] = "https://www.h3yun.com/";
//设置控件编码为F0000024(日期控件)的值 aBo["F0000024"] = DateTime.Parse("2020-03-18 00:00:00");
//设置控件编码为F0000039(数字控件)的值 aBo["F0000039"] = 99;
//设置控件编码为F0000038(单选框控件)的值 aBo["F0000038"] = "选项1";
//设置控件编码为F0000025(复选框控件)的值 aBo["F0000025"] = "选项1;选项2";
//设置业务对象数据为生效状态 aBo.Status = H3.DataModel.BizObjectStatus.Effective;
/* aBo.Status的所有取值与意义: H3.DataModel.BizObjectStatus.Draft:草稿 H3.DataModel.BizObjectStatus.Effective:生效(若此表单有业务规则,则此项设置会在Create()中触发生效时业务规则) H3.DataModel.BizObjectStatus.Running:进行中(此设置并不会发起流程,带流程的表单数据创建请参考他处,一般不会将数据状态设置成进行中) H3.DataModel.BizObjectStatus.Canceled:作废 */
//将业务对象创建到数据库中,即创建到表名为i_D000001Account的表中 aBo.Create();
=================================
示例: 主表的数据创建
//以下代码填写在A表中,具体位置见图1,实现在A表添加数据并提交后同时为B表添加数据。 H3.DataModel.BizObjectSchema accountSchema = this.Request.Engine.BizObjectManager.GetPublishedSchema("D001321Sqcuqmkisn1aa0gs6j76y9c355"); //获取模块(表单)Schema;双引号里内容是指B表的“表单编码”,表单编码可在图形设计中“表单属性”中直接看到,最方便的还是在“后端代码”界面复制:一般是第7行,public class后面一长串字符即为“表单编码”,如图1。使用该行代码时,“表单编码”一定要换成相应编码。 H3.DataModel.BizObject accountBo = new H3.DataModel.BizObject(this.Request.Engine, accountSchema, this.Request.UserContext.UserId); //构造对象 accountBo["F0000001"] = "C0001"; //给自定义属性赋值;方括号里为控件编码 accountBo["F0000002"] = "环盈科技"; accountBo.Status = H3.DataModel.BizObjectStatus.Effective; //将对象状态设置为生效,不赋值默认为曹稿(论坛发帖过滤不智能,拼音都被过滤了,只能用同音字替代) accountBo.Create(); //创建对象
//以上代码填写在A表中,A表提交数据时即可在B表中添加数据。执行效果如图2、图3。
//当前A表中内容提交后同时填写到B表中。将前面所提到的代码融合在一起,如下:
H3.DataModel.BizObjectSchema accountSchema = this.Request.Engine.BizObjectManager.GetPublishedSchema("D001321Sqcuqmkisn1aa0gs6j76y9c355"); //获取模块Schema;双引号里内容是指的“表单编码”,表单编码可在图形设计中“表单属性”中直接看到,最方便的还是在“后端代码”界面复制:一般是第7行,public class后面一长串字符即为“表单编码”,如图1。使用该行代码时,“表单编码”一定要换成相应编码。 H3.DataModel.BizObject accountBo = new H3.DataModel.BizObject(this.Request.Engine, accountSchema, this.Request.UserContext.UserId); //构造对象 accountBo["F0000001"] = this.Request.BizObject["F0000001"]; //给自定义属性赋值;方括号里为控件编码 accountBo["F0000002"] = this.Request.BizObject["F0000002"]; accountBo.Status = H3.DataModel.BizObjectStatus.Effective; //将对象状态设置为生效,不赋值默认为曹稿(论坛发帖过滤不智能,拼音都被过滤了,只能用同音字替代) accountBo.Create(); //创建对象
携带子表数据的创建 //以下这段代码添加在A表中,实现A表提交后向B表增加记录的功能,当然增加的是代码中双引号里的固定字符。
H3.DataModel.BizObjectSchema schema = this.Request.Engine.BizObjectManager.GetPublishedSchema("D001321Sqcuqmkisn1aa0gs6j76y9c355");//表单编码为B表的主表表单编码 H3.DataModel.BizObject obj = new H3.DataModel.BizObject(this.Request.Engine, schema, this.Request.UserContext.UserId); //主表对象 obj.CreatedBy = this.Request.BizObject.OwnerId; //以下四行为B表主表的控件编码 obj["F0000001"] = 1; obj["F0000002"] = "其他"; obj["F0000003"] = "其他"; obj["F0000004"] = "其他";
List < H3.DataModel.BizObject > lstObject = new List<H3.DataModel.BizObject>(); H3.DataModel.BizObject zibiao = new H3.DataModel.BizObject(this.Request.Engine, schema.GetChildSchema("D001321F08cdcde36a934fe992e5514f7f91347c"), this.Request.UserContext.UserId);//子表对象;GetChildSchema为B表子表的控件编码 zibiao["F0000005"] = "12"; //向B表子表BZ1控件赋值“12” zibiao["F0000006"] = "34"; //向B表子表BZ2控件赋值“34” lstObject.Add(zibiao);
obj["D001321F08cdcde36a934fe992e5514f7f91347c"] = lstObject.ToArray(); //子表数据赋值;双引号内为B表子表的控件编码 obj.Create(); //创建对象 //以上代码执行效果如图4
//将以上代码中的赋值内容固定字符换成当前表单的控件值的代码如下: H3.DataModel.BizObjectSchema schema = this.Request.Engine.BizObjectManager.GetPublishedSchema("D001321Sqcuqmkisn1aa0gs6j76y9c355");//表单编码为B表的主表表单编码 H3.DataModel.BizObject obj = new H3.DataModel.BizObject(this.Request.Engine, schema, this.Request.UserContext.UserId); //主表对象 obj.CreatedBy = this.Request.BizObject.OwnerId; //以下四行为B表主表的控件编码;向B表主表四个控件赋值当前表单主表四个控件的值 obj["F0000001"] = this.Request.BizObject["F0000001"]; obj["F0000002"] = this.Request.BizObject["F0000002"]; obj["F0000003"] = this.Request.BizObject["F0000003"]; obj["F0000004"] = this.Request.BizObject["F0000004"];
List < H3.DataModel.BizObject > lstObject = new List<H3.DataModel.BizObject>(); H3.DataModel.BizObject zibiao = new H3.DataModel.BizObject(this.Request.Engine, schema.GetChildSchema("D001321F08cdcde36a934fe992e5514f7f91347c"), this.Request.UserContext.UserId);//子表对象;GetChildSchema为B表子表的控件编码 zibiao["F0000005"] = this.Request.BizObject["F0000001"]; //向B表子表BZ1字段赋值当前表单主表控件A1的值 zibiao["F0000006"] = this.Request.BizObject["F0000002"]; //向B表子表BZ2字段赋值当前表单主表控件A2的值 lstObject.Add(zibiao);
obj["D001321F08cdcde36a934fe992e5514f7f91347c"] = lstObject.ToArray(); //子表数据赋值;双引号内为B表子表的控件编码 obj.Create(); //创建对象 //氚云使用无代码方式时氚云不支持子表值赋值给其他表,那么在代码中当前表单的子表控件值现在还不知道如何获取,学到后再分享。
|
图1
图2
图3
|