6

W edytorze workflow projektanta Sharepoint chciałbym pobrać nazwę użytkownika/nazwę inicjatora przepływu pracy (tj. Kto go wyrzucił lub uruchomił przepływ pracy) - jest to stosunkowo łatwe do wykonania przy użyciu produktów innych firm, takich jak Nintex Workflow 2007 (gdzie I użyłby coś takiego: {Common Inicjator}) - ale nie wydaje się znaleźć żadnej drogi wyjścia z pudełka to zrobić przy użyciu projektanta punkt akcji i Moss 2007.W edytorze przepływu pracy projektanta programu Sharepoint, w jaki sposób uzyskać nazwę użytkownika inicjatora przepływu pracy?

Aktualizacja

to nie Wygląda na to, że ta dość oczywista funkcja jest obsługiwana przez OOTB, więc napisałem niestandardową aktywność (jak sugeruje jedna z odpowiedzi). Mam wymienione kod zajęcia tutaj odniesienie chociaż podejrzewam, że są tam pewnie kilka wystąpień tego pływających wokół tam na blogach, ponieważ jest to dość banalne rozwiązanie:

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; 
    } 
} 

A następnie podłączyć go z poniższej .action xml file:

<?xml version="1.0" encoding="utf-8"?> 
<WorkflowInfo Language="en-us"> 
<Actions> 
    <Action Name="Lookup initiator user property" 
ClassName="XXX.ActivityLibrary.LookupInitiatorInfo" 
Assembly="XXX.ActivityLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXX" 
AppliesTo="all" 
Category="WormaldWorkflow Custom Actions"> 
     <RuleDesigner Sentence="Lookup initating users property named %1 and store in %2"> 
      <FieldBind Field="UserProperty" DesignerType="TextArea" Id="1" Text="LoginName" />    
      <FieldBind Field="PropertyValueVariable" DesignerType="ParameterNames" Text="variable" Id="2"/> 
     </RuleDesigner> 
     <Parameters> 
      <Parameter Name="__Context" Type="Microsoft.Sharepoint.WorkflowActions.WorkflowContext, Microsoft.SharePoint.WorkflowActions" Direction="In"/> 
      <Parameter Name="__ActivationProperties" Type="Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties, Microsoft.SharePoint" Direction="In"/> 
      <Parameter Name="UserProperty" Type="System.String, mscorlib" Direction="In" /> 
      <Parameter Name="PropertyValueVariable" Type="System.String, mscorlib" Direction="Out" /> 
     </Parameters> 
    </Action> 
</Actions> 
</WorkflowInfo> 

Odpowiedz

2

Nie sądzę, że można to zrobić w SharePoint Designer po wyjęciu z pudełka. Prawdopodobnie mógłbyś napisać niestandardową akcję, aby uzyskać inicjatora, ale nie wierzę, że jest ona w ogóle ujawniona przez interfejs workflow SPD.

Najlepsze, co można zrobić, to uzyskać użytkownika, który utworzył lub zmodyfikował pozycję na liście, ale nie zająłoby się przypadkami, w których przepływ pracy został uruchomiony ręcznie.

+0

teraz obsługiwane w programie SharePoint 2010 OOTB - zobacz moją odpowiedź poniżej – Bkwdesign

1

Mogę myśleć o prostym, ale niezbyt wyrafinowanym rozwiązaniu dla tego, używając tylko SPD. Po prostu w krokach przepływu pracy utwórz element testowy na liście dodatkowej (prawdopodobnie na liście zadań, która przechowuje właściwości workflow i itemId do ponownego odfiltrowania), a następnie wykonaj wyszukiwanie w przepływie pracy na tej liście, aby zobaczyć, kto jest twórcą tego elementu, wartość będzie bieżącym inicjatorem przepływu pracy.

4

Dla tych, którzy google do tego artykułu i teraz używają SharePoint 2010, zmienna inicjatora przepływu pracy jest teraz obsługiwany OOTB w programie SharePoint Designer.

Źródłem danych będzie "Kontekst przepływu pracy", a pole to oczywiście "inicjator" i możesz go zwrócić jako "Nazwę wyświetlaną", "Email", "Nazwa logowania" lub "Identyfikator użytkownika" Numer "

0

Niestandardowe rozwiązanie działania działa tylko wtedy, gdy pracujesz z mchem, jeśli masz tylko wss 3.0 możesz umieścić o krok więcej w swoim przepływie pracy i ustawić niestandardowe pole komentarza z dowolnymi informacjami, to czyni ostatnią zmodyfikowaną osobę Aby zmienić i stać się tym samym, co inicjator przepływu pracy, możesz użyć pola ModifiedBy, aby podjąć dowolną decyzję.

Powiązane problemy