طرح مسئله:
فرض کنید قصد دارید گزارشی از تاریخچه فعالیت های انجام شده روی تسک های فرایندهای اجرا شده شامل اطلاعات اقدام کننده فعالیت، عنوان فعالیت، وضعیت فعالیت و زمان های مربوط به هر وضعیت فعالیت را داشته باشید.
یک راه حل:
با استفاده از کوئری زیر میتوانید موارد ذکر شده را به دست آورید.
DECLARE
@FullTitle NVARCHAR(100) = N'', -- فیلتر نام اقدامکننده، خالی = بدون فیلتر
@TaskName NVARCHAR(100) = N'', -- فیلتر عنوان فعالیت، خالی = بدون فیلتر
@StatusType INT = -1, -- فیلتر نوع وضعیت، -1 = همه
@StartDate DATETIME = '2000-01-01', -- تاریخ شروع بازه
@EndDate DATETIME = '2100-01-01'; -- تاریخ پایان بازه
SELECT
p.SerialId AS N'شماره سریال',
t.Name AS N'عنوان فعالیت',
s.FullTitle AS N'اقدام کننده',
Didgah_Common.dbo.com_udfGetSolarDateTime(h.[CreatedOn]) AS N'زمان مربوطه',
CASE
WHEN h.[Type] = 0 THEN N'ایجاد'
WHEN h.[Type] = 1 THEN N'لغو انتساب'
WHEN h.[Type] = 2 THEN N'تکمیل'
WHEN h.[Type] = 3 THEN N'برداشتن'
WHEN h.[Type] = 4 THEN N'اختصاص داده شد'
WHEN h.[Type] = 5 THEN N'مشاهده'
WHEN h.[Type] = 6 THEN N'لغو شده'
WHEN h.[Type] = 7 THEN N'متوقف'
WHEN h.[Type] = 8 THEN N'ادامه'
WHEN h.[Type] = 9 THEN N'منقضی'
WHEN h.[Type] = 10 THEN N'منقضی ناشی از خطا'
WHEN h.[Type] = 12 THEN N'تغییر اقدام کننده'
ELSE N'نامشخص'
END AS N'وضعیت فعالیت'
FROM [Didgah_BPMS].[dbo].[bpm_TaskHistories] h
INNER JOIN [Didgah_BPMS].[dbo].bpm_tasks t ON h.TaskId = t.id
INNER JOIN [Didgah_BPMS].[dbo].bpm_ProcessInstances p ON t.businesskey = p.businesskey
INNER JOIN Didgah_Common.dbo.com_staff s ON t.ownerid = s.id
WHERE
(@FullTitle = N'' OR s.FullTitle LIKE '%' + @FullTitle + '%')
AND (@TaskName = N'' OR t.Name LIKE '%' + @TaskName + '%')
AND (@StatusType = -1 OR h.Type = @StatusType)
AND h.CreatedOn BETWEEN @StartDate AND @EndDate
ORDER BY p.SerialId DESC;
با اجرا کردن کوئری فوق میتوانید زمان ها و موارد ذکر شده را بدست آورید.