2

SharePoint Foundation (Sharepoint 2010) を使用して、ASP.NET ワークフロー開始フォームを使用して Visual Studio でワークフローを開発しています。

このフォームを使用して、ワークフロー インスタンスが開始される共有ポイント リスト アイテムにいくつかのプロパティを設定します。ときどき、ブラウザ ウィンドウに次のようなエラー メッセージが表示されます。

Error 

Failed%20to%20Start%20Workflow 

Troubleshoot issues with Microsoft SharePoint Foundation. 

Correlation ID: 0b8e0b67-f824-4aa5-8316-424ada134f8d 

Date and Time: 6/25/2010 10:59:17 AM 

Go back to site

この動作は断続的なようです。どうしたの?

4

2 に答える 2

2

問題は、SharePoint ワークフロー開始フォームがワークフローのリスト アイテムを PageLoad にキャッシュすることです。ページの読み込みと HandleStartWorkflow の呼び出し (つまり、[ワークフローの開始] ボタンのクリック) の間にアイテムに変更を加えると、SharePoint はそのアイテムをびっくりさせます。これは、Share Point に存在するアイテム (今行った変更が組み込まれている) とは異なります (キャッシュされたアイテム)。

問題を再現するための一般的な手順は次のとおりです。

  1. 開始フォームが表示されるように、ワークフローを開始します。
  2. WorkflowProperties.Item のいくつかのプロパティを変更します
  3. WorkflowProperties.Item.Update を呼び出して、変更を SharePoint に保存します。
  4. HandleStartWorkflow を呼び出します。

エラーが発生します。

ワークフロー アイテムのプロパティの変更が、[ワークフローの開始] ボタンをクリックしたセッションとは別のページ ロード「セッション」で行われる場合、エラーが断続的に発生することがあります。たとえば、いくつかのフォーム データをポストバックしてから [ワークフローの開始] ボタンをクリックすると、ポストバックが発生してからページが読み込まれるため、すべてが機能します。

ただし、ASP TextBox の OnTextChanged イベントを使用し、テキストを変更して [ワークフローの開始] ボタンをクリックすると、ページが古いデータで読み込まれた後に OnChanged イベントが発生し、データが新しいデータに変更され、ワー​​クフローが開始される前にアイテム データが SharePoint から再ロードされます。


修正は簡単です。ワークフローを開始する直前に、ワークフロー アイテム データを再読み込みします。これにより、キャッシュされたワークフロー アイテムとアイテムの SharePoint バージョンが同じになり、共有ポイントが満足します。

「ワークフロー開始コード」領域で、次のように変更します。

Private Sub StartListWorkflow()

    Dim association As SPWorkflowAssociation = workflowList.WorkflowAssociations.Item(New Guid(associationGuid))
    Web.Site.WorkflowManager.StartWorkflow(workflowListItem, association, GetInitiationData)
    SPUtility.Redirect(workflowList.DefaultViewUrl, SPRedirectFlags.UseSource, System.Web.HttpContext.Current)
End Sub

Private Sub StartListWorkflow()

    'Re-initialize the workflow parameters, particularly the workflowListItem, in case it has been changed since page load.'
     InitializeParams()

    Dim association As SPWorkflowAssociation = workflowList.WorkflowAssociations.Item(New Guid(associationGuid))
    Web.Site.WorkflowManager.StartWorkflow(workflowListItem, association, GetInitiationData)
    SPUtility.Redirect(workflowList.DefaultViewUrl, SPRedirectFlags.UseSource, System.Web.HttpContext.Current)
End Sub

そして、すべてが再び機能し始めるはずです。

于 2010-06-25T01:52:57.410 に答える
0

アイテムで既に実行されているワークフローを (カスタム init フォームを介して) 開始しようとすると、同じメッセージが表示されます。ここでの解決策は、アイテムのワークフローの状態を確認することです。

于 2012-09-05T10:59:22.313 に答える