Как изменить значение поля во время события ItemUpdating - PullRequest
3 голосов
/ 18 июня 2010

Я пытаюсь установить значение поля ListItem в приемнике событий, но оно не работает

Все, что я делаю во время мероприятия, это

properties.AfterProperties[<field internal name>] = 1;

Нет ошибок, но поле, которое я устанавливаю, не изменяется. Я также пытался

properties.ListItem[<field internal name>] = 1;
properties.ListItem.Update();

Также пробовал SystemUpdate ();

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

Спасибо

Ответы [ 6 ]

11 голосов
/ 18 июня 2010

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

Предполагая, что выв методе ItemUpdating, работающем в списке, все, что вам нужно:

base.ItemUpdating(properties);
properties.AfterProperties["InternalName"] = 1;

(не требуется никаких обновлений, поскольку вы изменяете значение до его сохранения)

Я быубедитесь, что ваш получатель событий подключен к списку.Можете ли вы отладить ваш приемник событий при изменении элемента в списке?

2 голосов
/ 18 июня 2010

Кстати, не забудьте вызвать DisableEventFiring, потому что угадайте, что происходит, когда вы вызываете метод Update?Событие ItemUpdated вызывается снова, и вы переходите в бесконечный цикл ...

1 голос
/ 18 июня 2010

Вы можете добавить значение в событие добавления элемента, используя AfterProperties.ListItem [] =;

0 голосов
/ 13 февраля 2015

Приятно обновить Заголовок в событиях ItemAdding и ItemUpdating, поскольку исключаются дополнительные Обновления (без DisableEventFiring), а в «Редактировании представления свойств» уже будет заполнен Заголовок

Некоторые примеры кода для обновления заголовкана основе имени файла.Работает для библиотеки документов и библиотеки изображений.Для работы с Заголовком в списках необходимо использовать ["Заголовок"].

public override void ItemAdding(SPItemEventProperties properties)
{
    base.ItemAdding(properties);
    string currTitle = properties.AfterProperties["vti_title"] as string;
    string url = properties.AfterUrl;
    var name = url.Substring(url.LastIndexOf('/') + 1);
    //NOTE! Name is only copied to Title if title is not set. Will not handle name changes!
    if (string.IsNullOrEmpty(currTitle))
    {
        properties.AfterProperties["vti_title"] = name;
    }
}
0 голосов
/ 08 декабря 2012

Вы также можете обновить значения поля в ItemUpdating, это работает для меня.

properties.AfterProperties ["FieldName"] = "computedvalue";
base.EventFiringEnabled = false;properties.ListItem.SystemUpdate (false);
base.EventFiringEnabled = true;

0 голосов
/ 18 июня 2010

ItemUpdating используется для проверки. Если вы хотите установить значения полей, сделайте это в событии ItemUpdated.

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