MichaelN
I'm new here

final URL eines Datasets

Jump to solution

Hallo zusammen,

ich benutze quasi die UrlFactory aus den Beispielen. Das funktioniert auch wunderbar, allerdings bleibt ein Problem.

Hat man nun im Java-Client eine Produkt-Detailseite, so habe ich in meinem Modul als selected Element kein SectionImpl-Objekt, sondern ein DatasetImpl-Objekt.

Dieses ist kein ContentProducer und somit kann ich auch nicht die getUrl-Methode der UrlFactory  benutzen.

Wie komme ich an die finale URL einer ausgewählten Produkt-Detail-Seite?

0 Kudos
30 Replies

Wieso gehst du nicht den von mir skizzierten Weg?

[EDIT]

An das Dataset kommst du mit "context.getElement()".

Peter
0 Kudos

gerne, aber ich weiß halt nicht, wie ich an das pageRef rankomme um pageref.getStoredUrl aufzurufen.

Mir fehlt also quasi der Teil:

PageRef pageref = ...;

0 Kudos

Eine Möglichkeit wäre z.B. so: dataset.getTableTemplate().getPreviewPageRef()

Peter
0 Kudos

Das war es ... danke schön. Mit der PageRef funktioniert es dann ja auch mit dem gewünschten Weg.

0 Kudos

Das war es doch nicht Smiley Sad

Zumindest in der Mithras-Responsiv Version ist das dataset.getTableTemplate().getPreviewPageRef() immer dasselbe für alle Produkte aller Kategorien.

Nachtag: Auch in der normalen Mithras Version bekomme ich als URL immer:

      /Produkte/[Kopiervorlage]-Modulwechselrichter-150W-12V-Mini.html

für alle Produkte.

Es sollte aber am Ende eigentlich z.B.:

   

      /Produkte/Solarspeicher/Accum-1-000-L.html

entstehen.

0 Kudos

Gibt es hier schon eine Lösung?

0 Kudos

Hm, meiner Meinung nach steht schon alles hier. Die Bestimmung der Seitenreferenz ist abhängig vom Kontext. Außerdem kann es ja durchaus gewünscht sein, das ein Datensatz an mehreren Stellen gerendert wird. Dein Problem, das die URL eines ganz anderen Datensatzes herauskommt, kann ich aber nicht nachvollziehen.

Peter
0 Kudos

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);       

}

0 Kudos

Du hast einige Hinweise in diesem Thread ignoriert Smiley Wink

Kurzfassung ist: Für Datensätze bitte diesen Code benutzen

     pageref.getStoredUrl(language, templateset, dataset.getEntity())

Peter
0 Kudos

Ich hatte das schon versucht, dann aber aufgegeben, da die Methode getStoredUrl an der Stelle null lieferte.

Jetzt habe ich das noch mal probiert und festgestellt, dass gerade meine getesteten Entities null liefern. Andere gehen aber wie gewünscht.

z.B. bei dem Produkt KM 12 poly im Mithras Responsive Design liefert die Methode null zurück. Es existiert aber die URL: /Produkte/Kristalline-Module/Christallinemodule-Produkt_1044.html nach dem Deployment.

Woran liegt das?

0 Kudos