В редакторе рабочих процессов дизайнера sharepoint как получить имя пользователя для инициаторов рабочего процесса?

В Sharepoint Designer 'Редактор рабочего процесса. Я хочу получить имя пользователя / имя инициатора рабочего процесса (то есть, кто его запустил или запустил рабочий процесс) - это относительно легко сделать с помощью сторонних продуктов, таких как Nintex Workflow 2007 (где я бы использовал что-то вроде {Common: Initiator}) - но я могуКажется, что нет никакого способа сделать это с помощью конструктора share point и MOSS 2007.

Обновить

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

public partial class LookupInitiatorInfo : Activity
{
    public static DependencyProperty __ActivationPropertiesProperty =
        DependencyProperty.Register("__ActivationProperties",
        typeof(Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties),
        typeof(LookupInitiatorInfo));

    public static DependencyProperty __ContextProperty =
        DependencyProperty.Register("__Context", typeof (WorkflowContext),
        typeof (LookupInitiatorInfo));

    public static DependencyProperty PropertyValueVariableProperty =
        DependencyProperty.Register("PropertyValueVariable", typeof (string),    
        typeof(LookupInitiatorInfo));

    public static DependencyProperty UserPropertyProperty = 
        DependencyProperty.Register("UserProperty", typeof (string),
        typeof (LookupInitiatorInfo));

    public LookupInitiatorInfo()
    {
        InitializeComponent();
    }

    [Description("ActivationProperties")]
    [ValidationOption(ValidationOption.Required)]
    [Browsable(true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties __ActivationProperties
    {
        get { return ((Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties)(base.GetValue(__ActivationPropertiesProperty))); }
        set { base.SetValue(__ActivationPropertiesProperty, value); }
    }

    [Description("Context")]
    [ValidationOption(ValidationOption.Required)]
    [Browsable(true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public WorkflowContext __Context
    {
        get { return ((WorkflowContext)(base.GetValue(__ContextProperty))); }
        set { base.SetValue(__ContextProperty, value); }
    }

    [Description("UserProperty")]
    [ValidationOption(ValidationOption.Required)]
    [Browsable(true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public string UserProperty
    {
        get { return ((string) (base.GetValue(UserPropertyProperty))); }
        set { base.SetValue(UserPropertyProperty, value); }
    }

    [Description("PropertyValueVariable")]
    [ValidationOption(ValidationOption.Required)]
    [Browsable(true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public string PropertyValueVariable
    {
        get { return ((string) (base.GetValue(PropertyValueVariableProperty))); }
        set { base.SetValue(PropertyValueVariableProperty, value); }
    }

    protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
    {
        // value values for the UserProperty (in most cases you
        // would use LoginName or Name)

        //Sid
        //ID
        //LoginName
        //Name
        //IsDomainGroup
        //Email
        //RawSid
        //Notes

        try
        {
            string err = string.Empty;

            if (__ActivationProperties == null)
            {
                err = "__ActivationProperties was null";
            }
            else
            {
                SPUser user = __ActivationProperties.OriginatorUser;

                if (user != null && UserProperty != null)
                {
                    PropertyInfo property = typeof (SPUser).GetProperty(UserProperty);
                    if (property != null)
                    {
                        object value = property.GetValue(user, null);
                        PropertyValueVariable = (value != null) ? value.ToString() : "";
                    }
                    else
                    {
                        err = string.Format("no property found with the name \"{0}\"", UserProperty);
                    }
                }
                else
                {
                    err = "__ActivationProperties.OriginatorUser was null";
                }
            }
            if (!string.IsNullOrEmpty(err))
                Common.LogExceptionToWorkflowHistory(new ArgumentOutOfRangeException(err), executionContext,
                                                     WorkflowInstanceId);
        }
        catch (Exception e)
        {
            Common.LogExceptionToWorkflowHistory(e, executionContext, WorkflowInstanceId);
        }

        return ActivityExecutionStatus.Closed;
    }
}

А затем подключите его к следующему XML-файлу .action:




    
        
                          
            
        
        
            
            
            
            
        
    


Ответы на вопрос(4)

Для тех, кто заглянул в эту статью и теперь использует SharePoint 2010, переменная инициатора рабочего процесса теперь поддерживается OOTB в SharePoint Designer.

Источник данных будет "Контекст рабочего процесса " и поле, конечно, "Инициатор» и вы можете вернуть его как "Отображаемое имя", "Эл. адрес", "Логин" или "Идентификационный номер пользователя "

 Chiramisu08 июн. 2018 г., 23:33
Это правильный ответ, хотя по моему опытуReturn field as опция отображается серым цветом при использовании в качестве параметра Condition.
Решение Вопроса

Я неЯ думаю, что это возможно сделать в SharePoint Designer из коробки. Вы могли бы написать собственное действие, чтобы получить инициатора, но я неЯ считаю, что он вообще не раскрывается через интерфейс потока операций SPD.

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

 Bkwdesign19 сент. 2013 г., 05:24
теперь поддерживается в SharePoint 2010 OOTB - см. мой ответ ниже

Настраиваемое решение для работы работает только в том случае, если вы работаете с мхом, если у вас есть только wss 3.0, вы можете добавить еще один шаг в свой рабочий процесс и задать поле для настраиваемого комментария с любой информацией, это изменит последнего измененного человека и станет таким же в качестве инициатора рабочего процесса вы можете использовать поле ModifiedBy для принятия любого решения, которое вам нужно.

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

Ваш ответ на вопрос