Помогите найти функционал

Агенты-->Контакты. При нажатии на контакт в контекстном меню правой кнопкой мышки открывается окно с функционалом(отправить е-mail, позвонить, объединить записи ........).
При наведении на отправить е-mail появляется окно(ответственный, создал, изменил). В это открытое окно надо добавить поле контакт. То есть должно появиться окно вида: отправить е-mail --> (контакт, ответственный, создал, изменил). Подскажите пожалуйста как найти функционал где реализован этот выпадающий список. Спасибо

Нравится

5 комментариев

Он заполняется в скрипте 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 контакта, тоже придётся написать аналог для схемы контрагента.

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