阅读:2081 回复:7
Solin
22

帖子

52

跟帖

358

积分

黄金榴莲
黄金榴莲

等待节点如何使用代码完成

楼主#
更多 发布于:2018-12-03 14:34
java 10.5

图片:等待节点.png



这种等待节点如何使用java代码让他变成完成状态?@H3BPM @武汉技术支持团队 @果冻栋吖
liam
1

帖子

99

跟帖

1976

积分

高级榴莲
高级榴莲
1楼#
发布于:2018-12-03 16:32
.net版本下代码,供参考



var workItem = Engine.WorkItemManager.GetWorkItem("WorkitemId");
Engine.WorkItemManager.FinishWorkItem
(
    workItem.ObjectID,
    "操作用户的Id",
    OThinker.H3.WorkItem.AccessPoint.Web,
    null,
    null,
    OThinker.Data.BoolMatchValue.True,
    "审批意见",
    "提交类型文本",
    OThinker.H3.WorkItem.ActionEventType.Normal,
    (int)OThinker.H3.WorkSheet.SheetButtonType.Submit
);
var endMessage = new OThinker.H3.Messages.AsyncEndMessage(
        OThinker.H3.Messages.MessageEmergencyType.Normal,
        workItem.InstanceId,
        workItem.ActivityName,
        workItem.ReplyID,
        false,
        OThinker.Data.BoolMatchValue.Unspecified,
        true,
        null);
Engine.InstanceManager.SendMessage(endMessage);
H3BPM
655

帖子

2504

跟帖

46406

积分

管理员
管理员
  • 社区居民
2楼#
发布于:2018-12-03 16:37
10月签到活动奖励发放啦:http://bbs.h3bpm.com/read.php?tid=5377&fid=5
Solin
22

帖子

52

跟帖

358

积分

黄金榴莲
黄金榴莲
3楼#
发布于:2018-12-03 17:07
liam:.net版本下代码,供参考



var workItem = Engine.WorkItemManager.GetWorkItem("WorkitemId");
Engine.WorkItemManager.FinishWorkItem
...
回到原帖
这种等待节点在ot_workitem表里没有数据
liam
1

帖子

99

跟帖

1976

积分

高级榴莲
高级榴莲
4楼#
发布于:2018-12-03 17:43
Solin:这种等待节点在ot_workitem表里没有数据回到原帖
1.查询token,获得token列表
2.判断token是不是为等待类型的,且确定为要完成的
3.完成这个token
4.激活下一个环节
liam
1

帖子

99

跟帖

1976

积分

高级榴莲
高级榴莲
5楼#
发布于:2018-12-03 18:14
代码如下:
string instanceId = "a29a337b-b1f8-4abb-8128-be5659432f78";
var connection = new OThinker.H3.Connection();
connection.Open("HostAddress", 8211, "administrator", "E10ADC3949BA59ABBE56E057F20F883E");
var instance = connection.Engine.InstanceManager.GetInstanceContext(instanceId);
var allActivities = instance.Activities;
var runningActivitieNames = instance.RunningActivties;
var runningActivities = allActivities.Where(a => runningActivitieNames.Contains(a.Name)).ToList();
var workflow=connection.Engine.WorkflowManager.GetWorkflow(instance.WorkflowPackage,instance.WorkflowName,instance.WorkflowVersion).Activities;
runningActivities.ForEach(a =>
{
    var activity=workflow.Where(obj=>obj.Name==a.Name).FirstOrDefault();
    //此处加自己的验证逻辑
    if (activity.ActivityType == OThinker.H3.WorkflowTemplate.ActivityType.Wait)
    {
        connection.Engine.TokenPool.Finish(instance.InstanceId, a.TokenId, true, OThinker.Data.BoolMatchValue.Unspecified);
        var endMessage = new OThinker.H3.Messages.AsyncEndMessage(OThinker.H3.Messages.MessageEmergencyType.Normal, instance.InstanceId, a.Name, -1, false, OThinker.Data.BoolMatchValue.Unspecified, true, null);
        connection.Engine.InstanceManager.SendMessage(endMessage);
    }
});
Solin
22

帖子

52

跟帖

358

积分

黄金榴莲
黄金榴莲
6楼#
发布于:2018-12-04 09:59
liam:代码如下:
string instanceId = "a29a337b-b1f8-4abb-8128-be5659432f78";
var connection = new OThinker.H3.Connection();
connect...
回到原帖
connection.Engine.TokenPool.Finish里的TokenPool在哪,我java里没找到
Solin
22

帖子

52

跟帖

358

积分

黄金榴莲
黄金榴莲
7楼#
发布于:2018-12-04 11:25
已解决,方法如下:
InstanceContext instanceContext = getEngine().getInstanceManager().GetInstanceContext(instanceId);
Token runningToken = instanceContext.GetRunningToken(waitingActivityCode);
AsyncEndMessage asyncEndMessage = new AsyncEndMessage(MessageEmergencyType.Normal, instanceId, waitingActivityCode, runningToken.getTokenId(), BoolMatchValue.Unspecified, false, BoolMatchValue.Unspecified, true, null);
getEngine().getInstanceManager().SendMessage(asyncEndMessage);
游客

返回顶部