Logo.CortexAG

Anmelden +

(ab DataService-Version 3.0.011 und Server 3.0)

Select

Selektiert beliebige Datensätze in der Datenbank und gibt die Fundstellen als Listenergebnis zurück.

 

Anfrageobjekt

{
  "method": "Select",
  "requestid": 9,
  "param": {
    "UpdJsrHdl": "12345abcde67890fghij123abc",
 
    //Objekt mit Selektionskriterien
    "select" : {
 
               },
 
    //Liste mit der die Fundstellen dargestellt werden sollen
    'list_name' : 'Testliste', //Listenname einer gespeicherten Liste
    //oder
    'list_iid' : '123456789012345678901234', //24-stellige Listen-IId einer Liste
    //oder
    //Objekt mit einer eigenen definierten Simple-List
    'list' : {
 
             },
    //Anzahl Sekunden, die die Listenfunktion maximal Daten sammelt         
    'maxtime' : 2,
 
 
  }
}

  • UpdJsrHdl - Gültiges UpdJsrHdl.
  • select - Objekt mit Selektionskriterien.
  • list_name - Listenname einer in der Datenbank gespeicherten Liste.
  • list_iid - 24-stellige Listen-IId einer in der Datenbank gespeicherten Liste.
  • list - Objekt mit einer eigenen definierten Simple-List.
  • maxtime - Anzahl Sekunden, die die Listenfunktion maximal Daten sammelt
    (0 = keine Einschränkung)

 

Hinweis: Die Fundstellen werden immer komplett ermittelt, unabhängig von "maxtime". Die Angabe von "maxtime" ist lediglich eine zeitliche Begrenzung der Funktion, die die Anzeigedaten ermittelt.

 

select-Objekt

JSON-Objekt mit Selektionskriterien.

  • Key = Feldsynonym
  • Value = Suchkriterien
  • Felder über Verweise werden mit einem Punkt verbunden

 

Hinweis: Es ist zu beachten, dass es mindestens ein einschließendes Suchkriterium geben muss. Die einschließenden Suchkriterien bestimmen die Grundmenge, von der die ausschließenden Kriterien abgezogen werden. In SQL  werden beispielsweise über die Selektion einer Tabelle als Grundmenge alle Einträge dieser Tabelle verwendet; dieses ist in der CortexDB nicht der Fall. Die Selektion erfolgt feldbasiert; unabhängig von "Tabellen" und Datensatztypen. Über das Feld #T (Datensatztyp) können alle Datensätze eines bestimmten Datensatztypes selektiert werden. Dieses ist allerding mit Vorsicht einzusetzen, da die Selektion über dieses Feld bei vielen Datensätzen länger dauern kann. Am besten sind immer dedizierte Felder je Datensatztyp, die nur dort vorkommen können.

 

Kurzschreibweise - Suchkriterien als String

Der Bindestrich (Minus), das Komma, die Klammern ( ) und der * ("Asterisk") am Ende haben eine besondere Bedeutung. Falls eines dieser Zeichen im Suchstring vorkommt, dann ist ggf. die erweiterte Schreibweise zu verwenden.

  • Aufzählung mit Komma trennen
  • von-/bis-Bereich mit Bindestrich trennen, der DAVOR und DAHINTER von einem Leerzeichen eingeschlossen wird
  • * am Ende = Wildcard (unscharfe Suche)
  • Minus (Bindestrich) am Anfang ist ein Negativkriterium
  • sollen zu einem Feld mehrere Kriterien festgelegt werden, so sind die Suchkriterien als Array anzugeben

 

Regelwerk

 

Bindestriche / Minus

Ein Bindestrich zur Angabe einer Range (von-bis-Bereich) muss von je einem Leerzeichen vor und hinter dem Bindestrich umschlossen werden. Erfolgt die Angabe eines Bindestrich ohne Leerzeichen, so wird dieser als zu suchender Feldinhalt interpretiert.
(Vgl. bspw. auch die CSS-Syntax für "calc")

 

Status A bis J A - J
Status "A-J" (also "A-J" als Feldinhalt) A-J
Projektwert von 5000 bis 10000 5000 - 10000
Stadt Groß-Gerau
(kein Bereich, da der Bindestrich nicht von Leerzeichen eingeschlossen ist)
Groß-Gerau

 

Ein Minus (Bindestrich) zu Beginn des Statements bedeutet, dass dies ein Negativkriterium ist.

 

OHNE Status A -A
OHNE Projekte mit Wert 5000 -5000

 

Ein Negativkriterium kann auch eine Range beinhalten.

 

OHNE Projekte im Wertebereich von 5000 bis 10000 -5000 - 10000
OHNE Projekte mit Status J bis P -J - P
OHNE Ort Groß-Gerau (keine Range da 2. Bindestrich ohne Leerzeichen, funktioniert also) -Groß-Gerau

 

Gibt es innerhalb eines Kriteriums negative Werte, so ist das eigentliche Kriterium in Klammern einzuschließen.

 

OHNE Projekte mit Projektwert -5000 -(-5000)
OHNE Projekte mit Projektwert -5000 (doppeltes Minus) –5000
MIT Projekten mit Projektwert -5000 (-5000)
OHNE Projekten mi Projektwert von -15000 bis -10000 (doppeltes Minus) –15000 - -10000
OHNE Projekten mi Projektwert von -15000 bis -10000 -(-15000 - -10000)
MIT Projekten mit Projektwert von -15000 bis -10000 (-15000 - -10000)

 

Vorgehensweise des Parsers

  1. Überprüfung ob das 1. Zeichen ein Minus ist, dann Negativkriterium (sonst Positivkriterium) und 1. Zeichen wird entfernt
  2. Überprüfung ob jetzt eine Klammer angegeben wurde. Dann Inhalt aus der Klammer als Kriterium
  3. Kriterium wird an den Kommata aufgesplitet, wenn mehrere Einträge vorhanden sind, werde diese als Aufzählung angenommen und die Werte werden ohne weitere Behandlung übernommen
  4. wenn nach Aufsplittung nur ein Kriterium vorhanden ist, dann wird dieses auf Range überprüft, das Kriterium wird mit Leerzeichen-Bindestrich-Leerzeichen gesplitet, wenn danach 2 Werte vorliegen werden diese als Range übernommen und die Behandlung ist zu Ende
  5. wenn keine Aufzählung und keine Range vorhanden sind, dann wird Wert als Einzelwert übernommen

 

//Beispiel: Aktionen von Eva Hilfreich, deren verwiesene Projekte den Status A haben
'select' : 
{
  'Wer' : 'Eva Hilfreich',
  'ProVerw.PrSt' : 'A'
}
 
//Beispiel: Alle Aktionen deren verwiesene Projekte den Status A, F oder H haben aber nicht die Aktionen von Eva Hilfreich
'select' : 
{
  'Wer' : '-Eva Hilfreich',
  'ProVerw.PrSt' : 'A,F,H'
}
 
//Beispiel: Aktionen von Eva Hilfreich und Harry Hurtig, deren verwiesene Projekte den Status A bis J haben
'select' : 
{
  'Wer' : 'Eva Hilfreich,Harry Hurtig',
  'ProVerw.PrSt' : 'A - J'
}
 
//Beispiel: Aktionen von Eva Hilfreich und Harry Hurtig, deren verwiesene Projekte NICHT den Status A bis J haben
'select' : 
{
  'Wer' : 'Eva Hilfreich,Harry Hurtig',
  'ProVerw.PrSt' : '-A - J'
}
 
//Beispiel: Aktionen deren verwiesene Projekte den Status K haben und deren verwiesene Personen einen Namen haben der mit M beginnt
'select' : 
{
  'ProVerw.PerVerw.Name' : 'M*',
  'ProVerw.PrSt' : 'K'
}
 
//Beispiel: Alle Aktionen von Eva Hilfreich und Harry Hurtig, aber ohne die, die Aktionsstatus E bis H haben
'select' : 
{
  'Wer' : 'Eva Hilfreich,Harry Hurtig',
  'AktSt' : '-E - H'
}
 
//Beispiel: Alle Aktionen deren verwiesene Projekte den Status A haben aber NICHT die Aktionen von Eva Hilfreich
'select' : 
{
  'Wer' : '-Eva Hilfreich',
  'ProVerw.PrSt' : 'A'
}
 
/* **************
Mehrere Kriterien in einem Feld
************** */
//Beispiel: Aktionen von Eva Hilfreich und Harry Hurtig, deren verwiesene Projekte den Status A bis J haben und Status K aber nicht Status F
'select' : 
{
  'Wer' : 'Eva Hilfreich,Harry Hurtig',
  'ProVerw.PrSt' : [ 
                    'A - J',
                    'K',
                    '-F'
                   ]
}

 

 

Erweiterte Suchkriterien

/* **************
Suchkriterien als JSON-Objekt = Erweiterte Suchkriterien
 - jedes Suchkriterium ist ein JSON-Objekt
 
 'm' : '+'  //bestimmt den Modus, + = positives Kriterium, - = negatives K. -> optional, wenn m fehlt dann m=+
 't' : 's'  //bestimmt den Typ, s=Single-Eintrag, r= Range (von-bis-Bereich), l=list (Auflistung) -> optional, wenn t fehlt dann t=s
 'v' : []   //Array mit Suchkriterien, bei Single= 1 Eintrag, bei range 2 Einträge, bei ist 1 bis n Einträge
 
************** */
 
//Beispiel: Aktionen von Eva Hilfreich die NICHT den Status A haben
'select' : 
{
  'Wer' : {'m' : '+', 't' : 's', 'v' : ['Eva Hilfreich']},
  'AktSt' : {'m' : '-', 't' : 's', 'v' : ['A']}
}
 
//da m (bei +) und t (bei s) optional sind wäre auch folgende Schreibweise möglich
'select' : 
{
  'Wer' : {'v' : ['Eva Hilfreich']},
  'AktSt' : {'m' : '-', 'v' : ['A']}
}
 
//es sollen alle Personen gefunden werden, die in Groß-Gerau oder Neuenkirchen-Vörden wohnen
'select' : 
{
  'Ort' : {'m' : '+', 't' : 'l', 'v' : ['Groß-Gerau', 'Neuenkirchen-Vörden']}
}
 
//Beispiel es sollen alle Personen gefunden werden, die in Groß-Gerau oder Neuenkirchen-Vörden wohnen oder in einem Ort der mit Nau* anfängt
//deren verwiesene Firma soll im Postleitzahlenbreich 494* liegen oder im Bereich 64501–64521 aber NICHT die Plz 49434 haben
'select' : 
{
  'Ort' : [
            {'m' : '+', 't' : 'l', 'v' : ['Groß-Gerau', 'Neuenkirchen-Vörden']},
            {'m' : '+', 't' : 's', 'v' : ['Nau*']},
          ]
  'FirVerw.Plz' : [
                    {'m' : '+', 't' : 's', 'v' : ['494*']},
                    {'m' : '+', 't' : 'r', 'v' : ['64501', '64521']},
                    {'m' : '-', 't' : 's', 'v' : ['49434']},
                  ]
}
 
//es ist auch ein Mischen zwischen Kurzschreibweise und erweiterter Schreibweise möglich
//vorheriges Beispiel abgewandelt in minimaler Schreibweise
'select' : 
{
  'Ort' : [
            {'t' : 'l', 'v' : ['Groß-Gerau', 'Neuenkirchen-Vörden']},
            'Nau*',
          ]
  'FirVerw.Plz' : [
                    '494*',
                    '64501 - 64521',
                    '-49434',
                  ]
}

 

Listenausgabe

JSON-Objekt mit einer eigenen Simple-List.

  • Key 'f' = Array mit Anzeigefeldern
  • Key 's' = Array mit Anzeigefeldern nach denen sortiert werden soll (es kann nur nach Felder sortiert werden, die auch als Anzeigefeld definiert sind)
  • Felder über Verweise werden mit einem Punkt concated
//Beispiel, es wurden Aktionen gesucht und sollen angezeigt werden
'list' : 
{
  'f' : [
          //Daten aus der Aktion
          'Aktion',
          'Wer',
          'AktSt',
 
          //Projektname
          'ProVerw.Projekt',
 
          //Daten aus der über das Projekt verwiesenen Person
          'ProVerw.PerVerw.Name',
          'ProVerw.PerVerw.VorNam',
 
          //Reihenfolge ist egal -> nochmal 2 Felder aus der Aktion
          'AktDatum',
          'WdvSt'
 
        ],
 
  's' : [
          //1. Sortierfeld Aufsteigend
          '<AktSt',
 
          //2. Sortierfeld Absteigend
          '>AktDatum'
 
        ]
 
}

 

Hinweis: Wenn die "maxtime" definiert ist und die Listendaten nur teilweise ermittelt werden, dann greift die Sortierung nur auf den ermittelten Ausschnitt zu! Es erfolgt keine Sortierung der Fundstellen vorab. Sucht man also z.B. 1.000.000 Fundstellen und lädt 2 Sekunden Anzeigedaten, dann greift die Sortierung über die bspw. ermittelten 20.000 Datensätze. Man hat dann aber NICHT die laut Sortierung ersten 20.000 der Gesamtmenge.

 

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

 Hinweise zur Online-Hilfe
 

© 2017 Cortex AG
(letzte Aktualisierung: 12.04.2017)

 Haftungsausschluss 

Impressum    AGB