Добрый день.
Как мне из схемы конфигурации ActivityMiniPage получить данные привязанного лида ?
При наведении на активность в боковой панели вызываю функцию getEmail. В ней пытаюсь получить сначала id лида, потом по этому id получить объект из БД. Как это правильно сделать?
getEmail: function() {
var id = ??;
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Lead"
});
esq.addColumn("Id");
esq.addColumn("Email");
esq.getEntity(id, function(result) {
this.console.log(result.entity.get("Email"));
}, this);
Нравится
" При наведении на активность в боковой панели вызываю функцию "
Так. стоп. Т.е вы наводите на активность, появляется миникаточка, и тут где-то в недрах комм. панели происходит вызов функции? Просто я немного не понимаю скоуп вызова метода.
Если он всё-таки вызывается в миникарточке, то
var id = this.get("Lead") ? this.get("Lead").value : null;
Если в другой схеме, то тут надо реализовывать логику через сообщения
я пробовала уже так. постоянно null, даже когда лид привязан. функцию вызываю тут:
{
"operation": "insert",
"name": "ContactEmailButton",
"parentName": "ActivityGeneralInfoContainer",
"propertyName": "items",
"values": {
"itemType": Terrasoft.ViewItemType.LABEL,
"caption": {"bindTo": "getEmail"},
},
"visible": {
"bindTo": "isIconVisible"
}
}
>Т.е вы наводите на активность, появляется миникаточка, и тут где-то в недрах комм. панели происходит вызов функции
да
Ужас какой 
1) ActivityGeneralInfoContainer, есть в ActivityMiniPage. Всё-таки туда вы добали esq, а не в комм.панель.
2) "caption": {"bindTo": "getEmail"}. Не сработает. Кепшн биндится на статичную переменную, а не асинхронную функцию.
Попробуйте добавить аттрибут, тип текст. В diff кепшн биндите на этот аттрибут, а на onEntityInitialized запускайте свою функцию (там лид скорее всего будет известен) и после того как вытащите из лида email перенесите его в аттрибут
или ещё легче.
это в аттрибуты
"Lead": {
"lookupListConfig": {
"columns": ["Email"]
}
},
"MyLabelCaption": {
dataValueType: 1,
value: ""
}это в методы
onEntityInitialized: function(){
this.callParent(arguments);
this.set("MyLabelCaption", this.get("Lead") ? this.get("Lead").Email : "лид не найден");
}это в дифф
{
"operation": "insert",
"name": "ContactEmailButton",
"parentName": "ActivityGeneralInfoContainer",
"propertyName": "items",
"values": {
"itemType": Terrasoft.ViewItemType.LABEL,
"caption": {"bindTo": "MyLabelCaption"},
"visible": {"bindTo": "isIconVisible"}
}
}
а не подскажите еще, пожалуйста, как мне этот имейл сделать в таком вот виде http://prntscr.com/gwf5yb ? или хотя бы как обработать клик по элементу ?
это кнопка, с пустым кэпшеном, стиль - "transparent", наложена иконка с изображением, ну и с каким-то обработчиком.
при нажатии на имейл надо чтобы открывало окно с отправкой имейла. делаю вот так :
onTypeIconButtonClick: function() {
var value = this.get("Lead").Email;
if (value) {
var path = this.getLinkUrl(value);
this.console.log(path);
if (path) {
this.onLinkClick(path.url)
}
}
},
getLinkUrl: function(value) {
if (!value || Ext.isEmpty(value)) {
return {};
}
var emailUrl = EmailHelper.getEmailUrl(value);
if (Ext.isEmpty(emailUrl)) {
return {};
}
return {
url: emailUrl,
caption: value
};
return {};
},
onLinkClick: function(path) {
window.location.href = path;
},в консоле: http://prntscr.com/gwhngk
и на страницу с отправкой имейла не переходит
попробуйте
onTypeIconButtonClick: function() {
var value = this.get("Lead").Email;
if (value) {
this.openCard("EmailPageV2", "add", Terrasoft.generateGUID());
}
}