Агенты-->Контакты. При нажатии на контакт в контекстном меню правой кнопкой мышки открывается окно с функционалом(отправить е-mail, позвонить, объединить записи ........).
При наведении на отправить е-mail появляется окно(ответственный, создал, изменил). В это открытое окно надо добавить поле контакт. То есть должно появиться окно вида: отправить е-mail --> (контакт, ответственный, создал, изменил). Подскажите пожалуйста как найти функционал где реализован этот выпадающий список. Спасибо
Нравится
Он заполняется в скрипте CreateEmailCustomContextMenu_ScriptTask в БП страницы BaseGridPage.
Там перебираются все колонки объекта и для тех, что ссылаются на справочники «Контакт» и «Сотрудник» вызаывается функция EmailContextMenuItem, создающая пункт меню. Теоретически, можно попробовать доработать, чтобы в этот список попадала и колонка «Id» раздела.
"Зверев Александр" написал:Он заполняется в скрипте CreateEmailCustomContextMenu_ScriptTask в БП страницы BaseGridPage.
Там перебираются все колонки объекта и для тех, что ссылаются на справочники «Контакт» и «Сотрудник» вызаывается функция EmailContextMenuItem, создающая пункт меню. Теоретически, можно попробовать доработать, чтобы в этот список попадала и колонка «Id» раздела.
Извини может глупый вопрос, но возможно ты знаешь где я допустил ошибку или как можно решить эту проблему. Весь функционал работает для контакта. Но когда сделал для контрагента, окно тоже появляется но при нажатии на функционал(отправить на Email) в открывшем окне не подставляется Email контрагента в поле Кому. Все изменения в скриптах которые вносил отмечены /*add*/... Спасибо большое.
CreateEmailCustomContextMenu_ScriptTask в пакете BaseGridPage
var contactSchemaId = new Guid("16be3651-8fe2-4159-8dd0-a803d4683dd3"); var employeeSchemaId = new Guid("fb1c2bed-91d4-4b06-a28c-621a3d187008"); /* +Add IdAccount -- var accountSchemaId = new Guid("25d7c1ab-1de0-4501-b402-02e0e5a72d6e"); +Add -- Реализована логика проверки наявности заполненного поля в объектах контакта и контрагента. Если поле заполнено то отобразить дополнительный функционал. var ContactEmail = ""; var AccountEmail = ""; ContactEmail = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Contact", "Email", Page.DataSource.ActiveRowPrimaryColumnValue); if (email != "" && Page.DataSource.Schema.UId == contactSchemaId) { var menuItem = EmailContextMenuItem(Page.DataSource.Schema.Caption, GetSchemaTag("Contact", Page.DataSource.ActiveRowPrimaryColumnValue)); (Page.TreeGrid.Menu[0] as MenuItemBase).Menu.Add(menuItem); (Page.AspPage as Terrasoft.UI.WebControls.Page).RegisterClientSpecialInitScript(string.Format("{0} = {{}};{0}.setImage = Ext.emptyFn;", menuItem.ClientID)); (Page.TreeGrid.Menu[0] as MenuItemBase).Menu.AddCaptionItem(menuItem); } AccountEmail = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Account", "InvoicesEmail", Page.DataSource.ActiveRowPrimaryColumnValue); if (AccountEmail != "" && Page.DataSource.Schema.UId == accountSchemaId) { var menuItem = EmailContextMenuItem(Page.DataSource.Schema.Caption, GetSchemaTag("Account", Page.DataSource.ActiveRowPrimaryColumnValue)); (Page.TreeGrid.Menu[0] as MenuItemBase).Menu.Add(menuItem); (Page.AspPage as Terrasoft.UI.WebControls.Page).RegisterClientSpecialInitScript(string.Format("{0} = {{}};{0}.setImage = Ext.emptyFn;", menuItem.ClientID)); (Page.TreeGrid.Menu[0] as MenuItemBase).Menu.AddCaptionItem(menuItem); } --add */
ProcessEmailContextMenuClick_ScriptTaskExecute в пакете BaseGridPage
var extraParams = context.ThrowEventArgs as Dictionary; string tag = extraParams["tag"].ToString(); OpenEmailEditPage_BaseGridPage_UserTask.OpenerInstanceId = Page.Process.InstanceUId; OpenEmailEditPage_BaseGridPage_UserTask.PageUId = new Guid("DCDDA065-321B-4560-AACB-05F6CC72CD80"); Dictionary parameters = new Dictionary () { {"ContactId", ReadIdFromTag(tag, "ContactId").ToString()}, {"TemplateId", ReadIdFromTag(tag, "TemplateId").ToString()}, /* +add {"AccountId", ReadIdFromTag(tag, "AccountId").ToString()}, */ -add {"customClosedEvent", "EmailEditPageClosed"} }; OpenEmailEditPage_BaseGridPage_UserTask.PageParameters = parameters; return true;
Александр, во втором фрагменте Вы передаёте дополнительный параметр AccountId в карточку нового письма, которая должна открыться. Чтобы он обрабатывался, нужно в БП той страницы внести дополнительную логику, аналогично тому, как сделано для ContactId. См. в БП страницы EmailEditPage скрипт EnableSendButton, а конкретно строки:
var parameterContactId = GetIdFromParameter("ContactId"); if (!parameterContactId.Equals(Guid.Empty)) { dataSource.ActiveRow.SetColumnValue("Recepient", GetRecipientByContact(parameterContactId)); }
Для функции GetRecipientByContact (в дереве функций этой же страницы), которая получает адрес по Id контакта, тоже придётся написать аналог для схемы контрагента.