SharePoint: применять исходный ContentType к месту назначения при копировании SPListItem - PullRequest
1 голос
/ 17 января 2010

Привет,

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

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

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

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

TIA за любую помощь!

Steve

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

Ответы [ 2 ]

0 голосов
/ 19 января 2010

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

Что я сделал, чтобы получить желаемое поведение:

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

  2. Получите URL-адрес исходного элемента (см. Предыдущий ответ) и разрешите его для исходного SPList и SPListItem

  3. Проверьте, находится ли мой ContentType в источнике, но не в месте назначения.

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

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

0 голосов
/ 18 января 2010

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

properties.AfterProperties["_CopySource"];

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...