Hallo liebes SW-Forum,
ich versuche mithilfe von ExtJS das Bestellmodul so zu erweitern, dass alle angehakten Bestellungen (plus Stücklistenartikel und deren Bestandteile, etc.) in eine CSV-Datei geschrieben werden.
Das Erweitern des Bestell-Moculs funktioniert soweit und eine Controller-Funktion wird beim Klicken des Buttons (exportiere) ausgeführt.
Dabei wird jedoch ein Fehler geworfen: Uncaught TypeError: Cannot read property ‘getSelectionModel’ of undefined
Daher meine Frage, wie greife ich auf das Grid zu, um danach für jeden Artikel die Stapelverarbeitung auszuführen?
Ich habe mich hierbei an das Tutorial von Shopware gehalten: Backend Components - Batch Processes
app.js
//{block name="backend/order/application"}
//{$smarty.block.parent}
//{include file="backend/export_orders/controller/export.js"}
//{/block}
view/list/list.js
//{namespace name="backend/export_orders/order"}
//{block name="backend/order/view/list/list"}
//{$smarty.block.parent}
Ext.define('Shopware.apps.CstormExportOrders.view.list.List', {
override: 'Shopware.apps.Order.view.list.List',
alias: 'widget.order-listing-grid',
/**
* Adds the specified events to the list of events which this Observable may fire.
*/
registerEvents: function() {
this.addEvents(
/**
* Event will be fired when the user clicks the "delete order" action column icon
* which is placed in the order list in the options column
*
* @event
* @param [object] - Form values
*/
'exportOrders'
);
},
getToolbar: function () {
var me = this,
toolbar = me.callParent(arguments);
me.createExportButton = me.createExportButton();
toolbar.insert(1, me.createExportButton);
return toolbar;
},
createExportButton: function() {
var me = this;
return Ext.create('Ext.button.Button', {
// iconCls:'sprite-drive-download',
text: 'Export Orders',
// action:'exportOrders',
disabled:true,
handler: function() {
console.log('button clicked...');
console.log(me);
me.fireEvent('exportOrders', me);
}
});
},
/**
* Creates the grid selection model for checkboxes
*
* @return [Ext.selection.CheckboxModel] grid selection model
*/
getGridSelModel:function () {
/* ... */
}
});
//{/block}
controller/export.js
//{namespace name=backend/order/list}
Ext.define('Shopware.apps.CstormExportOrders.controller.Export', {
/**
* Override the order list controller
* @string
*/
override: 'Shopware.apps.Order.controller.List',
init: function () {
var me = this;
me.callParent(arguments);
me.control({
'order-listing-grid': {
exportOrders: me.displayProcessWindow()
}
});
Shopware.app.Application.on('processExportOrders', me.onExportOrders);
},
displayProcessWindow: function(grid) {
var seletion = grid.getSelectionModel().getSelection();
if (seletion.length <= 0) return;
Ext.create('Shopware.window.Progress', {
title: 'Export Orders',
configure: function() {
return {
tasks: [{
event: 'processExportOrders',
data: selection,
text: 'Product [0] von [1]'
}],
infoText: 'Export Products'
}
}
}).show();
},
onExportOrders: function (task, record, callback) {
Ext.Ajax.request({
url: '{url controller=CstormExportOrders action=exportOrders}',
method: 'POST',
params: {
orderId: record.get('id')
},
success: function(response, operation) {
callback(response, operation);
}
});
}
});
Vielen Dank im Voraus
MfG Lennart