Questions & Answers

SOLVED
peter_rossa
I'm new here

setFilterParams() - Parameter

Jump to solution

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

0 Kudos
1 Solution

Accepted Solutions

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

View solution in original post

0 Kudos
20 Replies
tklein
I'm new here

Hallo,

der richtige Weg erfolgt รผber das Interface Content2Params.

http://www.e-spirit.com/odfs42/access/de/espirit/firstspirit/access/store/sitestore/Content2Params.h...

0 Kudos

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 Kudos

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 Kudos

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 Kudos

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 Kudos

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 Kudos

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 Kudos

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

templatestore = storeAgent.getStore(Store.Type.TEMPLATESTORE, false);        // Vorlagen

sitestore = 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 Kudos

Unbenannt.PNG

0 Kudos

Type a product name