2011-10-04 65 views
1

有点背景。 我正在升级由某人使用k2 2003编写的项目来使用k2 Blackpearl。 的一部开拓创新K2 2003过程具有使用1个时隙Connection.OpenWorklistItem投掷Worklistitem在K2中找不到错误Blackpearl

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”在上面的代码中的以下目标和规则客户端事件。应该有吗?

该方法使用的数据字段存储的序列号,然后从一个网络应用使用的序列号,用于打开 一个worklistitem再整理它像这样(使用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工作列表项,13351,144没有发现在

我的问题是,是否有已经从 2003 OpenWorklistItem调用BLACKPEARL行为的改变? 上面K2 2003的代码片段中的“FinishWorkItem”方法由 K2 2003中的'Admin'帐户执行,它目前在Production中似乎正常工作,这使我相信K2 2003 允许打开WorklistItem使用序列号,无论该项目分配给哪个用户 ,并在代码由K2 2003服务器上的管理员帐户执行时完成。这个陈述是正确的吗? 这种行为在BlackPearl中改变了吗?如果是这样,我应该采取什么不同的方式来使事情顺利进行

此外,存储K2.SerialNumber作为流程实例中的数据字段是正确的。 我不确定是否了解是否有多个目标用户,数据字段是否包含最后一个目标用户的序列号 以及是否使用此序列号打开工作清单项目是正确的。

谢谢。

回答

0

更改的是序列号现在采用格式{ProcInstID}_{ActInstDestID},例如'18_1'。 2003年的序列号格式为{ProcInstID},{ActInstDestID}[,{EventInstID}] - 因此在您的具体情况下,用下划线替换逗号应该可行。

+0

我收到的错误消息是以下表格26030工作清单项目,13351,144未在处找到不确定为什么它不是您提到的新格式。这是一个K2 2003流程定义,我在VS 2010中使用与VS ad集成的BlackPearl客户端工具将其部署到BlackPearl服务器 –

+0

@AbhijeetPatel,这是因为您现在已经将它部署到黑珍珠服务器。尝试'13351_41'。 –

+0

你能否详细说明你的意思是'尝试'13351_41'。我上面发布的格式来自K2 blackpearl服务器投掷的错误消息 –