3

これがシナリオです。当社の SharePoint カスタム ジョブは、(特定の基準に基づいて) リスト アイテムをアーカイブし、アイテムを別のサイト コレクションにコピー/移動します。このシナリオでは、リスト アイテムにいくつかのルックアップ フィールドがある場合、別のサイト コレクションにコピー/mpve するときにこれらを保持するにはどうすればよいですか?

ありがとう、ドゥルガー

4

2 に答える 2

0

ルックアップフィールドの内部名は同じままである必要があり、ルックアップフィールドが参照しているリストが同じ値を使用している限り(IDは異なる場合があり、値を一致させて新しいSPFIeldLookupValueを作成するだけです)、問題はありません。フィールドの内部名に基づいてメタデータをコピーすると、すべてがうまくいくはずです。timerjobsを使用してニュースアイテムやドキュメントをアーカイブする場合も同じです。

于 2009-10-27T20:21:58.137 に答える
0

サイトコール A からサイトコール B にフィールドを「コピー」することはできません。フィールドを再作成する必要があります。これを行う通常の方法は、ルックアップ フィールドを作成する機能を実際に使用することですが、ここではそうではないと思います (最初に行うべきでした。将来的には、それがフィールドの作成方法であり、その方法を確認することをお勧めします)。メソッドは再利用可能です)。

あなたがする必要があるのは、b sitecoll の SPSite オブジェクトで、元の Field を使用して新しいフィールドを作成するfield.SchemaXmlことです。このようにして、sitecoll b で最初からフィールドを再作成するためのすべての関連情報が得られます。AddFieldAsXmlInternalName プロパティは読み取り専用であるため、新しいフィールドの 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");
     }
   }
 }
于 2009-10-28T16:48:39.997 に答える