ACordes
I'm new here

Fremdschlüssel-Verknüpfung (1:n) per API

Jump to solution

Hallo Community,

ich habe zwei Datenbank-Schemata, die per Fremdschlüssel (1:n) verknüpft sind (s. Anhang). Nun versuche ich, per API "news", sowie die dazugehörigen "partners" zu erzeugen und zu verknüpfen.

Das erzeugen der "news" sowie "partners" funktioniert soweit, aber leider kommt die Verknüpfung nicht zustande (im News-Formular bleibt das CONTENTLIST-Feld leer).

Dies ist der entsprechende Code-Schnipsel:

GomEditorProvider prov = formData.getForm();

GomContentList partnersElement = (GomContentList) prov.findEditor("cs_partnerlist");

ContentListEditorValue cLev = (ContentListEditorValue) partnersElement.getDefaultValue();

List<Entity> partnerList = cLev.get(lang);

for(int i = 0; i < item.getPartnerIds().size(); i++) {

    String partnerId = item.getPartnerIds().get(i).toString();

    Entity partnerEntity = session.createEntity(csPartners.getEntityType().getName());

    partnerEntity.setValue("partner_id", partnerId);

    partnerList.add(partnerEntity);

}

cLev.set(lang, partnerList);

dataset.setFormData(formData);

Kann mir jemand verraten, was ich da vergessen habe?

Vielen Dank!

0 Kudos
1 Solution

Accepted Solutions

Hatte ich vorher nicht gesehen, weil ich mich auf das "date" Problem fixiert hatte.. Bei dem Code mit der ContentList wird der Default-Wert geändert, das ist ja nicht das gewünschte.

Pseudo-Code, der funktionieren sollte:

FormField<List<Entity>> field = formData.get(lang, "cs_partenerlist");

List<Entity> partnerList = field.get()

for(int i = 0; i < item.getPartnerIds().size(); i++) {

    Entity partnerEntity = ...;

    partnerList.add(partnerEntity);

}

field.set(partnerList);
Peter

View solution in original post

0 Kudos
6 Replies
ACordes
I'm new here

Das Schema-Bild habe ich vergessen:

schema.png

Edit: Ich weiß nicht , ob es zusammenhängt, aber ich bekomme auch den Wert für display_from und display_to nicht gesetzt:

// 1. Methode

FormField<Date> dateFromField = (FormField<Date>) formData.get(lang, "cs_display_from");

dateFromField.set(item.getDisplay_from());


// 2. Methode

GomDate fromDateField = (GomDate) prov.findEditor("cs_display_from");

DateEditorValue dateFromEditor = (DateEditorValue) fromDateField.getDefaultValue();

dateFromEditor.set(lang, item.getDisplay_from());

Wohingegen einfache Textfelder funktionieren:

FormField<String> titleField = (FormField<String>) formData.get(lang, "cs_title");

titleField.set(StringEscapeUtils.unescapeHtml4(item.getTitle()));

0 Kudos

Ich vermisse ein "dataset.save(..)" in dem Code-Schnipsel.

Peter
0 Kudos

Leider bewirkt ein "dataset.save("Import", true);" keinen Unterschied. Bis auf die Date-Felder und die ContentList wird ja auch alles gespeichert.

In einem anderem, funktionierenden Import-Script habe ich ebenfalls kein dataset.save() verwendet und der Wert wird korrekt gesetzt (dort habe ich ein ComboboxEditorValue befüllt).

0 Kudos

Das mit den Date-Feldern nehme ich zurück… hier hatte ich das Schema angepasst und vergessen, dass Mapping ebenfalls anzupassen.

Es ist also doch wieder ein Contentlist-Problem.

0 Kudos

Hatte ich vorher nicht gesehen, weil ich mich auf das "date" Problem fixiert hatte.. Bei dem Code mit der ContentList wird der Default-Wert geändert, das ist ja nicht das gewünschte.

Pseudo-Code, der funktionieren sollte:

FormField<List<Entity>> field = formData.get(lang, "cs_partenerlist");

List<Entity> partnerList = field.get()

for(int i = 0; i < item.getPartnerIds().size(); i++) {

    Entity partnerEntity = ...;

    partnerList.add(partnerEntity);

}

field.set(partnerList);
Peter
0 Kudos

Perfekt, vielen Dank! Da habe ich wohl zu kompliziert gedacht, es gibt ja eigentlich gar keinen Unterschied zu "normalen" Textfeldern.

0 Kudos