Вопрос

Я работаю над решением, где у меня есть список с столбцом с именем logidnumber. Для каждой новой записи в списке я хотел бы увеличить LogidNumber на один. Я мог бы использовать идентификатор, сгенерированный SharePoint, но для этого решения он должен быть независимым. Я думал об использовании приемника событий, но проблема, с которой у меня возникают проблемы, заключается в получении значения от предыдущей записи.

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

using (SPSite siteCol = new SPSite("http://server/sites/Contoso"))
{
    using (SPWeb web = siteCol.RootWeb)
    {
        SPList list = web.GetList("/sites/Contoso/Lists/Books");
        SPListItemCollection items = list.GetItems("Title", "LogIDNumber",);
    }
}

Есть ли способ получить последнее значение?

Это было полезно?

Решение

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

Запрос может быть чем -то вроде этого:

"<OrderBy><FieldRef Name='ColumnName' Ascending='False' /></OrderBy><RowLimit>1</RowLimit>"

Для экзамена см. Здесь:https://stackoverflow.com/questions/516073/max-query-using-caml

Другие советы

Я не думаю, что ваш подход или идея выполнения CAML -запроса будет работать (... по крайней мере, не последовательно), в первую очередь из -за вашей неспособности изначально управлять параллелизмом. Это было бы достаточно сложно, чтобы справиться с этим в одной среде WFE, но если у вас есть несколько WFE, вы, наверняка, имеете несколько экземпляров приемника события или выполнения запроса, возвращая одно и то же значение «последнего идентификатора», а затем все Установка их свойства LogIdNumber на то же самое последнее значение+1.

Я полагаю, вы могли бы создать список идентификации с одним столбцом (LogidNumber), сделать его типом числа и убедиться Применять уникальные значения = да. Анкет Затем вы можете добавить элемент в этот список в приемнике вашего мероприятия, и если он задыхается, то сначала вы знаете, что другой экземпляр EV попал, и вам нужно запрашивать последний идентификатор, пока вставка в список идентификации не задушится. Если он не задыхается, то ваш экземпляр EV владеет идентификатором и может безопасно обновить свойство LogidNumber для этого элемента списка.

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

Я предлагаю использовать справочный список / столбец поиска. В вашем событии Itemadding откройте список под названием Docid's, который имеет 2 столбца, ListUrl и CurrentID. Получите правильный элемент на основе URL -адреса HE (текущий список URL == Item в Doc Id Lib ListUrl), получите значение CurrentID и увеличите его. Затем используйте новое значение в качестве вашего нового идентификатора DOC.

Хотя есть много недостатков, которые все связаны с 1 вещью: SharePoint не «транзакция». Так что, если какие -либо 2 пользователя выполняют это действие одновременно, это может произойти, они оба получат одинаковый идентификатор. Чтобы Cirumvent, вам также понадобится обработчик событий Itemupdating в списке идентификатора DOC, проверяя, является ли новое значение! = Текущее значение (увеличение от разных пользователей). Это, конечно, также нет гарантии успеха ...

Другим вариантом в SP2010 является функция DOC ID, которая гарантирует уникальные идентификаторы по всему контенту и обеспечивает легкий доступ с помощью URL -адреса поиска / перенаправления.

Я предполагаю, что вам понадобится какой -то алгоритм для расчета вашего пользовательского идентификатора, так почему бы просто не создать свой собственный столбец, а затем использовать целый идентификатор ITER или GUID уникальный в качестве «семя» для вашего алгоритма ID, а затем заполнить этот столбец в приемник мероприятия?

Вы можете использовать службу идентификатора документа для этого. Этот уникальный идентификатор (я считаю) не сгенерирован в реальном времени, а на базе TimerJob. И это работает только для типов контента, которые получены из типа содержимого документа. Для этого не требуется программирование;)

http://msdn.microsoft.com/en-us/library/ee559302.aspxhttp://blogs.technet.com/b/blairb/archive/2009/10/20/new-document-id-feature-in-sharepoint-2010.aspxhttp://www.sharepointanalythq.com/2010/04/document-id-feature/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top