6

Sharepoint デザイナーのワークフロー エディターで、ワークフロー開始者のユーザー名/名前 (つまり、ワークフローを開始したユーザーまたはワークフローをトリガーしたユーザー) を取得したいと考えています。これは、Nintex Workflow 2007 (私が{Common:Initiator} のようなもの) - しかし、共有ポイント デザイナーと MOSS 2007 を使用してこれを行う方法をすぐに見つけることができないようです。

アップデート

このかなり明白な機能がOOTBでサポートされているようには見えないため、カスタムアクティビティを作成することになりました(回答の1つで提案されているように)。参照用にアクティビティ コードをここにリストしましたが、これは非常に些細な解決策であるため、おそらくブログに出回っているインスタンスがいくつかあると思います。

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

そして、次の .action xml ファイルを使用して接続します。

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

4 に答える 4

5

この記事にアクセスし、現在 SharePoint 2010 を使用している方のために、SharePoint Designer でワークフロー イニシエーター変数が OOTB でサポートされるようになりました。

データソースは「ワークフロー コンテキスト」であり、フィールドはもちろん「開始者」であり、「表示名」、「電子メール」、「ログイン名」、または「ユーザー ID 番号」として返すことを選択できます。

于 2011-02-02T16:25:37.140 に答える
2

SharePoint Designer ですぐに使用できるとは思えません。おそらくオリジネーターを取得するカスタム アクションを作成できますが、それが SPD ワークフロー インターフェイスを通じて公開されるとはまったく思えません。

おそらく、リスト内の項目を作成または変更したユーザーを取得するのが最善ですが、これでは、ワークフローが手動で実行された場合は処理されません。

于 2008-09-25T07:46:50.360 に答える
1

SPD だけを使用することで、単純だがあまり洗練されていないソリューションを考えることができます。ワークフローのステップで、セカンダリ リスト (おそらく、参照用に workflowId および itemId プロパティを格納するタスク リスト) にテスト アイテムを作成し、そのリストのワークフローでルックアップを実行して、そのアイテムの作成者を確認します。 value は、現在のワークフローの開始者になります。

于 2009-11-19T00:29:49.353 に答える
0

カスタムアクティビティソリューションは、モスを使用している場合にのみ機能します。wss3.0しかない場合は、ワークフローにさらに1ステップ追加して、任意の情報を含むカスタムコメントフィールドを設定できます。これにより、最後に変更された人が変更され、同じになります。ワークフローイニシエーターとして、ModifiedByフィールドを使用して、必要な決定を行うことができます。

于 2011-09-13T15:43:49.230 に答える