【问题标题】:How to Finish the Activity?如何完成活动?
【发布时间】:2012-07-11 12:30:25
【问题描述】:

我正在尝试在从工作流发布组件后完成活动。

发布已完成,在设置完成活动消息后出现错误(“对象实例未设置为实例对象”)。

ActivityFinishData activityfinish = new ActivityFinishData();
activityfinish.Message = "Published to WIP Publication Target";
logdetails("Finish Message able to Set using Code,the below is the finish message");
logdetails(activityfinish.Message);
ProcessInstanceData processInstance = new ProcessInstanceData();
ActivityInstanceData activityInstance = (ActivityInstanceData)processInstance.Activities[0];
logdetails(activityInstance.Title.ToString());
logdetails(activityInstance.Id.ToString());
csClient.FinishActivity(activityInstance.Id, activityfinish, readoption);
logdetails("Workflow Finished");

【问题讨论】:

  • 在过去的两周里,您已经就同一领域提出了十几个问题。在这个阶段你应该知道“Object instance not set to an instance object”是什么意思以及如何调试它。这并不意味着您不会在此过程中陷入困境,但您应该能够为我们提供更好的信息来帮助您。
  • 您真的坚持每次都使用新流程,不是吗? - ProcessInstanceData processInstance = new ProcessInstanceData();
  • 这是 Nuno 提出的一个非常的好点 - 当您实际上应该获取现有对象(或至少代表事物的对象时)您正在获取适当对象的新实例存在的)。如果您获得一个新的 ProcessInstanceData 对象,那么它将没有活动实例,因此您将没有任何事情要完成...
  • Nuno 已经写过,由于下一行,您将收到此异常: ProcessInstanceData processInstance = new ProcessInstanceData(); ActivityInstanceData activityInstance = (ActivityInstanceData)processInstance.Activities[0];因为您正在创建一个还没有任何活动的新流程实例。很可能您需要通过下一次调用 csClient.Read("SOMEID", readOption) 来读取现有流程实例

标签: tridion tridion-2011


【解决方案1】:

以下方法对我有用:

SessionAwareCoreServiceClient client = Client.GetCoreService();
ReadOptions options = new ReadOptions();

WorkItemData workItem = (WorkItemData)client.Read(currentWorkItemId, options);
ProcessInstanceData processInstance =
    (ProcessInstanceData)client.Read(workItem.Process.IdRef, options);
ActivityInstanceData activityInstance =
   (ActivityInstanceData)client.Read(processInstance.Activities[0].Id, options);

ActivityFinishData finishData = new ActivityFinishData();
finishData.Message = "Finished automatically";

client.FinishActivity(activityInstance.Id, finishData, options);
client.Close();

您可以看到我从当前工作项的 Id 开始,并从那里获取现有对象。我创建为“新”的唯一对象是不存在的对象。

【讨论】:

  • @Jermery:我已经在我的函数中启动了 readoption var readoption = new ReadOptions();并用于完成活动调用。 (我已经粘贴了无法完成工作流活动的代码部分。
  • 没关系。我看到 Nuno 已经确定了问题的可能原因。
猜你喜欢
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多