ALTER PROCEDURE [dbo].[cm_dynamicSignature]
@TaskID int = null,
@StepID int = null,
@RequestingUserID int = null,
@Stage int = null
AS
BEGIN
/* Подготовка */
DECLARE @acceptors TABLE (TaskID int, AcceptorsString varchar(1000))
INSERT INTO @acceptors
EXEC cm_matrixAcceptorsSTUFFed @TaskID = @TaskID -- формирует список акцептантов для подписи, см ниже
/* отбор записей Матрицы согласования, которые имеют значение для данной задачи (по условиям) */
DECLARE @matrix TABLE (
TaskID int, -- задачи из Матрицы согласования
Stage decimal,
AcTime decimal
)
INSERT INTO @matrix
exec cm_matrixFilter @TaskID = @TaskID -- текст процедуры не приводится
-- (в ней проверяются условия, соответствующие конкретному бизнес-процессу)
/* Результирующий запрос */
SELECT DISTINCT
139 AS SignatureID, -- ID Подписи пользователя
'Подпись' AS NAME, -- название подписи
'Согласование' AS RequestReason, -- причина запроса подписи
dbo.tc_AddWorkingHours(GETDATE(), matrix.AcTime) AS DeadlineTime, -- срок обработки подписи
0 AS MakeAcceptorsSubscribers, -- подписывать ли акцептантов к задаче
0 AS SplitForEachAcceptor, -- запрашивать ли у каждого отдельную подпись
0 AS ExcludeAlreadySigned, -- нужно ли запрашивать повторно подпись у принявших положительное решение
acceptors.AcceptorsString, -- список акцептантов в формате XML (формируется выше)
0 AS ActionIfNotSigned, -- Прервать согласование
matrix.Stage AS Stage -- ДП "Этап"
FROM @matrix AS matrix -- Матрица согласования"
JOIN @acceptors as acceptors ON matrix.TaskID = acceptors.TaskID -- (таблица формируется в начале процедуры)
WHERE matrix.Stage > @Stage
AND acceptors.AcceptorsString is not null
)
END
GO
|