【问题标题】:How to get the WorkItem of an object in Workflow?如何在 Workflow 中获取对象的 WorkItem?
【发布时间】:2025-11-29 10:55:01
【问题描述】:

在 Tridion 2011 SP1 事件系统中,我试图获取我知道在工作流中的对象的 WorkItem,但我不知道它可能在谁的 WorkList 中。

场景描述:

  • 当给定组件在工作流中时,页面必须保持锁定状态
  • 如果组件工作流状态改变,页面状态也应该改变

我想做的是在 FinishActivityEventArgs 上触发一个事件,它会:

  1. 检查当前项是否为组件
  2. 获取对应页面(GetUsingItems类型page)
  3. 检查页面是否也在工作流中
  4. 获取相关页面
  5. 获取页面的 WorkItem
  6. 完成当前活动并传递相应的活动详情

我已经准备好完成大多数步骤,但对第 5 步有疑问。到目前为止,我看到的唯一获取 WorkItems 的方法是使用 session.WorkflowManager.GetUserWorkItems(userWorkItemsFilter) 但如果页面不在当前用户的工作项,对吧?

任何提示/方向?

【问题讨论】:

    标签: tridion


    【解决方案1】:

    我相信您将需要使用session.WorkflowManager.GetListProcesses 方法来查找所有进程,而不仅仅是当前用户的进程。我想您可能需要冒充管理员才能取回所有物品。

    【讨论】:

    • 谢谢 Chris,这就是我最终实现的(实际上使用 GetProcesses,将更改为 GetListProcesses,因为我可以使用它保存一些数据库调用,具体取决于 Tridion 返回的内容。)
    • 这是有道理的 - GetProcesses 更适合您最初使用的 GetUserWorkItems。我倾向于总是使用 GetListXXX() 方法,尤其是当您需要过滤掉项目而不是一次加载所有项目时。
    最近更新 更多