Получение значения стандартных фильтров и обработка события изменения фильтров
Здравствуйте.
Используется BPMonline sales comerce версии 7.6.
В разделе продажи есть стандартные фильтры, при изменении которых фильтруются вывод продаж в гриде, что и сразу отображается. Так же есть в этом разделе кнопка аналитика, где строятся графики и можно писать свои виджеты. Я написал виджет который рисует таблицу с нужными полями. Хочется также применять стандартные фильтры для отображения данных в моей таблице. Собственно вопрос, как получить значения этих фильтров и как правильно обрабатывать событие изменения фильтров для перерисовки моей таблици???
Пример клиентсткого модуля для виджета, который рисует таблицу:
function(Ext, Terrasoft, sandbox, resources, ChartModuleHelper, css, ServiceHelper, ConfigurationConstants) {
function getViewModel() {
return Ext.create('Terrasoft.BaseViewModel', {
//todo SysModuleAnalyticsChart deleted
entitySchema: 'Order',
methods: {
getChart: function(key) {
sandbox.publish('GenerateChart', key);
},
load: function() {
}
}
});
};
var result = "";
function generateMainView(renderTo) {
var resultConfig = Ext.create('Terrasoft.Container', {
id: 'tableOtchetMetkiParamContainer',
selectors: {
wrapEl: '#tableOtchetMetkiParamContainer'
},
renderTo: renderTo
});
return resultConfig;
}
function getInfoMetki(parameters) {
var serviceData = {
site: parameters[0].toString(),
ownerId: parameters[1].toString(),
startDate: parameters[2].toString(),
dueDate: parameters[3].toString(),
countryId: parameters[4].toString()
};
ServiceHelper.callService("UsrOtchetMetkiGetCollectionConfigurationService", "GetCollectionOtchetMetki",
function (response) {
debugger
if (response.status == 404) {
this.showInformationDialog("\t Error: \n" + response.message);
}
else if(response.GetCollectionOtchetMetkiResult.length > 0){
result = response.GetCollectionOtchetMetkiResult;
var arrR = result.split(":");
var htmlAdded = "
Метка | Количество заказов | На уточнении | % уточн. | Подтвержденные | % Подтв. | Завершенные | % Заверш. | Отмены | % Отм. |
---|
for(var i = 0; i arrR.length - 1; i++){
//get items
var strArr = arrR[i].split(" ");
var metkaOne = strArr[0].replace("{","");
var metka = metkaOne.replace("}","");
htmlAdded += "
}
//end table
htmlAdded += "";
var el = Ext.get('tableOtchetMetkiParamContainer').setHTML(htmlAdded);
var elemV = Ext.get('Module1');
elemV.toggleCls('my-table');
}
else
result = null;
}, serviceData, this);
}
var render = function(renderTo) {
var viewConfig = generateMainView(renderTo);
var viewModel = getViewModel();
var filters = getFilteres();
var ar = [];
ar.push("all");
ar.push("all");
ar.push("2016-05-01");
ar.push("2016-07-04");
ar.push("a570b005-e8bb-df11-b00f-001d60e938c6");
getInfoMetki(ar);
viewConfig.bind(viewModel);
};
return {
schema: 'Order',
methods: {
getOrdersForFilter: function(){
var items = [];
var selOrders = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Order"
});
selOrders.addColumn("SxMark.Name");
selOrders.addColumn("SxCountry.Name");
var filterByUser = Terrasoft.createColumnFilterWithParameter(
Terrasoft.ComparisonType.EQUAL, "SxCountry.Name", "Россия");
selOrders.filters.addItem(filterByUser);
selOrders.getEntityCollection(function (response) {
debugger
if (response.collection.collection.length > 0)
items = result.collection.getItems();
else
items = null;
}, this);
return items;
},
filterChanged: function( filter, eOpts ){
debugger
var c = [];
}
},
userCode: function() {
},
init: function() {
debugger
},
render: render
};
}
)
;
Нравится
Скорее всего вам поможет SDK
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/rabota-s-filtr…
Есть несколько примеров
К сожалению, ширина сайта не позволяет увидеть страницу целиком :(, поэтому скопируйте все содержимое, например в MSWord
Я решил данную задачу при помощи sandbox. Стандартные (Fixed и Custom) фильтры прикреплены к OrderSectionV2 и работать с ними (afterFiltersUpdated - переопределить метод изменение фильтров) только в этой схеме.