Frage

In Sharepoint Designer-Workflow-Editor Ich wünsche den Benutzername / Namen des Arbeitsablauf Initiators abzurufen (dh, die es gekickt oder ausgelöst, um den Workflow) - dies relativ einfach ist, 3rd-Party-Produkte wie Nintex Workflow 2007 zu tun mit (wo ich würde so etwas wie {Häufig: Initiator} verwenden.) - aber ich kann keinen Ausweg aus dem Kasten heraus zu finden scheinen dies mit Werkdesigner und MOSS 2007 tun

Aktualisieren

Es sieht nicht wie diese eher offensichtliches Merkmal ist OOTB unterstützt, so dass ich am Ende eine eigene Aktivität zu schreiben (wie durch eine der Antworten vorgeschlagen). Ich habe die Aktivitäten Code hier als Referenz aufgeführt, obwohl ich es vermuten, sind wahrscheinlich ein paar Beispiele dieser Art im Umlauf da draußen auf Blogs wie 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 XML-Datei verdrahten:

<?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>
War es hilfreich?

Lösung

Ich glaube nicht, das möglich ist, aus der Box in Sharepoint Designer zu tun. Sie könnten wahrscheinlich eine benutzerdefinierte Aktion schreiben die Urheber zu bekommen, aber ich glaube nicht, es überhaupt durch den SPD-Workflow-Schnittstelle freigelegt ist.

Das Beste, was Sie könnte wahrscheinlich tun ist, den Benutzer bekommen, die das Element in der Liste erstellt oder geändert, aber dies würde Fälle nicht behandeln, in denen der Workflow wurde manuell ausgeführt werden.

Andere Tipps

Für diejenigen, die in diesem Artikel Google und sind jetzt mit Sharepoint 2010 wird der Workflow-Initiator Variable jetzt OOTB in Sharepoint Designer unterstützt.

Die Datenquelle wäre „Workflow Kontext“ und das Feld ist, natürlich, „Initiator“ und Sie können wählen, um es als „Anzeigename“ zurückzukehren, „E-Mail“, „Login-Name“ oder die „User ID-Nummer „

kann ich darüber nachdenken, eine einfache, aber nicht sehr anspruchsvolle Lösung für diese eine von nur SPD mit. Nur in Workflow erstellen Schritte, um einen Prüfling in einer sekundären Liste (wahrscheinlich eine Aufgabenliste, die die workflowId und itemId Eigenschaften für refrence zurück speichert) und führen Sie dann eine Suche in Ihrem Workflow auf dieser Liste, um zu sehen, wer der Schöpfer dieses Artikels ist, dass Wert würde der aktuelle Workflow-Initiator sein.

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 und zu ändern wird das gleiche wie der Workflow-Initiator, dann können Sie das ModifiedBy Feld verwenden, eine Entscheidung zu treffen, die Sie benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top