驰骋工作流引擎

注册

 

发新话题 回复该主题

SDK开发遇到问题3:方向条件类型设置为[开发者参数]时无效(已解... [复制链接]

1#
问题:方向条件类型为[开发者参数],通过Hashtable传递参数,调用接口时提示错误“从17101节点到其它节点,定义的所有转向条件都不成立.”
具体情况如下:
1、流程配置

2、方向条件设置(两个)
(1)
(2)
3、SDK接口调用程序如下:
Hashtable ht = new Hashtable();
ht.Add("AOrgID", "1105");
BP.WF.Dev2Interface.Port_Login("weiyang");
BP.WF.SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork("171", 130, ht, 0, "weiyang"); // 这种写法和下面几种写法都不行
//BP.WF.Dev2Interface.Node_SendWork("171", 130, ht);
//BP.WF.Dev2Interface.Node_SendWork("171", 130, ht, 17102, "dingkai");
//BP.WF.Dev2Interface.Node_SendWork("171", 130, ht, 17104, "zhuyisheng");
4、上面几种写法接口调用均报错:
@当前用户weiyang,定义节点的方向条件错误:从{17101 起草修理合同}节点到其它节点,定义的所有转向条件都不成立.

我的分析:
1、跟踪ccflow的源代码了,逻辑复杂,无法找出问题原因。
2、分析ccflow案例中请假流程也有方向条件,但是请假流程中条件类型是[表单条件],而我没有使用ccflow的表单。如果硬加一个表单参数,尝试过了,也不行,提示节点没有属性的错误。

经过上述努力,均无法解决问题,特请求帮助,谢谢!
最后编辑ray 最后编辑于 2018-01-15 01:13:45
分享 转发
TOP
2#

自己顶一个,盼复
TOP
3#

有熟悉这个用法的朋友吗,麻烦指点下
TOP
4#

这个用法应该是sdk最最基础的了,这个搞不定,sdk开发模式就没法弄了。
用过的朋友提示下,多谢了!
TOP
5#

你这个开发者参数,AOrgID,在数据库中存在吗?
TOP
6#

使用万能的发送接口,愿意发送到那里,就发送到那里,愿意发送给谁就发送给谁
获取最新动态,请关注企业服务号:chichengsoft

学好ccflow,受益一生,多看文档,少走弯路。
TOP
7#

QQ群中的张经理的回复

本来想把第2种方法试下的,然后做个总结的,无奈近期任务较紧,没有时间琢磨,为方便其他ccflow爱好者,
特将qq群中的聊天记录保留下来。



2016/4/20 9:14:13
开始懂了 2016/4/20 9:14:13

==,我看下
2016/4/20 9:17:40
开始懂了 2016/4/20 9:17:40

ccflow数据库中,这个id就是 Port_Dept视图的no列

开始懂了 2016/4/20 9:19:10

[img]file:///C:\Users\Ray\Documents\Tencent Files\4708950\Image\Group\Image1\9X5IO[67OFLC1~~2561%R(I.png[/img]
2016/4/20 9:25:22
开始懂了 2016/4/20 9:25:22


2016/4/20 9:28:26
开始懂了 2016/4/20 9:28:26

我没有使用ccflow的表单。如果硬加一个表单参数,尝试过了,也不行,提示节点没有属性的错误。
2016/4/20 9:31:12
张庆 2016/4/20 9:31:12

rptBiao
2016/4/20 9:35:39
开始懂了 2016/4/20 9:35:39

[img]file:///C:\Users\Ray\Documents\Tencent Files\4708950\Image\Group\Image1\8(9H_`6BG35E0C[XCLGRDUL.png[/img]
张庆 2016/4/20 9:36:33

根据rpt表中的判断
张庆 2016/4/20 9:36:44

rpt表中没有aorgid

@张庆鹏 是不是我手工加一个AOrgID列到Rpt表就可以了
执行下面这句话的时候,会把hashtable中的参数写到rpt表中对应的AOrgID字段中吗

2016/4/20 9:58:41
张庆 2016/4/20 9:58:41

不用加,完全可以在执行
BP.WF.SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork("171", 130, ht, 0, "weiyang");
张庆 2016/4/20 9:59:08

之前添加一个条件判断,FK_NODE是否等于1105
张庆 2016/4/20 9:59:28

是的话,在send方法中指定下一步节点ID
张庆 2016/4/20 9:59:58

加的话,也可以,这两种都能实现
张庆 2016/4/20 10:00:33

SDK的条件判断、参数,这些字段,尽量要保证实体类中存在
2016/4/20 10:00:53
张庆 2016/4/20 10:00:53

如果不存在,就写if吧



@张庆鹏 谢谢张经理的热心回复。
前两天公休假了,还没有尝试。
我现在就来试下这两种方法。
2016/4/25 23:33:39
开始懂了 2016/4/25 23:33:39

两种方法测试情况:
1、在Node_SendWork前加if判断
流程设计图中,把分支条件都去掉,这个方法成功,可以。

2、手工加一个AOrgID列到Rpt表
这个方法失败了,具体操作如下:
我在ND171Rpt表中手工加入了一列,名称为AOrgID,发现SendWork后,ht中的内容并没有写到Rpt表中。
我分析了下源代码,(源代码比较深奥,没有太理解)好像是需要Map映射,才能保存,先是发现EnObj.cs中有用到Sys_ExtMap表,但是数据库中没有这个表,估计这个表已经弃用了。然后又找到了Sys_MapAttr表,看着有点像,就手工往表里面插了一条数据,如下图:
[img]file:///C:\Users\Ray\Documents\Tencent Files\4708950\Image\Group\Image1\ZCL`E3Z5AIBAB`5Z4I[X0Y7.png[/img]
程序中调Node_CreateBlankWork和Node_SendWork的时候都传ht进去,
但是ND171Rpt表中新加的AOrgID中没有保存到ht中传递的AOrgID值。
2016/4/25 23:37:56
开始懂了 2016/4/25 23:37:56

方法2,测试的时候,不报"@当前用户weiyang,定义节点的方向条件错误:从{17101 起草修理合同}节点到其它节点,定义的所有转向条件都不成立."这个错误了。始终都是往17102这个节点,不往17104节点上走。
[img]file:///C:\Users\Ray\Documents\Tencent Files\4708950\Image\Group\Image1\DVT`[Y]XX5MLGAH)`32`(]R.png[/img]
2016/4/26 8:51:41
张庆 2016/4/26 8:51:41

不是让你加到rpt表,是让你加到表单中



回复下载整理的word图文版:
[hide]
ccflow流程方向条件问题及Q群回复.docx (, 下载次数:1)

[/hide]
TOP
8#

回复 6楼admin的帖子

最终是采用的这个方法
TOP
9#

使用万能的发送接口,愿意发送到那里,就发送到那里,愿意发送给谁就发送给谁
admin 发表于 2016-4-20 14:33:41
最终是采用的这个方法
TOP
10#

时隔两年啦,更新为最新版本的ccflow,此问题已经解决。代码如下:
Hashtable ht = new Hashtable();
ht.Add("AOrgID", "1105");
BP.WF.Dev2Interface.Port_Login("weiyang");
BP.WF.Dev2Interface.Node_SendWork("171", 130, ht);

目前在ccflow源代码包里面就有朋哥的测试用例:ccflow\DemoAndTesting\BP.Demo\UnitTesting\AttrNode\TurnByDevPara.cs
  1.          /// <summary>
  2.         /// 执行
  3.         /// </summary>
  4.         public override void Do()
  5.         {
  6.             string fk_flow = "029";
  7.             Flow fl = new Flow(fk_flow);
  8.             fl.DoCheck();

  9.             #region   zhoupeng 登录.
  10.             BP.WF.Dev2Interface.Port_Login("zhoupeng");
  11.             //创建空白工作, 发起开始节点.
  12.             Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow);
  13.             //加入开发者参数,表单里没有TurnTo字段.
  14.             Hashtable ht = new Hashtable();
  15.             ht.Add("Turn", "A");

  16.             //执行发送,并获取发送对象,.
  17.             SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, ht);
  18.             if (objs.VarToNodeID != 2999)
  19.                 throw new Exception("@应该转向A。");

  20.             //删除测试数据.
  21.             BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(fl.No, objs.VarWorkID, false);
  22.             #endregion

  23.             #region   zhoupeng 登录.
  24.             BP.WF.Dev2Interface.Port_Login("zhoupeng");
  25.             //创建空白工作, 发起开始节点.
  26.             workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow);
  27.             //加入开发者参数,表单里没有TurnTo字段.
  28.             ht = new Hashtable();
  29.             ht.Add("Turn", "B");

  30.             //执行发送,并获取发送对象,.
  31.             objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, ht);
  32.             if (objs.VarToNodeID != 2902)
  33.                 throw new Exception("@应该转向B。");

  34.             //删除测试数据.
  35.             BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(fl.No, objs.VarWorkID, false);
  36.             #endregion
  37.         }
复制代码
最后编辑ray 最后编辑于 2018-01-15 01:11:48
TOP
发新话题 回复该主题