Работа с комментариями к объектам

Смотреть видео

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

ОБНОВЛЕНИЕ Ноябрь 2021. Добавлены возможности прикрепления файлов и отметки, и обновлены системные процедуры комментариев. Добавлены столбцы в as_comments - https://pastebin.com/N3JLPPJL

Также есть возможность отмечать цветными тегами записи.

Для работы комментариев необходимо указать следующий сниппет:
<div class="as-comments" data-itemid="1234" data-type="{typeCode}" data-inline="1" data-reverse="1"></div> 

1. data-itemID - ID некой сущности, к которой привязаны комментарии

2. data-type - код типа комментариев (создается в Панели управления в разделе Типы комментариев)

3. data-inline - если 1, то комментарии выводятся в контейнере (иначе они будут открываться в popover окне при клике на ссылку).

4. data-reserve - если 1, то порядок будет от свежих к старым и окно добавления будет сверху от блока комментариев.

5. data-deleteConfirm - если есть текст, то при удалении комментария будет запрашиваться подтверждение удаления с этим текстом. 

Также необходимо в разделе Управление комментариями создать запись с соответствующим typeCode
Здесь вы можете настроить доступ на просмотр комментариев, возможность добавлять и удалять комментарии. 
Также вы можете настроить какие теги будут у данного типа.

Есть опция notifyTag в as_commentTypes по включению тега напоминания.

Если она включена, то вы можете добавлять комментарии с указанием даты напоминания об этой записи (модальное окно с указанием количества дней).
Когда настанет этот день, то вам придет уведомление через систему уведомлений (для этого ежедневно осуществляется поиск по комментам на сегодня и создаются уведомления). 

Примечания

Код комментариев typeCode также используется для построения комментариев в компоненте Таблица.

Если data-itemID - пустая строка или “0”, то комментарии не выводятся!

Комментарии можно раскрашивать. При добавлении программно - через хранимую процедуру (параметр @color). Пользователь может красить комментарии через теги. 

Пример процедуры (она должна вызываться ежедневно - установка в /syssp): 

CREATE PROCEDURE [dbo].falcon_checkNotifyComments
AS
BEGIN

declare @date date 
declare @tag nvarchar(128)

set @date = getdate()

set @tag = '#notify'+convert(nvarchar, @date, 120)

DECLARE @id int, @username nvarchar(256), @text nvarchar(max), @created datetime, @itemID nvarchar(128), @type nvarchar(32)      
  
DECLARE cur CURSOR FOR     
select top 100  id, username, text, created, itemID, type from as_comments where text like '%'+@tag+'%'
  
OPEN cur
  
FETCH NEXT FROM cur
INTO  @id, @username, @text, @created, @itemID, @type
  
WHILE @@FETCH_STATUS = 0    
BEGIN    
    if(@type='client')begin 
		declare @clientInfo nvarchar(256), @clientID int = try_cast(@itemID as int)
		select @clientInfo = '<a href="/client?itemID='+@itemID+'">Клиент '+isnull(shortname,'Без названия')+'</a>:' +@text from crm_clients
			inner join ctr_contragents on ctr_contragents.id = crm_clients.contragentID
		
		 where crm_clients.instanceID =  @clientID

		exec [dbo].[as_nt_createNotification]
		@additional = N'',
		@from = 'system',
		@to = @username,
		@url = '/',
		@text = @clientInfo,
		@typeCode = N'client',
		@returnID = 0
    end      
    FETCH NEXT FROM cur     
	INTO  @id, @username, @text, @created, @itemID, @type      
END     
CLOSE cur;    
DEALLOCATE cur;  


END


 

Настройка комментариев через SP GetOptions

Более гибкую настройку комментариев можно сделать за счет процедуры comments_{code}_getOptions. Пример: 

CREATE PROCEDURE [dbo].[comments_client_getOptions]
	@code nvarchar(64),
	@itemID nvarchar(128),
	@username nvarchar(128)
as begin 
	-- SELECT 1 CommentType: id, code, viewRoles, addRoles, deleteRoles, canDeleteOwnComments, notifyTag
	select *
    from as_commentTypes where code = @code

	-- SELECT 2 Tags
	select * from as_commentTags where typeID in (select id from as_commentTypes where code = @code )
end 
	

SELECT 1 возвращает настройки типа комментариев, а также enableCheck (возможность отмечать комментарии) и enableFiles (прикрепление файлов).

SELECT 2 возвращает теги, привязанные к типу комментариев 

В процедуру передается itemID текущей сущности, к которой крепится блок комментариев, таким образом вы сможете управлять блоком более гибко в плане прав и настроек. 

ВАЖНО. Если роли доступа поставить пустыми - то это означает, что данная операция будет доступна всем (т.е. отключена будет проверка). 

Настройка кнопок Отметить у комментариев

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

При добавлении есть галочка нужен флажок или нет у добавляемого комментария. При установке флажка у комментария появляется переключатель Да/Нет. 

Его можно отмечать и у комментария проставляется дата простановки переключателя и кто это сделал. 

Для возможности добавления этих переключателей в GetOptions в SELECT 1 надо установить enableCheck=1.

Также в процедуре проверки прав проверяем право check (может ли данный пользователь устанавливать данный переключатель). 

Демостенд комментариев с переключателями - https://demo.web-automation.ru/list/watch/kommentarii-s-flazhkami---111

Прикрепление файлов к комментариям

Для возможности прикрепления файлов необходимо реализовать следующее: 

1. В GetOptions в SELECT 1 добавить EnableFiles = 1

2. Создать и настроить 2 менеджера ресурсов {code}CommentView (для вывода загруженных файлов к комментарию, без права загрузки файлов), {code}CommentUpload (для поля добавления комментария, с правом загрузки файлов). 

Код объекта (сущности-entity, не путать с кодом типа ресурса) у этих двух менеджеров должен быть одинаковый. 

В итоге к комментарию можно будет добавлять файлы.

ВАЖНО. В as_comments должно быть поле guid типа uniqueidentifier (к нему цепляются файлы комментария)

Дополнительная процедура проверки доступа hasRight 

Для более тонкой настройки доступа к комментариям вы можете использовать хранимые процедуры вида comments_{typeCode}_hasRight

На входе string username, string right (view, add, delete, check) и int itemID. На выходе - ResultModel (bool Result, string Msg). Выполняется только в случае, если базовая проверка по ролям прошла успешно.

CREATE PROCEDURE [dbo].[comments_client_hasRight]
	@itemID nvarchar(128),
	@right nvarchar(64), -- view, add, delete, check
	@username nvarchar(128)
as begin
	-- WARNING If SP exists - then rights check here (use only we haму access by default roles settings)
	
	-- SELECT 1 
	select 1 Result, '' Msg
end 
	

SQL коллбек после добавления комментария

После добавления комментария можно реализовать дополнительную хранимую процедуру comments_{code}_afterAdd (например для уведомления пользователя о комментарии). Редактировать ее можно в Управлении типами комментариев. 
На входе: @itemID, @code, @text, @username
На выходе: 

  1. SELECT 1 с result, msg 
  2. SELECT 2 Внешние действия
CREATE PROCEDURE [dbo].[comments_client_afterAdd]
	@itemID nvarchar(64),
	@code nvarchar(32),
	@text nvarchar(max),
	@username nvarchar(32)
AS
BEGIN
	-- выполняется после добавления комментария
	insert into as_trace(header, code)
	values( @code +' ' + @itemID + ' '+ @username , 'comment')

	Select '' Msg, 1 Result
END

Подмена стандартных процедур выборки комментариев 

Также вы можете подменить стандартные процедуры GetComments, AddComment, DeleteComment на свои. Это делается на странице /commenttypes. Это может быть полезным, когда вы хотите брать комментарии из другого источника. 

JS коллбек после добавления комментария 

as.commentcallbacks[{commentcode} + "_add"] = function(params,data){
console.log("addComment", params, data)

}

Как изменить формат времени создания комментария

Для этого в процедуре GetComments (глобальной as_comments_getComments или для конкретного типа comments_{code}_getComments) в выдаваемой модели комментария необходимо добавить строковое поле CreatedText (по умолчанию его нет). 

Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

Google поиск по нашей документации

Выгода от использования Falcon Space

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
Сайт использует Cookie. Правила конфиденциальности OK