setFilterParams() - Parameter
Author: peter_rossa
Publication Date: 7/10/2012 8:06
Hallo Community,
ich möchte gerne auf einer PageRef eine Abfrage anwenden. Normalerweise habe ich das per Hand in der Struktur im Reiter Daten gemacht, indem ich die Abfrage ausgewählt habe. In der API gibt es eine Funktion Namens "setFilterParams(Map<String,Object> params)". Wenn ich das richtig sehe, wende ich dies auf eine PageRef an. Jedoch ist mir nicht klar, welche Parameter ich da mit geben muss und wie ich diese bekomme.
Ist dies eigentlich die Richtige Funktion für mein anliegen?
Vielen Dank und Grüße
Peter
-
Author: tklein - 7/10/2012 8:45
Hallo,
der richtige Weg erfolgt über das Interface Content2Params.
0 -
Author: peter_rossa - 7/10/2012 8:56
ja, darüber habe ich ja die Funktion gefunden. Nur weis ich nicht wie ich an die Parameter, die ich der Funktion übergeben soll, ran komme oder was das genau für Objekte sind. Also "
Map<String,Object> params".Ein Codebeispiel wär sehr Hilfreich!
Gruß Peter
0 -
Author: tklein - 7/10/2012 9:45
Die Parameter ergeben sich doch über das Query. Die kann man dann über eine neue map hinzufügen oder die vorhandene auslesen und den value setzen.
try {
pageRef.setLock(true, false);
c2p = pageRef.getContent2Params();
c2p.setRecordCountPerPage(1);
c2p.setMaxPageCount(1);
c2p.setQuery(query);
map.put(paramName, catName);
c2p.setFilterParams(map);
pageRef.save();
requestOperation.perform("PageRef successfully created");
} catch (LockException e) {
requestOperation.perform(e.getMessage());
} finally {
pageRef.setLock(false, false);
}
0 -
Author: peter_rossa - 7/10/2012 10:08
Danke für die schnelle Antwort.
Sehe ich das richtig, dass
-
setRecordCountPerPage()= für die Anzahl der Einträge pro Seite -
setMaxPageCount()= für die maximale Seitenanzahl
steht?
Dann sind mir noch einige Sachen unklar.
-
setQuery()= wählt die Query aus den Vorlagen aus, die ich verwenden möchte? Wenn ja, ist das einfach der Referenzname? -
map.put(paramName, catName)= was wird damit erreicht und was steht hinter "paramName" und "catName"?
Es tut mir leid, aber ich arbeite noch nicht so lange mit der API und wär für eine ausführlichere Beschreibung sehr dankbar.
0 -
-
Author: tklein - 7/10/2012 10:37
peter.rossa schrieb:
Danke für die schnelle Antwort.
Sehe ich das richtig, dass
-
setRecordCountPerPage()= für die Anzahl der Einträge pro Seite -
setMaxPageCount()= für die maximale Seitenanzahl
steht?
genau.
peter.rossa schrieb:
Dann sind mir noch einige Sachen unklar.
-
setQuery()= wählt die Query aus den Vorlagen aus, die ich verwenden möchte? Wenn ja, ist das einfach der Referenzname?
Ja, das ist die Query aus den Vorlagen. Es ist nicht der referenzname sondern das Query Object was man sich vorher aus dem TemplateStore holen muss.Allerdings brauch man das nicht wenn die Query schon gesetzt wurde.
peter.rossa schrieb:
-
map.put(paramName, catName)= was wird damit erreicht und was steht hinter "paramName" und "catName"?
Der paramName ist hier der Parameter name der in dem QueryObject benutzt wird, denn kann man wie schon gesagt auch aus der Query holen. catName ist hier der Vergleichswert. Wenn das Query z.B. einen Vergleich auf den Katergorienamen hat.
0 -
-
Author: peter_rossa - 7/10/2012 13:21
OK, das habe ich soweit verstanden. Jedoch klappt es nicht, eine Query zu setzen, da bei der Zeile
map.put(paramName, catName)immer ein Fehler geworfen wird:"Attempt to resolve method: put() on undefined variable or class name: map at line 77"
Wo genau definier ich map und was ist der Inhalt?
Sehe ich das richtig, dass ich die Query mit dem Parameter und dem Wert nur komplett für die Pageref setzten kann.
Also duch folgende 3 Zeilen:
c2p.setQuery(query);
map.put(paramName, catName);
c2p.setFilterParams(map);Ich habe es nur mit
c2p.setQuery(query);versucht, jedoch wurde die Query nicht gesetzt. Lag das daran, dass kein Parameter und Wert angegeben wurde?0 -
Author: broszeit - 7/16/2012 10:08
Hallo,
die Map kannst du vorher erstellen:
map = new java.util.HashMap();
Ich habe es nur mit
c2p.setQuery(query);versucht, jedoch wurde die Query nicht gesetzt. Lag das daran, dass kein Parameter und Wert angegeben wurde?Woran erkennst du, dass die Query nicht gesetzt wird?
Es wird ja nicht zwingend für jede Abfrage ein Parameter benötigt. Insofern ist es auch möglich eine Query zu setzen ohne FilterParams zu definieren.
Wenn es nach dem deklarieren der Map immer noch nicht klappt, bitte einmal die Zeile(n) posten, in der "query" deklariert und initialisiert wird.
Viele Grüße
Rouven
0 -
Author: peter_rossa - 7/17/2012 9:22
Vielen Dank für die Antwort. Es kam kein Fehler mehr, jedoch wird die Abfrage immer noch nicht gesetzt, nachdem die Seitenreferenz in der Struktur angelegt wurde (siehe Screenshot).
Wie gewünscht, hier mein Code zur Fehlersuche:
/*--------------------- Imports -----------------------*/import de.espirit.firstspirit.access.store.*;import de.espirit.firstspirit.agency.*;import de.espirit.or.query.*;/*--------------------- get Language -----------------------*/langAgent = context.requireSpecialist(LanguageAgent.TYPE);langList = langAgent.getLanguages();for(lang:langList) {if(lang.getAbbreviation().equals("DE")) {langDE = lang;}if (lang.getAbbreviation().equals("EN")) {langEN = lang;}}masterLang = langAgent.getMasterLanguage();/*--------------------- show form -----------------------*/data = context.showGui();rubrikID = data.get("cs_kategorie").getEditor().get(lang).toString();/*--------------------- stores -----------------------*/storeAgent = context.requireSpecialist(StoreAgent.TYPE);pagestore = storeAgent.getStore(Store.Type.PAGESTORE, false); // Inhaltetemplatestore = storeAgent.getStore(Store.Type.TEMPLATESTORE, false); // Vorlagensitestore = storeAgent.getStore(Store.Type.SITESTORE, false); // Struktur/*--------------------- Globale Variablen -----------------------*/refPageName = "News (Details)";query = templatestore.getStoreElement("Aktuelles_1_1@tud_vorlagen.rubrikauswahl_aktuell", IDProvider.UidType.TEMPLATESTORE);target = context.getStoreElement();detailSiteUid = "newsdetails_1";/*------------------------------------------------------*/detailSiteTemplate = pagestore.getStoreElement(detailSiteUid, IDProvider.UidType.PAGESTORE);detailRefPage = target.createPageRef(refPageName, detailSiteTemplate);detailContent2 = detailRefPage.createContent2Params();detailRefPage.setLock(true, false);try {detailRefPage.getLanguageInfo(langDE).setDisplayName(refPageName);detailContent2.setRecordCountPerPage(1);detailContent2.setMaxPageCount(0);detailContent2.setQuery(query);map = new java.util.HashMap();map.put("id", rubrikID);detailContent2.setFilterParams(map);detailRefPage.save("set display name and permissions", false);} finally {detailRefPage.setLock(false, false);}Vielen Dank im Voraus und Viele Grüße
Peter
0 -
Author: peter_rossa - 7/17/2012 10:25
0 -
Author: broszeit - 7/18/2012 7:33
query = templatestore.getStoreElement("<uid>", de.espirit.firstspirit.access.store.templatestore.Query.UID_TYPE);
Versuch mal, ob der obige Code funktioniert, um an das Query zu kommen.
Du kannst überprüfen, ob "query" überhaupt einen Wert enthält, z.B. mit
context.logInfo("Query: " + query);
Ich bin mir nicht sicher, ob die uid, welche du oben genutzt hast, die richtige ist. Wenn es mit der von dir genutzten nicht funktioniert, würde ich es mal nur mit "tud_vorlagen.rubrikauswahl_aktuell" probieren.
Viele Grüße
Rouven
0 -
Author: peter_rossa - 8/8/2012 8:53
Die Seitenreferenz wird nun komplett mit allen Variablen ect angelegt. Jedoch habe ich nun ein weiteres Problem.
Die Seitenreferenz funktioniert erst, wenn ich manuell in den Bearbeitungsmodus gehe, in irgendein Feld rein klicke (ohne Änderungen vorzunehmen) und dann den Bearbeitungsmodus wieder verlasse. Obwohl alles richtig angelegt wurde. Oder habe ich etwas übersehen?
Mein Skript ist oben zu finden, mit dem Zusatz von Rouven um die query zu bekommen.
Hoffe Ihr könnt mir weiter helfen.
0 -
Author: Peter_Jodeleit - 8/8/2012 12:23
Was bedeutet denn "funktioniert erst"?
0 -
Author: peter_rossa - 8/8/2012 13:01
also auf der Seite soll eine News aus den Datenquellen dargestellt werden. Diese erscheint erst, nachdem ich besagtes getan habe, davor ist der Content-Bereich leer.
0 -
Author: Peter_Jodeleit - 8/8/2012 15:26
"News aus den Datenquellen dargestellt werden" -> redest du von der Vorschau? Generierung?
Hört sich auf jeden Fall seltsam an. Ich vermute, weil du "PageRef.createContent2Params()" benutzt. Das ist ja deprecated und im JavaDoc wird auf "getContent2Params()" verwiesen. Bitte stell mal deinen Code um und poste die Ergebnisse hier.
0 -
Author: peter_rossa - 8/9/2012 9:56
also momentan geht es nur um die Vorschau. Mit der Änderung geht es auch noch nicht. gibt es irgendwas, was ich beim Anlegen solcher Seitenreferenzen mit Filter noch beachten muss?
0 -
Author: Peter_Jodeleit - 8/9/2012 10:08
Ich habe jetzt noch einmal auf das Skript geschaut (letzter Versuch :smileywink:): Du holst dir erst die "Content2Params" aus der Seitenreferen und sperrst diese anschliessend. Das ist auf jeden Fall die falsche Reihenfolge. Ob das die Ursache für das beobachtete Verhalten ist kann ich aber nicht sagen.
Wenn nicht kann nur ein Step-By-Step-Debugging weiterhelfen. Das kann ich nicht leisten...
0 -
Author: peter_rossa - 8/9/2012 10:15
mir ist grade aufgefallen, dass beim Anlegen im <PARAM ... (siehe Markierung auf dem Screenshot) "String" steht. Nachdem ich in den Bearbeitungsmodus gewechselt bin und irgendwo hin geklickt habe, ändert es sich auf "Integer". Kann das eventuell der Fehler sein? Wenn ja, kann man das irgendwie beim Anlegen schon festlegen?
0 -
Author: peter_rossa - 8/9/2012 10:17
try {
detailRefPage.setLock(true, false);
detailRefPage.getLanguageInfo(langDE).setDisplayName(refPageDisplayName);
detailContent2 = detailRefPage.getContent2Params();
detailContent2.setRecordCountPerPage(1);
detailContent2.setMaxPageCount(0);
detailContent2.setQuery(query);
map = new java.util.HashMap();
map.put("id", rubrikID);
detailContent2.setFilterParams(map);
detailRefPage.save("set display name and permissions", false);
} finally {
detailRefPage.setLock(false, false);
}
ist dies besser?
0 -
Author: Peter_Jodeleit - 8/9/2012 11:11
Kann das eventuell der Fehler sein? Wenn ja, kann man das irgendwie beim Anlegen schon festlegen?
2x ja.
rubrikID = data.get("cs_kategorie").getEditor().get(lang).toString();...map.put("id", rubrikID);Das "toString()" dürfte die Ursache dafür sein. Musst du nach "Integer" konvertieren.
0
Vous devez vous connecter pour laisser un commentaire.
Commentaires
19 commentaires