Neu JTL → Shopify Connector: MappingTablesException / „Endpoint id is empty“ – betroffene Artikel aus Logs per SQL finden

Puma7

Sehr aktives Mitglied
4. Mai 2016
409
44
Hallo zusammen,

wir hatten beim JTL-WawiShopify-Abgleich wiederholt das Problem, dass einzelne Artikel den kompletten Abgleich blockieren.

Die Fehlermeldung sah ungefähr so aus:

Code:
Controller = Product | Action = push
There is a problem with the linking - Id's (Endpoint id is empty)
The problem was caused by "Jtl\Connector\Shopify\Connector\Database\ProductTable"

MappingTablesException Code 90

Auffällig war bei uns:

Wenn man den betroffenen Artikel für den Shopify- Shop deaktiviert, läuft der Abgleich zunächst weiter. Aktiviert man denselben Artikel später wieder, kommt der Fehler erneut.

Das spricht aus meiner Sicht dafür, dass nicht der Artikel selbst das eigentliche Problem ist, sondern ein defektes Mapping im Shopify- Connector, also eine Verknüpfung zwischen JTL-Wawi-Artikel und Shopify-Produkt/Variante, bei der die Endpoint-ID leer oder beschädigt ist.

Da bei uns mehrere Artikel betroffen waren, habe ich mir eine SQL-Abfrage gebaut, um historisch aus den JTL-Connector-Logs herauszufinden, welche Artikel bereits mit diesem Fehler aufgefallen sind.

Wichtig:

Die Abfrage ist nur lesend. Sie macht kein UPDATE, DELETE, INSERT oder sonstige Datenänderungen.

Trotzdem sollte man sie natürlich mit Bedacht auf produktiven Systemen ausführen, da Logtabellen je nach Größe viele Daten enthalten können.

Vorher bitte anpassen:

SQL:
DECLARE @kShop INT = 26;
DECLARE @Seit DATETIME = DATEADD(DAY, -60, GETDATE());


  • []@kShop muss auf die eigene Shopify-Shop-ID angepasst werden.
    [
    ]@Seit legt fest, wie weit historisch gesucht wird.
    []-60 bedeutet: letzte 60 Tage.
    [
    ]Für 360 Tage entsprechend -360 verwenden.

Die Abfrage sucht in Sync.tConnectorLogeintrag nach typischen Fragmenten des Fehlers:


  • []Endpoint id is empty
    [
    ]MappingTablesException
  • ProductTable

Danach versucht sie aus dem Logtext folgende Informationen herauszuziehen:


  • []JTL-Wawi PK / kArtikel
    [
    ]SKU
    []Artikelname
    [
    ]Vaterartikel, falls es sich um einen Kindartikel handelt
    []Vater-SKU
    [
    ]Zeitpunkt des letzten Fehlers
  • Anzahl der gefundenen Fehler

Hier die Abfrage:

SQL:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET LOCK_TIMEOUT 5000;

DECLARE @kShop INT = 26;
DECLARE @Seit DATETIME = DATEADD(DAY, -60, GETDATE());

WITH LogTexte AS
(
SELECT
l.kConnectorLogeintrag,
l.kSyncLogsitzung,
l.dZeitpunkt,
l.kShop,
CONVERT(NVARCHAR(MAX), ISNULL(l.cMeldung, ''))
+ CHAR(10) +
CONVERT(NVARCHAR(MAX), ISNULL(l.cExtendedMessage, '')) AS LogText
FROM Sync.tConnectorLogeintrag l
WHERE l.kShop = @kShop
AND l.dZeitpunkt >= @Seit
AND (
l.cMeldung LIKE '%Endpoint id is empty%'
OR l.cExtendedMessage LIKE '%Endpoint id is empty%'
OR l.cMeldung LIKE '%MappingTablesException%'
OR l.cExtendedMessage LIKE '%MappingTablesException%'
OR l.cMeldung LIKE '%ProductTable%'
OR l.cExtendedMessage LIKE '%ProductTable%'
)
),
Positionen AS
(
SELECT
lt.*,
p1.PosPK,
p2.PosSKU,
p3.PosName,
p4.PosProblem,
p4.PosLinebreak
FROM LogTexte lt
OUTER APPLY
(
SELECT
CHARINDEX('JTL-Wawi PK = ', lt.LogText) AS PosPK
) p1
OUTER APPLY
(
SELECT
CASE
WHEN p1.PosPK > 0
THEN CHARINDEX(' | SKU = ', lt.LogText, p1.PosPK)
ELSE 0
END AS PosSKU
) p2
OUTER APPLY
(
SELECT
CASE
WHEN p2.PosSKU > 0
THEN CHARINDEX(' | Name = ', lt.LogText, p2.PosSKU)
ELSE 0
END AS PosName
) p3
OUTER APPLY
(
SELECT
CASE
WHEN p3.PosName > 0
THEN CHARINDEX(' | There is a problem', lt.LogText, p3.PosName)
ELSE 0
END AS PosProblem,
CASE
WHEN p3.PosName > 0
THEN CHARINDEX(CHAR(10), lt.LogText, p3.PosName)
ELSE 0
END AS PosLinebreak
) p4
),
Extrakt AS
(
SELECT
kConnectorLogeintrag,
kSyncLogsitzung,
dZeitpunkt,
kShop,

    TRY_CONVERT
    (
        INT,
        CASE
            WHEN PosPK > 0
             AND PosSKU > PosPK + LEN('JTL-Wawi PK = ')
            THEN SUBSTRING
            (
                LogText,
                PosPK + LEN('JTL-Wawi PK = '),
                PosSKU - (PosPK + LEN('JTL-Wawi PK = '))
            )
            ELSE NULL
        END
    ) AS kArtikel,

    LTRIM(RTRIM(
        CASE
            WHEN PosSKU > 0
             AND PosName > PosSKU + LEN(' | SKU = ')
            THEN SUBSTRING
            (
                LogText,
                PosSKU + LEN(' | SKU = '),
                PosName - (PosSKU + LEN(' | SKU = '))
            )
            ELSE NULL
        END
    )) AS SKU,

    LTRIM(RTRIM(
        CASE
            WHEN PosName > 0
            THEN SUBSTRING
            (
                LogText,
                PosName + LEN(' | Name = '),
                CASE
                    WHEN PosProblem > PosName + LEN(' | Name = ')
                    THEN PosProblem - (PosName + LEN(' | Name = '))

                    WHEN PosLinebreak > PosName + LEN(' | Name = ')
                    THEN PosLinebreak - (PosName + LEN(' | Name = '))

                    ELSE 500
                END
            )
            ELSE NULL
        END
    )) AS Artikelname,

    LogText
FROM Positionen

)
SELECT
e.kShop,
e.kArtikel,
MAX(e.SKU) AS SKU,
MAX(e.Artikelname) AS Artikelname,
a.kVaterArtikel,
CASE
WHEN a.kVaterArtikel > 0 THEN a.kVaterArtikel
ELSE a.kArtikel
END AS kVaterOderEinzelartikel,
v.cArtNr AS VaterSKU,
MAX(e.dZeitpunkt) AS LetzterFehler,
COUNT(*) AS FehlerAnzahl
FROM Extrakt e
LEFT JOIN dbo.tArtikel a
ON a.kArtikel = e.kArtikel
LEFT JOIN dbo.tArtikel v
ON v.kArtikel = CASE
WHEN a.kVaterArtikel > 0 THEN a.kVaterArtikel
ELSE a.kArtikel
END
WHERE e.kArtikel IS NOT NULL
GROUP BY
e.kShop,
e.kArtikel,
a.kVaterArtikel,
CASE
WHEN a.kVaterArtikel > 0 THEN a.kVaterArtikel
ELSE a.kArtikel
END,
v.cArtNr
ORDER BY
LetzterFehler DESC,
MAX(e.SKU);

Was macht die Abfrage genau?


  • []Sie liest die Connector-Logeinträge aus Sync.tConnectorLogeintrag.
    [
    ]Sie filtert auf den angegebenen Shop über @kShop.
    []Sie berücksichtigt nur Logeinträge ab dem Datum @Seit.
    [
    ]Sie sucht nach typischen Fehlerbestandteilen wie Endpoint id is empty, MappingTablesException und ProductTable.
    []Sie verbindet cMeldung und cExtendedMessage zu einem auswertbaren Logtext.
    [
    ]Sie extrahiert aus dem Logtext die JTL-Wawi-PK, SKU und den Artikelnamen.
    []Sie verknüpft den Treffer mit dbo.tArtikel, um bei Kindartikeln den Vaterartikel zu ermitteln.
    [
    ]Sie gruppiert die Treffer nach Artikel und zeigt den letzten Fehlerzeitpunkt sowie die Fehleranzahl.

Das Ergebnis zeigt dann zum Beispiel:


  • []kArtikel des betroffenen Artikels
    [
    ]SKU
    []Artikelname
    [
    ]kVaterArtikel
    []Vater-SKU
    [
    ]letzter Fehlerzeitpunkt
  • Anzahl der gefundenen Fehler

Wichtig zur Einordnung:

Diese Abfrage findet nur Artikel, bei denen der Fehler bereits im Log protokolliert wurde. Sie erkennt also nicht automatisch alle potenziell defekten Mappings im Voraus. Wenn Logs gelöscht oder bereinigt wurden, können ältere Fälle natürlich fehlen.

Bei Variantenartikeln sollte man aus meiner Sicht nicht nur das einzelne Kind betrachten, sondern immer den Vaterartikel inklusive aller Kinder. In der Fehlermeldung wird ja ebenfalls sinngemäß empfohlen, bei Varianten Master und alle Kinder neu zu senden.

Meine bisherige Einschätzung:

Wenn ein Artikel nach Deaktivierung/Reaktivierung wieder mit Endpoint id is empty blockiert, scheint das reine Aktivieren/Deaktivieren in JTL-Wawi das Problem nicht zu beheben.

Es sieht dann eher nach einem defekten Product-/Variant-Mapping im Shopify-Connector aus.

In so einem Fall würde ich die betroffenen Artikel mit obiger Abfrage sammeln und damit gezielt ein Ticket bei JTL eröffnen, mit der Bitte, die ProductTable-/Variant-Mappings mit leerer Endpoint-ID zu prüfen bzw. zurückzusetzen.

Vielleicht hilft die Abfrage anderen, die plötzlich immer wieder einzelne Shopify-Artikel im Abgleich hängen haben und erst einmal herausfinden möchten, welche Artikel historisch betroffen waren.

----

@Laura O https://forum.jtl-software.de/threa...pify-connector-21-05-2025.235671/post-1280621
 

Puma7

Sehr aktives Mitglied
4. Mai 2016
409
44
Simple Lösung, 5 Artikel hatten anstatt regulärer UST verminderte im Dropdown. Wahrscheinlich weil ein Mitarbeiter mal über dem Dropdown Feld war und mit dem scroll Rad dien wert aus versehen geändert hatte.
 

dapole

Sehr aktives Mitglied
27. Oktober 2014
154
30
Simple Lösung, 5 Artikel hatten anstatt regulärer UST verminderte im Dropdown. Wahrscheinlich weil ein Mitarbeiter mal über dem Dropdown Feld war und mit dem scroll Rad dien wert aus versehen geändert hatte.
-> Das ist 'Der JTL Klassiker'


-> Ob Steuersatz / Warengruppe
.... einmal nicht 'hingesehen' -> ZACK: schleicht sich ein 'unerkannter' Fehler ins system
 
Ähnliche Themen
Titel Forum Antworten Datum
Wichtig JTL-ShippingLabels 1.0: Support-Ende GLS/DPD und Migration von JTL-Start-Kunden nach dem 30. September News, Events und Umfragen 10
Neu JTL-Wawi REST API (Beta): HTTP 402 "Zahlung erforderlich" auf allen Endpunkten trotz gebuchter Beta-Lizenz Schnittstellen Import / Export 2
Neu JTL Shop 5.7.2 NOVA - Akkordeon Überschriften herabstufen auf H3 Templates für JTL-Shop 3
Kasse in JTL-Wawi 2.0 einbinden JTL-Wawi 2.0 1
Neu JTL-WAWI 2.0.5 Worker läuft nicht mehr und Versandarten werden falsch ausgegeben. JTL-Wawi - Fehler und Bugs 1
JTL-WAWI 2.0.5 Worker läuft nicht mehr und Versandarten werden falsch ausgegeben. JTL-Wawi 2.0 1
Neu Login-Fehler 403 bei app.shipping.jtl-cloud.com seit 17.07.2026 JTL-ShippingLabels - Fehler und Bugs 7
Neu 🚨 Sicherheitswarnung für JTL-Shop-Betreiber: Manipulation des Checkout-Prozesses durch externes JavaScript (Magecart- / Payment-Skimmer) Betrieb / Pflege von JTL-Shop 2
Neu JTL-Shop Konfigurator - die Ausgewählten Konfigurator gruppen werden im Artikel nicht vollständig angezeigt User helfen Usern - Fragen zu JTL-Wawi 2
Neu JTL-Shop 5 Backup Professional Plugin Plugins für JTL-Shop 0
JTL reaktiviert keine Angebote mehr auf Otto Otto.de - Anbindung (SCX) 1
Verbesserungsvorschlag: JTL-POS – Artikel mit Preisabfrage und vollständiger Wawi-Statistik JTL-Wawi 2.0 4
Neu JTL-ShippingLabels-Server ist nicht erreichbar JTL-Wawi - Fehler und Bugs 0
Neu JTL Shipping Labels 4.0 Sendungsnummer Kleinpaket nicht an Amazon übermitteln JTL-ShippingLabels - Ideen, Lob und Kritik 0
Neu Plugin trotz Hinweis Kompatibel mit JTL-Shop bis 5.6.* auch unter 5.7.2 nutzen Plugins für JTL-Shop 2
Neu Aktuelle JTL Shop Sicherheitslücke - automatischer Patch im JTL Hosting ? Allgemeine Fragen zu JTL-Shop 15
Neu JTL-Wawi 1.11.7: Shopify-PDF aus Bestellmetafeld automatisch als Auftragsanhang übernehmen Shopify-Connector 1
Neu Suche 10–15 JTL-Shops für kostenlose JTL-Shop-Analyse (verschiedene Branchen) Dienstleistung, Jobs und Ähnliches 0
JTL 2.0.4: Zahlungsabgleich - Buchungen Fehlen JTL-Wawi 2.0 0
Neu JTL-Shop 5.7.2 Picture-Tag in mobilen Ansicht lädt beide Bilder JTL-Shop - Fehler und Bugs 0
Seit dem Update meines JTL-Shops auf Version 5.7.1 funktioniert die Verbindung zwischen JTL-Wawi 2.0.4.0 und dem Shop nicht mehr. JTL-Wawi 2.0 6
Neu JTL-WMS und JTL-POS... Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 0
Fehlermeldung beim Einlesen der Buchungen in JTL Fibu JTL-Wawi 2.0 2
Neu Shop 5.7.2 - JTL PayPal Checkout legt alles lahm JTL-Shop - Fehler und Bugs 4
JTL-Ameise 2.04 - Export Rechnungen csv - unvollständig JTL-Wawi 2.0 13
Neu Belege aus JTL Wawi zu Lexoffice Schnittstellen Import / Export 5
Neu Varianten die nicht online in JTL geschaltet sind werden trotzdem zu Shopify geladen Shopify-Connector 6
Neu Gesucht: JTL-Systempartner/Freelancer mit Erfahrung in Personalisierungs-/Gravur-Fulfillment Dienstleistung, Jobs und Ähnliches 2
Neu JTL Stammtisch Stuttgart Messen, Stammtische und interessante Events 1
Neu Copy/Paste Abstürze seit JTL-Wawi 2.0.5 User helfen Usern - Fragen zu JTL-Wawi 4
Gelöst: Störung bei LInk11 - JTL- Shops teilweise nicht erreichbar Störungsmeldungen 1
JTL Update auf 1.9 , danach Import Kundenspezifrische Preise velerhaft JTL-Wawi 1.9 0
Wie übernehme ich Artikelnamen von JTL in den neuen Kaufland Niederlande-Verkaufskanal? JTL-Wawi 1.11 1
Neu Wie stelle ich Retouren in JTL für DPD ein? JTL-ShippingLabels - Ideen, Lob und Kritik 1
Neu JTL Wawi 1.11.11 - Zahlungsabgleich bei FYRST Bank verlangt immer Passwort User helfen Usern - Fragen zu JTL-Wawi 0
Neu JTL Shop Plugin - BD Automatisierter Widerruf (Von Händler für Händler - Schluss mit Mail-Chaos & Spam-Sorgen!) Plugins für JTL-Shop 0
Neu Der wahrscheinlich östlichste JTL Servicepartner: Standortvorteil, faire Preise und vieles mehr Dienstleistung, Jobs und Ähnliches 16
Neu Welche JTL Shop Plugins oder kleinen Hilfstools würden euch im Alltag wirklich helfen? Plugins für JTL-Shop 0
Neu JTL ShippingLabels - Meldungen JTL-ShippingLabels - Fehler und Bugs 9
Neu Beta-Tester gesucht: Produktdaten aus Artikelfotos schneller für JTL/CSV vorbereiten Dienstleistung, Jobs und Ähnliches 0
Neu oAuth Credentials Login mit JTL .. WO? User helfen Usern 1
Neu Installationsdatei für JTL‑Wawi 1.9.6.5 Installation von JTL-Wawi 2
Neu kostenlos: DHL Sendungsverfolgung für JTL-Wawi – Web-Dashboard mit Frühwarnsystem Schnittstellen Import / Export 0
Neu JTL Wawi 2.0 oder höher WooCommerce-Connector 0
Changelog jtl Wawi 2.0.5 JTL-Wawi 2.0 13
Neu Ist es ohne Probleme möglich Cloudflare in der Free Version mit JTL zu nutzen? Allgemeine Fragen zu JTL-Shop 7
JTL 5.7.1 Widerrufsformular massiver SPAM Einrichtung JTL-Shop5 3
JTL Wawi 1.11.xx langsam unbenutzbar! JTL-Wawi 1.11 4
Neu Plugin: JTL Exportformat Google Shopping gibt <g:google_product_category> unter Shop 5.7.1 und Wawi 2.0.4 nicht aus Plugins für JTL-Shop 1
Neu Widerrufsbutton für JTL-Shop 4 Allgemeine Fragen zu JTL-Shop 17

Ähnliche Themen