阅读:10305
回复:14
|
[已解决]调用接口启动流程实例,怎么向子表赋值
paramValues.Add(new DataItemParam()
{ ItemName = "HZBJ", ItemValue = "0", }); 这个是给主表赋值 请问向子表赋值该怎么写? 还有一个问题:BPMServiceResult result = startWorkflow("YGGZZB", code, true, paramValues); 第三个参数我看是启动流程实例后完成发起环节。写成true没用? @岩竹玉雨 @武汉技术支持团队 |
1楼#
发布于:2017-03-14 15:09
帖内置顶 – – 2017-03-20 16:01
mishanhhf:9.2回到原帖因为默认就是完成第一个环节。那个参数在函数中没有使用。 子表数据我现在的实现方式是发送json数据过来,然后重写StartWorkflow,解析json成dataitem格式的数据。 发个json转bo的函数给你参考以下 // ------------------------------ // 获取Json中业务属性的值,赋值到BO对象上 private List<DataItemParam> GetDataValuesWithDtl(OThinker.H3.DataModel.BizObject bo, OThinker.Organization.User user, string jsonData) { List<DataItemParam> paramValues = new List<DataItemParam>(); var jt = JToken.Parse(jsonData); foreach (JProperty jp in jt) { if (jp.Value is JArray) { //业务对象数组 var childBoList = new List<DataModel.BizObject>(); var prosch = bo.Schema.GetProperty(jp.Name); if (prosch.ChildSchema != null) { OThinker.H3.DataModel.BizObject childBo = new DataModel.BizObject( this.Engine.Organization, this.Engine.MetadataRepository, this.Engine.BizObjectManager, prosch.ChildSchema, user.ObjectID, user.ParentID); foreach (JToken ja in (JArray)jp.Value) { foreach (JProperty jpt in ja) { string dataKeyChild = jpt.Name; string dataValueChild = jpt.Value.ToString(); if (childBo.Schema.GetProperty(dataKeyChild) == null) continue; if (string.IsNullOrEmpty(dataValueChild)) continue; childBo.SetValue(dataKeyChild, dataValueChild); } childBoList.Add(childBo); } paramValues.Add(new DataItemParam() { ItemName = jp.Name, ItemValue = childBoList.ToArray() }); } else { //多人参与者赋值 转换成数组 var arr = (JArray)jp.Value; paramValues.Add(new DataItemParam() { ItemName = jp.Name, ItemValue = arr.ToArray() }); } } else { paramValues.Add(new DataItemParam() { ItemName = jp.Name, ItemValue = jp.Value }); } } return paramValues; } |
|
2楼#
发布于:2017-08-24 08:20
t156965365:1 objectid是自动生成的,不需要传入.嗯,改好了 ![]() |
|
|
3楼#
发布于:2017-08-23 08:58
t156965365:1 objectid是自动生成的,不需要传入.嗯,我知道是自动生成的,是怎么成了重复的。哪个地方ToArray不行呀。。我再看下 |
|
|
4楼#
发布于:2017-08-23 08:55
|
|
5楼#
发布于:2017-08-22 19:13
t156965365:我现在在用的,外部调用发起流程的部分代码,你参考下您好,@t156965365 ,根据您提供的方法,我以基本实现需求,但是遇到一些问题请教一下。 1.子表如果有多条数据,他明细表里边的ObjectID是重复的,就执行不了插入操作了。如下 子表中的都是重复的会报异常。 图片:1.png ![]() 图片:2.png ![]() 图片:3.png ![]() 为了测试,我使用的是假数据模拟的。 图片:4.png ![]() 还有一个问题,您提供的方法中 //多人参与者赋值 转换成数组 var arr = (JArray)jp.Value; paramValues.Add(new DataItemParam() { ItemName = jp.Name, //由ToArray改为了ToString ItemValue = arr.ToString() }); 我写ToArray()会报错,没有改方法呀 |
|
|
7楼#
发布于:2017-03-14 17:06
我现在在用的,外部调用发起流程的部分代码,你参考下
//获取要发送的信息 var info = new QA { InNo = x.Key.Code, QADetail = _dt.AsEnumerable().Where(n => n.Field<string>("BAR_IN_CODE") == x.Key.Code).OrderBy(m => m.Field<decimal>("BAROLID")).Select(s => new QADetail { InNo = x.Key.Code, QTY = s.Field<decimal>("BAROLID"), } ).ToList() }; var ws = new BPMServiceSoapClient("BPMServiceSoap12"); var jsonStr = JsonConvert.SerializeObject(info); var ret = ws.StartWorkflowWithDtl(auth, "QA", "test", true, jsonStr); if (ret.Success) { CommonHelper.Log($"发送成功:" + ret.Message); } else { CommonHelper.Log($"发送出现异常:" + ret.Message); } |
|
8楼#
发布于:2017-03-14 16:59
mishanhhf:paramValues.Add(new DataItemParam()子表是一个bo数组,所以你传过来的json需要主表类和子表类转换的。 比如我的一个类 public class QA//主数据类 { public string InNo { get; set; } public List<QADetail> QADetail{ get; set; } } public class QADetail//明细数据类 { public string InNo { get; set; } public string QTY{ get; set; } } |
|
9楼#
发布于:2017-03-14 16:11
t156965365:因为默认就是完成第一个环节。那个参数在函数中没有使用。paramValues.Add(new DataItemParam() { ItemName = "子表名.数据项", ItemValue = 数据数组, }); 插入一个子表的一个数据项是这样吗? 我这的子表数据直接是list 那要是我想完成发起环节需要调用其他函数是吧? |
|
上一页
下一页