Использование получателя событий для обновления поля «Заголовок» элемента - PullRequest
4 голосов
/ 10 августа 2009

Я написал приемник событий, который активируется в событии ItemAdded списка страниц. Код работает нормально, но моя проблема заключается в следующем - во время вызова моего Sub ItemAdded я хочу изменить значение поля, принадлежащего текущему элементу списка (в данном случае страницу aspx).

Идея состоит в том, чтобы я мог настроить поле «Заголовок» как другое значение, которое настраивает мой приемник событий, и к тому времени, когда пользователь увидит страницу в режиме редактирования, новый заголовок будет сохранен для страницы. Вот моя текущая попытка:

Public Overrides Sub ItemAdded(ByVal properties As Microsoft.SharePoint.SPItemEventProperties)

 Dim newItem As SPListItem = properties.ListItem
 Dim currentSiteTitle As String = properties.OpenWeb().Title

 UpdateItemTitle(newItem, currentSiteTitle)
 newItem.Update()
 'newItem.SystemUpdate()

End Sub

Как видите, я пробовал и Update (), и SystemUpdate (), но в каждом случае, когда пользователь пытался проверить страницу, он получает сообщение о том, что страница была изменена извне. Кроме того, при просмотре страницы значение поля заголовка не изменилось.

Возможно ли то, что я пытаюсь сделать, или есть лучший способ?

Приветствия. Иак.

Ответы [ 4 ]

3 голосов
/ 09 сентября 2009

изменение свойств. Свойства будут разрешать конфликт сохранения. обратите внимание, что afterproperties является хеш-таблицей, но вы можете получить к нему доступ так:

properties.AfterProperties ["Title"] = "Мой новый заголовок";

2 голосов
/ 10 августа 2009

ItemAdd ed Имя говорит само за себя. Это асинхронное событие, которое происходит после того, как элементы были добавлены, как и проблема с вашим заданием. Я предлагаю вам перехватить событие ItemAdding, если у вас нет причин не делать этого.

См. Ссылку для получения подробной информации об асинхронном и синхронном

0 голосов
/ 12 ноября 2009

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

К сожалению, это, похоже, не запускалось автоматически, когда в обсуждение был добавлен новый ответ (возможно, это происходит в других сценариях, связанных со списком), но если я поместил код в метод ItemAdded (ItemAdding также не вызывался) обнаружил, что он запускается, но я не могу изменить элемент оттуда, поэтому у меня получилось что-то вроде этого в itemAdded:

  public override void ItemAdded(SPItemEventProperties properties)
    {
        SPListItem item = properties.ListItem;
        item.Update();
    }

Результатом этого является то, что поле обновляется, но не раньше, чем оно будет показано , так что когда пользователь направляется на страницу вывода, список будет выглядеть так же, как и раньше, но если вы измените представление или посмотрите на детали ответа, вы обнаружите, что он действительно изменился, как и предполагалось.

Это достаточно хорошо для меня, так как я ожидаю, что большинство моих ответов придет по электронной почте.

0 голосов
/ 10 августа 2009

Лучший способ сделать это - использовать событие ItemAdd ing . Это позволит вам изменить значение заголовка до его сохранения в базе данных. Попытка изменить их в ItemAdded возможна, но может вызвать головные боли, которые вы испытываете.

Вы пробовали ItemAdding?

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