これがシナリオです。当社の SharePoint カスタム ジョブは、(特定の基準に基づいて) リスト アイテムをアーカイブし、アイテムを別のサイト コレクションにコピー/移動します。このシナリオでは、リスト アイテムにいくつかのルックアップ フィールドがある場合、別のサイト コレクションにコピー/mpve するときにこれらを保持するにはどうすればよいですか?
ありがとう、ドゥルガー
これがシナリオです。当社の SharePoint カスタム ジョブは、(特定の基準に基づいて) リスト アイテムをアーカイブし、アイテムを別のサイト コレクションにコピー/移動します。このシナリオでは、リスト アイテムにいくつかのルックアップ フィールドがある場合、別のサイト コレクションにコピー/mpve するときにこれらを保持するにはどうすればよいですか?
ありがとう、ドゥルガー
ルックアップフィールドの内部名は同じままである必要があり、ルックアップフィールドが参照しているリストが同じ値を使用している限り(IDは異なる場合があり、値を一致させて新しいSPFIeldLookupValueを作成するだけです)、問題はありません。フィールドの内部名に基づいてメタデータをコピーすると、すべてがうまくいくはずです。timerjobsを使用してニュースアイテムやドキュメントをアーカイブする場合も同じです。
サイトコール A からサイトコール B にフィールドを「コピー」することはできません。フィールドを再作成する必要があります。これを行う通常の方法は、ルックアップ フィールドを作成する機能を実際に使用することですが、ここではそうではないと思います (最初に行うべきでした。将来的には、それがフィールドの作成方法であり、その方法を確認することをお勧めします)。メソッドは再利用可能です)。
あなたがする必要があるのは、b sitecoll の SPSite オブジェクトで、元の Field を使用して新しいフィールドを作成するfield.SchemaXml
ことです。このようにして、sitecoll b で最初からフィールドを再作成するためのすべての関連情報が得られます。AddFieldAsXml
InternalName プロパティは読み取り専用であるため、新しいフィールドの internalname を設定する場合は、SPSite.Fields コレクションのを使用する必要があります。
ここで方法を読む
フィールドが存在するかどうかを確認します。
using(SPSite targetSite = new SPSite("urloftargetsite"))
{
using(SPWeb targetWeb = sourceSite.OpenWeb())
{
if(!targetWeb.Fields.ContainsField(originalField.InternalName))
{
targetWeb.Fields.AddFieldAsXml("caml string here");
}
}
}