6

Im Arbeitsablaufeditor des Sharepoint-Designers möchte ich den Benutzernamen/Namen des Workflow-Initiators abrufen (dh wer hat ihn gestartet oder den Workflow ausgelöst) - dies ist relativ einfach mit Drittanbieterprodukten wie Nintex Workflow 2007 (wo ich verwenden würde so etwas wie {Häufig: Initiator}) - aber ich kann keinen Ausweg aus dem Kasten heraus zu finden scheinen dies mit Werkdesigner und MOSS 2007Im Arbeitsablaufeditor des Sharepoint-Designers Wie erhalte ich den Benutzernamen des Arbeitsablaufinitiators?

aktualisieren

Es ist nicht zu tun sehen wie dieses ziemlich offensichtliche Feature ist unterstützt OOTB, so schrieb ich eine benutzerdefinierte Aktivität (wie von einer der Antworten vorgeschlagen). Ich habe die Aktivitäten Code hier als Referenz aufgeführt, obwohl ich es vermute, ist wahrscheinlich ein paar Beispiele dafür um da draußen auf Blogs schwimmend, da es eine ziemlich triviale Lösung ist:

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

Und es dann mit der folgenden .Action verdrahten xML-Datei:

<?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> 

Antwort

2

ich glaube nicht, das möglich ist, aus der Box in Sharepoint Designer zu tun. Sie könnten wahrscheinlich eine benutzerdefinierte Aktion schreiben, um den Absender zu erhalten, aber ich glaube nicht, dass sie über die SPD-Workflow-Schnittstelle überhaupt verfügbar gemacht wird.

Das Beste, was Sie wahrscheinlich tun könnten, ist den Benutzer zu erhalten, der das Element in der Liste erstellt oder geändert hat. Dies würde jedoch keine Fälle behandeln, in denen der Workflow manuell ausgeführt wurde.

+0

jetzt in SharePoint 2010 OOTB unterstützt - siehe meine Antwort unten – Bkwdesign

1

Ich kann über eine einfache, aber nicht sehr ausgeklügelte Lösung für dieses Problem mit nur SPD denken. Erstellen Sie in Workflow-Schritten nur ein Testelement in einer sekundären Liste (wahrscheinlich eine Aufgabenliste, in der die Eigenschaften workflowId und itemId für refrence gespeichert sind), und führen Sie dann eine Suche in Ihrem Workflow in dieser Liste durch, um festzustellen, wer der Ersteller dieses Elements ist Wert wäre der aktuelle Workflow-Initiator.

4

Für diejenigen, die in diesen Artikel googeln und jetzt SharePoint 2010 verwenden, wird die Workflow-Initiatorvariable jetzt in SharePoint Designer von OOTB unterstützt.

Die Datenquelle wäre "Workflow Context" und das Feld ist natürlich "Initiator" und Sie können wählen, ob Sie es als "Anzeigename", "E-Mail", "Anmeldename" oder "Benutzer-ID" zurückgeben möchten Number“

0

die benutzerdefinierte Aktivität Lösung nur, wenn Sie mit Moos arbeiten, wenn Sie WSS 3.0 haben, können Sie noch einen Schritt mehr in Ihrem Workflow setzen und ein benutzerdefiniertes Kommentarfeld mit allen möglichen Informationen eingestellt, dies die letzte Änderung Person machen Wenn Sie den Workflow-Initiator ändern und mit ihm identisch werden möchten, können Sie das Feld ModifiedBy verwenden, um die gewünschte Entscheidung zu treffen.

Verwandte Themen