Moin,
an Hand der Dokumentation habe ich für Kategorien den CategoryController.php erstellt. Funktioniert soweit.
Im nächsten Schritt möchte ich nun die Attribute der Kategorien ebenfalls speichern und die IDs der Kategorie-Attribute mappen.
Bisher habe ich dazu einfach in der push-Methode die Objekte im übergebenen $model genutzt und für Kategorie-Attribute, ähnlich wie bei der Kategorie selbst, gebrüft ob eine Endpunkt-ID für das Attribut vorhanden ist. Wenn nicht, habe ich sie erzeugt und im Model gesetzt. Genauso wie bei fehlender Endpunkt-ID einer Kategorie.
Meinem Verständnis nach übernimmt dann der PrimaryKeyMapper (aus dem Beispiel der Dokumentation entnommen) die Aufgabe das Mapping für den jeweiligen Typ (Kategorie, Kategorie-Attribut, etc.) in der Mapping-Tabelle zu speichern. Für Kategorien klappt das, für Kategorie-Attribute leider nicht.
Ich habe mir nun viele der Connectoren für Gambio & Co angeschaut, um zu sehen, wie das dort gemacht wird, aber das sind gegenüber der Dokumentation und den darin enthalten Beispielen andere Ansätze.
Was habe ich übersehen, dass das Mapping für die Kategorie-Attribute nicht gespeichert wird? Wird dafür ein eigener Controller benötigt (habe keinen eruieren können)? Muss für Kategorie-Attribute das Mapping von Hand angestoßen werden?
Freundliche Grüße
Hape von Bröös
Hier noch ein paar Eckdaten:
JTL Connector 4.0.10
Connector Tester 1.0.5.6
PHP 8.0.3
MariaDB 10.5.8
Noch eine andere Sache, die mir aufgefallen ist:
Im Response der Push-Aktion wird bei allen Objekten zusätzlich
an Hand der Dokumentation habe ich für Kategorien den CategoryController.php erstellt. Funktioniert soweit.
Im nächsten Schritt möchte ich nun die Attribute der Kategorien ebenfalls speichern und die IDs der Kategorie-Attribute mappen.
Bisher habe ich dazu einfach in der push-Methode die Objekte im übergebenen $model genutzt und für Kategorie-Attribute, ähnlich wie bei der Kategorie selbst, gebrüft ob eine Endpunkt-ID für das Attribut vorhanden ist. Wenn nicht, habe ich sie erzeugt und im Model gesetzt. Genauso wie bei fehlender Endpunkt-ID einer Kategorie.
Meinem Verständnis nach übernimmt dann der PrimaryKeyMapper (aus dem Beispiel der Dokumentation entnommen) die Aufgabe das Mapping für den jeweiligen Typ (Kategorie, Kategorie-Attribut, etc.) in der Mapping-Tabelle zu speichern. Für Kategorien klappt das, für Kategorie-Attribute leider nicht.
Ich habe mir nun viele der Connectoren für Gambio & Co angeschaut, um zu sehen, wie das dort gemacht wird, aber das sind gegenüber der Dokumentation und den darin enthalten Beispielen andere Ansätze.
Was habe ich übersehen, dass das Mapping für die Kategorie-Attribute nicht gespeichert wird? Wird dafür ein eigener Controller benötigt (habe keinen eruieren können)? Muss für Kategorie-Attribute das Mapping von Hand angestoßen werden?
Freundliche Grüße
Hape von Bröös
Hier noch ein paar Eckdaten:
JTL Connector 4.0.10
Connector Tester 1.0.5.6
PHP 8.0.3
MariaDB 10.5.8
Code:
#########
# Request #
#########
{
"method": "core.connector.features",
"params": null,
"jtlrpc": "2.0",
"id": "3e7fa2006a3645f08589b9b8473a67b4"
}
##########
# Response #
##########
{
"result": {
"entities": {
"Category": {
"pull": true,
"push": true,
"delete": true
},
"CategoryAttr": {
"pull": true,
"push": true,
"delete": true
},
"CategoryAttrI18n": {
"pull": true,
"push": true,
"delete": true
},
"CategoryCustomerGroup": {
"pull": false,
"push": false,
"delete": false
},
"CategoryI18n": {
"pull": true,
"push": true,
"delete": true
},
"CategoryInvisibility": {
"pull": false,
"push": false,
"delete": false
},
"Checksum": {
"pull": false,
"push": false,
"delete": false
},
"ConfigGroup": {
"pull": false,
"push": false,
"delete": false
},
"ConfigGroupI18n": {
"pull": false,
"push": false,
"delete": false
},
"ConfigItem": {
"pull": false,
"push": false,
"delete": false
},
"ConfigItemI18n": {
"pull": false,
"push": false,
"delete": false
},
"ConfigItemPrice": {
"pull": false,
"push": false,
"delete": false
},
"CrossSelling": {
"pull": false,
"push": false,
"delete": false
},
"CrossSellingGroup": {
"pull": false,
"push": false,
"delete": false
},
"CrossSellingGroupI18n": {
"pull": false,
"push": false,
"delete": false
},
"CrossSellingItem": {
"pull": false,
"push": false,
"delete": false
},
"Currency": {
"pull": false,
"push": false,
"delete": false
},
"Customer": {
"pull": false,
"push": false,
"delete": false
},
"CustomerAttr": {
"pull": false,
"push": false,
"delete": false
},
"CustomerGroup": {
"pull": false,
"push": false,
"delete": false
},
"CustomerGroupAttr": {
"pull": false,
"push": false,
"delete": false
},
"CustomerGroupI18n": {
"pull": false,
"push": false,
"delete": false
},
"CustomerGroupPackagingQuantity": {
"pull": false,
"push": false,
"delete": false
},
"CustomerOrder": {
"pull": false,
"push": false,
"delete": false
},
"CustomerOrderAttr": {
"pull": false,
"push": false,
"delete": false
},
"CustomerOrderBillingAddress": {
"pull": false,
"push": false,
"delete": false
},
"CustomerOrderItem": {
"pull": false,
"push": false,
"delete": false
},
"CustomerOrderItemVariation": {
"pull": false,
"push": false,
"delete": false
},
"CustomerOrderPaymentInfo": {
"pull": false,
"push": false,
"delete": false
},
"CustomerOrderShippingAddress": {
"pull": false,
"push": false,
"delete": false
},
"DeliveryNote": {
"pull": false,
"push": false,
"delete": false
},
"DeliveryNoteItem": {
"pull": false,
"push": false,
"delete": false
},
"DeliveryNoteItemInfo": {
"pull": false,
"push": false,
"delete": false
},
"FileDownload": {
"pull": false,
"push": false,
"delete": false
},
"FileDownloadI18n": {
"pull": false,
"push": false,
"delete": false
},
"FileUpload": {
"pull": false,
"push": false,
"delete": false
},
"FileUploadI18n": {
"pull": false,
"push": false,
"delete": false
},
"GlobalData": {
"pull": true,
"push": false,
"delete": false
},
"Image": {
"pull": false,
"push": false,
"delete": false
},
"Language": {
"pull": false,
"push": false,
"delete": false
},
"Manufacturer": {
"pull": false,
"push": false,
"delete": false
},
"ManufacturerI18n": {
"pull": false,
"push": false,
"delete": false
},
"MeasurementUnit": {
"pull": false,
"push": false,
"delete": false
},
"MeasurementUnitI18n": {
"pull": false,
"push": false,
"delete": false
},
"MediaFile": {
"pull": false,
"push": false,
"delete": false
},
"MediaFileAttr": {
"pull": false,
"push": false,
"delete": false
},
"MediaFileAttrI18n": {
"pull": false,
"push": false,
"delete": false
},
"MediaFileI18n": {
"pull": false,
"push": false,
"delete": false
},
"PartsList": {
"pull": false,
"push": false,
"delete": false
},
"Payment": {
"pull": false,
"push": false,
"delete": false
},
"Product": {
"pull": false,
"push": false,
"delete": false
},
"Product2Category": {
"pull": false,
"push": false,
"delete": false
},
"ProductAttr": {
"pull": false,
"push": false,
"delete": false
},
"ProductAttrI18n": {
"pull": false,
"push": false,
"delete": false
},
"ProductConfigGroup": {
"pull": false,
"push": false,
"delete": false
},
"ProductFileDownload": {
"pull": false,
"push": false,
"delete": false
},
"ProductI18n": {
"pull": false,
"push": false,
"delete": false
},
"ProductInvisibility": {
"pull": false,
"push": false,
"delete": false
},
"ProductPartsList": {
"pull": false,
"push": false,
"delete": false
},
"ProductPrice": {
"pull": false,
"push": false,
"delete": false
},
"ProductPriceItem": {
"pull": false,
"push": false,
"delete": false
},
"ProductSpecialPrice": {
"pull": false,
"push": false,
"delete": false
},
"ProductSpecialPriceItem": {
"pull": false,
"push": false,
"delete": false
},
"ProductSpecific": {
"pull": false,
"push": false,
"delete": false
},
"ProductStockLevel": {
"pull": false,
"push": false,
"delete": false
},
"ProductType": {
"pull": false,
"push": false,
"delete": false
},
"ProductVarCombination": {
"pull": false,
"push": false,
"delete": false
},
"ProductVariation": {
"pull": false,
"push": false,
"delete": false
},
"ProductVariationI18n": {
"pull": false,
"push": false,
"delete": false
},
"ProductVariationInvisibility": {
"pull": false,
"push": false,
"delete": false
},
"ProductVariationValue": {
"pull": false,
"push": false,
"delete": false
},
"ProductVariationValueDependency": {
"pull": false,
"push": false,
"delete": false
},
"ProductVariationValueExtraCharge": {
"pull": false,
"push": false,
"delete": false
},
"ProductVariationValueI18n": {
"pull": false,
"push": false,
"delete": false
},
"ProductVariationValueInvisibility": {
"pull": false,
"push": false,
"delete": false
},
"ProductWarehouseInfo": {
"pull": false,
"push": false,
"delete": false
},
"Shipment": {
"pull": false,
"push": false,
"delete": false
},
"ShippingClass": {
"pull": false,
"push": false,
"delete": false
},
"Specific": {
"pull": false,
"push": true,
"delete": false
},
"SpecificI18n": {
"pull": false,
"push": true,
"delete": false
},
"SpecificValue": {
"pull": false,
"push": true,
"delete": false
},
"SpecificValueI18n": {
"pull": false,
"push": true,
"delete": false
},
"Statistic": {
"pull": false,
"push": false,
"delete": false
},
"StatusChange": {
"pull": false,
"push": false,
"delete": false
},
"TaxClass": {
"pull": false,
"push": false,
"delete": false
},
"TaxRate": {
"pull": false,
"push": false,
"delete": false
},
"TaxZone": {
"pull": false,
"push": false,
"delete": false
},
"TaxZoneCountry": {
"pull": false,
"push": false,
"delete": false
},
"Unit": {
"pull": false,
"push": false,
"delete": false
},
"UnitI18n": {
"pull": false,
"push": false,
"delete": false
},
"Warehouse": {
"pull": false,
"push": false,
"delete": false
}
},
"flags": {
"var_combination_child_first": false,
"product_images_supported": false,
"category_images_supported": false,
"manufacturer_images_supported": false,
"specific_images_supported": false,
"specific_value_images_supported": false,
"config_group_images_supported": false,
"product_variation_value_images_supported": false,
"variation_products_supported": false,
"variation_combinations_supported": true,
"set_articles_supported": false,
"free_field_supported": false,
"needs_category_root": false,
"translated_attributes_supported": true,
"send_all_acks": false,
"disable_statistics": false,
"needs_finish_call": true
}
},
"error": null,
"jtlrpc": "2.0",
"id": "3e7fa2006a3645f08589b9b8473a67b4"
}
#########
# Request #
#########
{
"method": "category.push",
"params": [
{
"id": [
"",
1
],
"parentCategoryId": [
"",
0
],
"isActive": true,
"level": 0,
"sort": 0,
"attributes": [
{
"categoryId": [
"",
1
],
"id": [
"",
1
],
"isCustomProperty": false,
"isTranslated": false,
"i18ns": [
{
"categoryAttrId": [
"",
1
],
"languageISO": "ger",
"name": "attribute1",
"value": "Hallo Frank"
}
]
},
{
"categoryId": [
"",
1
],
"id": [
"",
2
],
"isCustomProperty": false,
"isTranslated": false,
"i18ns": [
{
"categoryAttrId": [
"",
2
],
"languageISO": "ger",
"name": "attribute2",
"value": "Dies ist ein Test"
}
]
}
],
"customerGroups": [],
"i18ns": [
{
"categoryId": [
"",
1
],
"description": "",
"languageISO": "ger",
"metaDescription": "",
"metaKeywords": "",
"name": "Hardware",
"titleTag": "",
"urlPath": ""
}
],
"invisibilities": []
},
{
"id": [
"",
2
],
"parentCategoryId": [
"",
1
],
"isActive": true,
"level": 1,
"sort": 0,
"attributes": [],
"customerGroups": [],
"i18ns": [
{
"categoryId": [
"",
2
],
"description": "",
"languageISO": "ger",
"metaDescription": "",
"metaKeywords": "",
"name": "Apple",
"titleTag": "",
"urlPath": ""
}
],
"invisibilities": []
}
],
"jtlrpc": "2.0",
"id": "1784e1cdd79a4310b5d80b228192350f"
}
##########
# Response #
##########
{
"result": [
{
"id": [
"1b70562e2d3f4405afca09721a1a93f5",
1
],
"parentCategoryId": [
"",
0
],
"isActive": true,
"level": 0,
"sort": 0,
"attributes": [
{
"id": [
"67826c4168e24202ad568e5c70b42364",
1
],
"isTranslated": false,
"isCustomProperty": false,
"i18ns": [
{
"languageIso": "de",
"name": "attribute1",
"value": "Hallo Frank",
"languageISO": "ger"
}
]
},
{
"id": [
"987bd450aef74d54a029ff5285446366",
2
],
"isTranslated": false,
"isCustomProperty": false,
"i18ns": [
{
"languageIso": "de",
"name": "attribute2",
"value": "Dies ist ein Test",
"languageISO": "ger"
}
]
}
],
"customerGroups": [],
"i18ns": [
{
"languageIso": "de",
"description": "",
"metaDescription": "",
"metaKeywords": "",
"name": "Hardware",
"titleTag": "",
"urlPath": "",
"languageISO": "ger"
}
],
"invisibilities": []
},
{
"id": [
"1a28bdd94be140dfbda3e758690f5e2a",
2
],
"parentCategoryId": [
"1b70562e2d3f4405afca09721a1a93f5",
1
],
"isActive": true,
"level": 1,
"sort": 0,
"attributes": [],
"customerGroups": [],
"i18ns": [
{
"languageIso": "de",
"description": "",
"metaDescription": "",
"metaKeywords": "",
"name": "Apple",
"titleTag": "",
"urlPath": "",
"languageISO": "ger"
}
],
"invisibilities": []
}
],
"error": null,
"jtlrpc": "2.0",
"id": "1784e1cdd79a4310b5d80b228192350f"
}
Noch eine andere Sache, die mir aufgefallen ist:
Code:
"languageIso": "de",
"name": "attribute2",
"value": "Dies ist ein Test",
"languageISO": "ger"
Im Response der Push-Aktion wird bei allen Objekten zusätzlich
"languageIso": "de"
gesetzt. Warum wird das gemacht? Wenn ich mir den Iso ausgeben lasse ist es "de" und so wird es dann auch bei uns in der DB abgespeichert. Aber von der WaWi bzw. vom Connector-Tester wird "ger" angeliefert.
Zuletzt bearbeitet: