SharePointリストの移行
SharePointリストテンプレートを使えば リストを保存して、サイト内にも別サイトにも 展開できます。
しかし、リストにワークフローが付加されている場合は リストの保存/展開はできますが
展開後にワークフローが正しく動作しません。
原因は、ワークフローの情報(イベントレシーバー、ワークフロー関連付けなど)が
リストテンプレートに含まれいるため、展開後のリストで
「ワークフローがないのに ワークフローの情報はある」という状態になるためです。
この状態で さらにワークフローを付加すると 1ワークフローが動作したときに
複数のイベントレシーバーが動作してしまい、おかしなことになります。
この問題を回避するためには リストテンプレートを保存する前に、
リストに関連付けられたワークフローを削除します。
例えば 検証用のサイトと実運用のサイトがあった場合、以下の手順になります。
1) 検証用のサイト: リスト/ワークフローを作成
2) 検証用のサイト: 動作テスト
3) 検証用のサイト: ワークフローを削除
4) 検証用のサイト: リストテンプレートを保存
5) 実運用のサイト: リストテンプレートを登録
6) 実運用のサイト: リスト/ワークフローを作成
7) 実運用のサイト: 動作テスト
※ワークフローの種類(SharePoint標準/SharePoint Designer/Nintex Workflowなど)
により、ワークフローの移行方法は異なります。
ここでは「リストの移行」のお話しに限定しています。
上記の手順では、
せっかく検証用のサイトで動作テストまでしたのに、
検証用のサイトにはワークフローがない状態になります。
また、検証用のサイトと実運用のサイトとで
リスト/ワークフローの設定が異なります。
※検証用のサイトで再度、ワークフローを作成すれば 設定は合わせられますが。
SharePointリストテンプレートからワークフローを削除
SharePointフィールド名(内部名)でも説明しましたが、
SharePointリストテンプレート内の manifest.xml にリストの情報が入っています。
manifest.xml内のワークフロー情報を削除すれば...展開後にワークフローが 悪さ しなくなります。
全体の流れは 以下の通りです。
・リストテンプレートを保存
・リストテンプレートから manifest.xml を展開
・manifest.xml からワークフロー情報を削除
・manifest.xml から リストテンプレートを作成
・リストテンプレートを展開
※リストテンプレートの保存、展開は SharePoint標準機能なので 説明は省きます。
リストテンプレートから manifest.xml を展開
以下の手順で manifest.xmlを展開します。
手順 1) リストテンプレートの拡張子を stp から cabに変更
手順 2) エクスプローラ,EXPANDコマンドなどで cabファイルから、「manifest.xml」を展開
ここで リストテンプレート(cabファイル)内に manifest.xml 以外のファイル(例: 50000000.000)があれば それらのファイルも展開しておいてください。
manifest.xml からワークフロー情報を削除
次に、manifest.xmlからワークフロー情報を削除します。
手順 3) manifest.xmlを XMLエディタ、メモ帳などで開く
手順 4) ListTemplate/UserLists/List/MetaDataタグ配下のReceiversタグを削除
手順 5) ListTemplateタグ配下のWorkflowAssociationsタグを削除
手順 6) manifest.xmlを保存
manifest.xml から リストテンプレートを作成
最後に、編集したmanifest.xmlからリストテンプレート(stpファイル)を作成します。
手順 7) MAKECAB.EXE で manifest.xml からリストテンプレートを作成
MAKECABコマンドは Windows標準のCABファイルを作成するコマンドです。コマンドプロンプトで実行します。
「手順 2)」で リストテンプレートに manifest.xml だけの場合と、リストテンプレートにmanifest.xml以外にもファイルがある場合で CABファイルの作成方法(MAKECAB.EXEのパラメータ指定)が異なります。
[manifest.xml だけの場合]
手順 7A-1) 編集したmanifest.xmlと リストテンプレートファイル名を指定します。
手順 7A-2) カレントディレクトリに リストテンプレートができます。
[manifest.xml以外にもファイルがある場合]
手順 7B-1) 「手順 2)」で展開した manifest.xml以外のファイルと、編集したmanifest.xmlを フォルダ(例: D:¥Work)に 格納
手順 7B-2) フォルダ内に ファイル一覧のテキストファイル(例: filelist)を テキストエディタで作成
手順 7B-3) コマンドプロンプトを起動で MAKECAB.EXEを実行
手順 7B-3) カレントディレクトリ作成された 「disk1」フォルダ内の「1.cab」を リストテンプレート(例: DocLib.stp)にリネーム
以上で、ワークフロー情報を削除した リストテンプレートができました。
後は、このリストテンプレートを SharePoint サイトの設定で リストテンプレートギャラリーに登録し、リストを作成してください。
※通常のCABファイルであれば +Lhacaなどのフリーソフトで作成できますが、
SharePointのリストテンプレートの場合、+Lhacaなどのフリーソフトで作成したCABでは
(何故かはわかりませんが)リスト展開時にエラーとなります...。