我们为我们的客户设置了YAWF(又一个工作流程框架)。我们有一个简单的工作流程流程,除了组件版本历史记录外,它完全按照我们的要求工作。
在版本历史记录中,我们只看到“Tridion Content Manager System NT作者”,而不是创建或更新组件的用户的名称。
我怀疑这是用于执行YAWF的MTS用户帐户。但是,我们确实需要用户名出现在版本历史记录中。
也许我们错误地配置了YAWF?
有没有其他人有这个问题,或者知道我们如何解决它?
我们正在使用Tridion 2011.(尚未SP1)
答案 0 :(得分:4)
这是执行工作流程最后一步的帐户吗?
你似乎很相信这是YAWF,你试过没有它吗?
答案 1 :(得分:3)
一般情况下,可能有不同的人在一个版本上工作,因为只有在所有活动完成后才会办理登机手续。
您可以通过遍历活动执行者来解决此问题,并在完成消息中包含注释。
另一种选择可能是冒充作者:
Set oTDSE = CreateObject("TDS.TDSE")
oTDSE.Impersonate("[Author]")
oTDSE.Initialize()
' use TDSE
Set oTDSE = Nothing
答案 2 :(得分:0)
我意识到这是一个老问题,但我最近从核心服务的角度与同样的问题进行了斗争,并希望分享我所采用的路线(可能有人会在我将其部署到之前指出我可能出错的地方生产)。
在尝试使用Core Service的几种不同方法后,我决定在我的工作流程中添加最终的手动活动,并为前面的自动活动添加自定义逻辑。在自动活动的核心服务逻辑中,我完成当前的自动活动(返回最终的手动活动实例),模拟原始作者,启动最终活动实例(作为作者)并完成最终活动实例(再次,作为作者)。
我正在使用SessionAwareCoreServiceClient并在Content Manager机器上运行。我不得不在Tridion Content Manager配置实用程序中向模拟用户添加“NT AUTHORITY \ SYSTEM”(使用Impersonate可能会产生安全隐患,因此请确保它对您的环境有意义):
代码看起来像这样(尽管我遗漏了一些东西,比如获取当前活动实例,从第一个手动活动中检索原始作者,并添加使用SessionAwareCoreServiceClient来提供一些上下文):
using (SessionAwareCoreServiceClient client = new SessionAwareCoreServiceClient())
{
ActivityFinishData activityFinish = new ActivityFinishData()
{
Message = message,
NextAssignee = new LinkToTrusteeData() { IdRef = authorUser.IdRef }
};
// Finish current automatic activity
ActivityInstanceData finalActivity = client.FinishActivity(activityInstance.Id, activityFinish, new ReadOptions());
// Impersonate original author
client.Impersonate(authorUser.Title);
// Start final (manual) activity as author - if you don't start it, then non-Administrators can't finish them.
client.StartActivity(finalActivity.Id, null);
// Finish final (manual) activity as author
client.FinishActivity(finalActivity.Id, activityFinish, null);
}
希望我没有做任何非常愚蠢的事情,可能这个答案会帮助像我这样的人,不得不从其他各种问题/博客/参考文件中将它拼凑在一起并进行一些试错(可以获得繁琐的工作流程。)
答案 3 :(得分:0)
这是预期的行为。如果工作流程的上一个活动是自动。它始终由 Tridion Content Manager System NT作者执行。正在运行工作流服务代理的用户。作为解决方案,您可以使用J stuarts解决方案。我也做了类似的事。
添加另一个活动atlast为自动。并且与最初创建内容的用户一起执行此活动。这样就可以使用作者详细信息检入内容。 但是,要模拟工作流程,请确保您的Tridion计算机具有用户类型为Windows的模拟用户NT AUTHORITY \ SYSTEM。
public void UpdateVersion(string workitemid,string componentid)
{
try
{
Stopwatch _watch = new Stopwatch();
_watch.Start();
Logger.Debug("Entered RPPTridionWorkflow UpdateVersion ");
WorkItemData workItem = (WorkItemData)CoreServiceClient.Read(workitemid, options);
ProcessInstanceData processInstance =
(ProcessInstanceData)CoreServiceClient.Read(workItem.Process.IdRef, options);
ActivityData creatorActivityData = getActivityDataBasedOnName(workitemid, "Content Creation");
if (creatorActivityData != null)
{
LinkToUserData linktoAuthorUser = creatorActivityData.Owner;
UserData authorUser = (UserData)CoreServiceClient.Read(linktoAuthorUser.IdRef, options);
CoreServiceClient.Impersonate(authorUser.Title);
}
ActivityData[] ieActivities = processInstance.Activities;
int currentActivity = ieActivities.Length - 1;
if (ieActivities != null)
{
ActivityInstanceData activityInstance =
(ActivityInstanceData)CoreServiceClient.Read(processInstance.Activities[currentActivity].Id, options);
ActivityFinishData finishData = new ActivityFinishData();
finishData.Message = "Finished automatically and upded version info for component checked in";
CoreServiceClient.FinishActivity(activityInstance.Id, finishData, options);
CoreServiceClient.Close();
}