Как связать списки в sharepoint

Обновлено: 28.04.2024

Здравствуйте!
Хочу поделиться опытом автоматизации отдельно взятого бизнес-процесса на платформе Sharepoint 2010.
Думаю, эта статья будет интересна в первую очередь тем пользователям, кто по какой-то причине не хочет писать код в Visual Studio. Она о том, как можно обойти ограничения штатного функционала SharePoint, используя различные подручные решения.

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

  • Система согласования маркетинговых акций — регион предлагает реализацию акции и затем она проходит последовательность согласований и дополнений — вплоть до центра. Каждый шаг соовождается поручениями для определенных пользователей. В конечном счете акция может быть отправлена на реализацию или отклонена
  • Система сбора идей от сотрудников — сотрудник предлагает идею и далее может наблюдать, как она проходит последовательность доработок и одобрений — вплоть до момента приема ее в работу, либо возврата на доработку
  • … и много-много подобных: работа с проблемами, багами и инцидентами, работа с претензиями, работа c активами — словом любая задача, где требуется последовательное рассмотрение несколькими пользователями для принятия решения.
Постановка задачи

Мы рассмотрим частный случай бизнес-процесса — назовём его «Заказы на регламентные процедуры»
Вкратце: есть список готовых общепринятых регламентных процедур — Регламентов. К прямому созданию, изменению или удалению элементов этого списка процедур никто не имеет доступа, однако любой пользователь может предложить создание, изменение или удаление процедуры.
Для того, чтобы это произошло, он создает т.н Заказ. Заказ проходит определенную последовательность шагов-статусов, на каждом из которых определенным ролям назначаются поручения. От того, с каким решением будет закрыто поручение, зависит в какой статус перейдет Заказ. Кроме этого, последовательность шагов индивидуальна для заказов на создание, изменение и удаление, а также зависит от дополнительного признака экспресс, который позволяет пройти Заказу по упрощенной схеме. Таким образом, на каждом шаге то, куда пойдет Заказ, зависит от трех условий: от его типа, от наличия признака экспресс и от решения пользователя.
Когда Заказ пройдёт цепочку согласований и дополнений, автоматически создастся/изменится/удалится соответствующий Регламент.

Общая архитектура решения

Основные списки, созданные для решения задачи:

  • Регламенты
  • Заказы
  • Задачи
  • …+ Различные справочники

Capture

Автоматизация процесса

Capture1

На скриншоте ниже похожая схема, выполненная с помощью Visio

Для решения этой задачи можно использовать вот такую комбинацию из двух рабочих процессов, назовём её “кольцо”:

Capture2

Рабочий процесс “кольцо” с успехом заменяет линейный workflow.
Идея незамысловатая — у нас уже есть 2 списка, список заказов и список задач. На список заказов мы навешиваем несложный рабочий процесс, который смотрит на текущий статус Заказа и в зависимости от этого создаёт ту или иную задачу. На список задач мы навешиваем ещё более несложный рабочий процесс, который при завершении задачи обновляет статус в связанном Заказе, тем самым инициируя повторное выполнение рабочего процесса на Заказе.

Для того, чтобы не описывать все шаги и переходы непосредственно в теле workflow, создадим ещё несколько списков-справочников:

  • tasklist – список всех возможных задач, назначаемых пользователям при переходе на очередной шаг
  • logicoftransitions – логика переходов. Список, состоящий из полей:
  • taskfrom – задача, из которой надо выполнить переход
  • condition1 – условие 1 (в нашем случае, это решение Да или Нет, принятое пользователем по предыдущей задаче)
  • condition2 – условие 2 (в нашем случае, наличие или отсутствие признака “экспресс”)
  • condition3 – условие 3 (в нашем случае, тип заказа – создание РП, изменение РП, удаление РП)
  • taskto – задача, в которую надо перевести процесс с учётом предыдущих условий
  • sendemail — поле Да/Нет, посылать ли письмо при выполнении условия
  • emailsubj – тема письма
  • emailtext – текст письма
  • emailsendto – адресаты письма

Этих списков достаточно для автоматизации процесса. Разумеется, если мы оставим поле taskfrom пустым – это будет означать, что задача первая и не имеет предшествующих задач. Пустое поле taskto означает отсутствие следующего шага – задачи, и если нужно сделать что-то помимо отправки письма, эту ситуацию нужно дополнительно обработать в теле workflow.

Итоговый workflow на списке Заказы получается достаточно коротким – судите сами (картинка разбита на 2 половины):

Capture3_1
Capture3_2

workflow для списка Задачи и вовсе содержит только одну активность

Capture4

Есть ещё один нюанс. В рабочем процессе нельзя просто так взять и выбрать элемент из списка по совпадению нескольких полей. Одно совпадающее поле — это пожалуйста, но не больше. Однако проблема решается элегантным способом. Нам нужно навесить небольшой рабочий процесс или обработчик или даже просто вычисляемое поле на список logicoftransitions — его задачей будет просто заполнить скрытое текстовое поле, которое мы и станем использовать для сравнения. Так, например, если шаг зависит от состояния 'имя задачи', решение'да/нет','признак экспресс' и 'тип заказа' — то соответственно строка будет выглядеть например так 'согласование руководителя-да-да-создание заказа'. В основном рабочем процессе есть переменная conditionstring, ее и станем сравнивать с нашим полем.


Плюсы такого решения:
+ достаточно один раз сделать узел-болванку, и превращение его в рабочий узел для автоматизации конкретного бизнес-процесса в последующем займёт совсем немного времени
+ очень легко менять траекторию движения заказа — не нужно менять сам рабочий процесс, достаточно изменить справочные значения в tasklist и logicoftransitions.
+ с условием небольшой доработки можно реализовать возможность для пользователя перескакивать в произвольный шаг, или даже назначать отдельным заказам персональную траекторию.
Минусы:
— нельзя поглядеть на красивой диаграмке, где в данный момент находится наш заказ, как это можно сделать, если использовать штатный линейный workflow
Для того, чтобы хотя бы частично нивелировать этот недостаток, можно отображать в DispForm — форме просмотра Заказа все связанные задачи. Это даст наглядную картину того, на каком шаге в данный момент находится заказ и от какого пользователя(ей) ожидаются данные. Делается это просто: мы хотим, чтобы задачи были привязаны к заказу — достаточно присвоить полю-подстановке «Заказ” значение ИД текущего элемента. Несложно также отобразить их в форме просмотра Заказа, нужно просто на DispForm для списка “Заказы” добавить вебчасть — форму просмотра с фильтром, который отображает элементы списка задач со значением поля-подстановки: ИД равным параметру взятому из строки запроса браузера.

Создание связанных элементов списка ( Заказа, привязанного к Регламенту). Автозаполнение и скрытие полей.

Как следует из ТЗ, необходимо иметь возможность создавать Заказы на изменение и удаление Регламента. Для этого, очевидно, Заказ должен быть привязан к Регламенту.
Пожеланием заказчика системы было автозаполнение полей в этих вновь создаваемых заказах – поля из Регламента должны были переноситься в Заказ.
Одним из испробованных способов было создание готового Заказа рабочим процессом, и отправка пользователю ссылки на получившийся Заказ. Однако эта практика показала свою неэффективность – пользователю не хочется отвлекаться на почту, ему хочется видеть создаваемый Заказ на экране с возможностью внесения изменений ещё до его создания.
Было придумано вот такое решение. Используем всё тот же Sharepoint Designer. Создаётся новая форма для просмотра элемента списка Регламенты, причём создавать её желательно клонированием существующего файла DispForm.aspx
Затем под формой, отображающей все поля, создаём форму создания нового элемента списка Заказы. Таким образом, мы имеем одну форму, в верхней части которой находятся поля в режиме просмотра, в нижней — в режиме заполнения.
Для заполнения используем старый добрый джаваскрипт. Код скрипта можно разместить на нашей *.aspx — странице после строки:

или в новой веб-части Редактор контента, размещенной под всеми остальными веб-частями.
Шаг номер один: взять значение из полей верхней веб-части. Нюанс в том, что у этих полей совпадающие id. Так, например, если у нас несколько полей с типом “Однострочный текст” — у всех у них будет id “SPFieldText” Это конечно же затрудняет поиск нужного значения, и вот один из способов решения этой задачи:

Capture5

Теперь у нас в элементе массива al[0] — содержимое первого тэга с id “SPFieldNumber”, в al[1] — второго и т.д.
Шаг номер два: записать полученные значения в соответствующие поля. В форме редактирования, в отличие от формы просмотра, все поля имеют уникальный id, (кстати, его можно посмотреть в IE кликнув F12, затем выбрав нужное поле курсором — поиском):

Для каждого типа поля требуется свой индивидуальный подход, например для полей с типом “Однострочный текст” и “Выбор” содержимое тега выглядит вот так:

и значения из содержимого тега можно взять следующим образом:

Для поля с типом “Подстановка”, содержимое тега выглядит так


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

Таким образом, наш Заказ становится привязанным к Регламенту.
Иногда некоторые поля требуется установить в нужные значения явно. Например, для поля “Да/Нет”:

Далее, некоторые поля нужно скрыть, дабы избежать изменения пользователем. В нашем случае это поля “Связанный регламент” и “Тип заказа”.
Для скрытия полей нам полей существует отличное решение в библиотеке jQuery. Достаточно подключить эти библиотеки, указав путь к ним следующим образом:


и теперь для того, чтобы скрыть строку от пользователя, достаточно вот такой конструкции:

Проверка введённых полей
Ограничение доступа на закрытие задачи, оповещения о просроченной задаче.
Редирект на нужную страницу

Если же направление редиректа зависит от выбранных полей, то поможет всё тот же Power EventReceiver 2010. Код примерно такой:

Ограничение доступа на создание/изменение без ограничения разрешений

Пользователю запрещено создавать, изменять или удалять элементы в списке Регламенты, однако если лишить его разрешений на выполнение этих действий, то и рабочему процессу не удастся проделать эти операции (если конечно не выполнять эти действия в Шаге олицетворения – но в этом случае автором будет создатель, что не всегда удобно)
Одно из решений – можно попросту сделать новые формы для списка – вместо традиционных NewForm, EditForm создать новые, поставить на них галочку “по умолчанию” и удалить оттуда все поля для редактирования, заменив их на какой-нибудь текст, объясняющий пользователю почему создавать/удалять Регламенты напрямую нельзя и что нужно сделать вместо этого – со ссылками и инструкциями.

Заключение


Конечно, для окончательной сдачи проекта заказчику требуются ещё некоторые “полировочные” действия – скрытие некоторых полей, создание пользовательских рабочих мест с настройкой представлений и меню в зависимости от роли в процессе. Однако основные “хитрости” в статье я перечислил, очень надеюсь на то что они кому-нибудь окажутся полезны.

Баннер SharePoint QuickStart


Начало работы по веб-разработке в SharePoint 2010: создание связанных списков в SharePoint 2010.

Дата последнего изменения: 12 января 2011 г.

Применимо к: SharePoint Foundation 2010 | SharePoint Server 2010 | Visual Studio 2010

В этой статье
Создание списков на сайте SharePoint
Создание столбцов для списков
Добавление данных в списки
Дальнейшие действия

В этом упражнении создаются два списка в Microsoft SharePoint 2010. Затем в каждом списке создается столбец подстановки, который ссылается на данные из другого списка. Для выполнения этой задачи необходимо выполнить следующие действия:

Создание списков на сайте SharePoint

Создание столбцов для списков

Добавление данных в списки

Создание списков на сайте SharePoint

В этой задаче создаются два списка в SharePoint 2010.

Создание двух списков SharePoint

Щелкните Действия сайта, Дополнительные параметры и Настраиваемый список.

В поле Имя введите Сотрудники и нажмите кнопку OK.

Щелкните Действия сайта, Дополнительные параметры и Настраиваемый список.

В поле Имя введите Проекты и нажмите кнопку OK.

Создание столбцов для списков

В этой задаче в списки добавляются столбцы.

Создание столбцов списков

В левой области навигации щелкните список Проекты, на вкладке пользовательского интерфейса ленты Работа со списком щелкните Список и выберите Параметры списка.

Прокрутите экран до раздела Столбцы и щелкните Создать столбец.

В поле Имя столбца введите Описание и нажмите кнопку OK.

Прокрутите экран до раздела Столбцы и щелкните Создать столбец.

Назовите столбец Дата завершения, задайте для него тип Дата и время и формат Только дата и нажмите кнопку OK.

Перейдите на домашнюю страницу.

В левой области навигации щелкните список Сотрудники, на вкладке пользовательского интерфейса ленты Работа со списком щелкните Список и выберите Параметры списка.

Прокрутите экран до раздела Столбцы и щелкните Заголовок.

Измените имя столбца на Полное имя и нажмите кнопку OK.

Прокрутите экран до раздела Столбцы и щелкните Создать столбец.

Назовите столбец Название должности и нажмите кнопку OK.

В разделах Столбцы щелкните Создать столбец.

Назовите столбец Проект и задайте для него тип Подстановка.

В разделе Дополнительные параметры столбца задайте раскрывающееся поле Получить данные из для списка Проекты и раскрывающееся поле В этом столбце для списка Название.

Теперь создайте столбец подстановки в списке "Проекты". Перейдите на домашнюю страницу.

В левой области навигации щелкните список Проекты, на вкладке пользовательского интерфейса ленты Работа со списком щелкните Список и выберите Параметры списка.

Прокрутите экран до раздела Столбцы и щелкните Создать столбец.

Назовите столбец Основное контактное лицо и задайте для него тип Подстановка. В разделе

Дополнительные параметры столбца задайте раскрывающееся поле Получить данные из для списка Сотрудники и раскрывающееся поле В этом столбце для списка Полное имя.

Добавление данных в списки

В этой задаче в списки добавляются данные.

Добавление данных в списки

Перейдите на домашнюю страницу и щелкните список Сотрудники.

Добавьте в список все строки данных, показанные в таблице 1, щелкнув Добавить новый элемент и заполнив каждый столбец. Обратите внимание, что при заполнении столбца Проект элементы можно выбирать из списка в столбце Название списка Проекты.


«Настраиваемый список» позволяет создать любой нужный вам список с нуля и с любыми представлениями данных.

Разберем несколько практических примеров создания списков с нуля.

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

Моя задача создать единый архив – свести воедино всю разрозненную информацию по проектам. В этом мне поможет возможность
SharePoint
- создание настраиваемого списка.

Создание простейшего варианта такого списка мы уже рассмотрели в первой части серии статей – [ Списки в SharePoint Office 365. Часть 1. Краткий обзор ]

Для решения поставленной задачи надо воспользоваться возможностью создания в настраиваемом списке столбцов подстановки.

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

Создадим настраиваемый список с именем «Архив проектов», к столбцу «Название» добавим столбец для дополнительных вложенных файлов для пояснений и дополнений к проекту, затем создадим столбец «Документ проекта» во вкладке «СПИСОК» - «Создать столбец».

В появившемся окне «Создать столбец», задаем имя столбца «Документ проекта» и выбираем тип данных «Подстановка», т.к. у нас в библиотеке «Документы» имеются уже необходимые файлы (возможно, что файла описательной части проекта нет, поэтому в «Требовать, чтобы этот столбец обязательно содержал данные» оставляем значение по умолчанию - «Нет»:

Далее выбираем откуда мы хотим получить данные «Получить данные из», из раскрывающегося списка выбираем нужное нам имя библиотеки (списка) – «Документы»:



Затем определяем из какого столбца библиотека «Документы» нам нужны данные в создаваемый нами столбец «Документы проекта». В примере выбран «ИД» из соображений, что документов может быть множество, т.е. целая папка документов и что в библиотеке (списке) все элементы имеют уникальные ИД при возможных одинаковых названиях папок. Чтобы видеть название – пометим дополнительное поле «Название» (при необходимости можно отобразить несколько полей из библиотеки в создаваемом списке):

Чтобы было нагляднее отображаем рисунок с фрагментом библиотеки «Документы»:

А теперь отобразим фрагмент списка «Архив проектов» после редактирования и добавления информации (сопоставив два рисунка, видно откуда появилась информация в столбцах: «Документы проекта» - это «ИД» и дополнительное поле - «Название»)



Если нажать на элемент столбца «Документы проекта» - 1 (выделен цветом), то увидим окно «Документы – Архивы» с именем «Архивы» (есть возможность нажать в меню на открыть, т.к. система определяет, что этот элемент – папка):

И мы попадем в папку «Архивы», где могут находиться другие папки и файлы:

Если по каким-то причинам надо внести коррективы в список «Архив проектов», то для этого используют вкладку «СПИСОК» - «Параметры списка» - «Столбцы» и нажимают ссылку-название столбца (в примере «Документ проекта):

Однако, у вас уже не будет возможности изменить «Получить данные из:» (т.е. изменить связанную библиотеку «Документы»), а только столбцы из нее:

Последовательно добавляем в настраиваемы список «Архив проектов» столбцы: «Фотографии проекта», «Расчеты» и «Чертежи». Последние два столбца создаются по аналогии со столбцом «Документы проекта», только в этом случае возможны варианты с различными библиотеками или списками.

Разберем вариант на примере столбца «Фотографии проекта», когда предполагается несколько фотографий-файлов к одному проекту. В этом случае можно выбрать только название фотографий в качестве источника данных из библиотеки «Графики и схемы»:

И тогда при добавлении данных в список мы выбираем из списка необходимые нам по названию графические файлы (в примере выбран один):

Этот файл-фотографию возможно просмотреть, не выходя из списка:

О возможных вариантах организации автоматизации расчетов и действий с элементами в списках мы поговорим в следующей статье.

Продолжаем рассматривать списки SharePoint и одновременно рассматриваем практические примеры. Эта статья является продолжением предыдущей [Списки в SharePoint Office 365. Часть 9. Список «Настраиваемый список». Связывание списков и библиотек].

Рассмотрим как можно с помощью настраиваемого списка в представлении таблицы автоматизировать расчеты.

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

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

Затем создаем вычисляемые столбцы:

В результате получаем список в котором при занесении исходных данных проводится автоматический расчет параметров. Очевидно, что имена столбцам необходимо давать такие, чтобы пользователям было понятен смысл информации таблицы.

Обращает внимание, что, например, сумму параметров автоматически получить можно только в строке, а не в столбце. Однако, у нас имеется возможность экспортировать список в Excel и провести дополнительные расчеты.

В примере проведено суммирование данных столбца.

Как вариант, можно внести в книгу Excel все необходимые расчетные формулы и организовать расчет в Excel , с публикацией файла в библиотеке документов
SharePoint и внесения изменений в объединенный список (в примере «Архив проектов»)

Если вынести структуру списка «Расчет параметров» на обсуждение [см. Списки в SharePoint Office 365. Часть 6. Список «Доска обсуждений». Организация информативного форума на сайте ], то мы получим замечание о неудобстве работы со списком:

Некоторые типы списков поддерживают работу с формами InfoPath ( InfoPath устанавливается предварительно на локальном компьютере):

Во вкладке «СПИСОК» (в примере, это список «Расчет параметров») нажимаем кнопку «Настройка формы». Система работает интеллектуально: после установки соединения со списком SharePoint , InfoPath автоматически создает форму в которой исключаются вычисляемые столбцы. Вносим необходимые текстовые изменения для заполняемых полей:

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

У нас имеются и другие возможности публикации формы:

Предусмотрен автономный режим с формой, есть возможность сохранения шаблона формы InfoPath на локальном компьютере и иногое другое, что упрощает работу с данными списка SharePoint :

После публикации формы вам доступны возможности редактирования непосредственно из меню «СПИСОК» списка:

И самое важное – можно редактировать веб-часть формы для последующей публикации формы на сайте (вкладка «ВЕБ-ЧАСТЬ»).

Опубликуем созданную форму на главной странице сайта. На картинках ниже отображена последовательность действий:

При настройке веб-части формы ограничим целевую аудиторию и форма будет доступна только назначенным владельцем сайта пользователям, которые имею право вносить данные:

Теперь мы можем добавить столбец в список «Архив проектов» со значением каких-то промежуточных расчетов по конкретному проекту:

Я хочу создать Wikipage на своем дочернем сайте в SharePoint 2013 онлайн, я хочу добавить два зависимых раскрывающихся списка на своем веб-сайте . для этого я создал два списка на своем дочернем сайте SharePoint. Как связать один список с другим списком . Так же, как в связи с таблицей SQL PK-FK.

enter image description here

enter image description here

2 ответа

Просто объедините два списка:

Создать поисковый столбец, обратитесь к списку категорий.

enter image description here

Для Каскадного выпадающего меню вы можете использовать SPCascadeDropdowns.

Для внутреннего запроса соединения (нужен поисковый столбец).

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

И если вы ищете подключенные веб-части представления списка в SharePoint онлайн, вы можете просмотреть следующую статью:

Читайте также: