Attribut aus "s_order_details_attributes" im Backend anzeigen?

Guten Tag zusammen,

Meine Shopwareversion:

5.2.24

ich habe gestern den ganzen Tag am Ende dann frustriert, das Forum hier durchsucht und andere Ressourcen wie ich generell erst einmal auf die abgespeicherten Detail Attribute einer abgespeicherten Bestellung zugreifen kann.

Ich habe viele Posts gefunden mit Mehtoden etc. aber alle meistens 2 Jahre+ alt und ich habe jetzt bestimmt 100 Wege ausprobiert aber es kommt einfach zu keiner Ausgabe.

Schritt 1:

Ich habe einen Wert “attribite1” in der Datenbank jeweils in der Tabelle “s_order_details_attributes” - die EIngabe und das Speichern über das Frontend funktioniert.

Nur wie kann ich mit ExtJS auf diese Tabelle zugreifen? Da sich ja mit 5.2 scheinbar einiges verändert hat, und da ich neu in ExtJS bin ist das noch alles etwas viel am Anfang.

Schritt 2:

Ziel ist es in der Detailansicht einer Bestellung, in der Liste der gekauften Produkte eine neue Spalte anzeigen zu lassen, mit den Daten aus der “s_order_details_attribute”.
Da hier die Daten für die jeweilige Position des Artikels gespeichert werden sollen.

Bisheriger Hauptansatz:

unter “themes/Backend/ExtJs/backend/order/view/detail” die “position.js” editieren.
Aber ich bekomme maximal eine Spalte ohne Inhalt, das habe ich auch per Suche im Forum schon oft gefunden, aber keine der Lösungen führte bei mir zu einem Ergebnis.

Wo ist die Schnittstelle, damit ich bei einer einzelnen Listenposition den jeweiligen Wert aus der Tabelle “s_order_details_attributes” abrufen kann?
 

Vielen Dank im Voraus gez. Max

 

 

Niemand einen Ansatz oder eine Idee =( ?

Hast du mal über {debug} geguckt ob die Variable da bekannt ist ?

Das gleiche Problem bei mir ich bekomme die Spate ohne Inhalt 

Hast du eine lösung gefunden ?

Ich glaube du musst den Inhalt des Feldes per Ajax nachladen und auch wieder per Ajax speichern, So mache ich das beim Customer Form.

Schau mal ob du hiermit was anfangen kannst wenn du es umschreibst:

Daten Laden in deiner View JS

/**
     * Component event method which is fired when the component
     * is initials. The component is initials when the user
     * want to create a new customer or edit an existing customer
     * @return void
     */
    initComponent:function () {
        var me = this;

        me.title = me.snippets.title;
        me.items = me.createBaseForm();

        me.registerEvents();

        if(me.record.data.id >= 1){
            var billingaddress = me.record.getBilling().first().getData();

            if(billingaddress.company !== ""){
                me.title += ' - ' + billingaddress.company;
            }

            Ext.Ajax.request({
                url: '{url controller=AttributeData action=loadData}',
                params: {
                    _foreignKey: me.record.data.id,
                    _table: 's_user_attributes'
                },
                success: function(responseData, request) {
                    var response = Ext.JSON.decode(responseData.responseText);

                    me.attrBranche.setValue(response.data['__attribute_branche']);
                    me.attrHomepage.setValue(response.data['__attribute_homepage']);
                    me.attrFirmenGrundung.setValue(response.data['__attribute_firmen_grundung']);
                    me.attrFirmenBeschreibung.setValue(response.data['__attribute_firmen_beschreibung']);
                }
            });
        }

        me.callParent(arguments);
    },

Daten Speichern

//{block name="backend/customer/controller/detail"}
//{$smarty.block.parent}
Ext.define('Shopware.apps.Customer.controller.MyDetail', {
    override: 'Shopware.apps.Customer.controller.Detail',
    init: function () {
        var me = this;

        Shopware.app.Application.on('customer-save-successfully', function(me2, record, win, form) {
            var companyPofile = win.companyProfileFieldset;
            if(companyPofile){
                Ext.Ajax.request({
                    method: 'POST',
                    url: '{url controller=AttributeData action=saveData}',
                    params: {
                        _foreignKey: record.data.id,
                        _table: 's_user_attributes',
                        __attribute_branche: '' + companyPofile.attrBranche.value,
                        __attribute_homepage: '' + companyPofile.attrHomepage.value,
                        __attribute_firmen_grundung: '' + companyPofile.attrFirmenGrundung.value,
                        __attribute_firmen_beschreibung: '' + companyPofile.attrFirmenBeschreibung.value,
                    },
                    success: function(responseData, request) {
                        var response = Ext.JSON.decode(responseData.responseText);
                    }
                });
            }
        });
        // fixme {*
        Shopware.app.Application.on('address-save-successfully', function() {
            me.getDetailWindow().reloadCreateFormTab();
        });
        //*}
        me.callParent(arguments);
    }
});
//{/block}

 

@MariusMeiners schrieb:

Hast du mal über {debug} geguckt ob die Variable da bekannt ist ?

Naja {debug} bringt mir nur im Frontend wirklich etwas oder? 

@tducc schrieb:

Ich glaube du musst den Inhalt des Feldes per Ajax nachladen und auch wieder per Ajax speichern, So mache ich das beim Customer Form.

Schau mal ob du hiermit was anfangen kannst wenn du es umschreibst:

Daten Laden in deiner View JS

/**

  • Component event method which is fired when the component
  • is initials. The component is initials when the user
  • want to create a new customer or edit an existing customer
  • @return void
    */
    initComponent:function () {
    var me = this;

me.title = me.snippets.title;
me.items = me.createBaseForm();

me.registerEvents();

if(me.record.data.id >= 1){
var billingaddress = me.record.getBilling().first().getData();

if(billingaddress.company !== „“){
me.title += ’ - ’ + billingaddress.company;
}

Ext.Ajax.request({
url: ‚{url controller=AttributeData action=loadData}‘,
params: {
_foreignKey: me.record.data.id,
_table: ‚s_user_attributes‘
},
success: function(responseData, request) {
var response = Ext.JSON.decode(responseData.responseText);

me.attrBranche.setValue(response.data[‚__attribute_branche‘]);
me.attrHomepage.setValue(response.data[‚__attribute_homepage‘]);
me.attrFirmenGrundung.setValue(response.data[‚__attribute_firmen_grundung‘]);
me.attrFirmenBeschreibung.setValue(response.data[‚__attribute_firmen_beschreibung‘]);
}
});
}

me.callParent(arguments);
},

Daten Speichern

//{block name=„backend/customer/controller/detail“}
//{$smarty.block.parent}
Ext.define(‚Shopware.apps.Customer.controller.MyDetail‘, {
override: ‚Shopware.apps.Customer.controller.Detail‘,
init: function () {
var me = this;

Shopware.app.Application.on(‚customer-save-successfully‘, function(me2, record, win, form) {
var companyPofile = win.companyProfileFieldset;
if(companyPofile){
Ext.Ajax.request({
method: ‚POST‘,
url: ‚{url controller=AttributeData action=saveData}‘,
params: {
_foreignKey: record.data.id,
_table: ‚s_user_attributes‘,
__attribute_branche: ‚‘ + companyPofile.attrBranche.value,
__attribute_homepage: ‚‘ + companyPofile.attrHomepage.value,
__attribute_firmen_grundung: ‚‘ + companyPofile.attrFirmenGrundung.value,
__attribute_firmen_beschreibung: ‚‘ + companyPofile.attrFirmenBeschreibung.value,
},
success: function(responseData, request) {
var response = Ext.JSON.decode(responseData.responseText);
}
});
}
});
// fixme {*
Shopware.app.Application.on(‚address-save-successfully‘, function() {
me.getDetailWindow().reloadCreateFormTab();
});
//*}
me.callParent(arguments);
}
});
//{/block}

 

Ok ein AJAX Aufruf geht immer, aber wie kann ich das das dann in der Tabelle anzeigen lassen?

Ich bin leider neu bei EXT JS und mir fällt der Einstieg trotz schon stundenlangen Einlesens gerade etwas schwer, da ich auch etwas unter Zeitdruck bin und ich nicht gedacht hatte, dass es so schwer ist einfach nur eine Variable weiterzuverarbeiten.

Ich speichere die Variable vom Frontend, während das Produkt in den Warenkorb gelangt und bei der abgeschlossenen Betellung, das klappt auch sehr gut.

Es muss doch dannn schon irgendwo diese Variable verfügbar sein,… =(

Ok also zumindest habe ich jetzt endlich gesehen, dass über die Freitextfelder und das Anzeigen derer im Backend, in der Detailleiste die Eingaben aufgeführt werden, also sind die Werte vorhanden und mit der Anzeige kann ich auch erstmal arbeiten.

 

Jetzt schaue ich mal, ob ich eine Option finde, das Ganze auch an das JTL WAWI auszugeben.