2

複数のドキュメント (ファイル) を SharePoint フォルダーにアップロードしたいと考えています。「ItemAdded」イベント中に、親フォルダー (SPListItem) の FIELDS を現在の (アップロードされた) アイテムに「コピー」したいと考えています。

現在のアイテムの FIELDS を確認すると、それらはすべて既に存在しています。

しかし、フォルダ アイテムからアップロードされたアイテムにすべての FIELD VALUE をコピーするにはどうすればよいでしょうか?

「ItemSource」から FIELDS の値を読み取る方法がわかりません

SPList currentList = properties.List;
SPDocumentLibrary oDocumentLibrary = (SPDocumentLibrary)currentList;
SPListItemCollection collListItems = oDocumentLibrary.Items;
int AnzahlItems = collListItems.Count;
SPFieldCollection currentListFieldItems = currentList.Fields;
int AnzahlFields = currentListFieldItems.Count;
// ---------------------------------
// Get the current Item in the List
// ---------------------------------
SPListItem currentItem = currentList.Items[AnzahlItems - 1];
SPFieldCollection currentItemFields = currentItem.Fields;
int currentItemFieldsAnzahl = currentItemFields.Count;

// -----------------------------------------------------------
// For every FIELD from Source Item ADD FIELD to Target Item
// -----------------------------------------------------------
               for (int i = 0; i < AnzahlFields; i++)
               {

                   SPField NeuesFeld = currentListFieldItems[i];
                   String FeldInternalName = currentListFieldItems[i].InternalName;
                   String FeldName = currentListFieldItems[i].Title;
                   NeuesFeld.Type = currentListFieldItems[i].Type;
                   NeuesFeld.Required = currentListFieldItems[i].Required;
                   NeuesFeld.ShowInEditForm = true;
                   NeuesFeld.ShowInDisplayForm = true;
                   NeuesFeld.ShowInListSettings = true;
                   NeuesFeld.ShowInNewForm = true;
                   NeuesFeld.ShowInViewForms = true;

                   // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
                   // Folder Item 1 --> Felder anhängen ::::::::::::::::::::::::::::
                   // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

                   if (currentItem.Fields.ContainsField(FeldInternalName))
                   {
                    // The FIELD is already existing at the Target Item

                   }
                   else
                   {
                     // The FIELD is not existing at Target Item, will be added
                       currentItem.Fields.Add(NeuesFeld);
                   }

               } // end for

               // ----------------------------
               // Save Changes at Item
               // ----------------------------
               currentItem.Update();

上記のコードは機能せず、常に「FIELD は既に存在しています」というメッセージが表示されます。FIELD の値を読み取るにはどうすればよいですか?? FIELD の値を読み取る方法がないことに不満を感じています?? 助けてください...

シュテフェン

4

2 に答える 2

0

まず、そのフィールドから値を取得する必要があります。各 sharepoint フィールド タイプには、C# での独自のクラス表現があります。文字列の値なら簡単ですが、リレーションの場合はSPFieldLookupなどを使う必要があります。

文字列がある場合は、次のように記述できます。

string stringFieldValue = sourceItem[internalFieldName] != null ? currentItem[internalFieldName].ToString() : string.Empty;

そして使用する

folderItem[internalFieldName] = stringFieldValue;

internalFieldName -> これはフィールドの内部名です。リストに移動してこのフィールドで並べ替えることで確認でき、クエリ文字列 (url) に名前が含まれます。

SpListItem からルックアップ値を取得する方法

于 2013-10-02T12:50:21.880 に答える