2013-10-02 5 views
2

Я хочу загрузить Mulitple Documents (Files) в папку Sharepoint FOLDER. Во время события «ItemAdded» я хочу «скопировать» FIELDS родительской папки (SPListItem) в текущий (загруженный) элемент.C# sharepoint Как установить значение FIELD для SPListItem с FIELD Value из другого SPListItem?

Когда я проверяю FIELDS текущего элемента, все они уже есть .

Но КАК Я могу скопировать каждое ПОЛЕВОЕ ЗНАЧЕНИЕ из пункта папки в загруженный товар ?

Я не знаю, как зачитать значения полей из «ItemSource»

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(); 

Этот код выше не работает, он всегда даёт сообщение «поле уже существует» Как я могу зачитывает ЗНАЧЕНИЕ ПОЛЯ? Я расстроен, нет способа узнать значение поля? Пожалуйста, помогите ...

Штеффен

ответ

0

Во-первых, вам нужно принять значение из этого поля. Каждый тип поля sharepoint имеет собственное представление класса в C#. Если у вас есть строковое значение, это легко, но когда вы имеете отношение вы должны использовать SPFieldLookup и т.д.

Если у вас есть строки, вы можете написать что-то вроде этого:

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

, а затем использовать

folderItem[internalFieldName] = stringFieldValue; 

internalFieldName -> это внутреннее имя поля, вы можете проверить это, перейдите к списку и сортировки по этому полю, и вы будете иметь его имя в строке запроса (URL)

How to get lookup value from SpListItem

+0

Спасибо, я попробую это –

+0

Можете ли вы написать код больше «IF THEN ELSE» Синтаксис? Я не понимаю "?" и ":" синтаксис .... :) –

+0

string stringFieldValue = string.Empty; если (sourceItem [internalFieldName]! = NULL) { stringFieldValue = CurrentItem [internalFieldName] .ToString()» } еще { stringFieldValue = string.Empty; } – zchpit

3

это полезно бывает, и я всегда стараюсь его источник из Get And Set Value By Field Internal Name

void UpdateSPListItem(SPListItem item, Model pageItem) 
    { 
     SetValueInternalName(item, "ArticleByLine", pageItem.ArticleByLine); 

     SetValueInternalName(item, "Comments", pageItem.Comments); 

    } 
    void SetValueInternalName(SPListItem item, string fieldInternalName, string value) 
    { 
     SPField field = item.Fields.GetFieldByInternalName(fieldInternalName); 
     item[field.Id] = value; 
    }