← Все статьи

Автоинкрементные столбцы в Sharepoint Foundation 2010.

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

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

Обзор задачи

Можно создать небольшую схему, работающую через рабочие процессы, для этого понадобятся:

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

Сразу же усложним себе задачу, дабы было интересно: требуется, чтобы к каждому элементу присваивался уникальный номер, присваиваемый по шаблону PPPYYTTT-XXXX (где PPP - префикс организации, которой принадлежит документ или элемент списка, YY - две последние цифры года, TTT - от 2х до 3х символов, условный тип контента (приказ, протокол и т.п.), XXXX - порядковый номер документа, обязательно четырехзначный, дополняемый нулями), например РЖД13ИСХ-0045. Таким образом можно раздавать уникальные номера документам на крупном предприятии с несколькими юр. лицами. Нумероваться будут элементы списков, содержащих единственный тип контента, поэтому в одном списке тип контента в номере будет всегда один. Можно реализовать и систему по-хитрее, когда в одном списке хранятся элементы нескольких типов, например,  корреспонденция, где регистрируют исходящую(ИСХ) и входящую(ВХ) корреспонденцию и справки(СПР). Для этого в РП нужно будет добавить небольшое условие, но об этом позже.

Системный список

Системный список может быть один на несколько списков или библиотек. Для этого создадим настраиваемый список. Столбцы списка-счетчика Столбцы списка-счетчика Код Предприятия - это переименованный столбец "Название",  Код Контента - поле выбора с типами контента, это те, что вставляются в середину номера. Последний номер - простое число, изначально равное 0, и Новый номер- Вычисляемый столбец с простой формулой Последний номер + 1. Код Строки - конкатенация строк Код Предприятия и Код Контента. Вычисленный номер - сформированный номер по шаблону, упомянутому ранее, формула столбца следующая:

=[Код Предприятия]&(ГОД(Создан)-2000)&[Код Контента]&ЕСЛИ([Новый номер]<10;"000";ЕСЛИ([Новый номер]<100;"00";ЕСЛИ([Новый номер]<1000;"0";)))&[Новый номер]

Пока что оставляем список-счетчик без внимания, переходим к созданию РП. Открываем Sharepoint Designer, ищем и открываем список, в котором нужно добавить столбец с нумерацией элементов. Создаем рабочий процесс: Вводим имя РП Вводим имя РП В параметрах РП ставим галку Автоматически запускать рабочий процесс при создании элемента и снимаем с Разрешить запуск этого рабочего процесса вручную. Создание рабочего процесса Создание рабочего процесса автонумерации Переходим в режим редактирования рабочего процесса - жмем на кнопку Открыть рабочий процесс. Начинаем с объявления переменных:

  • новоеЧисло — целочисленное значение, которое мы получим из столбца списка Новый номер. Т.к. системный список у нас один, а РП на каждый список свой, то не стоит их усложнять вычислениями.
  • КодПредприятия — в эту строку запишем данные из одноименного столбца списка. Создавать отдельную переменную не обязательно, но так эстетичнее.
  • ИдентификаторСчетчика— результат конкатенации кода предприятия и типа контента. Во имя упрощения РП избегаем условных операторов.
  • ГотовыйНомер — Считываем данные подстановки из списка-счетчика.

Переменные РП Переменные Рабочего Процесса Шаги РП Вот так выглядит готовый рабочий процесс Мы же начинаем с пустого РП: Девственно чистый Рабочий Процесс Новый Рабочий Процесс

  1. Идем в Действие и выбираем в группе Основные действия Задать переменную рабочего процесса. Нажимаем на переменная и в выпадающем списке выбираем нужную переменную.Затем, нажимаем на значение появится поле и кнопочка функции (крайняя справа) и в появившемся окне поле Источник данных, по-умолчанию принимает значение Текущий элемент, выбираем нужное поле, в нашем случае это Код Предприятия. Список доступных действий Список доступных действий Действие Новое действие Окно выбора поля Определение подстановки в рабочем процессе Первое действие Первое действие готово
  2. Второе действие создаем аналогично первому, за одним исключением - нажимаем не кнопку функции, а кнопку с многоточием — вызовем Построитель строк. Вызвать диалог вставки переменных или значений из столбцов можно, нажав на кнопку Добавить или изменить подстановку. Откроется уже знакомое окно Определение подстановки в рабочем процессе. Выберем источником данных Параметры и переменные рабочего процесса. А в Поле из источника укажем имя переменной КодПредприятияи нажмем ОК. Допишем тип контента (в нашем случае у списка код "ПЛ") — конкатенация строк в построителе осуществляется без каких-либо операндов. Так мы сформировали идентификатор, который точно укажет на строку в списке-счетчике — это нам пригодится на следующем шаге. Потроитель строк Окно построителя строк
  3. Повторяем действия первого шага, но уже для переменной новоеЧисло. В значении указываем следующие параметры: Источник данных: %имя списка-счётчика% Поле из источника: Новый номерВ секции поиск элемента списка нужно указать столбец по которому будет производиться поиск нужного значения и источник значения: Поле: КодСтроки Значение: Выбрать *ИдентификаторСчётчика Задаем значение нового номера Диалоговое окно подстановки Единственно новое здесь - Вернуть поле как* - возвращаем как строку. Указать значение подстановки Указать значение подстановки
  4. Для переменной ГотовыйНомер проделываем те же действия, что и на предыдущем шаге, только Поле указываем ВычисленныйНомер.
  5. Добавляем Действие -> Действия со списками -> Изменить поле в текущем элементе. Для поля Номер задаём значение переменной ГотовыйНомер.
  6. Последний шаг - Сказать списку счетчику, что номер заняли и нужно бы увеличить следующий номер на 1, для этого обновим элемент в списке Счётчики-Общие: Добавляем Действие -> Действия со списками -> Обновить элемент в списке. Жмем кнопку Добавитьи с помощью уже знакомых диалогов выбираем нужные поля, а конкретно — Последний номер и присваиваем ему значение переменной новоеЧисло. Диалог обновления элемента Диалог обновления элемента Добавление значения в диалоге обновления. Добавление значения в диалоге обновления.

Сохраняем рабочий процесс. Теперь при создании нового элемента в списке автоматически будет проставляться номер элемента или документа. Чтобы решить задачу с несколькими кодами контента в одном списке можно перед шагом 2 вставить блок условий, где в зависимости от типа контента(имею ввиду тип контента sharepoint) будет присваиваться значение переменной, допустим, ТипКонтента. А затем на шаге 3 мы будем объединять в одно строку две переменные КодПредприятия и ТипКонтента. Если же элементы имеют общий тип контента, то можно добавить специальный столбец или пытаться вычислить код контента по уникальному содержимому существующих столбцов.

Спасибо, что дочитали.

Вернуться к статьям ↗