Код ошибки -2130575305 (0x81020037) в SPItemEventReceiver с ListItem.Update () - PullRequest
2 голосов
/ 17 августа 2011

Я новичок в Sharepoint и в настоящее время поддерживаю устоявшееся решение с ошибкой. К сожалению, я не могу решить проблему. Я получаю SPException с ErrorCode 2130575305 в событии ItemAdded, когда пытаюсь использовать метод properties.ListItem.Update ().

Похоже, что существует проблема при обновлении элемента вскоре после его обновления?

Я перепробовал все, что нашел в Интернете, от использования метода ItemAdding над allowunsafeupdates до отключения событий, но ничего не получалось, теперь у меня кончился пар

Небольшой фрагмент программного кода:

SPListitem itm = list.GetItems(query).Add();
// all single line of text
itm["property"] = anotheritem["property" + "something" + itm["property"]; 
itm.Update();

и потом в переопределенном ItemAdded:

SPListItem itm = properties.ListItem;
itm["anotherproperty"] = "something different";
itm.Update(); // <- this throws the error

Исходное сообщение об ошибке на немецком языке, поэтому оно мало чем вам поможет, но в нем говорится что-то вроде «SPException, пожалуйста, вернитесь в браузер и попробуйте снова», что в любом случае не поможет. Кроме того, я не могу использовать try catch в коде, так как это похоже на веб-исключение?


Извините, но я не смог попробовать ваш ответ вчера. он не работает, к сожалению, в свойствах нет списка, только список, и даже если я знаю, какой список вызывает событие itemadded, и перейдите к нему через lists["listname"].getitembyid(properties.listitem.id), он не будет работать. разве «захват свежей копии» точно не то, что я сделал, написав splistitem itm = properties.listitem; уже? Есть ли способ «освободить» элемент в начале itemAdded и использовать его позже?

public override void ItemAdded(SPItemEventProperties properties)
{
SPListItem itm = properties.ListItem;
itm["somefield"] = "sometext";
itm.Update(); // <- error, itm.SystemUpdate() throws the same error btw.
base.ItemAdded(properties);
}

Я также прочитал справку по msdn, она только говорит мне об ошибке, но не о том, как ее устранить, поэтому она не сильно помогла.

Об ответе Брайана: если itemadded уже является синхронным вызовом, проблем быть не должно?

1 Ответ

1 голос
/ 17 августа 2011

Когда вы получаете коды ошибок, лучшим ресурсом является MSDN или Google.- http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.listitem.update.aspx

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

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

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