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.このワークフローを設計モードで開き、何も変更せずに保存する

これだけです。
ようは、コピー&ペーストした時点で新規作成扱いになり、この時点で、ワークフローは親の権限を継承します。ただ、このままではリストとの繋がりが切れているため、ワークフローは動作しません。そこで、あらためて設計を開いて発行し直します。すると再び継承が切られますが、すでに一旦最新の権限を継承しているため、問題は解決します。

この方法の注意点は、あくまで「同じ設計の別ワークフロー」の適用であるため、それまでの実行履歴やインスタンスは消えてしまうことです。ただ、前出のケースであれば、あまり問題にならないでしょう。
単純に機能を回復させる目的であれば、これで十分かも。


これまでのコメント

  1. poteto より:

    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で作成した手動ワークフローとの関連性の問題かと思います。

    ちなみにこのエラーの対処法は、今のところアイテムの作り直し=レコードコピーで復旧しました。

  2. saruhiko より:

    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は新しいものになってしまっている)

login

Author

中村 和彦(シンプレッソ・コンサルティング株式会社 代表)が「ユーザ視点の SharePoint 情報」を発信します。元大手製造業 SharePoint 運用担当。現SharePoint コンサルタント。お仕事のお問い合わせはこちらまでお願いします。当ブログにおける発信内容は個人に帰属し所属組織の公式発信/見解ではありません。
FB : 中村 和彦
blog: Be・Better!
MS MVP SharePoint 2009/10-2011/9
MS MVP Office 365 2012/10-2014/9