阅读:10305 回复:14
mishanhhf
24

帖子

147

跟帖

3266

积分

黄金榴莲
黄金榴莲
  • 社区居民
  • 忠实会员

[已解决]调用接口启动流程实例,怎么向子表赋值

楼主#
更多 发布于:2017-03-14 14:10
            paramValues.Add(new DataItemParam()
            {
                ItemName = "HZBJ",
                ItemValue = "0",
            });
这个是给主表赋值
请问向子表赋值该怎么写?


还有一个问题:BPMServiceResult result = startWorkflow("YGGZZB", code, true, paramValues);   第三个参数我看是启动流程实例后完成发起环节。写成true没用?
@岩竹玉雨 @武汉技术支持团队
t156965365
46

帖子

688

跟帖

4536

积分

H3 BPM互助团队
H3 BPM互助团队
  • 社区居民
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;
        }
果冻栋吖
104

帖子

755

跟帖

2631

积分

论坛版主
论坛版主
  • 社区居民
  • 忠实会员
  • 优秀斑竹
2楼#
发布于:2017-08-24 08:20
t156965365:1 objectid是自动生成的,不需要传入.
2 多人参与者需要在json传入数组,而不是字符串.
也可能判断那里有点问题,你再完善一下
回到原帖
嗯,改好了
需要技术支持请添加QQ1772829123,提供H3产品定制开发,IT技术支持。
果冻栋吖
104

帖子

755

跟帖

2631

积分

论坛版主
论坛版主
  • 社区居民
  • 忠实会员
  • 优秀斑竹
3楼#
发布于:2017-08-23 08:58
t156965365:1 objectid是自动生成的,不需要传入.
2 多人参与者需要在json传入数组,而不是字符串.
也可能判断那里有点问题,你再完善一下
回到原帖
嗯,我知道是自动生成的,是怎么成了重复的。哪个地方ToArray不行呀。。我再看下
需要技术支持请添加QQ1772829123,提供H3产品定制开发,IT技术支持。
t156965365
46

帖子

688

跟帖

4536

积分

H3 BPM互助团队
H3 BPM互助团队
  • 社区居民
4楼#
发布于:2017-08-23 08:55
果冻栋吖:您好,@t156965365 ,根据您提供的方法,我以基本实现需求,但是遇到一些问题请教一下。

1.子表如果有多条数据,他明细表里边的ObjectID是重复的,就执行不了插入操作了。如下
子表中的都是重复的会报异常。

为了测试...
回到原帖
1 objectid是自动生成的,不需要传入.
2 多人参与者需要在json传入数组,而不是字符串.
也可能判断那里有点问题,你再完善一下
果冻栋吖
104

帖子

755

跟帖

2631

积分

论坛版主
论坛版主
  • 社区居民
  • 忠实会员
  • 优秀斑竹
5楼#
发布于:2017-08-22 19:13
t156965365:我现在在用的,外部调用发起流程的部分代码,你参考下

//获取要发送的信息
                        var info =
                         new QA
              ...
回到原帖
您好,@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()会报错,没有改方法呀
需要技术支持请添加QQ1772829123,提供H3产品定制开发,IT技术支持。
huang
53

帖子

307

跟帖

715

积分

铂金榴莲
铂金榴莲
6楼#
发布于:2017-03-16 09:15

咱们还是小孩呢!不必这么装模作样吧!
t156965365
46

帖子

688

跟帖

4536

积分

H3 BPM互助团队
H3 BPM互助团队
  • 社区居民
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);
                            }
t156965365
46

帖子

688

跟帖

4536

积分

H3 BPM互助团队
H3 BPM互助团队
  • 社区居民
8楼#
发布于:2017-03-14 16:59
mishanhhf:paramValues.Add(new DataItemParam()
            {
                ItemName = "子表名.数据项",
                ItemValue ...
回到原帖
子表是一个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; }
}
mishanhhf
24

帖子

147

跟帖

3266

积分

黄金榴莲
黄金榴莲
  • 社区居民
  • 忠实会员
9楼#
发布于:2017-03-14 16:11
t156965365:因为默认就是完成第一个环节。那个参数在函数中没有使用。
子表数据我现在的实现方式是发送json数据过来,然后重写StartWorkflow,解析json成dataitem格式的数据。
发个json转bo的函数给你参考以下
// 获取Json...
回到原帖
            paramValues.Add(new DataItemParam()
            {
                ItemName = "子表名.数据项",
                ItemValue = 数据数组,
            });
插入一个子表的一个数据项是这样吗?
我这的子表数据直接是list



那要是我想完成发起环节需要调用其他函数是吧?
上一页
1 2  »|
游客

返回顶部