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
1 Solution

Accepted Solutions

Hallo Michael,

die entsprechenden Seitenreferenzen findest Du nicht über die eingehenden Referenzen eines Datensatzes, das Ergebnis von Abfragen schlägt sich (bis auf ganz bestimmte Ausnahmen) nicht im Referenzgraph nieder - hast Du Dir den mal angesehen?

Ich gehe jetzt mal vom "alten" Mithras aus. Dort haben die entsprechenden Seitenreferenzen Verbindungen zur Produkte-Tabellenvorlage (quasi über den Daten-Reiter).

Du könntest also die eingehenden Referenzen auf der Produkte-Tabellenvorlage durchgehen, dort nur die Seitenreferenzen betrachten und jede(!) davon nach der StoredUrl für den Datensatz fragen.

Hintergrund ist hier, dass die einzelnen Detailseiten entsprechende Filter gesetzt haben und immer nur die Deteilseiten einer Kategorie anzeigen. Nur bei der Seitenreferenz die hier "zum Datensatz passt" wird hier während der Generierung die URL eingetragen.

Rein theoretisch(!) könntest Du über die API auch noch weiter in die Seitenreferenzen "reinlaufen" (Stichwort Content2Params) und gezielter prüfen ob in der Abfrage die ID der Kategorie des jeweiligen Datensatzes steht. Das würde es aber nur unnötig kompliziert machen - pragmatischer ist es hier, einfach alle eingehenden PageRef-Referenzen (auf die Produkte-Tabellenvorlage) nach der URL des jeweiligen Datensatzes zu fragen und sobald Du etwas bekommst abzubrechen.

Viele Grüße

Michael

View solution in original post

0 Kudos
30 Replies
kohlbrecher
Crownpeak employee

Hallo Michael,

ein SectionImpl ist doch auch kein ContentProducer oder verstehe ich dich falsch?

Kannst du etwas Code posten, dann ist es leichter, dein Problem zu verstehen.

Grüße

Jan

0 Kudos

Datensätze werden ja nie eigenständig generiert, sonder immer im Kontext einer Seite. Eventuell reicht es in deinem Anwendungsfall die Vorschauseite des Templates zu nehmen und die URL des Datensates in diesem Kontext anzufragen. Vorraussetzung ist da natürlich, das eine Vorschauseite definiert ist.

Peter
0 Kudos

Ja richtig ... die Section selbst ist kein ContentProducer, aber ich hole mir immer die dazugehörige Seite (Page) und die ist einer.

Die Frage müsste auch eigentlich lauten: "wie komme ich über das Dataset an die dazugehörige Page?", die z.B. am Ende so Deployed wird,

       http://[Mithras-Deploy-Domain]/Produkte/Kristalline-Module/Christallinemodule-Produkt_960.html

wenn der Redakteur den entsprechenden Datensatz gerade bearbeitet (siehe Screenshot):

km_10_mono.jpg

Hintergrund ist, dass ich in dem jeweiligen template einen FS_Button habe, der auch wunderbar für Seiten und Absätze funktioniert und mir anhand des aktuell vom Redaktuer ausgewählten Contents die Deployment-URL generiert , aber eben nicht für Datasets.

0 Kudos

Der FS_Button führt im Übrigen diesen Code aus:

IDProvider selectedElement = (IDProvider) paramMap.get("element");

BaseContext context = (BaseContext) paramMap.get("context");

Language language = (Language) paramMap.get("language");

MyPlugin.doWhatIMean(context, selectedElement , language);

0 Kudos

Interessanter wäre wohl der Problem-relevante Code innerhalb von "MyPlugin.doWhatIMean(..)" Smiley Wink

Peter
0 Kudos

Eventuell hilft aber schon dieses Stückchen Pseudo-Code:

Dataset dataset = ...;
PageRef pageref = ...;

Language language = ..;

TemplateSet templateset = ...;

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

Peter
0 Kudos

Bei einer Section komme ich so (recursiv) an die Page:

selectedElement.getParent()

und damit noch mittels getIncomingReferences den PageRef um das Template set zu holen

contentProducer.getProject().getTemplateSets()

dann rufe ich  die URL factory auf:

urlFactory.getUrl(pageRef, templateSet, language, pageParams);   

Aber bei einem aufgewählten Dataset geht das halt (so) nicht.

0 Kudos

Aber wie komme ich an die PageRef eines DataSets. So geht es nicht, da referenceEntries imme rleer ist!?:

public static PageRef getPageRefFromStoreElement(StoreElement storeElement) {

        ReferenceEntry[] referenceEntries = storeElement.getIncomingReferences();

        for (ReferenceEntry referenceEntry : referenceEntries) {

            IDProvider idProvider = referenceEntry.getReferencedElement();

            if (!(idProvider instanceof PageRef)) {

                continue;               

            }

            return (PageRef) idProvider;

        }

        return null;

}

0 Kudos

Und dann bleibt noch die Frage wo ich dann bei einem dataSet die PageParams herbekomme?

geht doch auch nur über die PageRef? oder? Und wenn ja bleibt wieder die Frage, wo die PageRef herkommt?(siehe oben)

0 Kudos