Hmmm .. hier ist nochmal der fertige Code, der aber im Falle eines Dataset immer die Url des Produktes liefert, welches ((Dataset) storeElement).getTableTemplate().getPreviewPageRef() für alle Elemente einer Datenquelle gleich ist. Vielleicht ist hier noch ein Gedankenfehler!?
Erst mal der Einstieg über einen Button im Template selbst ...
public class MyExecutable implements Executable{
@Override
public Object execute(Map<String, Object> paramMap) throws ExecutionException {
IDProvider selectedElement = (IDProvider) paramMap.get("element");
BaseContext context = (BaseContext) paramMap.get("context");
Language language = (Language) paramMap.get("language");
MyClass.doit(context, selectedElement , language);
return null;
}
@Override
public Object execute(Map<String, Object> paramMap, Writer paramWriter1, Writer paramWriter2) throws ExecutionException {
return null;
}
}
Und dann der Code, der mir die entsprechende URL zum selectedElement liefern soll ...
protected String getUrl() {
StoreElement storeElement = selectedElement;
PageRef pageRef;
if (storeElement instanceof Dataset) {
pageRef = ((Dataset) storeElement).getTableTemplate().getPreviewPageRef();
} else {
// get PageRef from page
}
final TemplateSet templateSet = fetchTemplateSet(pageRef);
PageParams pageParams = pageRef.getMultiPageParams(language, templateSet).getPageParams(0);
final UrlFactory urlFactory = config.createUrlFactory();
return urlFactory.getUrl(pageRef, templateSet, language, pageParams);
}