Das Problems wurde nun wie folgt gelöst:
FS_BUTTON innerhalb des Kind-Tabellentemplates:
<FS_BUTTON name="cs_importStoryTextButton" onClick="class:ocm-copy-story-text-into-teaser" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Texte aus Beitrag übernehmen"/>
</LANGINFOS>
<PARAMS>
<PARAM name="field1">#field.cs_kicker</PARAM>
<PARAM name="field2">#field.cs_headline</PARAM>
[...]
</PARAMS>
</FS_BUTTON>
ocm-copy-story-text-into-teaser ist dabei per <public>-Komponente innerhalb der module.xml mit einer ausgelagerten Executable (bzw. unserem Wrapper AbstractCommonExecutable) verknüpft:
public class CopyStoryTextIntoTeaser extends AbstractCommonExecutable {
@Override
protected Object execute() {
Dataset teaser = (Dataset) getParams().get("element");
Entity story = (Entity) teaser.getEntity().get("stories");
FormData storyFormData = getStoryTemplate().getDataset(story).getFormData();
setFieldValue(storyFormData, "cs_kicker", "field1");
setFieldValue(storyFormData, "cs_headline", "field2");
[...]
return null;
}
private TableTemplate getStoryTemplate() {
StoreAgent storeAgent = getContext().requireSpecialist(StoreAgent.TYPE);
Store templateStore = storeAgent.getStore(Store.Type.TEMPLATESTORE);
TableTemplate template = (TableTemplate) templateStore.getStoreElement(Constants.SCHEMA_NAME + "." + EntityType.stories.getTableName(), IDProvider.UidType.TEMPLATESTORE_SCHEMA);
return template;
}
private void setFieldValue(final FormData storyFormData, final String storyFieldName, final String teaserFieldName) {
if (getParams().containsKey(teaserFieldName)) {
FormField<?> field = (FormField<?>) getParams().get(teaserFieldName);
if (field != null && field.isEmpty()) {
field.set(storyFormData.get(getMasterLanguage(), storyFieldName).get());
}
}
}
}