2012-07-31 178 views
2

我正在创建一个事件处理程序以获取所有活动的活动实例详细信息。无法获得手动活动的所有者和执行者

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

在“NotifiyUser”功能,我试图让activityinstance细节,如(标题,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); 
     } 
    } 
+0

您是否尝试过这样做_before_该活动已提交?尝试启动阶段,也许这些属性不再可用? – 2012-07-31 05:46:27

+0

肯努诺,我会检查。但是,我能够为第一个手动活动(分配给每个人)以及所有剩余的自动活动获取这些属性,但不能用于手动活动。背后有什么理由? – user1428019 2012-07-31 06:04:02

+0

不会这么想,这很奇怪。我会在我的盒子上尝试 – 2012-07-31 06:07:29

回答

3

这很奇怪,我不能重现它。

在我的代码我这样做(相同的订阅你)

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 

如此看来,这可能是与你的环境?也许是特定版本的缺陷?我在SDL Tridion 2011 SP1上使用修补程序汇总1

+0

感谢Nuno,我无法让我的工作流程中的最后活动的执行者。并得到错误“The item tcm:56-1723-131104 does not exist”我试着用Transactioncommited和Processed阶段。我甚至不能使用启动阶段,因为我需要生成FinishMessage。 – user1428019 2012-07-31 09:38:56

+1

我认为我没有尝试过,直到工作流过程结束,并且现在无法继续测试。你可以在活动完成之前尝试(EventPhase.Initiated)并检查它是否可用?也许这是预期的,我不确定这一点。 – 2012-07-31 09:47:02

+0

在“已启动”阶段能够获得执行者,但是我还需要特定活动的完成消息,如果我使用启动阶段,则不会收到完成消息。 – user1428019 2012-07-31 09:55:51