Tridion工作流程 - 组件版本历史记录不正确

时间:2012-07-12 13:07:21

标签: tridion

我们为我们的客户设置了YAWF(又一个工作流程框架)。我们有一个简单的工作流程流程,除了组件版本历史记录外,它完全按照我们的要求工作。

在版本历史记录中,我们只看到“Tridion Content Manager System NT作者”,而不是创建或更新组件的用户的名称。

我怀疑这是用于执行YAWF的MTS用户帐户。但是,我们确实需要用户名出现在版本历史记录中。

也许我们错误地配置了YAWF?

有没有其他人有这个问题,或者知道我们如何解决它?

我们正在使用Tridion 2011.(尚未SP1)

4 个答案:

答案 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可能会产生安全隐患,因此请确保它对您的环境有意义):

Impersonation Users

代码看起来像这样(尽管我遗漏了一些东西,比如获取当前活动实例,从第一个手动活动中检索原始作者,并添加使用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();
            }