- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Fremdschlüssel-Verknüpfung (1:n) per API
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!
- Labels:
-
Developers
-
Knowledgebase
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Das Schema-Bild habe ich vergessen:
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()));
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ich vermisse ein "dataset.save(..)" in dem Code-Schnipsel.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Perfekt, vielen Dank! Da habe ich wohl zu kompliziert gedacht, es gibt ja eigentlich gar keinen Unterschied zu "normalen" Textfeldern.

