2016-08-24 3 views
0

В списке документов Sharepoint 2007 у меня есть необходимость, когда у меня есть столбец, который является датой истечения срока действия, а затем другой столбец, который является индикатором, если дата истечения срока действия прошла.Sharepoint 2007 workflow vs powershell script

Я говорил с конечным пользователем и просто имел дополнительные представления, чтобы показать, что документы, срок действия которых истек, недостаточно хорош, - они хотят, чтобы столбец отображал слово «Истек».

Я могу добиться этого, выполнив рабочий процесс по событию, созданному элементом, которое просто ожидает, что дата будет меньше, чем сегодня. Это запустит рабочий процесс, и рабочий процесс останется в состоянии «Выполняется» до истечения срока действия элемента (который может составлять 5 лет)

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

Мой вопрос в том, что лучше всего, так как в этом списке документов будет более 100 000 документов. Есть ли какое-либо влияние на работу рабочих процессов в течение 5 лет .. и многие из них?

+0

Оба варианта звучат чересчур сложный и прочный; используйте [расчетный столбец] (https://sharepoint.rackspace.com/calculated-columns-tutorial) или веер JavaScript, чтобы показать, прошла ли текущая дата с истекшей датой или нет, во время просмотра. – TessellatingHeckler

+0

К сожалению, вычисленные столбцы рассчитаны только на создание или редактирование элемента - я видел javascript «hacks», но они работают только с 2010 года. – DaGeezah

+0

В статье, связанной с RackSpace, пункт 4, используйте этот подход для создания вычисленного столбца с HTML, который включает JavaScript, в псевдокоде '= concatenate (" if (date()> ", ExpiryDate,") {"expired" } 'или вставить ссылку на изображение, которая загружается с простой веб-службы' ', и эта услуга соответствует истекшему/действительному изображению в зависимости от ситуации. – TessellatingHeckler

ответ

0

Десять тысяч рабочих процессов приостановлены и ждут пять лет - это Плохая идея. Это не только наложило бы ненужную нагрузку на службу рабочего потока, но вы столкнулись бы с риском того, что все десять тысяч рабочих процессов войдут в состояние ошибки, если служба таймера рабочего процесса неожиданно остановится в какой-то момент в течение этих пяти лет, что заставило бы вас прекратить и перезапустите все 10 000 рабочих процессов, чтобы продолжить процесс.

Запланированная задача, запускающая выполнение консольного приложения или сценария Powershell, является лучшим подходом или вы можете написать собственное задание по таймеру SharePoint в Visual Studio. В любом случае с помощью объекта SPQuery будет использоваться объектная модель на стороне сервера SharePoint для запроса списка. При использовании объектной модели на стороне сервера SharePoint важно использовать наиболее эффективные запросы.

Вы делаете не необходимо перебирать все элементы в списке, когда-либо. Ваш запрос CAML должен быть достаточно конкретным, чтобы возвращать только подмножество элементов, где столбец индикатора не равен «Истек», а срок годности меньше сегодняшней даты.

Добавить индексирование столбцов в обе эти столбцы, чтобы уменьшить нагрузку на этот запрос в базе данных.

+0

Спасибо, у меня есть что-то, что вы предлагаете - просто возвращает предметы с датой -lt сегодня. – DaGeezah

+0

Добро пожаловать. Ради эффективности, вы можете захотеть убедиться, что фильтрация происходит на стороне SharePoint, и что Powershell не применяет фильтр только после получения всех результатов. Y ou всегда может поделиться вашим рабочим скриптом на codereview.stackexchange, если вы хотите увидеть, можно ли его улучшить так или иначе. – Thriggle

Смежные вопросы