2010-01-17 3 views
1

Привет,SharePoint: Нанести источник ContentType к месту назначения при копировании SPListItem

я написал свое собственное определение ContentType, который может быть применен к любой библиотеке документов. Я хотел бы сохранить данные, связанные с элементом, через свой ContentType, когда этот элемент будет скопирован пользователем в библиотеку документов, к которой еще не добавлено мое определение ContentType.

Очевидным, что нужно сделать, это поймать событие ItemAdding или ItemUpdating для нового элемента, посмотреть исходный элемент, чтобы узнать, связан ли с ним ContentType, а затем добавить мой ContentType в пункт назначения Библиотека документов до фактической копии.

Проблема заключается в том, что я не могу найти никакой информации в этих событиях, которая говорит мне, что такое источник. Единственные такие данные находятся в последнем событии ItemUpdated, но к тому времени уже слишком поздно ... элемент уже скопирован и данные, связанные с моим ContentType, отбрасываются.

У кого-нибудь есть идеи относительно того, как я могу получить поведение, которое я хочу?

TIA за помощь!

Стив

PS: одна вещь, которую я предполагаю, что я могу сделать, это получить исходный адрес в случае ItemUpdated, а затем написать код для добавления ContentType, а также вручную переместить данные, связанные с этим типом в источнике к месту назначения. Это кажется очень неэлегантным по сравнению с решением, которое я предлагаю выше.

ответ

0

Просто наблюдение, в случае, если кто-то заинтересован в окончательном решении моей проблемы ...

То, что я сделал, чтобы получить поведение я хотел:

  1. Переместил мой код в обработчик событий ItemUpdated, чтобы я работал после того, как копия полностью произошла.

  2. Получить URL элемента источника (см предварительного ответа) и решить, что к исходному SPList и SPListItem

  3. Посмотрите, чтобы увидеть, если мой ТипСодержимого находится в источнике, но не пункт назначения.

  4. Если ContentType отсутствует в месте назначения, установите ContentType в пункт назначения И вручную скопируйте свойства в этом ContentType (путем запроса самого ContentType) из источника в пункт назначения.

Этот процесс происходит только для первого элемента, который копируется в целевую библиотеку lib. После этого ContentType уже существует в dest lib, и сам SP копирует значения полей для этого типа из источника в пункт назначения.

0

Я понял! Ответ заключается в том, что исходный URL-адрес находится в поле AfterProperties в свойствах события ItemUpdating. Вы в этом так:

properties.AfterProperties["_CopySource"]; 

Я смотрел на это поле, но был брошен на то, что является членом в этом объекте, который показывает «Count = 0» в отладчике. Я неправильно понял, что это означает, что там ничего нет, но оказывается, что этот счет не имеет никакого отношения к тому, сколько объектов там. По электронной почте Ой.

К сожалению, все, что я пытаюсь сделать, не работает. Даже если я добавлю ContentType в целевую библиотеку в событии ItemUpdating, поля, связанные с этим типом, не будут скопированы. Ну да ладно ...

Смежные вопросы