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

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

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

ОБНОВЛЕНИЕ Ноябрь 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 (для поля добавления комментария). 

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

ВАЖНО. В 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
На выходе: SELECT 1 с result, msg  и 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. Это может быть полезным, когда вы хотите брать комментарии из другого источника. 

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

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

Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки и узкого стека разработки. Про снижение стоимости владения продуктом

Это быстрое внесение изменений

по ходу эксплуатации программы. Как создается функционал на платформе

Это простой удобный интерфейс

адаптация под мобильные устройства. Про юзабилити платформы

Нужна бесплатная консультация?
Получить оценку проекта
Создайте концепцию проекта на основе нашего шаблона и получите оценку проекта в виде КП.
Демо-сайт решений
Базисные решения, которые можно гибко адаптировать под себя: менять внешний вид, бизнес-логику и даже структуру базы данных.