16

ドキュメント ライブラリにバインドする必要がある単純な SharePoint シーケンシャル ワークフローを開発しています。小さなワークフローをドキュメント ライブラリに関連付ける際に、これらのオプションをオンにしました

  • アイテムの編集権限を持つ認証済みユーザーが、このワークフローを手動で開始できるようにします。
  • 新しいアイテムが作成されたら、このワークフローを開始します。
  • アイテムが変更されたときに、このワークフローを開始します。

このライブラリにドキュメントをアップロードすると、ワークフローが開始され、たとえばメールが送信されます。完了し、すべて問題ありません。

新しいアイテムで [プロパティの編集] を選択して変更を保存すると、ワークフローが再び開始されます。絶対に私たちが期待したものです。

Copy.asmx Web サービスを使用して新しいアイテムをライブラリにコピーする場合でも、ワークフローは正常に開始されます。

しかし、SharePoint WebService Lists.asmx を介してアイテムを更新したいと考えています。

私のCAMLはここにあります:

<Method ID='1' Cmd='Update'>
  <Field Name='ID'>1</Field>
  <Field Name='myDummyPropertyField'>NewValue</Field>
</Method>

アイテムは更新されています (タイムスタンプが変更され、ダミーのプロパティも変更されています) が、ワークフローは再び開始されません。

この動作は、開発およびテスト システムで再現可能です。

エラー ログ (C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\LOGS) を確認すると、奇妙なエラー メッセージが見つかりました。

09/25/2008 16:51:40.17  w3wp.exe (0x1D94)                           0x1D60  Windows SharePoint Services     General                         6875    Critical    Error loading and running event receiver Microsoft.SharePoint.Workflow.SPWorkflowAutostartEventReceiver in Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c. Additional information is below.  : The object specified does not belong to a list.

この動作を確認できる人はいますか? または解決策のヒントはありますか?


このトピックに関する進展があればお知らせします。

4

4 に答える 4

11

最後に、マイクロソフトのサポート サービス プロセスを経て、解決策が得られました。

最初に、Microsoft はこれがバグであると述べました。これはマイナーなバグです。適切な回避策があるため、このバグが修正されるまでには、もう少し時間がかかる可能性があります (サポート技術者は、次のサービス パックまたは次のバージョン (!) で何かを言いました)。

しかし、ここで問題です。

理由

私の質問の CAML コードを見てみましょう。

<Method ID='1' Cmd='Update'>
  <Field Name='ID'>1</Field>
  <Field Name='myDummyPropertyField'>NewValue</Field>
</Method>

何らかの理由で Workflow Manager が ID を処理できないため、2 行目に入力しました。奇妙なことに、他のすべての SharePoint コマンドは ID で機能しますが、ワークフロー マネージャーでは機能しません。Workflow Manager は、「完全修飾」ドキュメント名で動作します。そのため、手がかりがなく、完全修飾ドキュメント名を入力しなかったため、ワークフロー マネージャーは既定で現在のドキュメント ライブラリの名前を使用します。そして今、エラーメッセージが意味を成し始めます:

The object specified does not belong to a list.

もちろん、オブジェクト (ドキュメント ライブラリ) はリストに属していません。それはリストです。

ソリューション

CAML クエリにもう 1 行追加する必要があります。

<Field Name='FileRef'>/sites/mySite/myDocLib/myFolder/myDocument.txt</Field>

FileRef は、完全修飾ドキュメント名をワークフロー マネージャーに渡します。ワークフロー マネージャーは、完全に満足して、アイテムのワークフローを開始します。

サーバー名を省略して、完全な絶対サーバー パスを含める必要があることに注意してください (たとえば、SPItem の ServerRelativePath プロパティにあります)。

完全に機能する CAML クエリ:

 <Method ID='1' Cmd='Update'>
    <Field Name='ID'>1</Field>
    <Field Name='FileRef'>/sites/mySite/myDocLib/myFolder/myDocument.txt</Field>
    <Field Name='myDummyPropertyField'>NewValue</Field>
  </Method>

未来

おそらく、この文書化されていない動作は、今後のサービス パックのいずれかで修正されるでしょう。Microsoft サポートは謝罪し、このトピックに関する MSDN 記事をリリースする予定です。来月は、stackoverflow に関するこの記事が同じ状況の開発者に役立つことを願っています。

読んでくれてありがとう!

于 2008-12-15T14:13:59.060 に答える
3

承認ワークフローでも同様の問題に直面しました。これを解決するために、独自のイベント レシーバーを作成し、リストに追加しました。アイテムが更新されたか編集されたかに応じて、承認ワークフローを開始しました。

お役に立てれば...

于 2008-10-08T09:25:21.100 に答える
0

私もこの問題に遭遇し、ワークフローが開始されると、アイテムをどのように更新しても、自動的に再開できないことがわかりました。ただし、何度でも手動でワークフローを再開できます。

于 2008-09-28T06:28:05.133 に答える
0

私は同じ動作を見てきました。しかし、その後、このような投稿を受け取り、1 日 1 つを作成してメール リマインダーを設定する方法を人々に示します。

于 2008-11-18T23:18:11.620 に答える