承認ステータスをワークフローで変更するとバージョン履歴機能が強制的に有効になる
SharePoint に不足している(と私が考える)機能の一つに「下書き」があります。主に、お知らせ掲示板(リスト)などで、書きかけのアイテムを「一旦保存」したい、というニーズは結構あります。Webであるため、常に時間経過によるセッション切れの問題がありますし、また、保存しないと実際の画面でどう見えるかが判りません(プレビュー機能がない)
この問題を解決するため、SharePoint のワークフローを活用することを考えました。しかし、その結果、SahrePoint の隠れたバグ(仕様ともいう)に突き当たりました。
考えたのは次のようなワークフローです。
まず、リストの設定で、投稿されたアイテムに対して、承認を必須にします。
1.公開するWF
アイテムが新規作成/変更されたら自動的に起動する。
列「公開承認」にチェックが入っていたら、アイテムのステータスを未承認→承認に変更する。
このままだと最終更新者がシステムアカウントになってしまうので、最終更新者の値を変更する。
2.下書きに戻すWF
アイテムが変更されたら自動的に起動する。
列「公開承認」にチェックが入っていなかったら、アイテムのステータスを承認→未承認に変更する
このままだと最終更新者がシステムアカウントになってしまうので、最終更新者の値を変更する。
こんな感じです。
二つに分けて書きましたが、実際にはこれをひとつのWFで実装しました。
ユーザに直接「承認」権限をもたせず、ワークフローが列の値に対応して、システムアカウントで承認ステータスを変更してくれるのがポイントです。これなら、未承認(つまり下書き)のアイテムは作成者以外のユーザからは見えず、通知も飛びません。
これで完成!ShrePointの基本機能を活用した、なかなかイイソリューション─と思ったのですが…。ユーザリリースにむけていろいろと試していたら、妙な挙動が見つかってしまいました。
一度公開(承認)したアイテムを編集後、下書き(未承認)に戻します。理屈の上では、承認ステータスが未承認ですから、作成者以外のユーザからはアイテムが見えなくなる筈です。
しかし、実際には見えてしまうのです!それもなぜか編集前の状態で。
これは、バージョン履歴を有効にした場合の挙動に相当します。しかし、UI上ではその機能は有効にしていません。不思議です。
で、この現象を、Microsoftに調査して頂いたのですが…結局「仕様」だそうです(苦笑)
結論としましては、「リスト」において「コンテンツの承認」を有効 (必須) に設定している場合に、ワークフローやイベント レシーバー等で「承認済み」の状態を「承認待ち」へ変更すると、「アイテムのバージョン履歴」を無効に設定していても、「承認済み」のバージョンと「承認待ち」のバージョンが作成されてしまうのは製品の仕様となります。通常のUI上での操作やワークフローやイベント レシーバー以外での操作の場合ではバージョンは作成されません。
なんてこったい…。
別の方法を考えます orz
login