Наверняка каждый, кто создавал бизнес-процесс в системе Terrasoft хотя бы раз сталкивался с задачей раздать разные права доступа пользователям на элемент бизнес-процесса. Вариант, когда пользователь 1 раздает вручную права доступа например, на документ по процессу пользователю 2 не совсем удобен (нужно всегда об этом помнить, делать лишние движения руками, мышью и т.д.). Волей-неволей задаешься задачей реализовать это один раз и больше не задумываться о подобных мелочах.
Предлагаю для решения задачи создать хранимую процедуру, которая и будет создавать нужные права доступа, а затем вызывать эту процедуру в любом месте скрипта бизнес-процесса.
Привожу текст хранимой процедуры в прикрепленном файле. Она предназначена для раздачи полных прав доступа одному пользователю и прав только на чтение другому (для документа).
После создания этой хранимой процедуры Вам необходимо создать ее обработку уже в Terrasoft CRM Administrator с передачей используемых в ней параметров. Это делается следующим образом:
function SetSpecialPermission(User1ID, User2ID) {
if (IsEmptyValue(User1ID) || IsEmptyValue(User2ID)) {
return;
}
var IsAdmin = Connector.CurrentUser.IsAdmin;
IsAdmin = IsAdmin ? 1 : 0;
var SQL = "exec tsp_SetSpecialPermissions :P1, :P2, :P3";
var Param = System.CreateObject("TSObjectLibrary.Parameters");
AddParameter(Param, pdtGUID, User1ID).Name = 'P1';
AddParameter(Param, pdtGUID, User2ID).Name = 'P2';
AddParameter(Param, pdtGUID, IsAdmin).Name = 'P3';
Connector.DBEngine.ExecuteCustomSQL(SQL, Param);
}
Затем в нужном месте скрипта бизнес-процесса, например на событии OnAfterExecute задачи процессе, вызвать эту процедуру, указав ID пользователей.
function Action1OnAfterExecute(ActionItem, IsComplete)
var User1ID = '{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}';
var User2ID = '{B8ABDC0D-D36E-42C5-B1F6-2AD425F6CAD0}';
SetSpecialPermission(User1ID, User2ID);
}
В результате, после перевода элемента бизнес-процесса в завершенное состояние, права доступа на документы (в предложенном примере) будут перераспределены в соответствии с запросом хранимой процедуры.
По аналогии с предоставленным примером Вы можете реализовать раздачу прав доступа на сколько угодно пользователей в необходимых Вам разделах.
Надеюсь, мой пример сократит затраты Вашего драгоценнейшего времени на реализацию функционала раздачи прав доступа.
С уважением,
Мельникова Екатерина