Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > agorum core information center entwickeln
Sie konfigurieren Filterdefinitionen, wenn Sie einen eigenen Filter:
let filterFields = [ { title: 'Ein Titel', name: 'Ein eindeutiger Name für diesen Filter', type: 'query', items: [ { title: 'Titel des Filters', name: 'Eindeutiger Name des Filters', query: 'Suche des Filters' } ] }, { title: 'Titel eines Term-Filters', name: 'Ein eindeutiger Name für diesen Filter', type: 'terms', field: 'Solr-Feld, nach dem das System gruppieren soll', limit: 10, maxChars: 15 }, { title: 'Erstelldatum (letzte 10 Tage)', name: 'Ein eindeutiger Name für diesen Filter', type: 'range', convert: 'date', formatDisplay: 'dd.MM.yyyy', formatSearch: 'yyyy-MM-dd', start: 'NOW/DAYS-10DAYS', end: 'NOW/DAYS+1DAY', gap: '+1DAY', field: 'createdate', sortOrder: 'desc' } ];
Definiert eine Überschrift über dem Filter.
Definiert einen eindeutigen Namen für diesen Filter.
Definiert optional den Modus für den Filterbereich mit AND oder OR.
AND
Das System verknüpft Felder bei der Mehrfachauswahl bei der Suche mit UND.
OR
Das System verknüpft Felder bei der Mehrfachauswahl bei der Suche mit ODER.
Mit Such-Parametern konfigurieren Sie den Stil der Filteroption.
Führt eine festgelegte Suche aus und stellt die Anzahl der Ergebnisse dar.
Ein query-type besteht aus einem title und querys, die Sie unter items definieren.
Beispiel
Dieses Beispiel zeigt die Filteroptionen des Filters Alles. Die Filteroptionen beruhen auf einer Query.
function configQuery() { return { title: 'Objektarten', name: 'example_objectTypes', type: 'query', items: [ { title: 'Dokument + Mails', name: 'example_documentsMails', query: 'classname:(fileobject OR mailobject OR amailmail OR MailDocumentObject OR ASmbFile OR FaxFile OR ALfsFile)' }, { title: 'Dokument', name: 'example_documents', query: 'classname:(fileobject OR ASmbFile OR FaxFile OR ALfsFile)' }, { title: 'Notiz', name: 'example_note', query: 'classname:(noteobject)' }, { title: 'Ordner', name: 'example_folders', query: 'classname:(folderobject OR ASmbFolder OR ALfsFolder OR ALfsMountPoint)' }, { title: 'Mail', name: 'example_mails', query: 'classname:(mailobject OR amailmail)' }, { title: 'Mailanhänge', name: 'example_mailAttachments', query: 'classname:(MailDocumentObject)' } ] }; }
Sucht immer nach demselben Feld.
Tipps: Verwenden Sie diesen Parameter:
bei vielen Suchanfragen
wenn der angegebene Feldname mehrfach vorkommt
bei Feldern, bei denen nicht allzu viele verschiedene Werte geliefert werden, etwa bei classname
Das System führt bei queryFiltered intern eine Facet-Suche durch auf das Feld, das Sie vorn am Anfang von queryFiltered definiert haben. Danach verteilt das System die Ergebnisse programmtechnisch, basierend auf den in der Klammer stehenden Werten.
Beispiel
queryFiltered: 'classname:(fileobject OR ASmbFile OR FaxFile OR ALfsFile) ${subQuery}'
Dieses Beispiel:
Dieses Beispiel fasst mithilfe von queryFiltered die sechs einzelnen Querys zu einer einzigen Suchabfrage zusammen:
Komplettes Beispiel
function configQueryFiltered () { return { title: 'Objektarten', name: 'example_objectTypes_QueryFiltered', type: 'query', items: [ { title: 'Dokument + Mails', name: 'example_documentsMails_QueryFiltered', queryFiltered: 'classname:(fileobject OR mailobject OR amailmail OR MailDocumentObject OR ASmbFile OR FaxFile OR ALfsFile)' }, { title: 'Dokument', name: 'example_documents_QueryFiltered', queryFiltered: 'classname:(fileobject OR ASmbFile OR FaxFile OR ALfsFile)' }, { title: 'Notiz', name: 'example_note_QueryFiltered', queryFiltered: 'classname:(noteobject)' }, { title: 'Ordner', name: 'example_folders_QueryFiltered', queryFiltered: 'classname:(folderobject OR ASmbFolder OR ALfsFolder OR ALfsMountPoint)' }, { title: 'Mail', name: 'example_mails_QueryFiltered', queryFiltered: 'classname:(mailobject OR amailmail)' }, { title: 'Mailanhänge', name: 'example_mailAttachments_QueryFiltered', queryFiltered: 'classname:(MailDocumentObject)' } ] }; }
Blendet optional weitere Eingabefelder unterhalb eines Filters ein, mit denen Sie das Ergebnis einschränken.
Beispiel
function configSubQuery () { return { title: 'Objektarten', name: 'example_objectTypes_subQuery', type: 'query', items: [ { title: 'Dokumente', name: 'example_documents_subQuery', queryFiltered: 'classname:(fileobject OR ASmbFile OR FaxFile OR ALfsFile) ${subQuery}', subQuery: [ { title: 'Name', name: 'example_name_subQuery', query: 'name:(${value})' } ] } ] }; }
Eingabe des Benutzers (${value})
Die Eingabe des Benutzers greift das System als ${value} auf:
query: 'name:(${<Wert aus dem Eingabefeld> = value})'
Diese Eingabe fügen Sie in die Query an der Stelle ein, in der der Platzhalter ${subQuery} definiert ist:
queryFiltered: 'classname:(fileobject OR ASmbFile OR FaxFile OR ALfsFile) ${subQuery} name:(${<Wert aus dem Eingabefeld> = value})'
Wenn Sie in data zusätzlich einen MetaDB-Schlüssel mitgeben, der auf eine DataSource zeigt, stellt das System eine Auswahlbox dar.
Tipps:
Definieren Sie weitere dataParameter, um sie an den DataHandler zu übergeben.
Fügen Sie mit weitere Werte hinzu, die das System automatisch als ODER-Suche für das jeweilige Feld einsetzt.
Verweist über einen MetaDB-Pfad auf einen DataHandler (spezielles Metadatum, siehe DataHandler-Manager).
Syntax
{ title: 'Test', name: 'test', query: 'allfields:classname ${subQuery}', subQuery: [ { title: 'Test', name: 'test.sub', data: 'MAIN_MODULE_MANAGEMENT/customers/<Konfigurationsprojekt>/Data/<dataHandler>', dataParameter: { param1: 'Wert 1', param2: 'Wert 2' }, query: '${value}' } ] }
Funktionales Beispiel für die Suchoption „Notizen“
function configData () { return { title: 'Notizen', name: 'example_notes', type: 'query', items: [ { title: 'Notizen', name: 'example_notes_data', queryFiltered: 'classname:(noteobject) ${subQuery}', subQuery: [ { title: 'Absender', name: 'example_creator_data', data: 'MAIN_MODULE_MANAGEMENT/customers/agorum.composite/Data/agorum_composite_user_search', query: 'creator:(${value})' }, { title: 'Empfänger', name: 'example_receipients_data', data: 'MAIN_MODULE_MANAGEMENT/customers/agorum.composite/Data/agorum_composite_user_search', query: 'recipients:(${value})' } ] } ] }; } }
Ersetzt Werte bei einer subQuery mithilfe von JavaScript.
Das Skript in der MetaDB registrieren
Eigene Dateien/Administration/customers/<Konfigurationsprojekt>/js/acic/query
exports.getQuery = value => { return 'name:' + value; };
[ { queryScript: 'testplugin.testQueryScript', name: 'test_js_query', title: 'Test mit JS query' } ]
Stellt ein Feld mit zwei Feldern dar, um einen Bereich abzubilden (from und to).
function configTypeRange () { return { title: 'Erstelldatum', name: 'example_createDate_range', type: 'query', items: [ { title: 'freie Eingabe', name: 'example_createDateCustom_range', query: '${subQuery} allfields:createdate', subQuery: [ { query: '${value}', queryPart: 'createdate_date_range:[${valueFrom} TO ${valueTo}]', name: 'example_createdate_from_to_range', type: 'range', titleFrom: 'ab Datum (yyyy-mm-dd)', titleTo: 'bis Datum (yyyy-mm-dd)', convert: 'dateString' } ] } ] }; }
Geben Sie als type den Wert range an.
Das System:
Stellt ein Feld mit zwei Feldern dar, um einen Bereich speziell für den Datentyp date abzubilden (from und to).
Syntax
function configTypeDateRange () { return { title: 'Erstelldatum', name: 'example_createDate_rangeCustom', type: 'query', items: [ { title: 'Datumsbereich', name: 'example_createDateRangeCustom', query: 'allfields:createdate ${subQuery}', subQuery: [ { query: '${value}', queryPart: 'createdate_date_range:[${valueFrom} TO ${valueTo}]', name: 'example_createdate_range_from_to', type: 'date-range', titleFrom: 'ab Datum', titleTo: 'bis Datum' } ] } ] }; }
Sie können Konverter hinterlegen, die den Eingabewert konvertieren, bevor dieser zur Suche geht.
Konvertiert einen Datums-String in einen für die Suchmaschine verständlichen String.
Beispiel
... subQuery: [ { query: 'createdate_date_range:[${value} TO *]', name: 'createdate_from', title: 'ab Datum (yyyy-mm-dd)', convert: 'dateString' } ] ...
Beispiel mit type: date
... subQuery: [ { query: 'createdate_date_range:[${value} TO *]', name: 'createdate_from', title: 'ab Datum', type: 'date' } ] ...
Konvertiert einen String in einen Double.
Das System ersetzt Kommas durch Punkte, sodass die Suchmaschine die Angabe versteht.
Beispiel
... subQuery: [ { query: 'ag_rechnungs_betrag:{${value} TO *]', name: 'ag_rechnungs_betrag', title: 'Rechnungsbetrag höher als', convert: 'double' } ] ...
Ruft ein eigenes Skript für die Konvertierung auf.
Beispiel
subQuery: [ { query: 'name:${value}', name: 'test_js_name', title: 'Test mit JS', convert: 'script', convertScript: 'testplugin.testConvertScript' } ]
Das Skript in der MetaDB registrieren
Eigene Dateien/Administration/customers/<Konfigurationsprojekt>/js/acic/convert
Syntax des Skripts
exports.convert = value => { // value verändern .... return value; };
Achtung: Systembeeinträchtigungen durch Nutzung von range bei großen Datenmengen. range ist eine rechenintensive Funktion, speziell bei großen Datenmengen und / oder vielen Unterteilungen durch die Angabe eines zu kleinen Gaps. Verwenden Sie range mit Vorsicht.
Zählt in einem definierten Zeitraum mit Zeitschritt die Summen der jeweils darin vorkommenden gefundenen Objekte.
Diese Filtermethode gilt ausschließlich für Datums-Metadaten und Datums-Attribute.
Parameter
Parameter | Beschreibung |
---|---|
field | Definiert das Datums-Feld (Metadatum oder Objekt-Attribut), nach dem Sie gruppieren möchten. Schreiben Sie den Wert zu diesem Parameter klein. |
convert | Definiert den genutzten Konverter und konvertiert die Datumswerte mithilfe der Parameter formatDisplay und formatSearch um. Nur date ist möglich. |
formatDisplay | Formatiert das gefundene Datum für die Anzeige. Die Standard-Java-SimpleDateFormat-Angaben gelten. |
formatSearch | Formatiert das gefundene Datum, sodass Sie eine Range-Suche ausführen können. Solr liefert intern einen kompletten Zeitstempel im ISO-Format. Gruppierung nach Jahren 2017-01-01T00:00:00.000Z 2018-01-01T00:00:00.000Z Soll der Filter beim Anklicken alle Objekte des jeweils gewählten Jahres finden, extrahieren Sie das Jahr aus diesem Datum, sodass die Suchmaschine die jeweilige Jahreszahl erhält.
|
start | Definiert den Beginn des Suchbereiches, ab dem die Gruppierung erfolgt. |
end | Definiert das Ende des Suchbereichs, bis zu dem die Gruppierung erfolgt. |
gap | Definiert die Schrittweite für Gruppierungen. Beispiel für jährlich +1YEAR Beispiel für monatlich +1MONTH Beispiel für täglich +1DAY |
addGapToQuery | Fügt optional an die Query die Angabe von gap an, um eine Bereichssuche durchzuführen. Mögliche Werte • true • false
Beispiel mit nicht benötigtem addToQuery |
sortOrder | Sortiert die Suchergebnisse nach Wert (alphanumerisch), bei Datum entspricht das dem jeweils gefundenen ISO-Datumswert. asc aufsteigend (Standard) desc absteigend |
maxChars | Kürzt optional die gefundenen Werte auf die angegebene maximale Zeichenanzahl und fügt … an. |
Beispiel mit benötigtem addToQuery=true
Dieses Beispiel gibt alle Kalenderwochen (7-Tage-Schritte) basierend auf dem createDate zwischen dem aktuellen Jahr - 1 bis zum aktuellen Jahr + 1 aus.
Skript
function configTypeRangeAddGapToQuery () { return { title: 'Test gap (7 Tage)', name: 'configTypeRangeAddGapToQuery', type: 'range', convert: 'date', formatDisplay: '\'KW \'w \'- \'dd.MM.yyyy', formatSearch: 'yyyy-MM-dd', start: 'NOW/YEAR-1YEAR', end: 'NOW/YEAR+1YEAR', gap: '+7DAY', addGapToQuery: true, field: 'createdate', sortOrder: 'asc' }; }
Beispiel mit nicht benötigtem addToQuery
Dieses Beispiel gibt alle Ergebnisse gruppiert nach Jahr aus zwischen aktuellem Jahr - 10 Jahre bis zum aktuellen Jahr + 10 Jahre.
Ergebnis im Filter
Skript
function configTypeRangeAddGapToQueryFalse () { return { title: 'Test gap (Jahr)', name: 'configTypeRangeAddGapToQueryFalse', type: 'range', convert: 'date', formatDisplay: 'yyyy', formatSearch: 'yyyy', start: 'NOW/YEAR-10YEAR', end: 'NOW/YEAR+10YEAR', gap: '+1YEAR', addGapToQuery: false, field: 'createdate', sortOrder: 'asc' }; }
Parameter
Parameter | Beschreibung |
---|---|
field | Definiert das Feld, nach dem Sie gruppieren möchten (Metadatum oder Objekt-Attribut).
|
limit | Definiert die maximale Anzahl von Gruppierungselementen, die das System darstellt. |
sortOrder | Sortiert die Suchergebnisse nach Wert (alphanumerisch). asc aufsteigend (Standard) desc absteigend |
maxChars | Kürzt optional die gefundenen Werte auf die angegebene maximale Zeichenanzahl und fügt … an. |
missing | true Fügt optional einen Eintrag für alle Elemente, die nicht das entsprechende Metadatum (field) besitzen, hinten an den Filter an. false Fügt keine Einträge an. |
missingText | Parameter ist definiert Gibt optional den angegebenen Text als Filter aus. Parameter ist NICHT definiert Gibt den Text Alle anderen aus. |
translate | true Übersetzt optional die von der Suche zurückgelieferten Werte. false (Standard) Übersetzt die von der Suche zurückgelieferten Werte NICHT.
translate: 'agorum_translate_prefix_' |
Skript
/* global sc */ /* jshint unused: true */ // load base configuration for agorum core information center let baseFilter = require('/agorum/roi/customers/agorum.composite/js/aguila/acic/settings/base-filter'); // export the configuration exports.settings = user => { if (!user) user = sc.loginUser; let baseQuery = baseFilter.baseQuery(user); let filter = [ { title: 'Objektarten', name: 'objectTypes', type: 'query', items: [ { title: 'Dokument + Mails', name: 'documentsMails', queryFiltered: 'classname:(fileobject OR mailobject OR amailmail OR MailDocumentObject OR ASmbFile OR FaxFile OR ALfsFile)' }, { title: 'Dokument', name: 'documents', queryFiltered: 'classname:(fileobject OR ASmbFile OR FaxFile OR ALfsFile)' }, { title: 'Notizen', name: 'notes', queryFiltered: 'classname:(noteobject) ${subQuery}', subQuery: [ { title: 'Absender', name: 'creator', data: 'MAIN_MODULE_MANAGEMENT/customers/agorum.composite/Data/agorum_composite_user_search', query: 'creator:(${value})' }, { title: 'Empfänger', name: 'receipients', data: 'MAIN_MODULE_MANAGEMENT/customers/agorum.composite/Data/agorum_composite_user_search', query: 'recipients:(${value})' } ] }, { title: 'Ordner', name: 'folder', queryFiltered: 'classname:(folderobject OR ASmbFolder OR ALfsFolder OR ALfsMountPoint)' }, { title: 'Mail', name: 'mails', queryFiltered: 'classname:(mailobject OR amailmail)' }, { title: 'Mailanhänge', name: 'mailAttachments', queryFiltered: 'classname:(MailDocumentObject)' } ] }, { title: 'Erstelldatum', name: 'createDate', type: 'query', items: [ { title: 'Heute', name: 'today', query: 'createdate_date_range:[NOW/DAY-1DAY TO NOW/DAY]' }, { title: 'Gestern', name: 'yesterday', query: 'createdate_date_range:[NOW/DAY-2DAY TO NOW/DAY-1DAY]' }, { title: '1 Woche', name: 'oneWeek', query: 'createdate_date_range:[NOW/DAY-7DAY TO NOW/DAY]' }, { title: '1 Monat', name: 'oneMonth', query: 'createdate_date_range:[NOW/MONTH-1MONTH TO NOW/MONTH]' }, { title: 'freie Eingabe', name: 'createDateCustom', query: '${subQuery} allfields:createdate', subQuery: [ { query: '${value}', queryPart: 'createdate_date_range:[${valueFrom} TO ${valueTo}]', name: 'createdate_from_to', type: 'range', titleFrom: 'ab Datum (yyyy-mm-dd)', titleTo: 'bis Datum (yyyy-mm-dd)', convert: 'dateString' } ] } ] }, { // globale Tags title: 'Tags', name: 'tags', type: 'terms', mode: 'OR', field: 'ag_tags_ci', translate: false, limit: 10 }, { title: 'Dateiendung', name: 'extensions', type: 'terms', field: 'nameextension_ci', limit: 200, missing: true, missingText: 'Objekte ohne Endung', maxChars: 15 } ]; return [ { type: 'configuration', name: 'ag_doku_mf_FilterConfiguration', text: 'mf Doku AG', filter: filter, baseQuery: baseQuery, listType: 'detail', listTimeline: false, favorite: true, sort: baseFilter.defaultSort(false) } ]; };
Verwenden Sie diese Struktur, um einen Filter vorzubelegen:
filterSelection: { documentsMails: { value: true }, extensions: { value: [ 'html' ] } }
Geben Sie den Namen des Filters an und value=true.
filterSelection: { documentsMails: { value: true } }
Geben Sie den Namen des Filters an und jeweils ein Array von gewählten Elementen aus dem Filter als value.
filterSelection: { extensions: { value: [ 'html' ] } }
Beispiel mit Wert als Datum
filterSelection: { createDateYears: { value: [ '2018-01-01T00:00:00.000Z' ] } }
Sie können Filterselektionen negieren und damit definieren, was nicht auf den gewählten Filter passt.
Beispiel
Dieser Filter definiert keine Dokumente und E-Mails und nicht-HTML als Endung:
filterSelection: { documentsMails: { value: true, valueNot: true }, extensions: { value: [ 'html' ], valueNot: [ 'html' ] } }
Suchmodus (AND, OR) eines Bereichs wechseln
filterSelection: { tags: { mode: 'OR' // AND ist Standard } }
Beispiel
Dieses Beispiel aktiviert den Filter Notizen (notes) und füllt den Super-Administrator roi (ID=11000) als Wert bei Absender (creator) ein.
Stehen bei value mehrere Werte (Array), entspricht diese Angabe der ODER-Suche in diesem Feld (+ - Symbol in der Suche).
filterSelection: { notes: { valueNot: false, value: true, subQuery: { creator: { value: [ '11000' ] } } } }
Dieses Beispiel zeigt, wo Sie die Filtervorbelegung namens filterSelection im JavaScript-Filter hinterlegen:
Skript
/* global sc */ /* jshint unused: true */ // load base configuration for agorum core Information Center let baseFilter = require('/agorum/roi/customers/agorum.composite/js/aguila/acic/settings/base-filter'); function filterExampleSimple() { return { title: 'Simples Beispiel', name: 'filterExampleSimple', type: 'query', items: [ { title: 'Notizen', name: 'filterExampleSimple_notes', queryFiltered: 'classname:(noteobject) ${subQuery}', subQuery: [ { title: 'Absender', name: 'filterExampleSimple_creator', data: 'MAIN_MODULE_MANAGEMENT/customers/agorum.composite/Data/agorum_composite_user_search', query: 'creator:(${value})' }, { title: 'Empfänger', name: 'filterExampleSimple_receipients', data: 'MAIN_MODULE_MANAGEMENT/customers/agorum.composite/Data/agorum_composite_user_search', query: 'recipients:(${value})' } ] } ] }; } let filter = []; filter.push(filterExampleSimple()); function settings(user) { if (!user) user = sc.loginUser; let baseQuery = baseFilter.baseQuery(user); return [ { type: 'configuration', name: 'example_vorbelegung_im_Filter', text: 'Beispiel: Vorbelegter Filter', filter: filter, baseQuery: baseQuery, listType: 'detail', listTimeline: false, favorite: true, sort: baseFilter.defaultSort(false), filterSelection: { filterExampleSimple_notes: { valueNot: false, value: true, subQuery: { filterExampleSimple_creator: { value: [ '11000' ] //user roi besitzt immer diese ID } } } }, } ]; } module.exports = { settings: settings };