2009年2月24日 (火)

手軽にリストデータのコピーや一括削除などを行う方法について

SharePointを使用していて、リスト間のデータコピーや一括削除をどうにか手軽にやる方法はないかと悩まれる方も多いと思います。そこで今回は、SharePointの標準機能使ってもっとも手軽に実現する、知っていれば便利な方法として、次のURLにアクセスします。

  • http://<サイトのURL>/_layouts/sitemanager.aspx

Sitemanager1

[図.実行結果]

このページは[サイトのコンテンツと構造]というページで、本来はサイトコレクションの管理者などが発行サイトにアクセスする際に[サイトの操作]メニューに表示されるものです。ですが、このページはサイトへのアクセス権限があれば、どのサイトからでも上記のURLを実行すれば直接アクセスできます(きっと、このことをご存じない方も多いのではないかと思います)。

この管理ページは便利で、目的のリストやライブラリをクリックすると、通常のサイトとは異なる管理用のビューが表示されます。ここから、リスト間でアイテムを一括コピーしたり移動したり、一括削除したりできます。なお、コピーや移動を行う際は、アイテムの作成日時や更新日時、更新者などの情報はそのままとなり、書きかえられることはありません(ただし、リストが異なるのでIDは新たに設定されます)。

Sitemanager2

[図.リストアイテムの操作]

ただし、リスト間でコピーや移動を行う際には同じリストテンプレートから作成したリスト間で操作するようにしてください。私が検証した限りでは、一方に列Aがあり、他方に列Bがあるリストでアイテムのコピーを行ったところ、コピー先のリストに新しい列として列Aが作成され、無事にアイテムがコピーされていました。ところが、この列が集計列だった場合などは、エラーになりました。これはおそらく、集計に必要な他の列がタイミングによっては存在しないことになるからではないかと思われます。とはいえ、集計列を使っていたとしても、そのリストをいったんテンプレート化して、新規に作成したリストにコピーするとうまくコピーされました。

従って、結論としては同一リストテンプレートから作成したリスト間でのコピーまたは移動を行うのが良いと思います。また、この管理画面ではビューの編集ができないので注意してください。

*** 2013/2/6 追記 ***

この機能は SharePoint 2010 でも使用できます。ちなみに、この機能によるアイテムコピーや移動は推奨は 100 アイテムずつであると、現在はTechNet の資料に明記されていますので、この範囲で実施することをおすすめします。

***ここまで***

参考

サイトの管理者の場合は、発行サイトではないサイトでは「サイトの設定」ページからも[サイトのコンテンツと構造]へアクセスできます。

Sitemanager3

[図.サイトの設定ページ]

トラックバック

このページのトラックバックURL: http://bb.lekumo.jp/t/trackback/718613/34255719

手軽にリストデータのコピーや一括削除などを行う方法についてを参照しているブログ:

コメント

このページよく使っています。
が、たまにドキュメントライブラリなどを開くとき、コールバックエラーが表示される場合があります。

海外のサイトでは、ブログでこのエラーがあげられていたりしますが、完全に解決はできていないようです。
原因などご存じですか?
http://www.sharepointblogs.com/smuller/default.aspx

はじめまして。以前教育に参加させて頂きましたものです。
その節はお世話になりました。

このページを使用したいと思いますが、SharePoint Services(WSS)ではできないものでしょうか?
ご教示よろしくお願い致します。

やりたいことはドキュメントライブラリ(列を追加)のドキュメントを追加した列に保存された情報を失わずに別サイトにコピーすることです。
ドキュメントの【送信-その他の場所】 を使用すると追加した列に保存された情報をそのままコピーできましたが、1ファイルずつの操作になってしまい、困っています。本機能を使用できれば実現できるのではと期待しています。

>Nobuyasu Kawaneさん
コメントが随分遅くなりすみません。コールバックエラーのことについて、情報提供をありがとうございます。残念ながら、私もその問題については、理由がわかっていません。ただ、ご連絡いただいた下記サイトを見ると、マイクロソフトのサポートからはマスタページに原因がありそうだという見解が最新の情報のようですね。

>manabu motoshimaさん
こちらもご連絡が遅くなりましてすみません。このページは、残念ながらWSSでは利用できません。もう少し詳細を言えば、たとえSharePoint Server 2007であっても、「発行インフラストラクチャ」という機能が、サイトコレクション内でアクティブ化されていないと使えません。

いつも情報をありがとうございます。
一昨日SharePoint 2010の或るリストをバックアップする意味で別サイトのリスト(同じテンプレートで作成)にコピーしました。コピーは終了しましたがエラー画面が表示され、元のリストの表示とコンテンツ管理機能が使えなくなりました。コールバックエラーも表示されます。
サーバーを再起動しても直らないので、とりあえず別サイトにコピーしたリストを参照することで何とかしのいでおります。元のリストの個々のアイテムはアクセスできます。
この問題は上で議論されていた問題点と同じような気がします。元のリストには長い時間をかけて作成した623個のアイテムがあるので、一昨日は一瞬地獄を見た思いでした。元のリストがあるサイトの「サイトのコンテンツと構造」も使えないので、何とか復旧させる方法はないでしょうか?

Tachytt さん、トラブル情報をありがとうございます。SharePoint 2007 の頃も「サイトのコンテンツと構造」機能が大量にデータコピーなどすると時々不安定になるというのは、何度か耳にしておりましたが、2010でも同様なのかもしれません。。。とはいえ、実際の環境を見ておりませんし、手元の環境では再現性も確認していないので正確なことは言えませんが。。。

時間があるときに試してみて、何かわかればブログで公開しますね。

去年の夏に研修でお世話になったものです。

今、Sharepoint2010であるリスト内に存在するフォルダを移動(もしくはフォルダ名変更)したいですが、「サイトのコンテンツと構造」ページでは、
[移動]メニューがグレーアウトされ実行不可のようです。
但し、通常の文書アイテムは移動できます。
PowerShell(SPFolderのMoveTo)でも試しましたが、
サイト上に表示反映されません。

Sharepointでフォルダの移動(もしくはフォルダ名変更)って
製品的に無理かどうかご存知ですか?

>Hiroaki Asakuno さん
フォルダーはあたかもファイルサーバーなどのフォルダーと同じようにサイト上では見えていますが、実際にはデータベース上に同等のフォルダーがあるわけではなく、パスが存在しているだけという方が正しいと思います。フォルダーはフィルターの役割も果たしており、SharePoint 2010 では一度に 5000アイテム以上取得しないように運用する必要がありますので、この場合にフォルダーも利用します。

さて、本題ですが、この機能は一度に100アイテムずつの移動が推奨されているようです。TechNetの記事に記載があるのを見つけました。フォルダー単位での移動となると、サブフォルダ―を含めて再帰的にデータを取得して別の場所に移動させなくてはいけないので、そのあたりが制約になっているのかもしれません。

ちなみに、フォルダーごと移動する場合は、結局は力技ですが、エクスプローラー(ビュー)を使って移動させるか、 SharePoint API を呼び出して、フォルダー単位で内部にあるファイルを選択し適宜必要な場所に移動させるのが一般だと思います。

またフォルダー名の変更は、フォルダーのプロパティ編集で実施するしかありませんね。
ということで、製品的に無理というより、標準機能だけでは制約が多いので、それなりのツールを作るなり、3rd パーティ製のツールを使うのがよいというのが私の結論です。

早速の回答をありがとうございます。

こちらの件ですが、色々試した結果、PowerShellをフォルダ名の変更ができたようです。実装のイメージは大雑把には以下のような形です。

①SPWebのGetFolderメソッドに(変更前フォルダのサーバ相対URL)を渡してSPFolderオブジェクトを取得
②①のSPFolderオブジェクトをMoveToメソッドに(変更後フォルダのサーバ相対URL)を渡して実行
③SPFolder::Update()をCallして実際のサイト反映

確認したところ、変更後のフォルダに付与されている権限も、変更前フォルダ時の権限がそのまま保持されていましたので問題無さそうに見えます。

なお、「サイトのコンテンツと構造」も含めてSharepointの標準機能でフォルダ名変更する方法は今のところ残念ながら無いようです。下記URLにも載っていますが、ここら辺が使い勝手的に欠点なのかもしれません。

http://sharepointmaniacs.com/archives/41

>Hiroaki Asakuno
補足をありがとうございます。中村さんのところの記事も参考にされたのですね。

確かにWindows PowerShell のSharePoint コマンドレットでは SharePoint API 呼び出しをしているので、ご指摘通りの操作で変更できますね。

SharePoint はアーキテクチャー上、データ構造をそこまで柔軟に変更できるシステムではないですね。なので、運用も含めた設計をある程度しっかり行っておかないといけないわけです。そこは、一元管理とか統制というメリットとトレードオフなので、私は割り切って考えていますけどね。