Хранимые процедуры для блоков БИ¶
Файлы в блоке "Используется"¶
Список файлов, вложенных в задачу и ее ДП, можно отображать в блоке "Используется" — так пользователям будет удобнее посмотреть все файлы, связанные с данной задачей.
Для настройки такого блока используется хранимая процедура, которая собирает данные из таблиц FileStorageFileToTaskLinks (файлы, вложенные в задачу) и FileStorageFileToExtParamLinks (файлы, вложенные в ДП). В настройках БИ для контента нужно выбрать тип Прочее.
Пример процедуры:
(Если у файла было несколько версий, возвращается последняя версия. Превью — необязательная колонка, отображается корректно только для изображений)
CREATE PROCEDURE [dbo].[sp_test_rev_Linked_Files]
@UserID int,
@TaskID int,
@ShowAllTasks varchar(8000),
@StartIndex varchar(8000),
@EndIndex varchar(8000)
AS
BEGIN
select t.taskID as TaskID,
t.IsOverdue,
t.StateID,
t.PriorityID,
t.IsClosed,
TaskColor.IntColor,
s.FinishWork,
t.ParentTaskID,
fsf.Name [Файл,]
case
when fsf.Ext in ('.jpg','.png','.pdf','.mp4') then
'/spa/noframe/file/{fileID}/1'
when fsf.Ext in ('.doc','.docx','.ppt','.pptx', '.xls', '.xlsx') then
'/spa/noframe/file/{fileID}?mode=view'
end
FROM Tasks t
left join TaskColor on t.taskid=TaskColor.TaskId
left join States as s on t.StateID=s.StateID
join FileStorageFileToTaskLinks as fs on t.TaskID = fs.TaskId and fs.IsDeleted=0
join FileStorageFiles as fsf on fs.FileId=fsf.FileId
WHERE t.TaskID = @TaskID
union all
select t.taskID as TaskID,
t.IsOverdue,
t.StateID,
t.PriorityID,
t.IsClosed,
TaskColor.IntColor,
s.FinishWork,
t.ParentTaskID,
fsf.Name,
case
when fsf.Ext in ('.jpg','.png','.pdf','.mp4') then
'/spa/noframe/file/{fileID}/1'
when fsf.Ext in ('.doc','.docx','.ppt','.pptx', '.xls', '.xlsx') then
'/spa/noframe/file/{fileID}?mode=view'
end
FROM Tasks t
left join TaskColor on t.taskid=TaskColor.TaskId
left join States as s on t.StateID=s.StateID
join FileStorageFileToExtParamLinks as fs on t.TaskID = fs.TaskId and fs.IsDeleted=0
join FileStorageFiles as fsf on fs.FileId=fsf.FileId
WHERE t.TaskID = @TaskID
END
Письма в блоке "Используется"¶
В блоке "Используется" можно отображать письма, связанные каким-то образом с данной задачей. Список писем формируется с помощью хранимой процедуры, а в настройках БИ для контента выбирается тип Прочее.
Пример процедуры:
В данном примере категория с ID=22 — это контактные лица клиентов, в ней есть ДП с ID=33, где хранится email контактного лица.
ALTER PROCEDURE [dbo].[sp_ClientsEmails]
@UserID INT = null,
@TaskID INT,
@ShowAllTasks bit = 0,
@StartIndex INT = null,
@EndIndex INT = null
--@a bit=0
AS
BEGIN
; with ClientEmails as (
SELECT DISTINCT t22.ExtParam33Value as email
FROM TasksInSubcat22Denormalized t22 with (nolock)
WHERE t22.ExtParam33NativeValue = @taskid
and t22.ExtParam33Value <> ''
)
SELECT
e.DateCreated as [Дата]
,e.From as [От]
,e.To as [Кому]
,e.Subject as [Тема]
,e.Textbody as [Текст]
,@TaskID as [TaskID]
,cast(0 as bit) as [IsOverdue]
,1 as [StateID]
,1 as[PriorityID]
,cast(0 as bit) as [IsClosed]
,NULL as [IntColor]
,NULL as FinishWork
,NULL as ParentTaskID
,'/Emails/EmailView.aspx?folderId=' + cast(emf.FolderID as varchar(10)) + '&EmailID=' + cast(e.emailid as varchar(15)) as [href]
FROM [dbo].[EmailAddressBooks] as eb
INNER JOIN [dbo].[EmailAddressBooksEmails] as ebe
ON eb.EntryId = ebe.EntryId and ebe.RecipientType = 0
INNER JOIN emails e with (nolock)
ON e.EmailID = ebe.EmailId
JOIN EmailMailBoxesFoldersEmails emf
ON e.EmailID = emf.EmailId
WHERE eb.EmailAddress in (SELECT email FROM ClientEmails)
ORDER BY Дата desc
END
select TOP (1) '/Emails/NewEmail.aspx?mailboxId='+ cast(MailBoxID as varchar)
FROM dbo.EmailMailBoxesUsers
WHERE (UserID = @CurrentSessionUserID) AND (IsOwner = 1)