Dans l'éditeur de flux de travail de SharePoint, comment obtenir le nom d'utilisateur des initiateurs de flux de travail?

StackOverflow https://stackoverflow.com/questions/131238

Question

Dans l'éditeur de flux de travail de Sharepoint Designer, je souhaite récupérer le nom d'utilisateur / nom de l'initiateur du flux de travail (c'est-à-dire qui l'a lancé ou qui a déclenché le flux de travail). Il est relativement facile d'utiliser des produits tiers tels que Nintex Workflow 2007 Je voudrais utiliser quelque chose comme {Common: Initiator}) - mais je n'arrive pas à trouver un moyen de sortir de la boîte pour le faire en utilisant le concepteur de point de partage et MOSS 2007.

Mettre à jour

Il ne semble pas que cette fonctionnalité plutôt évidente soit prise en charge par OOTB. J'ai donc fini par écrire une activité personnalisée (comme suggéré par l'une des réponses). J'ai énuméré le code des activités ici à titre de référence, bien que je soupçonne qu'il existe probablement quelques exemples de ce flotter sur des blogs, car c'est une solution assez triviale:

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

Et connectez-le ensuite au fichier .action xml suivant:

<?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>
Était-ce utile?

La solution

Je ne pense pas que cela soit possible dans SharePoint Designer tel quel. Vous pourriez probablement écrire une action personnalisée pour obtenir l'expéditeur, mais je ne crois pas qu'elle soit exposée via l'interface de flux de travail SPD.

Le mieux que vous puissiez faire est probablement de demander à l'utilisateur qui a créé ou modifié l'élément de la liste, mais cela ne résoudrait pas les problèmes dans lesquels le flux de travail était exécuté manuellement.

Autres conseils

Pour les utilisateurs de Google qui utilisent cet article et qui utilisent désormais SharePoint 2010, la variable initiateur de flux de travail est désormais prise en charge de la fonctionnalité OOTB dans SharePoint Designer.

La source de données serait "Contexte de flux de travail". et le champ est, bien sûr, "initiateur". et vous pouvez choisir de le renvoyer sous le nom "Nom complet", "Email", "Nom de connexion". ou le "numéro d'identification d'utilisateur"

Je peux penser à une solution simple mais pas très sophistiquée pour celle-ci en utilisant simplement SPD. Juste dans les étapes de flux de travail, créez un élément de test dans une liste secondaire (probablement une liste de tâches qui stocke les propriétés workflowId et itemId pour reference), puis effectuez une recherche dans votre flux de travail sur cette liste pour voir qui est le créateur de cet élément. la valeur serait l'initiateur actuel du flux de travail.

La solution d'activité personnalisée ne fonctionne que si vous travaillez avec moss. Si vous ne possédez que la version 3.0 de WSS, vous pouvez mettre une étape de plus dans votre flux de travail et définir un champ de commentaire personnalisé avec toutes les informations. devienne identique à l'initiateur du flux de travail, vous pouvez utiliser le champ ModifiedBy pour prendre toute décision dont vous avez besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top