Plenty: Newsletter-Ordner abrufen

Hi,
ich hab mal wieder nen Featurewunsch :wink:

Und zwar würde ich gerne die Newsletter-Ordner aus Plenty abrufen, dass ist GET /rest/newsletters/folders/{folderId}/recipients. Könntet ihr die zeitnah liefern?

Ich brauch egtl nur email und den confirmedTimestamp, und nen Filter im Step für die folderId :+1:

Danke im Voraus,
Daniel

Hallo Daniel,

du könntest dir in dem Fall mit Bordmitteln helfen. Hier ist ein Beispielflow den du adaptieren könntest.

https://docs.synesty.com/display/SSUD/Step%3A+PlentyRESTAuthenticate+-+REST+API

Für einen neuen Step fehlt uns leider gerade die Zeit.

Gut, das ist jetzt gefühlt das erste mal dass ihr einen Featurewunsch aus Zeitgründen ablehnt. Ihr habt sicher sehr gute Gründe dafür :wink:

Aber könntet ihr mir vielleicht mit dem transformationTemplate für den JSONReader aushelfen? Ich habs jetzt mal nur kurz versucht, komme aber nicht zum gewünschten Ergebnis.

Mein Response sieht so aus:

klick mich
{
    "12345": {
        "id": 140937,
        "folderId": "18",
        "contactId": "0",
        "firstName": "redacted",
        "lastName": "redacted",
        "email": "redacted",
        "gender": null,
        "birthday": "0000-00-00",
        "timestamp": "2021-08-07 17:43:27",
        "templateLang": "de",
        "confirmedTimestamp": "2021-08-07 17:44:09",
        "confirmationURL": null
    },
    "67890": {
        "id": 140938,
        "folderId": "18",
        "contactId": "0",
        "firstName": "redacted",
        "lastName": "redacted",
        "email": "redacted",
        "gender": null,
        "birthday": "0000-00-00",
        "timestamp": "2021-08-09 20:24:18",
        "templateLang": "de",
        "confirmedTimestamp": "0000-00-00 00:00:00",
        "confirmationURL": null
    }
}

Ich hätte gerne an der Stelle die KundenID (12345 bzw 67890) in der ersten Spalte, und dann die enthaltenen Felder (bzw: email und confirmedTimestamp reicht egtl) als weitere Spalten.

Den JSONReaderVisual habe ich probiert, aber die Konfiguration des Rulesets holt weder die Daten aus dem vorherigen Step, noch läd die Vorschau.

Abruf des JSON klappt ohne Probleme, es ist nur die Verarbeitung wo ich hänge…

Danke Daniel

Nein nicht wahr, wenn man ihm genug Zeit gibt, läd links der Baum, aber unter den Buttons läd weiter nix, bzw es wird die Sidebar dort eingeblendet.

Wenn ich mich im Tree durchklicke und speichere, bekomm ich im Spreadsheet den ersten Kunden, mit einer Zeile, in der das „innere“ JSON steht. Vermutlich weil versucht wird über den String der ID zu matchen, aber der ist natürlich immer ein anderer.

So weit war ich von Hand im JSONReader auch schon: ich kann per r['bla'] nicht auf die einzelnen Kunden-Elemente zugreifen :sweat:


edit: ein zweiter JSONReader direkt danach liest per spreadsheetJSONColumn dann auch JSON in einem Spreadsheet. Aber sucht halt vertikal in einer Column, mein Spreadsheet müsste quasi „um 90° gekippt“ werden:

Wäre die Kopfzeile eine Spalte, und die JSON-Zeile eine zweite (jeweils mit neuem Header), wär ich mit dem zweiten JSONReader am Ziel!

Wir schauen uns mal an. Das die KundenID als Key steht ist natürlich Mist :wink: Schöner wäre, wenn das ein Array wäre.

Probier mal mit dem JSONReader folgendes Parsing Template:

<#assign row = target.addRow()>

<#list json.entrySet() as e>
  <#assign row = target.addRow()>
  ${row.addCol("customerid", e.key)}
  ${addColumns(row, e.value, "data_")}
</#list>

Das gibt bei deinem

JSON von oben
{
    "12345": {
        "id": 140937,
        "folderId": "18",
        "contactId": "0",
        "firstName": "redacted",
        "lastName": "redacted",
        "email": "redacted",
        "gender": null,
        "birthday": "0000-00-00",
        "timestamp": "2021-08-07 17:43:27",
        "templateLang": "de",
        "confirmedTimestamp": "2021-08-07 17:44:09",
        "confirmationURL": null
    },
    "67890": {
        "id": 140938,
        "folderId": "18",
        "contactId": "0",
        "firstName": "redacted",
        "lastName": "redacted",
        "email": "redacted",
        "gender": null,
        "birthday": "0000-00-00",
        "timestamp": "2021-08-09 20:24:18",
        "templateLang": "de",
        "confirmedTimestamp": "0000-00-00 00:00:00",
        "confirmationURL": null
    }
}

folgende Ausgabe:

1 Like

Ein Träumchen, damit klappts! Vielen Dank :+1:

Wir haben noch eine Optimierung verteilt. Du kannst jetzt auch folgendes schreiben:

<#assign row = target.addRow()>

<#list json as key, value>
  <#assign row = target.addRow()>
  ${row.addCol("customerid", key)}
  ${addColumns(row, value, "data_")}
</#list>

Der Unterschied ist, dass bei der <#list>-Anweisung nicht entrySet() , e.key und e.value aufgerufen wird, sondern direkt die Freemarker-Kurzschreibweise für Key-Value Paare einer Map / Hash ( <#list hash as key, value>)

Wir würden dich bitten darauf umzustellen. Aktuell funktioniert auch noch .entrySet() etc., aber da es sich um nicht dokumentierte interne Funktionen handelt, können wir nicht versprechen, dass diese für immer überleben.

Wir haben dein Beispiel mit im Handbuch auf der Seite vom JSONReader sowie XML und JSON Parsing am Beispiel mit aufgenommen.

1 Like