SharePoint Designer の手動実行ワークフローがアクセス拒否される
この仕様については、既に Japan SharePoint Support Team Blog で詳しく解説されていますので、まずそちらの参照をお薦めします。結構ハマリがちなポイントです。
SharePoint Designer で作成したワークフローを起動した際に、[アクセスが拒否されました] と表示される
さわりだけご説明すると、SharePoint Designer で作成されたワークフローは、そのサイト内の特殊なライブラリ「Workflows」内にワークフロー毎にフォルダ(?)を切り、その中に構成ファイルが保存されます。しかし、最初の保存(発行)時に、SharePointは(何故か)このアクセス権の継承を切る仕様です。
これは通常、あまり問題になりません。ワークフローの構成ファイル参照は、システム側で内部的に行なわれているようで、ユーザーの権限に依存しないからです。
しかし、唯一の例外が、そのワークフローを「手動」で起動する場合です。
ワークフローの起動には、ユーザーは[開始]ボタンがある開始画面にアクセスする必要があるのですが、この開始画面もワークフロー構成ファイルのひとつとして、Workflows配下に格納されています。
そのため、ワークフロー作成時の権限設定次第では、ユーザが開始画面にアクセスできず、エラーになります。当然、ワークフローは実行されません。
この現象は、たとえば以下のようなケースで発生します。
1.サイト仮構築中なので、自分(+関係者)のみにアクセス権を限定する
2.リストやライブラリを作成する。
3.リストやライブラリにワークフローを適用する。
4.ワークフローの挙動確認→問題無し。
5.サイトを一般ユーザーに開放する
6.一般ユーザがワークフローを手動実行 → エラー
それ程特殊ではないことが、ご確認頂けるかと思います。
さて、この問題に対して、Support Team は、VisualStudio によるコーディングで、SharePointのAPI経由で構成ファイルにアクセスし、権限を継承させなおす方法を紹介されています。
確かに、これが一番確実な方法ですが…やや面倒です(苦笑)。
そこで、より簡易な方法をご紹介します。
1.SharePoint Designer で Workflows フォルダを開く
2.問題のワークフローフォルダ(?)をコピー&ペースト
3.ワークフローのコピーが作成されるので、元を削除
4.コピー側の名前を元の名前に変更
5.このワークフローを設計モードで開き、何も変更せずに保存する
これだけです。
ようは、コピー&ペーストした時点で新規作成扱いになり、この時点で、ワークフローは親の権限を継承します。ただ、このままではリストとの繋がりが切れているため、ワークフローは動作しません。そこで、あらためて設計を開いて発行し直します。すると再び継承が切られますが、すでに一旦最新の権限を継承しているため、問題は解決します。
この方法の注意点は、あくまで「同じ設計の別ワークフロー」の適用であるため、それまでの実行履歴やインスタンスは消えてしまうことです。ただ、前出のケースであれば、あまり問題にならないでしょう。
単純に機能を回復させる目的であれば、これで十分かも。
AGENT: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; MS-RTC LM 8; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)
ご無沙汰しております。
いつも貴重な情報、ありがとうございます!
そしてまさにこの記事のことが起きました。
で、この記事の通りに対処してみました。
結論から申しますと、この方法で復旧できたのですが、アイテムによっては次のエラーが発生してしまうようです。
『値が有効な範囲にありません。』
これは、ワークフローを削除した直後に発生しました。
SPDで作成した手動ワークフローにおいて、そのワークフローで作業していると思われるアイテムでエラーが発生するように思います。
ちゃんと検証したわけではないですが、当方の環境において発生していましたので、ご報告させていただきました。
復旧方法に問題があるというわけではなく、そもそもSPDで作成した手動ワークフローとの関連性の問題かと思います。
ちなみにこのエラーの対処法は、今のところアイテムの作り直し=レコードコピーで復旧しました。
AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; CIBA)
ご報告ありがとうございます!
なるほど、そこまでは考慮していませんでした。
検証してみないとわかりませんが、ワークフロー自身のGUIDがくさい
ような気がします。
新規作成しているため、ワークフローのGUIDは変化してしまっている
んですよね。(構成ファイルのBaseIDは以前のままですが、実際の
guidは新しいものになってしまっている)