В продукте sales enterprice 7.8 в карточку раздела я добавила деталь "Запросы" с фильтром, отображающем на детали записи только с определенным типом.
Фильтр детали работает, но только после сброса кеша в браузере.
Без фильтра реестр записи обновлялся сразу после добавления записи на деталь. Как реализовать мгновенное обновление отфильтрованного реестра детали?
Нравится
Здравствуйте, Анастасия.
Не совсем понятно каким образом была добавлена фильтрация на деталь. В целом, обновление записей на деталях происходит через вызов метода updateDetails в карточке или же публикацию сообщения "UpdateDetail".
Более подробно о использовании сообщений Вы можете почитать по следующей ссылке:
"Мотков Илья" написал:Здравствуйте, Анастасия.
Не совсем понятно каким образом была добавлена фильтрация на деталь. В целом, обновление записей на деталях происходит через вызов метода updateDetails в карточке или же публикацию сообщения "UpdateDetail".
Более подробно о использовании сообщений Вы можете почитать по следующей ссылке:
http://www.community.terrasoft.ru/forum/topic/15210
Вот код:
details{
"UsrSchema4Detail19b3960f": {
"schemaName": "UsrSchema4Detail",
"entitySchemaName": "UsrRequest",
"filter": {
"detailColumn": "UsrSale",
"masterColumn": "Id"
},
"filterMethod": "UsrRequestFilter1"
}
}
methods{
UsrRequestFilter1: function() {
var filterGroup = new this.Terrasoft.createFilterGroup();
filterGroup.logicalOperation = Terrasoft.LogicalOperatorType.AND;
filterGroup.add(
"OpportunityFilter",
this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL,
"UsrSale",
this.get("Id")
)
);
filterGroup.add(
"UsrRequestFilter",
this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL,
"UsrTypeRequest",
"38cc7931-7db6-4e12-a343-1033f6316cf1"
)
);
return filterGroup;
}
}
В методе UsrRequestFilter1 после "return filterGroup;" теперь вызвали фунцию this.updateRequestDetails();
Сама функция:
updateRequestDetails: function(callback) {
this.updateDetail({detail: "UsrSchema4Detail19b3960f"});
callback.call(this);
}
Этот код разместили в карточке раздела, но лишние, не подходящие под условие фильтрации, записи после их добавления на деталь все равно пропадают с детали только после сброса кеша страницы.
Также пробовали код:
messages: {
"SetFilter": {
mode: Terrasoft.MessageMode.PTP,
direction: Terrasoft.MessageDirectionType.SUBSCRIBE
}
}
Деталь в массиве details:
"UsrSchema3Detailddb8302f": {
"schemaName": "UsrSchema3Detail",
"entitySchemaName": "UsrRequest",
"filter": {
"detailColumn": "UsrSale",
"masterColumn": "Id",
"UsrTypeRequest": "D0FBEB54-1381-4B01-A1F4-2BF074639122"
},
"filterMethod": "UsrRequestFilter1"
}
В массиве metthods разместили:
init: function() {
this.callParent(arguments);
console.log(this.sandbox.id);
this.sandbox.subscribe("SetFilter", function(arg) {
this.UsrRequestFilter1();
}, this, [this.getSenderSandboxId()]);
},
getSenderSandboxId: function() {
return this.sandbox.id + "_detail_UsrSchema3Detailddb8302fUsrRequest";
}
Но все равно фильтрация начинает работать только после сброса кеша.
Здравствуйте,
updateDetail точно не в фильтр метод нужно добавлять.
Проверьте для начала отладкой (точкой останова в фильтр методе), вызывается ли фильтр метод после добавления новой записи в деталь. Если не вызывается, то это будет один вопрос. Если вызывается но не фильтруются записи. Другой.
Так же вероятно в фильтр методе эта группа лишняя:
filterGroup.add(
"OpportunityFilter",
this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL,
"UsrSale",
this.get("Id")
)
);
Ведь по данной связи идет фильтрация и так благодаря:
"filter": {
"detailColumn": "UsrSale",
"masterColumn": "Id"
},
Проверьте вышесказанное и отпишитесь.