SharePoint Designer 2013 を使って SharePoint 2010ベースのワークフローを開発しているとき、ワークフロー発行時に次のようなエラーメッセージが表示され、正常に発行できないことがあります。
「ワークフローのコンパイル中にエラーが発生しました。ワークフロー ファイルは保存されましたが、実行することはできません。」
詳細
(0,0)Activity 'ID436' の検証に失敗しました: IfElseActivity には、IfElseBranchActivity という種類の子を少なくとも 1 つ含める必要があります。)
一旦こうしたエラーが出ると、これ以降はこのワークフローも含むすべてのワークフロー発行時に次のエラーが表示され発行できなくなってしまうことがあります。
「ワークフローに関連するサーバーで、不明なエラーが発生しました」
まず、「ワークフローに関連するサーバーで、不明なエラーが発生しました」のエラー発生原因ですが、本来ワークフローが内部的に書き込むフォルダーが、先のエラーにより削除されてしまうことに起因しています。この場合、次の場所に Temp という名前のフォルダ―を作成すると修正できます。
[SharePoint サーバー上]
C:\Users\spfarm\AppData\Local
※上記のうち、spfarm は、発行先となる SharePoint サイトをホストしている IIS のアプリケーション プールID です。環境に応じて読み替えてください。
以上の手順でエラーとなっているワークフローは発行できるようになります。
さて、元々のエラーとなっているワークフローの原因ですが、今回のようなエラーが出る場合は、エラーメッセージ通りに条件分岐の書き方に問題がある場合が多いので慌てずにロジックをしっかり見直してみてください。Else ブロックが正しくないなどないかどうか確認します。しかし、それでも原因がよくわからないこともあります。そこで、内部構造を調べてみたところ、SharePoint Designer 上の不具合が発生している場合があるようです。
大体、エラーメッセージに記載されている 'ID436' ですが、これは何の番号でしょうか? そもそも、SharePoint 2010 ベースのワークフローを作成する際には内部的に XOML と呼ばれる XML 形式のファイルが生成されます。実はこのIDはこの XOML ファイル内に記載されている内部IDであり、SharePoint Designer の UI 上には直接でてこないものです。そこで次のような手順で内容を確認してみます。
- サイト コレクションの管理者として、SharePoint Designer 2013 を起動し、SharePoint サイトにアクセスする。
- ナビゲーションから[すべてのファイル]>[Workflows]の順にクリックする。
- 問題が起きているワークフローをクリックする。
- *.xoml ファイルを選択し、リボン メニューから [ファイルのエクスポート]をクリックし、任意の場所に保存する。
- 保存した *.xoml ファイルをメモ帳などで開く
ファイルを開いて、エラーメッセージに出ていたIDを検索します。
上記の場合だと次のような XML要素が見つかります。
<IfElseActivity x:Name='ID436'/>
この IfElseActivity というタグは本来は子要素を持つ必要があるのですが、見ての通り子要素がないまま自己完結しています。これがエラーの問題でした。しかし、この内容は SharePoint Designer の表面上では確認できません。
対処するため、今回、このタグは使っていないので削除します。上書き保存をしてから、再び SharePoint Designer 内の元の場所にインポートして上書きします。
最後に発行すると正常に発行できるはずです。
コメント