Рабочий процесс Tridion - неверная история версий компонента

У нас есть YAWF (еще одна рабочая среда), настроенная для одного из наших клиентов. У нас есть простой процесс Workflow, который работает именно так, как нам нужно, за исключением истории версий компонента.

В истории версий вместо имени пользователя, который создал или обновил компонент, мы видим только "Tridion Content Manager System NT Author".

Я подозреваю, что это учетная запись пользователя MTS, которая используется для выполнения YAWF. Однако нам действительно нужно, чтобы имя пользователя отображалось в истории версий.

Возможно, мы неправильно настроили YAWF?

У кого-нибудь еще была эта проблема, или есть идеи, как мы можем ее решить?

Мы используем Tridion 2011. (Еще не SP1)

4 ответа

Будет ли это та учетная запись, которая выполнила последний шаг в вашем рабочем процессе?

Вы, кажется, довольно уверены, что это YAWF, вы пробовали без него?

Как правило, над одной версией работают разные люди, поскольку регистрация происходит только после завершения всех действий.

Вы можете обойти эту проблему, выполнив итерацию по исполнителям упражнения, и добавить комментарий в сообщение о завершении.

Другим вариантом может быть выдать себя за автора:

Set oTDSE = CreateObject("TDS.TDSE") 
oTDSE.Impersonate("[Author]") 
oTDSE.Initialize() 

' use TDSE 

Set oTDSE = Nothing

Я понимаю, что это старый вопрос, но недавно я боролся с этой же проблемой с точки зрения Core Service и хотел поделиться маршрутом, который я выбрал (и, возможно, кто-то укажет, где я, возможно, ошибся, прежде чем развернуть это в производстве).

Попытавшись применить несколько разных подходов с помощью Core Service, я решил добавить окончательное ручное действие к своим рабочим процессам и настраиваемую логику к предыдущему автоматическому действию. В логике основной службы автоматического действия я завершаю текущее автоматическое действие (которое возвращает конечный экземпляр ручного действия), олицетворяю оригинального автора, запускаю последний экземпляр действия (как автора) и завершаю этот конечный экземпляр действия (снова, как автор).

Я использую SessionAwareCoreServiceClient и работаю на самом компьютере Content Manager. Мне пришлось добавить "NT AUTHORITY\SYSTEM" к пользователям олицетворения в утилите конфигурации Tridion Content Manager (при использовании 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);
}

Надеюсь, я не делаю ничего ужасно глупого, и, возможно, этот ответ поможет кому-то вроде меня, который должен был собрать воедино разные вопросы / блоги / ссылки и выполнить метод проб и ошибок (что может стать утомительным в процессе работы).).

Это ожидаемое поведение. Если последнее действие рабочего процесса - Автоматическое. Он всегда выполняется автором Tridion Content Manager System NT. Пользователем, с которым работает агент службы рабочего процесса. В качестве обходного пути вы можете использовать решение J Stuarts. Я тоже сделал подобное.

Добавлено еще одно занятие в качестве автоматического. И выполнил это действие с пользователем, который изначально создал контент. Таким образом, контент проверяется с указанием сведений об авторе. Тем не менее, для выполнения олицетворения в рабочем процессе убедитесь, что на вашем компьютере Tridion есть пользователь олицетворения NT AUTHORITY\SYSTEM с типом пользователя Windows.

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();
            }
Другие вопросы по тегам