В продукте sales enterprice 7.8 в карточку раздела я добавила деталь "Запросы" с фильтром, отображающем на детали записи только с определенным типом.
Фильтр детали работает, но только после сброса кеша в браузере.
Без фильтра реестр записи обновлялся сразу после добавления записи на деталь. Как реализовать мгновенное обновление отфильтрованного реестра детали?

Нравится

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

Здравствуйте, Анастасия.

Не совсем понятно каким образом была добавлена фильтрация на деталь. В целом, обновление записей на деталях происходит через вызов метода updateDetails в карточке или же публикацию сообщения "UpdateDetail".

Более подробно о использовании сообщений Вы можете почитать по следующей ссылке:

http://www.community.terrasoft.ru/forum/topic/15210

"Мотков Илья" написал:

Здравствуйте, Анастасия.

Не совсем понятно каким образом была добавлена фильтрация на деталь. В целом, обновление записей на деталях происходит через вызов метода 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"
},
Проверьте вышесказанное и отпишитесь.

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