(MOSS 2007 32 ビット SP2)
Visual Studio で開発され、機能として展開され、リストに関連付けられているワークフローがあります。そのリスト内の項目はプログラムによって作成されます。プロセスの最後の手順は、リストの SPWorkflowAssociation コレクションを調べて、特定の名前に一致する WF を開始することです。
// code to create the list item & get the new item's index (itemIndex)...
foreach (Microsoft.SharePoint.Workflow.SPWorkflowAssociation flowAssoc in SPContext.Current.Web.Lists["{listname}"].WorkflowAssociations) {
if (flowAssoc.Enabled && flowAssoc.AllowManual && (flowAssoc.Name.Trim() == workflowNameToLookFor.Trim()))
SPContext.Current.Site.WorkflowManager.StartWorkflow(SPContext.Current.Web.Lists["{listname}"].Items[itemIndex], flowAssoc, flowAssoc.AssociationData, true);
}
(見苦しい完全修飾名と SPListItem の絶え間ない再取得をご容赦ください。実際に何らかの原因があると思われる場合を除きます)
これは、開始されたワークフローが SharePoint Designer ワークフローであった数か月間、運用環境で使用されてきました。カスタム WF (別の名前) を展開したので、「奇妙な動作」が発生しています。
私 (システム アカウントではなく、サイト コレクション管理者) がコードを実行してアイテムを作成し、ワークフローを開始すると、すべてが 100% 機能します。しかし、他のユーザー (サイトと関連するすべてのリストでフル コントロールを持つユーザーであっても) が同じことを行った場合、SharePoint から一般的な「エラー、予期しないエラーが発生しました」ページが表示されますが、アイテムは正しく作成されているため、WF エラーは発生しません。 (アイテムの WF 履歴は完全に空白です)、指定されたワークフローを問題なく手動で開始できます。
これが発生したときに ULS で生成される唯一のエラーは次のとおりです。
エンジン RunWorkflow: System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。System.Workflow.Runtime.WorkflowRuntime.InitializeExecutor (Guid instanceId、CreationContext コンテキスト、WorkflowExecutor executor) で Microsoft.SharePoint.Workflow.SPWinOePersistenceService.LoadWorkflowInstanceState(Guid instanceId) 、WorkflowInstance workflowInstance) で System.Workflow.Runtime.WorkflowRuntime.Load (Guid キー、CreationContext コンテキスト、WorkflowInstance workflowInstance) で System.Workflow.Runtime.WorkflowRuntime.GetWorkflow (Guid instanceId) で Microsoft.SharePoint.Workflow.SPWinOeHostServices.Send (SPWinOeWorkflow) winoeworkflow、SPWorkflowEvent e) Microsoft.SharePoint.Workflow で。
探しているワークフローの名前を存在しない名前に変更しても、(FOREACH の IF ステートメントが一致するものを見つけられないため) エラーはまったく発生しないため、間違いなく私のワークフローを見つけて、始めよう。
しかし (ここでも)、エラーを生成したアイテムの [ワークフロー ステータス/履歴] ページを見ると、そこにはエラーや WF が開始しようとした記録はなく、そのページからユーザーは手動でワークフローを開始できます。問題。
私はWF に InfoPath 関連付けフォームを使用していますが、これがルートにある場合 (たとえば、データ/スキーマを含む何かを WorkflowManager.StartWorkflow に渡す必要がある場合)、同じエラーが表示されることが予想されます。サイト コレクションの管理者ユーザー。私はどのような種類の WF 開始フォームも使用していません。
私はこれのソースを見つけようとして気が狂います。誰かがこの ULS エラーまたはこの種の動作を以前に見たことがあることを願っています...