添加业务对象
在实际应用开发中,需要在某一个表单中创建或是添加另一个表单的数据,比如:CRM中把线索转为客户,在线索状态设置转为新客户就自动在客户表单中新增一条客户信息。
注:业务对象只可操作表单数据,无法操作氚云系统表的数据。
主表业务对象创建:
//得到一个IEngine对象 H3.IEngine engine = this.Request.Engine; //获取系统虚拟用户的人员Id(表单设计后端类、列表设计后端类、定时器类、自定义接口类中都可以获取) string systemUserId = H3.Organization.User.SystemUserId; //获取当前登录人的人员Id(只能在表单设计后端类、列表设计后端类中获取) string currentUserId = this.Request.UserContext.UserId; //获取D00021testtable表单的表单结构对象 H3.DataModel.BizObjectSchema aSchema = engine.BizObjectManager.GetPublishedSchema("D00021testtable"); //new一个D00021testtable表单的业务对象 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(); |
同时创建主表、子表数据:
H3.DataModel.BizObjectSchema schema = this.Request.Engine.BizObjectManager.GetPublishedSchema("D000024FeeReimbursement170801"); H3.DataModel.BizObject obj = new H3.DataModel.BizObject(this.Request.Engine, schema, this.Request.UserContext.UserId); //主表对象 obj.CreatedBy = this.Request.UserContext.UserId; obj["F0000002"] = 1; obj["FeeTotal"] = "其他"; obj["F0000006"] = "其他"; obj["tuanjian"] = "其他";
//new子表数据集合 List < H3.DataModel.BizObject > lstObject = new List<H3.DataModel.BizObject>(); //new一个子表业务对象 H3.DataModel.BizObject zibiao = new H3.DataModel.BizObject(this.Request.Engine, schema.GetChildSchema("D000024Details"), H3.Organization.User.SystemUserId);//子表对象 zibiao["ReasonSubject"] = "7d5d5192-71cb-4d16-8da8-4f6cdbdb6954"; zibiao["FeeDept"] = "954c49ac-e396-463d-a95a-442907d95fb6"; lstObject.Add(zibiao);//将这个子表业务对象添加至子表数据集合中
obj["D000024Details"] = lstObject.ToArray(); //子表数据赋值 obj.Create(); //创建对象 |
通过数据Id查询对应业务对象
//Load对象(schemaCode为表单编码,this.Request.BizObjectId为当前表单objectid) H3.DataModel.BizObject accountBo = H3.DataModel.BizObject.Load(H3.Organization.User.SystemUserId,this.Request.Engine,"schemaCode",this.Request.BizObjectId,false); |
通过自定义筛选条件查询业务对象
先构建过滤器,过滤器支持各种条件组合类似sql的where条件并支持嵌套。
示例:
H3.IEngine engine = this.Request.Engine; H3.Data.Filter.Filter filter = new H3.Data.Filter.Filter(); //构建过滤器 H3.Data.Filter.And andMatcher = new H3.Data.Filter.And(); //构造And匹配器 andMatcher.Add(new H3.Data.Filter.ItemMatcher("AccountName", H3.Data.ComparisonOperatorType.Equal, "氚云")); //添加查询条件 filter.Matcher = andMatcher; H3.DataModel.BizObjectSchema schema = engine.BizObjectManager.GetPublishedSchema("D000001Account"); //获取模块Schema H3.DataModel.BizObject[] boArray = H3.DataModel.BizObject.GetList(engine, H3.Organization.User.SystemUserId, schema, H3.DataModel.GetListScopeType.GlobalAll, filter); //查询返回的结果对象 if(boArray != null && boArray.Length > 0) { for(int i = 0;i < boArray.Length; i++) { H3.DataModel.BizObject bo = boArray[i]; //处理业务对象 } } |
修改业务对象
同添加业务对象,修改业务对象主要实现不同表单之间的数据修改或更新。如:与客户签订合同成交后,把对应的客户状态设置为已成交客户。
示例:
//Load对象(schemaCode为表单编码,this.Request.BizObjectId为当前表单objectid) H3.DataModel.BizObject accountBo = H3.DataModel.BizObject.Load(H3.Organization.User.SystemUserId,this.Request.Engine,"schemaCode",this.Request.BizObjectId,false); accountBo["CustomerName"] = "深圳氚云网络科技有限公司"; //修改对象属性值 accountBo["CustomerLevel"] = "已成交"; accountBo.Status = H3.DataModel.BizObjectStatus.Effective; // 将对象状态设为生效 accountBo.Update(); //更新对象 |
删除业务对象
示例:
H3.DataModel.BizObject accountBo = H3.DataModel.BizObject.Load(H3.Organization.User.SystemUserId,this.Request.Engine,"schemaCode",this.Request.BizObjectId,false); //Load对象(schemaCode为表单编码,this.Request.BizObjectId为当前表单objectid) accountBo.Remove(); //删除对象 |