Дополнительные макросы в шаблоне письма Outlook

В работе активно используем шаблоны писем из раздела "Контакты". Возникла необходимость вставлять в подпись письма контактные данные и должность пользователя системы, который отправляет письмо. Как оказалось, эти данные в шаблоне письма не доступны. Советы, которые я видел на форуме, сводятся к подтягиванию нужных данных в запрос шаблона, что в моем случае не возможно, так как нужны данные как раз о текущем пользователе, а не авторе либо ответственном. Мои изыскания привели меня к следующему решению.

Суть заключается в создании дополнительного системного пользовательского запроса, который по ID текущего пользователя будет подтягивать все необходимые данные и добавлять в шаблон письма. В результате макросы шаблона письма без “запроса” теперь у меня выглядят так.

Чтобы это заработало, мне пришлось:
1. Создать пользовательский запрос на основе таблицы “Контакты” с необходимыми полями и узнать его ID. ID я узнал через MS SQL Server Management Studio .
2. Добавить в "Системные настройки" параметр «CurrentUserDetailQuery» и присвоить ему значение ID

3. Доработать функцию GetMacrosParserByUserQuery в модуле scr_MacrosUtils

function GetMacrosParserByUserQuery(UserQuery, RecordID) {
        var Parser = new Object();
        Parser.Macroses = new Array();
        Parser.Variables = GetNewDictionary();
        LoadSysVariables(Parser.Variables);
        //Дополнительная информация о пользователе
        var CurrentUserDetailQuery=System.GetSystemSettingValue('CurrentUserDetailQuery', 0);
        var ContactDetailQuery = CreateUserQueryObject(CurrentUserDetailQuery)
        LoadVariablesFromUserQuery(Parser.Variables, ContactDetailQuery, Connector.CurrentUser.ContactID);     
       
        //Дополнительная информация о пользователе
        if (UserQuery) {
                LoadVariablesFromUserQuery(Parser.Variables, UserQuery, RecordID);
        }
        return Parser;
}

и функцию GetMacrosesInfo в модуле scr_MSOutlookLibrary
function GetMacrosesInfo(Obj, TemplateID) {
        var Info = new Object();
        Info.SysMacrosList = new Array();
        Info.SysMacrosList.push(["Текущая дата", '#' + "Текущая дата" + '#']);
        Info.SysMacrosList.push(["Текущий пользователь", '#' + "Текущий пользователь" + '#']);
        Info.SysMacrosList.push(["Текущий контакт", '#' + "Текущий контакт" + '#']);
        Info.SysMacrosList.push(["Цитировать", '#' + "Цитировать" + '#']);
        //Дополнительная информация о пользователе
        var CurrentUserDetailQuery=System.GetSystemSettingValue('CurrentUserDetailQuery', 0);  
        var UserQuery = CreateUserQueryObject(CurrentUserDetailQuery);
        if (UserQuery.Error) {
                return;
        }
        var Column;
        for (var Key in UserQuery.Columns) {
                Column = UserQuery.Columns[Key];
                Info.SysMacrosList.push([Column.Caption, '#' + Column.Caption + '#']);
        }
    //Дополнительная информация о пользователе
        Info.QueryMacrosList = new Array();
        try {
                if (IsEmptyGUID(TemplateID)) {
                        return;
                }
                var Dataset = GetSingleItemByCode('ds_MailTemplate');
                ApplyDatasetIDFilter(Dataset, TemplateID, true);
                Dataset.Open();
                try {
                        if (IsDatasetEmpty(Dataset)) {
                                return;
                        }
                        var QueryID = Dataset.Values('QueryID');
                        if (IsEmptyGUID(QueryID)) {
                                return;
                        }
                        Obj.QueryID = QueryID;
                        var UserQuery = CreateUserQueryObject(QueryID);
                        if (UserQuery.Error) {
                                return;
                        }
                        var Column;
                        for (var Key in UserQuery.Columns) {
                                Column = UserQuery.Columns[Key];
                                Info.QueryMacrosList.push([Column.Caption, '#' + Column.Caption + '#']);
                        }
                } finally {
                        Dataset.Close();
                        ApplyDatasetIDFilter(Dataset, null, false);
                }
        } finally {
                return Info;
        }
}

Версия программы 3.4.

Нравится

Поделиться

0 комментариев
Показать все комментарии