0

Json zu Mehrfachauswahlfeld

Ich bekomme durch API eine Json Rückgabe:

 

{"id":4805,"name":"Produkt","slug":"produkt-2","permalink":"https://www.sonneamwerk.de/produkt/produkt-2/","date_created":"2023-06-27T17:14:13","date_created_gmt":"2023-06-27T17:14:13","date_modified":"2023-06-27T18:00:04","date_modified_gmt":"2023-06-27T18:00:04","type":"simple","status":"publish","featured":false,"catalog_visibility":"visible","description":"<h1>acadcasdcvasdv</h1><div>dcsadcasd</div><div>adsvasdvas</div><div>asdvasdv</div><div><ol><li>Dachs</li><li>dscvsd</li><li>asdvsadv</li></ol><h1>dvddv</h1></div>","short_description":"","sku":"567","price":"20.00","regular_price":"20.00","sale_price":"","date_on_sale_from":null,"date_on_sale_from_gmt":null,"date_on_sale_to":null,"date_on_sale_to_gmt":null,"on_sale":false,"purchasable":true,"total_sales":0,"virtual":false,"downloadable":false,"downloads":[],"download_limit":-1,"download_expiry":-1,"external_url":"","button_text":"","tax_status":"taxable","tax_class":"","manage_stock":false,"stock_quantity":null,"backorders":"no","backorders_allowed":false,"backordered":false,"low_stock_amount":null,"sold_individually":false,"weight":"","dimensions":{"length":"","width":"","height":""},"shipping_required":true,"shipping_taxable":true,"shipping_class":"","shipping_class_id":0,"reviews_allowed":false,"average_rating":"0","rating_count":0,"upsell_ids":[],"cross_sell_ids":[],"parent_id":0,"purchase_note":"","categories":[{"id":15,"name":"KALENDER","slug":"kalender"},{"id":53,"name":"MÖBEL","slug":"moebel"},{"id":37,"name":"POSTER","slug":"poster"}],

 

Ich habe ein Textfeld "Kategorien" durch ein Befehl Kategorie := response.result.text(categories) bekomme ich im Textfeld den Array als Text [{"id":15,"name":"KALENDER","slug":"kalender"},{"id":53,"name":"MÖBEL","slug":"moebel"},{"id":37,"name":"POSTER","slug":"poster"}]

Jetzt die Frage ist es Möglich das dieser Json in ein Mehrfachauswahlfeld übertragen wir und die Kategorien ausgewählt sind.

Bin Dankbar für jede Hilfe. 

14 Antworten

null
    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Moin ,

    in ein normales Mehrfachauswahlfeld wohl nicht. Du kannst es über ein dynamisches MFAWF machen, indem du eine Tabelle Kategorien anlegst und im Produkt das dynamische MFAWF mit select Kategorien definierst

    Dann die json-kategorien dem dynamischen MFAWF im Produkt-Datensatz zuordnest

    VG Ronald

      • chalvi // WERBEAGENTUR GbR
      • VS2021
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Vielen Dank Roland,

      die Tabelle habe ich eingerichtet und das dyn. MFAWF ist eingebaut. Aber wie bekomme ich jetzt aus der Json die Kategorien dem dyn. MFAWF zugeordnet? Wo soll ich eine Befehl schreiben? Kenne mich mit dem dyn. nicht so aus: 

       

      Vielen Dank für die Hilfe

    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Ich sehe aus den bisherigen Infos nicht, wo du den Json reinbekommst und verarbeitest. Wo auch immer, genau dort gehört eine Erweiterung des Codes hinzu.
    Die Kategorien im JSON müssen gleichnamige Pendants in Datensätzen der Tabelle "Kategorien" haben für die eindeutige Zuordnung im dynMFAF.

    Die Zuordnung zum dynMFAWF erfolgt über die DatensatzNummer (Nr) in der Tabelle "Kategorien" über eine Schleife z.B. so:

    'Mehrfachauswahl (dynamisch)' := for i in myMF do
            number(i)
        end;
    

    Es fehlt noch die Zuweisung welche JSON-Kategorie welcher DatensatzNummer (Nr) entspricht.

    Das schaue ich mir am WE in Ruhe an.
    Oder es springt schon Jemand anderse mit einer Lösung ein ;-)

    VG Ronald

      • chalvi // WERBEAGENTUR GbR
      • VS2021
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Hallo Roland,

      hier ist der Code den ich für das Abrufen und der Verarbeitung der JSON nutze:

       

      let me := this;
      let response := do as server
              http("GET", "https://www.sonneamwerk.de/wp-json/wc/v3/products/" + ID + "?" +
              "&consumer_key=???&consumer_secret=???", {
                  'Content-Type': "application/json"
              }, {
                  id: ID,
                  type: type,
                  sku: Artikelnummer,
                  name: Produktname,
                  regular_price: Preis,
                  status: status,
                  description: Beschreibung
              })
          end;
      if response.error then
          alert(text(response.error))
      else
          'Import Text' := formatJSON(response.result);
      ID := response.result.id;
          Artikelnummer := response.result.sku;
          'Produkttyp im SHOP' := response.result.type;
          'Produktstatus im SHOP' := response.result.status;
          Preis := response.result.price;
      Produktname := response.result.name;
          Beschreibung := response.result.description;
          URL := response.result.permalink;
          Kategorie := response.result.text(categories)
      end;
      for i in response.result.images do
          'URL 2' := first(i.src);
          'URL 5' := last(i.src)
      end

      Bisher werden die Kategorien in einem Textfeld als Array angezeigt. Ich möchte die aber als MFASF anzeigen lassen. Wahrscheinlich muss deine Formel in den rot markierten Beriech. 

      Danke für die Hilfe. Lg Victor

    • chalvi // WERBEAGENTUR GbR
    • VS2021
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Leider bin ich mit meinem Problem nicht weitergekommen? Hat einer eine Idee wie ich das umsetzten kann. Hab schon zuviel Zeit mit ausprobieren verschenkt. Es hängt an einer Kleinigkeit die ich mit meiner Unwissenheit nicht hin bekomme. Kann mir einer Helfen. Vielen Dank. Das Problem ist in den vorherigen Post erklärt, wenn etwas unklar ist würde ich es mit einigen Fotos ergänzen.

    Vielen Dank für jede Hilfe. 

    • chalvi // WERBEAGENTUR GbR
    • VS2021
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Ein Video zu meinem Problem.

    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    dyn.Mehrfachauswahl := response.result.categories.number(Id)

    Sofern es sich bei der im Response übertragenen Id um die von Ninox vergebenen Id des Records handelt und keine selbst vergebene ID ist.

    Ansonsten musst du durch das mit response.result.categories.number(Id) erstellte Array durch iterieren und über die der dynMAF zugrunde liegenden Tabelle die Ninox Record-Id's zusammensuchen und wieder in ein Number-Array zusammenfassen mit dem du die Werte des dyn.MAF setzt.
    Das könnte so aussehen: (Datentypen beachten!!!)
    let vresponse := response.result.categories.number(Id);
    let vCnt := cnt(vresponse);
    let vTbl := select Produkte;
    let vID := [0];
    for i in vresponse do
        let xID := i.number(Id);
        let dynID := first(vTbl [Id = xID]).number(Nr);
        vID := array(vID, [dynID])
    end;
    Produkt := slice(vID, 1, vCnt + 1)

      • chalvi // WERBEAGENTUR GbR
      • VS2021
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Vielen Dank dir für deine Hilfe und die Formel. Ich musste zwei Sachen anpassen und dann funktionierte es perfekt! 

      let vresponse := response.result.categories;
          let vCnt := cnt(vresponse);
          let vTbl := (select KATEGORIEN);
          let vID := [0];
          for i in vresponse do
              let xID := i.id;
              let dynID := first(vTbl[ID = xID]).number(Nr);
              vID := array(vID, [dynID])
          end;
          Produktkat := slice(vID, 1, vCnt + 1)
      end

      Hättest du auch eine Idee, wie man es umgekehrt machen könnte. Also das ich die Kategorien in Ninox am dyn.MFAF auswähle und mit der ID an Woocommerce übergeben werden. 

      Vielen Dank

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

       
      text(dynMAF)
      Ergibt einen Komma separierten String der ausgewählten Einträge.
      Es wird alles ausgegeben, was im PopUp angezeigt wird.

      • chalvi // WERBEAGENTUR GbR
      • VS2021
      • vor 1 Jahr
      • Gemeldet - anzeigen

       In der Woocommerce Dokumentation wollen sie das ein Json übergeben wird, hier eine Kopie daraus.

       "name": "Ship Your Idea",
        "type": "variable",
        "description": "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.",
        "short_description": "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.",
        "categories": [
          {
            "id": 9
          },
          {
            "id": 14
          }
        ],

      Jetzt habe ich einen Textfeld "Kategorien" angelegt und im Trigger des dynMFAF (Produktkat) 

      Kategorie := text(Produktkat) 

      Wie du es gesagt hast gibt er mir Jetzt den String der ausgewählten Kategorien aus, die angewählt sind: 

      KALENDER, PV, MÖBEL, POSTER

      und in der Übergabe folgendes 

      'Content-Type': "application/json"
                  }, {
                      id: ID,
                      type: type,
                      sku: Artikelnummer,
                      name: Produktname,
                      regular_price: Preis,
                      status: status,
                      description: Beschreibung,
                      categories: Kategorie
                  })
              end;

      leider kommt es nicht bei Woocommerce an. 

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

       
      let vdynMAF := numbers(dynMAF);
      let vCategories := for i in vdynMAF do
      {
      id : record(KATEGORIE,i).number(ID)
      }
      end;
      let vBody := {
      ...,
      categories : vCategories},
      ...

      • chalvi // WERBEAGENTUR GbR
      • VS2021
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Vielen Dank dir! Hammer wie es klappt und ich kann viele Sachen jetzt nachvollziehen. Man kann einiges lernen. 

      Wie schaut es eigentlich aus, wenn ich dann im Json einen Wert(Status)

      response.result.status bekomme.

       Und diesen Status will ich jetzt  in einen dynamisches Auswahlfeld übertragen.

      Wie kann ich da vorgehen. Vielleicht so?

      for a in select Bestellstatus do 
      let x:= response.result.status = a.status;
          'Auswahl (dynamisch)' := x
          end;

    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen


    let vSuch := response.result.status;
    let dynID := first(select Bestellstatus where TextStatus = vSuch).number(Nr);
    'Auswahl (Dynamisch)' := dynID

      • chalvi // WERBEAGENTUR GbR
      • VS2021
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Vielen Dank hat super geklappt! Jetzt noch eine Feinheit beim dynamische Auswahlfeld. Wie bekomme ich es hin, dass mir die Farben angezeigt werden. Jetzt wird nur die HEXFarbe als Text angezeigt. Im Forum finde ich dazu wenig. Hab es mit color() und stylen() versucht leider kein Erfolg. Danke für deine Mühe.