SPD ワークフロー アクションを使用した承認ワークフローでの承認者の設定
-
09-12-2019 - |
質問
SharePoint ドキュメント ライブラリのドキュメント承認ワークフローを構築する必要があります。ワークフローは、承認者がドキュメント内のメタデータ フィールドに依存する点を除いて、OOTB 承認ワークフローとまったく同じである必要があります。たとえば、人事文書は承認者 1 によって承認される必要がありますが、財務文書は承認者 2 によって承認される必要があります。
OOTB承認ワークフローのコピーを作成し、ここに示すように承認パラメーターの値を設定するアクションを追加してカスタマイズしたいと考えています(実際のワークフローでは、パラメーターの実際の値を設定する条件を追加しますが、今のところこのアプローチが機能していることを確認する必要があります)。
Approvers パラメータの値を次のように設定しました。
<d:Approvers xmlns:d="http://schemas.microsoft.com/office/infopath/2009/WSSList/dataFields"
xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls">
<d:Assignment>
<d:Assignee>
<pc:Person>
<pc:DisplayName>Approver1</pc:DisplayName>
<pc:AccountId>DEMO\approver1</pc:AccountId>
<pc:AccountType>User</pc:AccountType>
</pc:Person>
</d:Assignee>
<d:Stage xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
<d:AssignmentType>Serial</d:AssignmentType>
</d:Assignment>
</d:Approvers>
SP ログに次のエラーが表示され続けます。
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. --->
System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Office.Workflow.Actions.StageContainer.UpdateFromString(SPWeb web, SPItemKey itemId, String assignmentString)
at Microsoft.Office.Workflow.Actions.OfficeTask.get_ParticipantList() --- End of inner exception stack trace ---
at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Workflow.ComponentModel.ActivityBindPropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
at System.Reflection.PropertyInfo.GetValue(Object obj, Object[] index)
at System.Workflow.ComponentModel.MemberBind.<>c__DisplayClass1.<GetValue>b__0(Object sender, PathMemberInfoEventArgs eventArgs)
at System.Workflow.ComponentModel.PathWalker.TryWalkPropertyPath(Type rootType, String path)
at System.Workflow.ComponentModel.MemberBind.GetValue(MemberInfo memberInfo, Object dataContext, String path)
at System.Workflow.ComponentModel.ActivityBind.GetMemberValue(Object dataSourceObject, MemberInfo memberInfo, String path, Type targetType)
at System.Workflow.ComponentModel.ActivityBind.InternalGetRuntimeValue(Activity activity, Type targetType)
at System.Workflow.ComponentModel.DependencyObject.GetBoundValue(ActivityBind bind, Type targetType)
at System.Workflow.ComponentModel.DependencyObject.GetValueCommon(DependencyProperty dependencyProperty, PropertyMetadata metadata)
at Microsoft.SharePoint.WorkflowActions.CoerceActivity.get_Value()
at Microsoft.SharePoint.WorkflowActions.CoerceActivity.Coerce()
at Microsoft.SharePoint.WorkflowActions.CoerceActivity.Execute(ActivityExecutionContext provider)
at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext)
at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(Activity activity, ActivityExecutionContext executionContext)
at System.Workflow.ComponentModel.ActivityExecutorOperation.Run(IWorkflowCoreRuntime workflowCoreRuntime)
at System.Workflow.Runtime.Scheduler.Run() 49157206-76a1-4fe0-8b74-0567086a80ff
何が間違っているのか考えられますか?
環境:Windows 2008 R2、SP2010 Enterprise エディション。
解決
ここのステップ 11 に示すように、「[これらのユーザー] と」設定を現在のアイテムからデータを検索するように変更して、動的承認者を構成しました。http://roykimsharepoint.wordpress.com/2011/02/15/sharepoint-designer-walkthrough-copy-modify-publishing-workflow/
このブログ投稿では、ワークフロー内で使用する場合、割り当て XML を「Assignments」要素内でラップする必要があることを示唆しています。http://blog.symprogress.com/2011/10/sharepoint-2010-dynamic-approvers-for-oob-approval-workflow-part-2/
他のヒント
上記のパラメータ:承認者などの個人またはグループ タイプのフィールドを設定する場合は、ユーザーを明確に識別できるものに「戻りフィールド」を設定してください。たとえば、ログイン名は必要ですが、フルネームは必要ありません。