一点背景。我正在升级一个使用 k2 2003 编写的项目以使用 k2 Blackpearl。原始 k2 2003 进程具有以下目标规则和使用 1 个插槽的客户端事件
public class DestinationRule_e68c062c1c8d41f5a80ba96b065f76f7
{
public void Main(ref DestinationRuleContext K2)
{
K2.ResolveQueuesToUsers = true;
K2.Destinations.Add(DestinationType.User, K2.ProcessInstance.Originator.FQN);
}
}
public class EventItem_5e24182cd2b9469aa5314aafaa0abeff
{
public void Main(ClientEventContext K2)
{
K2.VerifyCredentials = false;
try
{
K2.ProcessInstance.DataFields["CurrentSerialNo"].Value = K2.SerialNumber;
}
catch (System.Exception ex)
{
throw new System.Exception(ex.Message);
}
}
请注意,上面的代码中没有调用“K2.AddWorklist”。应该有吗?
该过程使用数据字段存储序列号,然后使用序列号打开工作列表项,然后从 Web 应用程序完成它(使用 K2ROM dll):
//using k2 2003
public void FinishWorkItem()
{
if (this.ProcessInstance != null)
{
if (!string.IsNullOrEmpty(this.CurrentSerialNo))
{
WorklistItem item = null;
Connection connection = GetConnection();
try
{
item = connection.OpenWorklistItem(this.CurrentSerialNo, "ASP");
}
catch { }
if (item != null)
{
this.CurrentSerialNo = string.Empty;
item.Finish();
}
}
}
else
{
throw new Exception("Cannot finish work item where ProcessInstance is null (calling from KOProcessInstance)");
}
}
请注意 OpenWorklistItem 如何使用“this.CurrentSerialNumber”,它是数据字段中用于打开和完成工作列表项的序列号值。这似乎在 2003 年运行良好
我重写了这个方法来使用 BlackPearl API(SourceCode.Workflow.Client.dll),如下所示:
//same code using BlackPearl
public void FinishWorkItem(IClientDocumentEntity currentClientDocument)
{
if (this.ProcessInstance != null)
{
if (!string.IsNullOrEmpty(this.CurrentSerialNo))
{
WorklistItem item = null;
item = connection.OpenWorklistItem(this.CurrentSerialNo,"ASP");
if (item != null)
{
if (item.Actions.Count > 0)
{
foreach (SourceCode.Workflow.Client.Action action in item.Actions)
{
if (string.Compare(action.Name, "Finish", true) == 0)
{
action.Execute();
break;
}
}
}
this.CurrentSerialNo = string.Empty;
}
}
}
else
{
throw new Exception("Cannot finish work item where ProcessInstance is null (calling from KOProcessInstance)");
}
}
connection.OpenWorklistItem(this.CurrentSerialNo,"ASP") 抛出以下错误 26030 Worklist item ,13351,144 not found for at
我的问题是从 2003 年到 Blackpearl 的 OpenWorklistItem 调用中的行为是否发生了变化?上面 K2 2003 片段中的“FinishWorkItem”方法由 K2 2003 中的“管理员”帐户执行,目前在生产环境中似乎工作正常,这让我相信 K2 2003 允许使用串行打开 WorklistItem如果代码由 K2 2003 服务器上的管理员帐户执行,则无论该项目分配给哪个用户并完成它。这个说法正确吗?BlackPearl 中的这种行为是否发生了变化?如果是这样,我应该做些什么不同的事情来使事情正常进行。
此外,将 K2.SerialNumber 作为数据字段存储在流程实例中是正确的做法。我不确定我是否了解如果有多个目标用户,数据字段是否会包含最后一个目标用户的序列号,以及使用此序列号打开工作列表项是否正确。
谢谢。