Zum Hauptinhalt gehen

Link in einem FS_CATALOG, welches in einem Datensatz liegt per API ersetzen

Kommentare

4 Kommentare

  • Zendesk API User
    Author: mbergmann - 5/8/2021 13:21

    Hallo Thomas,

    soweit ich mich erinnere, kannst du bei einem Catalog nicht einfach per item.get(…).set(…) den vorhandenen Wert ändern.

    Versuch mal, card.loadItem(…) zu nutzen.

    Viele Grüße

    Michael

    0
  • Zendesk API User
    Author: Thomas1 - 5/10/2021 9:25

    Hallo Michael,

    danke für den Tipp. Leider hat das auch nicht funktioniert:

    ...

    dataset.setLock(true);

    for (Catalog.Card card: catalog) {

         if (card.getTemplate().getType() == Template.SECTION_TEMPLATE) {

              FormData formDataCatalog = card.getItem();

              FormField formFieldSection = formDataCatalog.get(null, "st_link");

              Link link = (Link) formFieldSection.get();

              if (link != null) {

                  if (link.getTemplate().getUid().equals("external_link")) {

                            FormData formDataLink = link.getFormData();

                            FormField formFieldLink = formDataLink.get(null, "lt_url");

                          

                            context.logInfo("###FOUND###: "+dataset.getName()+" with Link-Url: "+formFieldLink.get());

                            String changedUrl = formFieldLink.get().replaceAll("http://www.dasIstEinTestLink.zo","http://www.dasIstEinTestLink.de");

                            formFieldLink.set(changedUrl);

                            card.loadItem(formDataLink);

                           

                   }

              }

         }

    }

    dataset.getFormData().get(null, "cs_text_bottom").set(catalog);

    dataset.save();

    dataset.setLock(false);

    ..

    Habe es auch in diversen Varianten ausprobiert, jedoch ohne Erfolg.

    Viele Grüße,

    Thomas

    0
  • Zendesk API User
    Author: StefanSchulz - 5/10/2021 9:57

    Hallo Thomas,

    wenn ich das richtig sehe, ist der Ablauf so auch nicht korrekt. loadItem lädt ein FormData-Objekt als Inhalt für den Katalogeintrag. formDataLink passt da nicht.

    Im Prinzip musst du die Auslesekette zurückgehen: formFieldLink setzen (machst du bereits), formDataLink für st_link in formDataCatalog setzen, formDataCatalog über loadItem in die Card schreiben, catalog in das FormData des Datensatzes schreiben (machst du bereits).

    Beste Grüße

    Stefan

    0
  • Zendesk API User
    Author: Thomas1 - 5/10/2021 14:13

    Hallo Stefan,

    cool, danke für die Info. Für alle die in Zukunft das selbe Problem haben könnten, hier das Ergebnis:

    ...

    dataset.setLock(true);

    FormField formField = formData.get(null, "cs_text_bottom");

    if (Catalog.class.isAssignableFrom(formField.getType())) {

         FormField formfield  = formData.get(null, "cs_text_bottom");

         Catalog catalog = (Catalog) formData.get(null, "cs_text_bottom").get();

         for (Catalog.Card card: catalog) {

              FormData formDataCatalog = card.getItem();

              FormField formField = formDataCatalog.get(null, "st_link");

              Link link = (Link) formField.get();

              if (link != null) {

                   if (link.getTemplate().getUid().equals("external_link")) {

                        linkFormData = link.getFormData();

                        FormField formFieldLink = linkFormData.get(null, "lt_url");

                        String changedUrl = formFieldLink.get().replaceAll("http://www.dasIstEinTestLink.zo","http://www.dasIstEinTestLink.de");

                       

                        formFieldLink.set(changedUrl);

                        link.setFormData(linkFormData);            

                      

                        card.loadItem(formDataCatalog);

                   }

              }

         }

         formData.get(null, "cs_text_bottom").set(catalog);

         dataset.setFormData(formData);

    }

    dataset.save("Migrationskript gelaufen");

    dataset.setLock(false);

    ...

    Viele Grüße,

    Thomas

    0

Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.