0

Nach dem Öffnen der Datenbank folgendes Skript ausführen

Hallo zusammen, 

 

ich stehe aktuell vor folgendem Problem. Ich frage über einen http Post Aufruf Lagerbestände aus WooCommerce ab. Diesen Aufruf habe ich in meiner Tabelle Produkte bei jedem einzelnen Datensatz auf einen Button gelegt. 

Ich hätte gerne, dass die akutellen Lagerbestände bei jedem Start der Datenbank aktualisiert werden. Dafür wäre ja "Nach dem Öffnen der Datenbank folgendes Skript ausführen" super geeignet. 

 

Wenn ich dort aber meine Funktion reinkopiere, werden meine Tabellen nicht gefunden. Wie kann ich denn dort die richtige Tabelle und die richtigen Felder ansprechen? 

 

let response := do as server
http("POST", "https://www.demo-shop.com/wp-json/demo_woo_api/part?endpoint=stock_sku_get", {
accesstoken: "der API KEY",
'Content-Type': "application/json"
}, [{
sku: Artikelnummer
}])
end;
if response.error then
alert(text(response.error))
else
let WooStock := for item in response.result do
item.stock
end;
'Lagerbestand WooCommerce' := number(WooStock)
end

 

Ich erhalte für 'Artikelnummer' und für 'Lagerbestand WooCommerce' immer die Fehlermeldung Tabellenspalte nicht gefunden. Beide Felder sind in der Tabelle Produkte. 

 

Vorab vielen Dank und viele Grüße,

Andi

5 Antworten

null
    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hi Andi, 

    du willst ja nach dem öffnen der Datenbank durch alle Artikel aus der Tabelle Produkte gehen. Daher musst Du das über eine for-Schleife lösen. Da das allerdings bei vielen Produkten auch eine gewisse Zeit dauern kann, würde ich das vielleicht vorher über ein Dialogfeld abfragen. Ich habe das zB. zusätzlich über einen Datumscheck gemacht, der jeden Freitag beim ersten öffnen der ninox die Bestände abgeholt hat. Dazu gab es dann einen Status "abgeholt" damit man wirklich nur einmalig beim öffnen der Ninox warten muss....

    Prinzipiell - wenn der Code für einen Datensatz funktioniert, kannst du ihn so wie er ist einfach in eine for-Schleife packen. Im select kannst du noch Bedingungen angeben, welche auf die Datensätze aus Produkte zutreffen sollen (select Produkte where Artikelnummer > 1000) zB. 

    Hier also alles, was zwischen den Klammern steht wird für jeden Datensatz aus Produkte durchgeführt...

    for p in select Produkte do

    p.(

     

    ) end

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hier mal als Beispiel mit Dialog:

     

    let answer := dialog("Lagerbestände anfragen.", "Achtung, das Abfragen der Lagerbestände nimmt einige Zeit in Anspruch. Trotzdem durchführen?

    Für dringende Arbeiten kann NINOX in einem zweiten Browser-Fenster geöffnet werden.", ["OK, los", "Abbrechen"]);
    if answer like "ok" then

    for p in select Produkte do
    p.(
    let response := do as server
    http("POST", "https://www.demo-shop.com/wp-json/demo_woo_api/part?endpoint=stock_sku_get", {
    accesstoken: "der API KEY",
    'Content-Type': "application/json"
    }, [{
    sku: Artikelnummer
    }])
    end;
    if response.error then
    alert(text(response.error))
    else
    let WooStock := for item in response.result do
    item.stock
    end;
    'Lagerbestand WooCommerce' := number(WooStock)
    end
    )
    end

    • Andi_Neumaier
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hi, 

     

    und auch an dieser Stelle vielen Dank für deine Hilfe. 

     

    In der Zwischenzeit hatte ich das mit "for p in select Produkte do" auch schon getestet. Da hast du natürlich recht, das dauert wirklich richtig richtig lange bei den knapp 300 Artikeln die ich da abfrage. 

     

    Mein Endpoint im Shop könnte Daten auch als Array verarbeiten. Gäbe es denn eine Möglichkeit, dass ich nur eine Abfrage schicke mit einem Array aus allen Artikelnummern? Und dann wiederum nur ein Array mit den akutellen Beständen verarbeiten kann, das dann zurück kommt? Verstehst du wie ich meine? 

     

    Vorab vielen Dank und Grüße,

    Andi

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ja, das ginge bestimmt. Da müsste man sehen wie Woocommerce die Daten braucht, und was dann zurück kommt.

    mit (select Produkte).Artikelnummer bekommst du schon ein Array zurück...

     

    Und dann iterierst du durch deine Antwort und weist die Bestände zu....

    • Andi_Neumaier
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ah super. Probiere ich direkt mal aus. 

     

    Jetzt noch eine Frage. Kann ich auch iwie festlegen, dass ein Script nicht beim öffnen der Datenbank, sondern beim öffnen einer bestimmten Tabelle angestoßen wird? 

     

    VG, Andi