Logo.CortexAG

Anmelden +

erweitertes Selektieren

In manchen Fällen können die bisher beschriebenen Selektionsmöglichkeiten nicht ausreichend sein bzw. beschränkend wirken. Dafür gibt es die Möglichkeit die Selektionskriterien direkt im Serverformat anzugeben.

Dabei sind einige Dinge zu beachten, die durch das einfache Select optimiert werden:

  • Aufbau von Verlinkungsketten
  • Automatische Veroderung bei mehreren Positivkriterien in einem Feld
  • Bedeutung der Reihenfolge zwischen Positiv- und Negativkriterien
  • Automatisierter Moduswechsel bei Verlinkungen mit Negativkriterien

Um die erweiterte Selektion zu benutzen, übergibt man der Select-Funktion kein Objekt sondern ein "Array" von Objekten, deren Aufbau im Folgenden beschrieben wird:

//Beispiel: Einfaches Select -> siehe oben
'select' : 
{
  'Wer' : 'Eva Hilfreich',
  'ProVerw.PrSt' : 'A'
}
 
//Beispiel: Experten Select
'select' : 
[
  { ... },
  { ... },
  { ... }
]

Aufbau - Expertenselektion

Der komplette Aufbau ist ein JSON-Objekt. Wobei im select-Key ein Array von Objekten vorliegt. Jedes Objekt stellt dabei ein Selektionkriterium dar.

//Beispiel: Experten Select
'select' : 
[
  {
    'm' : '+',
    't' : 's',
    'f' : 'Wer',
    'v' : ['Eva Hilfreich']
  },
  {
    'm' : '+',
    't' : 'l',
    'f' : 'AktSt',
    'v' : ['A', 'K', 'N']
  }
]

 

m
Modus
t
Typ
v
Value (Inhalt)
f
Feldsynonym
ls
Verweissynonym
+ (Positivkriterium)
oder
- (Negativkriterium)



s (Single = Einzelkriterium) Array mit einem Element Feldsynonym




r (Range = von-bis-Bereich) Array mit Start und Ende Element
l (List = Aufzählung von Elementen) Array mit n-Elementen
v (Vorauswahl = Eine Vorauswahl bzw. Vorselektion.
Vergleichbar mit Klammern in der Mathematik.)
Array mit n-Selektionskriterien   Ohne ls = normale Vorauswahl
  Mit ls = Verweisfeld über das die Vorauswahl expandiert wird
O (ODER)



 

Beispiel Expertenselektion - Reihenfolge der Kriterien

//Beispiel von oben:
//Alle Aktionen deren verwiesene Projekte den Status A haben aber NICHT die Aktionen von Eva Hilfreich
'select' : 
{
  'Wer' : '-Eva Hilfreich',
  'ProVerw.PrSt' : 'A'
}
 
//Expertenselect
'select' : 
[
  {
    'm' : '-',
    't' : 's',
    'f' : 'Wer',
    'v' : ['Eva Hilfreich']
  },
  {
    'm' : '+',
    't' : 'v',
    'ls' : 'ProVerw',
    'v' : [
            {
              'm' : '+',
              't' : 's',
              'f' : 'PrSt',
              'v' : ['A']
            }
          ]
  }
]
 
/*
  ACHTUNG
  Das Beispiel ist scheinbar richtig, wird aber kein Ergebnis liefern, da die Reihenfolge der Kriterien hier eine Rolle spielen.
 
  Wir erinnern uns:  Dabei sind einige Dinge zu beachten, die durch das einfache Select optimiert werden:
  -> Bedeutung der Reihenfolge zwischen Positiv- und Negativkriterien
 
  Negativkriterien können nur von einer bereits selektierten Menge abgezogen werden. Also müssen in diesem Fall die Kriterien vertauscht werden.
*/
'select' : 
[
  {'m' : '+', 't' : 'v', 'ls' : 'ProVerw', 'v' : [{'m' : '+', 't' : 's', 'f' : 'PrSt', 'v' : ['A']}]},
  {'m' : '-', 't' : 's', 'f' : 'Wer', 'v' : ['Eva Hilfreich']}
]

 

HINWEIS: Einfache Regel: Jeder Block (bzw. Vorauswahl) von Selektionskriterien muss mit einem Positivkriterium beginnen!

 

Beispiel Expertenselektion - Veroderung der Kriterien eines Feldes

//Beispiel es sollen alle Firmen gefunden werden, die im Postleitzahlenbreich 494* liegen oder im Bereich 64501–64521 aber NICHT die Plz 49434 haben
'select' : 
{
  'Plz' : [
            {'m' : '+', 't' : 's', 'v' : ['494*']},
            {'m' : '+', 't' : 'r', 'v' : ['64501', '64521']},
            {'m' : '-', 't' : 's', 'v' : ['49434']},
          ]
}
 
//Expertenselect
'select' : 
[
  {
    'm' : '+',
    't' : 'v',
    'v' : [
            {
              'm' : '+',
              't' : 's',
              'f' : 'Plz',
              'v' : ['494*']
            },
            {
              'm' : '|'
            },
            {
              'm' : '+',
              't' : 'r',
              'f' : 'Plz',
              'v' : ['64501', '64521']
            }
          ]
  },
  {
    'm' : '-',
    't' : 's',
    'f' : 'Plz',
    'v' : ['49434']
  }
]
/*
Die positiven Kriterien der Plz-Suche müssen zunächst verodert werden, da man die gesamte Menge finden möchte. Danach wird das Negativkriterium abgezogen.
*/

 

Beispiel mit Notwendigkeit Expertenselektion

Die Beispiele bisher lassen sich über das normale Select viel eleganter lösen. Deshalb hier ein paar Beispiele, die sich nur mit der Expertenselektion lösen lassen.

/*
  Beispiel
  In einer Wiederholfeldgruppe sind zu Personen 1 bis n Bankverbindungen gespeichert.
  Es sollen nun alle Personen gefunden werden, die ein Konto bei der Postbank UND Sparkasse haben.
 
  Über das einfache Select könnte man nur Personen finden die zumindest bei einer der Banken ein Konto haben.
  Hier steht die automatische Veroderung der Positivkriterien eines Feldes im Weg, die im Expertenselect nicht greift.
*/
 
'select' : 
[
  {
    'm' : '+',
    't' : 's',
    'f' : 'Bank',
    'v' : ['Sparkasse']
  },
  {
    'm' : '+',
    't' : 's',
    'f' : 'Bank',
    'v' : ['Postbank']
  }
]

Hinweis: Bei einer Range ist das erste Element die Startposition und das zweite Element die Ende-Position. Eines der Beiden kann auch fehlen.

 

/*
  Beispiel, Einsatz von Oder
 
  Männliche Personen die zwischen 1963 und einschl. April 1965 geboren sind
  oder
  Weibliche Personen die 2 oder mehr Kinder haben und mind. vor 1978 geboren sind
*/
 
'select' : 
[
  { 'm' : '+', 't' : 's', 'f' : 'Gesch', 'v' : ['M'] },
  { 'm' : '+', 't' : 'r', 'f' : 'GebDat', 'v' : ['1963*', '196504*'] },
  { 'm' : '|' },
  { 'm' : '+', 't' : 's', 'f' : 'Gesch', 'v' : ['W'] },
  { 'm' : '+', 't' : 'r', 'f' : 'GebDat', 'v' : ['', '1978'] },
  { 'm' : '+', 't' : 'r', 'f' : 'Kinder', 'v' : [2] },
]

WICHTIG: Aus Performancegründen Kriterien der selben Ebene in einem Block immer in EINER Vorauswahl zusammenfassen. Siehe folgendes Beispiel.

 

/*
  Beispiel
 
  Projekte mit Status A, deren Abschluß innerhalb des letzten Quartals erfolgte
  deren verwiesene Personen mit
  Namen Meier heißen und Männlich sind
 
*/
 
'select' : 
[
  { 'm' : '+', 't' : 's', 'f' : 'ProSt', 'v' : ['A'] },
  { 'm' : '+', 't' : 'r', 'f' : 'Abschl', 'v' : ['-1qa', '-1qe'] },
  { 'm' : '+', 't' : 'v', 'ls' : 'PersVer', 'v' : [
                                                    { 'm' : '+', 't' : 's', 'f' : 'Gesch', 'v' : ['M'] },
                                                    { 'm' : '+', 't' : 's', 'f' : 'Name', 'v' : ['Meier'] }
                                                  ] }
]

 

Rückgabeobjekt

{
    "rc": 0,
    "error": "",
    "data": 
    {
      'i' : {
              //Anzahl der Fundstellen
              'counttotal' :  116,
 
              //Dauer Fundstellen ermitteln
              'timeselect' :  0.0093,
 
              //Dauer Listendaten ermitteln (optional)
              'timeget' :  0.05,
 
              //Anzahl der Fundstellen zu denen Listendaten ermittelt wurden (optional)
              'countget' :  116
            },
      'c' : { },
      'd' : [ ]
    }
}
  • rc - Returncode der Methode. 0 → OK, sonst Fehler
  • error - Falls ein Fehler aufgetreten ist, steht hier eine Kurzmeldung
  • data - Objekt mit den ermittelten Daten, es wird ein Listenresult-Objekt zurückgegeben, sollte es keine Fundstellen geben, existiert nur der i-Key

 

Fehlercodes

//Fehlercodes Select
-5100 no selection criteria
-5101 unknown date format

-5111 unknown field or wrong basetype
-5112 field access denied
-5113 link field required
-5114 only negative criteria
-5115 first criteria negative
-5116 expansion doublette linksy

 

 Hinweise zur Online-Hilfe
 

© 2017 Cortex AG
(letzte Aktualisierung: 12.04.2017)

 Haftungsausschluss 

Impressum    AGB