【问题标题】:Not able to get the Owner and Performer of the Manual activity无法获取手动活动的所有者和执行者
【发布时间】:2012-07-31 04:32:25
【问题描述】:

我正在创建一个事件处理程序来获取所有活动的活动实例详细信息。

EventSystem.Subscribe<ActivityInstance, FinishActivityEventArgs>(NotifyUser, EventPhases.TransactionCommitted);

在“NotifiyUser”函​​数中,我正在尝试获取活动实例详细信息,例如(标题、FinishMessage、所有者、执行者等)

我能够获取“手动活动”的“自动活动”的所有详细信息,但无法获取“所有者”和“执行者”值。

private void NotifyUser(ActivityInstance activityInstance, FinishActivityEventArgs args, EventPhases phase)
    {
        _session = activityInstance.Session;
       logdetails("Activity Owner--->" + activityInstance.Owner.Title);
        foreach (var performer in activityInstance.Performers)
        {
           logdetails("Activity Performer--->" + performer.Title);
        }
    }

【问题讨论】:

  • 您是否尝试过活动提交之前这样做?尝试启动阶段,也许这些属性不再可用?
  • 当然努诺,我会检查。但是,我能够为第一个手动活动(分配给每个人)和所有剩余的自动化活动获取这些属性,但不能为手动活动获取这些属性。有什么原因吗?
  • 不会这么认为,这很奇怪。我会在我的盒子上试一试
  • 我总是让所有者和表演者在我的事件系统中进行自动和手动活动...

标签: tridion tridion-2011


【解决方案1】:

这很奇怪,我无法重现它。

在我的代码中我做了这个(和你一样的订阅)

private void LogSomething(ActivityInstance instance, FinishActivityEventArgs args, EventPhases phases)
{
    User owner = instance.Owner;
    File.AppendAllLines("c:\\temp\\info.log", new[]
        {
            string.Format("Activity ID: {0} owned by: {1}({2}", instance.Id, owner.Title, owner.Id)
        });
    List<User> performers = new List<User>(instance.Performers);
    foreach (var performer in performers)
    {
        File.AppendAllLines("c:\\temp\\info.log", new[]
            {
                string.Format("Activity ID: {0} Performer: {1}({2}", instance.Id, performer.Title, performer.Id)
            });
    }
}

为我粗鲁的记录道歉。

这是我在 info.log 中得到的:

Activity ID: tcm:3-923-131104 owned by: T2011GURUV3\Administrator(tcm:0-11-65552
Activity ID: tcm:3-923-131104 Performer: T2011GURUV3\Administrator(tcm:0-11-65552
Activity ID: tcm:3-924-131104 owned by: NT AUTHORITY\SYSTEM(tcm:0-3-65552
Activity ID: tcm:3-924-131104 Performer: NT AUTHORITY\SYSTEM(tcm:0-3-65552
Activity ID: tcm:3-925-131104 owned by: T2011GURUV3\Administrator(tcm:0-11-65552
Activity ID: tcm:3-925-131104 Performer: T2011GURUV3\Administrator(tcm:0-11-65552
Activity ID: tcm:3-926-131104 owned by: T2011GURUV3\Administrator(tcm:0-11-65552
Activity ID: tcm:3-926-131104 Performer: T2011GURUV3\Administrator(tcm:0-11-65552
Activity ID: tcm:3-927-131104 owned by: NT AUTHORITY\SYSTEM(tcm:0-3-65552
Activity ID: tcm:3-927-131104 Performer: NT AUTHORITY\SYSTEM(tcm:0-3-65552
Activity ID: tcm:3-928-131104 owned by: T2011GURUV3\Administrator(tcm:0-11-65552
Activity ID: tcm:3-928-131104 Performer: T2011GURUV3\Administrator(tcm:0-11-65552

看来这可能与您的环境有关?也许是特定版本的缺陷?我正在使用带有 Hotfix Rollup 1 的 SDL Tridion 2011 SP1

【讨论】:

  • 感谢 Nuno,我无法获得工作流中最后一个活动的执行者。并收到错误“项目 tcm:56-1723-131104 不存在”我尝试了 Transactioncommited 和 Processed 阶段。我什至不能使用启动阶段,因为我还需要获取 FinishMessage。
  • 我想我直到工作流程结束时才尝试过,现在无法继续测试。您可以在活动完成之前尝试(EventPhase.Initiated)并检查它是否在那里可用?也许这是预期的,我不确定。
  • 在“启动”阶段能够获得执行者,但我还需要特定活动的完成消息,如果我使用启动阶段,我不会收到完成消息。
  • 在我看来这是设计使然。最后一个活动实例(和流程实例)被归档并成为活动历史记录。因此,您需要检查的不是活动实例,而是活动历史记录。您可以将 tcmuri 项目类型从活动实例更改为活动历史记录,以读取上次存档的活动。
  • 感谢 Igor,这是有道理的,因为 Activity 实例在完成后不再存在(不是 Activity 的实例)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
相关资源
最近更新 更多