Rozszerzone usługi wyszukiwania i agregacji danych - CaseSearchExt
https://<nazwa_serwera_hgdb>[:port]/mercury-ws-app/restServices/CaseSearchExtRest.wadl
Przykład: https://testcluster.hgdb.io/mercury-ws-app/restServices/CaseSearchExtRest.wadl.
Rozszerzony zbiór metod związanych z wyszukiwaniem i agregacją danych systemu HgDB:
Metoda(Metoda HTTP) | Opis | |
---|---|---|
✅️ | dateMetricQuery(POST) | Realizacja zapytania agregującego dane po zadanym polu typu Date (data). |
✅️ | fieldMetricQuery(POST) | Realizacja zapytań zwracających liczby dokumentów powiązanych z danym polem i jego wartością. |
✅️ | groupByQuery(POST) | Metoda dająca możliwość realizacji zapytań agregujących - z klauzulą Group by. |
✅️ | searchByQuery(POST) | Podstawowa metoda wyszukiwania spraw w oparciu o zapytanie do indeksu Lucene. |
Metody dateMetricQuery(POST), fieldMetricQuery(POST), groupByQuery(POST) to usługi korzystające ze specjalnie skonstruowanych kolektorów danych składowanych w indeksie Lucene. Warto wiedzieć, że wykonywane operacje agregacji danych dotyczą tylko pól, których wartości składowane są w indeksie Lucene.
Dodatkowo usługa zawiera metody pozwalające na analizę wydajności danego zapytania:
Metoda(Metoda HTTP) | Opis | |
---|---|---|
⬜ | explainPlanGroupByQuery(POST) | Żądanie zwraca plan wykonania zapytania agregującego Group by. Pozwala na analizę wydajności wykonania zapytania bez jego wykonania. |
⬜ | explainPlanSearchByQuery(POST) | Żądanie zwraca plan wykonania zapytania wyszukiwania. Pozwala na analizę wydajności wykonania zapytania bez jego wykonania. |
dateMetricQuery
Usługa pozwalająca na agregację danych w zależności od zdefiniowanego w żądaniu zakresu dat.
Parametry żądania metody
Poniżej parametry żądania wysyłane do usługi:
context
Nazwa parametru | context |
Typ | Context |
Wymagany? | Tak |
Kontekst żądania. Więcej na temat kontekstu znajdziesz w artykule Kontekst żądania usług SOAP/REST.
Przykład obiektu kontekstu
{
"appName": "mercury-ws-app",
"appVersion": "0.0.1",
"userName": "ttesteusz",
"comment": "Zmiana nazwiska panieńskiego matki, na życzenie klienta",
"maxResults": 1000,
"queryTimeout": 100000,
"locale": "pl_PL",
"timeZone": "Europe/Warsaw",
"userFullName": "Tadeusz Testeusz",
"eager4omdBuilder": "true",
"trustedData": true,
"currentRole": "Dyrektor",
"userRoles": [
"Dyrektor",
"CKBPM-Team",
"mrc-admin",
"mrc-user"
],
"sourceOfRequest": "dev-bpm855-003.DEV",
"formats": {
"date.format.long": "yyyy-MM-dd HH-mm-ss"
},
"decodeResult": "DATE_ONLY",
"decodeRequest": "DATE_AND_LOB",
"ignoreCaseHeaderInResponse": false,
"cacheUsage": "TO_USE",
"httpResponseCacheUsage": "NONE",
"requestProperties": {}
}
dateFieldsNames
Nazwa parametru | dateFieldsNames |
Typ | String[] |
Wymagany? | Tak |
Lista nazw pól o typie wyszukiwania DateField
(zobacz opis Typy pól indeksu Lucene), które będą podstawą agregacji danych po datach. Listę pól możesz uzyskać wykorzystując usługę CaseIndexerFieldsManagerRest uruchamiając metodę getFieldsBySerachType(POST).
Przykład
[
"mrc_createDate"
]
duration
Nazwa parametru | duration |
Typ | String |
Wymagany? | Tak |
Jednostka agregacji danych. Pole może przyjmować jedną z następujących wartości:
PER_DAY
- agregacja zostanie dokonana "per dzień" - wynik prezentuje liczbę znalezionych spraw zagregowanych na podstawie daty dnia (z danego dnia).PER_HOUR
- agregacja zostanie dokonana "per godzina" - wynik prezentuje liczbę znalezionych spraw zagregowanych na podstawie daty i godziny (z danej godziny).PER_MINUTE
- agregacja zostanie dokonana "per godzina" - wynik prezentuje liczbę znalezionych spraw zagregowanych na podstawie daty, godziny i minuty (w ciągu minuty).
Definiowane zakresu jest wygodne ze względu na przejrzystość zwracanego wyniku. Stosuj odpowiednie zakresy w zależności od wielkości zbioru agregowanych danych:
- Jeżeli chcemy zaprezentować agregację z dla spraw z ostatnich kilku godzin, wtedy definiujemy zakres
PER_MINUTE
. - Jeżeli chcemy zaprezentować agregację z dla spraw z ostatnich kilku dni , wtedy definiujemy zakres
PER_HOUR
. - Jeżeli chcemy zaprezentować agregację z dla spraw z ostatnich kilku miesięcy, lat to wtedy definiujemy zakres
PER_DAY
.
Przykład
"PER_HOUR"
query
Nazwa parametru | query |
Typ | String |
Wymagany? | Nie |
Opcjonalne, dodatkowe zapytanie Lucene pozwalające na zawężenie agregowanych danych do spraw spełniających konkretne warunki. Zobacz rozdział Zapytania wyszukujące gdzie znajdziesz opis jak konstruować zapytania.
Przykład kryterium wyszukiwania po dowolnym statusie spraw
"mrc_status: *"
Wszystkie sprawy, które w indeksie Lucene mają pole mrc_status
.
sortAscending
Nazwa parametru | sortAscending |
Typ | Boolean |
Wymagany? | Tak |
Flaga definiująca kierunek sortowania po dacie. Przyjmuje wartości:
true
- wtedy wynik posortowany będzie po dacie rosnącofalse
- wtedy wynik posortowany będzie po dacie malejąco
Przykład warunku sortowania rosnącego
true
additionalDateRange
Nazwa parametru | additionalDateRange |
Typ | String |
Wymagany? | Tak |
Dodatkowe zapytanie zawężające oparte o pole typu Date
(data). Kryterium zapytani musi być zdefiniowane jako zakres czyli "od do". Kryterium zapisane jako przedział liczb milisekund reprezentujących datę1.
Warto pamiętać, że najlepszy efekt zapytania otrzymamy dodając warunek dla pola, które zostało wskazane jako podstawa agregacji w parametrze żądania dateFieldsName
.
Przykład kryterium ograniczenia wyników do spraw utworzonych w przedziale od 1999-12-31
do 2019-06-31 21:26:34.143
"mrc_createDate:[946681200000 TO 1564608394143]"
page
Nazwa parametru | page |
Typ | MrcPage |
Wymagany? | Tak |
Definicja obiektu strony wyniku, która ma być pobrana. Wskazuje, którą stronę wyniku wyszukiwania pobrać.
Przykład, pierwsza strona z 10 wynikami
{
"size": 10,
"number": 1
}
Przykład żądania metody
Przykład żądania w postaci JSON
{
"context": {
"appName": "mercury-ws-app",
"appVersion": "1.0",
"userName": "anonymous",
"comment": null,
"maxResults": 100000,
"queryTimeout": 2147483647,
"locale": "pl_PL",
"timeZone": "Europe/Warsaw",
"userFullName": null,
"eager4omdBuilder": "true",
"trustedData": false,
"ignoredCustomFields": null,
"currentRole": null,
"userRoles": null,
"sourceOfRequest": "USER_DEV.localhost",
"rootVersionContextID": null,
"rootTagName": null,
"directRequest": false,
"formats": {
"date.format.long": "dd-MM-yyyy HH:mm:ss XXX"
},
"ignoreAlternateFields": true,
"decodeResult": "DATE_AND_LOB",
"maxDepthResult":3,
"decodeRequest": "DATE_AND_LOB",
"ignoreCaseHeaderInResponse": false,
"cacheUsage": "REFRESH",
"httpResponseCacheUsage": "TO_USE",
"defaultLuceneSortClause": null,
"viewDefinition": null
},
"dateFieldsNames": [
"mrc_createDate"
],
"duration": "PER_HOUR",
"query": "mrc_status: *",
"sortAscending": true,
"additionalDateRange": "mrc_createDate:[946681200000 TO 1564608394143]",
"page": {
"size": 60,
"number": 1
}
}
Odpowiedź usługi
Odpowiedź usługi, której działanie zakończyło się sukcesem, to obiekt typu ExcelData
, który jest opisany w artykule PagedResult jako lista pobieranych danych.
Pełen przykład prezentacji obiektu odpowiedzi w postaci JSON (pierwsza strona całości, statystyka godzinowa tworzenia i zakończenia spraw).
{
"result": [
{
"A": "2019-02-01 10",
"B": "1",
"C": "0",
"rowIndx": "1"
},
{
"A": "2019-02-01 09",
"B": "6",
"C": "0",
"rowIndx": "2"
},
{
"A": "2019-01-25 13",
"B": "22796",
"C": "0",
"rowIndx": "3"
},
{
"A": "2019-01-24 21",
"B": "649",
"C": "0",
"rowIndx": "4"
},
{
"A": "2019-01-23 08",
"B": "7",
"C": "0",
"rowIndx": "5"
},
{
"A": "2019-01-21 18",
"B": "1",
"C": "0",
"rowIndx": "6"
},
{
"A": "2019-01-21 15",
"B": "11",
"C": "0",
"rowIndx": "7"
},
{
"A": "2019-01-12 04",
"B": "1",
"C": "0",
"rowIndx": "8"
},
{
"A": "2019-01-12 03",
"B": "23809",
"C": "0",
"rowIndx": "9"
},
{
"A": "2019-01-10 15",
"B": "0",
"C": "4",
"rowIndx": "10"
},
{
"A": "2019-01-10 14",
"B": "0",
"C": "2",
"rowIndx": "11"
},
{
"A": "2019-01-10 13",
"B": "0",
"C": "2",
"rowIndx": "12"
},
{
"A": "2019-01-10 12",
"B": "0",
"C": "4",
"rowIndx": "13"
},
{
"A": "2019-01-10 11",
"B": "0",
"C": "2",
"rowIndx": "14"
},
{
"A": "2019-01-10 10",
"B": "0",
"C": "2",
"rowIndx": "15"
},
{
"A": "2019-01-10 07",
"B": "0",
"C": "2",
"rowIndx": "16"
},
{
"A": "2019-01-10 05",
"B": "0",
"C": "6",
"rowIndx": "17"
},
{
"A": "2019-01-09 20",
"B": "0",
"C": "2",
"rowIndx": "18"
},
{
"A": "2019-01-09 16",
"B": "0",
"C": "2",
"rowIndx": "19"
},
{
"A": "2019-01-09 15",
"B": "0",
"C": "4",
"rowIndx": "20"
}
],
"message": "FRAGMENT",
"resultSize": 134,
"currentPageInfo": {
"size": 20,
"number": 1
},
"firstPageInfo": {
"size": 20,
"number": 1
},
"previousPageInfo": {
"size": 20,
"number": 1
},
"nextPageInfo": {
"size": 20,
"number": 2
},
"lastPageInfo": {
"size": 40,
"number": 7
},
"header": {
"A": "Date",
"B": "mrc_createDate",
"C": "mrc_endDate"
},
"columnTypes": {
"A": "STRING",
"B": "LONG",
"C": "LONG"
}
}
Jeżeli z jakiegoś powodu wykonanie usługi zakończy się porażką, odpowiedź przyjmuje następujące parametry wyjściowe:
errorCode
- Kod błędu. Gdy operacja zakończy się sukcesem, przyjmuje wartość null . Informacje na temat danych zawartych w wartości tego parametru można uzyskać czytając artykuł Co oznacza wartość pola "errorCode"?errorMessage
- Komunikat błędu. Gdy operacja zakończy się sukcesem, przyjmuje wartośćnull
.
fieldMetricQuery
Usługa pozwalająca na pobranie listy wyrażeń (wartości) występujących w danym polu sprawy wraz z liczbą dokumentów, w których to wyrażenie występuje.
Jako narzędzie SEO (od ang. search engine optimization) – działania służące optymalizacji, zwiększeniu oglądalności stron internetowych, produktów w wyszukiwarkach czyli mechanizm, który można wykorzystać do promocji najpopularniejszych wartości (słów kluczowych) danego pola występujących w bazie HgDB, np. najpopularniejsze miasta, czy też może najczęściej serwisowani klienci. Przykładem na zastosowanie może być też Indeks:Polski - Najpopularniejsze słowa 1-1000 wersja Jerzego Kazojcia (co nie znaczy, że ta lista została uzyskana przy wykorzystaniu tej usługi).
Wartości liczbowe uzyskane w wyniku działania usługi maja charakter statystyczny, tzn. są one uzyskane na podstawie statystyk indeksu Lucene. Nie uwzględniają one faktu usunięcia dokumentu z indeksu Lucene.
Parametry żądania metody
context
Nazwa parametru | context |
Typ | Context |
Wymagany? | Tak |
Kontekst żądania. Więcej na temat kontekstu znajdziesz w artykule Kontekst żądania usług SOAP/REST.
Przykład obiektu kontekstu
{
"appName": "mercury-ws-app",
"appVersion": "1.0",
"comment": null,
"userName": "anonymous",
"userFullName": null,
"locale": null,
"timeZone": null,
"maxResults": 1,
"currentRole": "anonymous",
"userRoles": null,
"sourceOfRequest": null,
"maxDepthResult": 1,
"decodeResult": "DECODE_DATE_AND_LOB",
"ignoreCaseHeaderInResponse": false,
}
fieldName
Nazwa parametru | fieldName |
Typ | String |
Wymagany? | Tak |
Nazwa pola indeksu Lucene, dla którego pobrana zostanie metryka wartości.
Przykład statystyk pola 'Memo'
"mrc_luceneDocumentMemo"
loadTop
Nazwa parametru | loadTop |
Typ | Boolean |
Wymagany? | Tak |
Flaga determinująca to czy znalezione mają być wyrażenia o najwyższej występowalności. Przyjmuje wartości true albo false . Ustawienie jej na true implikuje dłuższy czas realizacji usługi.
Przykład
true
filterClause
Nazwa parametru | filterClause |
Typ | String |
Wymagany? | Nie |
Dodatkowe kryterium filtrowania wartości. Można stosować "wildcard" (symbol wieloznaczny) np. aby pobrać wszystkie wartości na literę a
jako kryterium podamy a*
.
Przykład kryterium wyszukiwania po dowolnym statusie spraw
"mrc_status: *"
Wszystkie sprawy, które w indeksie Lucene mają pole mrc_status
.
sortAscending
Nazwa parametru | sortAscending |
Typ | Boolean |
Wymagany? | Tak |
Flaga definiująca kierunek sortowania po dacie. Przyjmuje wartości:
true
- wtedy wynik posortowany będzie po dacie rosnącofalse
- wtedy wynik posortowany będzie po dacie malejąco
Przykład warunku sortowania rosnącego
true
page
Nazwa parametru | page |
Typ | MrcPage |
Wymagany? | Tak |
Definicja obiektu strony wyniku, która ma być pobrana. Wskazuje, którą stronę wyniku wyszukiwania pobrać.
Przykład, pierwsza strona z 10 wynikami
{
"size": 10,
"number": 1
}
Przykład żądania metody
Przykład żądania w postaci JSON
{
"context": {
"appName": "mercury-ws-app",
"appVersion": "1.0",
"userName": "anonymous",
"comment": null,
"maxResults": 20,
"queryTimeout": 2147483647,
"locale": "pl_PL",
"timeZone": "Europe/Warsaw",
"userFullName": null,
"eager4omdBuilder": "true",
"trustedData": false,
"ignoredCustomFields": null,
"currentRole": null,
"userRoles": null,
"sourceOfRequest": "USER_DEV.localhost",
"rootVersionContextID": null,
"rootTagName": null,
"directRequest": false,
"formats": {
"date.format.long": "dd-MM-yyyy HH:mm:ss XXX"
},
"ignoreAlternateFields": true,
"decodeResult": "DATE_AND_LOB",
"maxDepthResult": 3,
"decodeRequest": "DATE_AND_LOB",
"ignoreCaseHeaderInResponse": false,
"cacheUsage": "TO_USE",
"httpResponseCacheUsage": "NONE",
"defaultLuceneSortClause": null,
"viewDefinition": null
},
"fieldName": "typeTypeCodeValue",
"loadTop": true,
"filterClause": "fsm*",
"sortAscending": false,
"page": {
"size": 60,
"number": 1
}
}
Parametry odpowiedzi metody
Odpowiedź usługi, której działanie zakończyło się sukcesem, to obiekt typu ExcelData, który jest opisany w artykule PagedResult jako lista pobieranych danych.
"header": {
"A": "value",
"B": "filterClause",
"C": "count"
},
"columnTypes": {
"A": "STRING",
"B": "STRING",
"C": "LONG"
}
Pełen przykład prezentacji obiektu odpowiedzi w postaci JSON
{
"result": [
{
"A": "by",
"B": null,
"C": "1060718",
"rowIndx": "1"
},
{
"A": "form",
"B": null,
"C": "1060718",
"rowIndx": "2"
},
{
"A": "generated",
"B": null,
"C": "1060718",
"rowIndx": "3"
},
{
"A": "request",
"B": null,
"C": "1060718",
"rowIndx": "4"
},
{
"A": "mercury",
"B": null,
"C": "699048",
"rowIndx": "5"
},
{
"A": "terytstreet",
"B": null,
"C": "590773",
"rowIndx": "6"
},
{
"A": "a",
"B": null,
"C": "504888",
"rowIndx": "7"
},
{
"A": "ulica",
"B": null,
"C": "474959",
"rowIndx": "8"
},
{
"A": "ul",
"B": null,
"C": "299273",
"rowIndx": "9"
},
{
"A": "slawas",
"B": null,
"C": "247994",
"rowIndx": "10"
},
{
"A": "01",
"B": null,
"C": "201715",
"rowIndx": "11"
},
{
"A": "nieokreślona",
"B": null,
"C": "200600",
"rowIndx": "12"
},
{
"A": "99998",
"B": null,
"C": "200469",
"rowIndx": "13"
},
{
"A": "true",
"B": null,
"C": "178552",
"rowIndx": "14"
},
{
"A": "false",
"B": null,
"C": "152821",
"rowIndx": "15"
},
{
"A": "04",
"B": null,
"C": "152131",
"rowIndx": "16"
},
{
"A": "02",
"B": null,
"C": "143505",
"rowIndx": "17"
},
{
"A": "06",
"B": null,
"C": "138035",
"rowIndx": "18"
},
{
"A": "14",
"B": null,
"C": "127182",
"rowIndx": "19"
},
{
"A": "brak",
"B": null,
"C": "118129",
"rowIndx": "20"
}
],
"message": "ALL",
"resultSize": 20,
"currentPageInfo": {
"size": 20,
"number": 1
},
"firstPageInfo": {
"size": 20,
"number": 1
},
"previousPageInfo": {
"size": 20,
"number": 1
},
"nextPageInfo": {
"size": 20,
"number": 1
},
"lastPageInfo": {
"size": 20,
"number": 1
},
"header": {
"A": "value",
"B": "filterClause",
"C": "count"
},
"columnTypes": {
"A": "STRING",
"B": "STRING",
"C": "LONG"
}
}
Jeżeli z jakiegoś powodu wykonanie usługi zakończy się porażką, odpowiedź przyjmuje następujące parametry wyjściowe:
errorCode
- Kod błędu. Gdy operacja zakończy się sukcesem, przyjmuje wartość null . Informacje na temat danych zawartych w wartości tego parametru można uzyskać czytając artykuł Co oznacza wartość pola "errorCode"?errorMessage
- Komunikat błędu. Gdy operacja zakończy się sukcesem, przyjmuje wartośćnull
.
groupByQuery
Implementacja usługi pozwala na realizację żądań grupujących (agregujących) dane na podstawie klauzuli Group By.
Usługę można wykorzystać do wszelkiego rodzaju analiz danych Business Intelligence (BI).
Parametry żądania metody
context
Nazwa parametru | context |
Typ | Context |
Wymagany? | Tak |
Kontekst żądania. Więcej na temat kontekstu znajdziesz w artykule Kontekst żądania usług SOAP/REST.
Przykład obiektu kontekstu
{
"appName": "mercury-ws-app",
"appVersion": "1.0",
"comment": null,
"userName": "anonymous",
"userFullName": null,
"locale": null,
"timeZone": null,
"maxResults": 1,
"currentRole": "anonymous",
"userRoles": null,
"sourceOfRequest": null,
"maxDepthResult": 1,
"decodeResult": "DECODE_DATE_AND_LOB",
"ignoreCaseHeaderInResponse": false,
}
query
Nazwa parametru | query |
Typ | String |
Wymagany? | Nie |
Opcjonalne, dodatkowe zapytanie Lucene pozwalające na zawężenie agregowanych danych do spraw spełniających konkretne warunki. Zobacz rozdział Zapytania wyszukujące gdzie znajdziesz opis jak konstruować zapytania.
Przykład kryterium wyszukiwania po dowolnym statusie spraw
"mrc_status: *"
Wszystkie sprawy, które w indeksie Lucene mają pole mrc_status
.
groupByClause
Nazwa parametru | query |
Typ | String |
Wymagany? | Tak |
Klauzula Group By agregująca dane składowane w indeksie Lucene. Zobacz rozdział Klauzula Group By gdzie znajdziesz opis jak konstruować zapytania agregujące.
Przykład zliczania utworzonych spraw w ciągu dnia
"trunc(mrc_createDate, DD) as createDatePerMonth, count(1) as count"
filterClause
Nazwa parametru | filterClause |
Typ | String |
Wymagany? | Nie |
Dodatkowe kryterium filtrowania wartości. Można stosować wildcard np. aby pobrać wszystkie wartości na literę a
jako kryterium podamy a*
.
Przykład kryterium wyszukiwania po dowolnym statusie spraw
"mrc_status: *"
additionalDateRange
Nazwa parametru | additionalDateRange |
Typ | String |
Wymagany? | Tak |
Dodatkowe zapytanie zawężające oparte o pole typu Date
(data). Kryterium zapytani musi być zdefiniowane jako zakres czyli "od do". Kryterium zapisane jako przedział liczb milisekund reprezentujących datę1.
Warto pamiętać, że najlepszy efekt zapytania otrzymamy dodając warunek dla pola, które zostało wskazane jako podstawa agregacji w parametrze żądania dateFieldsName
.
Przykład kryterium ograniczenia wyników do spraw utworzonych w przedziale od 1999-12-31
do 2019-06-31 21:26:34.143
"mrc_createDate:[946681200000 TO 1564608394143]"
page
Nazwa parametru | page |
Typ | MrcPage |
Wymagany? | Tak |
Definicja obiektu strony wyniku, która ma być pobrana. Wskazuje, którą stronę wyniku wyszukiwania pobrać.
Przykład, pierwsza strona z 10 wynikami
{
"size": 10,
"number": 1
}
resultTypeName
Nazwa parametru | resultTypeName |
Typ | String |
Wymagany? | Nie |
Nazwa typu jaki ma reprezentować wynik grupowania.
Typ (definicja typu sprawy) o podanej nazwie musi być zdefiniowany w bazie HgDB.
Przykład braku zdefiniowana wartości
null
resultPkPropertyName
Nazwa parametru | resultPkPropertyName |
Typ | String |
Wymagany? | Nie |
Nazwa pola z unikalną wartością wskazująca na wiersz/element listy w wyniku. Parametr opcjonalny. Jeżeli nie zostanie zdefiniowany pole przyjmie wartość "rowId".
Przykład braku zdefiniowana wartości
null
Przykład żądania metody
Przykład żądania w postaci JSON
{
"context": {
"appName": "mercury-ws-app",
"appVersion": "1.0",
"userName": "anonymous",
"comment": null,
"maxResults": 20,
"queryTimeout": 2147483647,
"locale": "pl_PL",
"timeZone": "Europe/Warsaw",
"userFullName": null,
"eager4omdBuilder": "true",
"trustedData": false,
"ignoredCustomFields": null,
"currentRole": null,
"userRoles": null,
"sourceOfRequest": "USER_DEV.localhost",
"rootVersionContextID": null,
"rootTagName": null,
"directRequest": false,
"formats": {
"date.format.long": "dd-MM-yyyy HH:mm:ss XXX"
},
"ignoreAlternateFields": true,
"decodeResult": "DATE_AND_LOB",
"maxDepthResult": 3,
"decodeRequest": "DATE_AND_LOB",
"ignoreCaseHeaderInResponse": false,
"cacheUsage": "TO_USE",
"httpResponseCacheUsage": "NONE",
"defaultLuceneSortClause": null,
"viewDefinition": null
},
"query": "status:A",
"groupByClause": "trunc(mrc_createDate, DD) as createDatePerMonth, count(1) as count",
"filterClause": null,
"additionalDateRange": "createDate:[1515279600000 TO 1515366000000]",
"page": {
"size": 60,
"number": 1
},
"resultTypeName": null,
"resultPkPropertyName": null
}
Więcej przykładów wykorzystania metody groupByQuery(POST) znajdziesz w Przykłady agregacji danych.
Parametry odpowiedzi metody
errorCode
- Kod błędu. Gdy operacja zakończy się sukcesem, przyjmuje wartość null . Informacje na temat danych zawartych w wartości tego parametru można uzyskać czytając artykuł Co oznacza wartość pola "errorCode"?errorMessage
- Komunikat błędu. Gdy operacja zakończy się sukcesem, przyjmuje wartośćnull
.queryStats
- Statystyki wykonania zapytania w postaci obiektu QueryStats.
{
"allExecTime": 1339,
"mainPrepareTime": 11,
"collValidationTime": 1,
"mainCollExecTime": 0,
"mainCollExecCount": 47281,
"subCollExecTime": 4,
"subCollExecCount": 8,
"subExecLeve1Time": 1337,
"subExecLeve2Time": 0,
"subExecLeve3Time": 0,
"subExecLeve4Time": 0,
"initResultSetTime": 6,
"resultSetSize": 3
}
dto
- Wynik działania usługi w postaci obiektuPagedResult
. Elementem listy jest obiekt w postaci definicji sprawy (zobacz artykuły poświęcone reprezentacji danych: Case jako dowolny obiekt oraz Case jako uniwersalny obiekt MRC). Obiekt ten nie reprezentuje rzeczywistej sprawy składowanej w bazie HgDB.
Obiekt sprawy zawiera pole mrcCaseHeader
typu CaseHeader, który ma dwa istotne pola: typeCode
oraz pkPropertyName
. Pola te w wyniku zapytania agregującego przyjmują wartość:
typeCode
- przyjmuje generowaną wartośćQueryResult_<wartość_losowa>
np.QueryResult_d5fd73da
w przypadku gdy argument wejściowy usługiresultTypeName
nie jest ustawiony. W przeciwnym wypadku przymuje wartośc argumentu wejściowegoresultTypeName
(wynik zostanie przekształcony do danego typu).pkPropertyName
- przyjmuje wartość "rowId" w przypadku gdy argument wejściowy usługiresultPkPropertyName
nie jest ustawiony. W przeciwnym wypadku przyjmuje wartość argumentu wejściowegoresultPkPropertyName
.
Pełen przykład prezentacji obiektu odpowiedzi w postaci JSON
{
"errorCode": "",
"errorMessage": "",
"queryStats": {
"allExecTime": 1339,
"mainPrepareTime": 11,
"collValidationTime": 1,
"mainCollExecTime": 0,
"mainCollExecCount": 47281,
"subCollExecTime": 4,
"subCollExecCount": 8,
"subExecLeve1Time": 1337,
"subExecLeve2Time": 0,
"subExecLeve3Time": 0,
"subExecLeve4Time": 0,
"initResultSetTime": 6,
"resultSetSize": 3
},
"dto": {
"resultSize": 3,
"result": [
{
"mrcCaseHeader": {
"typeCode": "QueryResult_d5fd73da",
"dirty": false,
"pkPropertyName": "rowId"
},
"rowId": "ef634915-90d7-437f-8415-fd96759c9774",
"id": "2017.q1",
"max": 132044.34,
"sum": 374730.02,
"avg": 124910.0066666667,
"min": 120344.34
},
{
"mrcCaseHeader": {
"typeCode": "QueryResult_d5fd73da",
"dirty": false,
"pkPropertyName": "rowId"
},
"rowId": "bfa12932-d8c8-40ba-bdf1-50dbaf109490",
"id": "2018.q2",
"max": 155344.34,
"sum": 294188.68,
"avg": 147094.34,
"min": 138844.34
},
{
"mrcCaseHeader": {
"typeCode": "QueryResult_d5fd73da",
"dirty": false,
"pkPropertyName": "rowId"
},
"rowId": "b248b739-4d1c-429f-a883-e0a7892fa30a",
"id": "2018.q1",
"max": 132344.34,
"sum": 375033.02,
"avg": 125011.0066666667,
"min": 120344.34
}
],
"message": "ALL",
"executionTime": 1523,
"currentPageInfo": {
"size": 60,
"number": 1
},
"firstPageInfo": {
"size": 60,
"number": 1
},
"previousPageInfo": {},
"nextPageInfo": {},
"lastPageInfo": {
"size": 60,
"number": 1
},
"allPages": [ {
"size": 60,
"number": 1
}],
"pagingParams": {
"offset": 0,
"cursorOfPage": 0,
"maxPageSize": 60,
"maxCount": 100000,
"pageSize": 60,
"page": {
"size": 60,
"number": 1
},
"valid": "true",
"isReadOnly": "false"
}
}
}
sarchByQuery
Implementacja usługi pozwala na realizację żądań wyszukiwania danych w bazie HgDB przy wykorzystaniu zapytań Lucene. Wyszukiwanie może być realizowane po dowolnym polu indeksu Lucene, które jest zdefiniowane w bazie HgDB.
Parametry żądania metody
context
Nazwa parametru | context |
Typ | Context |
Wymagany? | Tak |
Kontekst żądania. Więcej na temat kontekstu znajdziesz w artykule Kontekst żądania usług SOAP/REST.
Przykład obiektu kontekstu
{
"userName": "anonymous",
"userFullName": null,
"locale": null,
"timeZone": null,
"maxResults": 1,
"currentRole": "anonymous",
"userRoles": null,
"sourceOfRequest": null,
"maxDepthResult": 1,
"decodeResult": "DECODE_DATE_AND_LOB",
"ignoreCaseHeaderInResponse": false,
}
query
Nazwa parametru | query |
Typ | String |
Wymagany? | Tak |
Zapytanie wyszukujące do indeksu Lucene. Zobacz rozdział Zapytania wyszukujące gdzie znajdziesz opis jak konstruować zapytania.
Przykład zapytania wyszukiwania po polu mrc_Case_id
dla dwóch przedziałów jego wartości
"mrc_Case_id:[806000 TO 806525] mrc_Case_id:[706525 TO 709000]"
page
Nazwa parametru | page |
Typ | MrcPage |
Wymagany? | Tak |
Definicja obiektu strony wyniku, która ma być pobrana. Wskazuje, którą stronę wyniku wyszukiwania pobrać.
Przykład, pierwsza strona z 10 wynikami
{
"size": 10,
"number": 1
}
sortClause
Nazwa parametru | sortClause |
Typ | String |
Wymagany? | Nie |
Klauzula sortowania wyniku wyszukiwania zdefiniowana jako konkatenacja (złączenie) nazwy póla wraz z akronimem kierunku (ASC
- rosnąco, DESC
- malejąco).
Istnieje ograniczenie definiowania kierunku sortowania wyniku do jednego pola.
Przykład sortowania rosnącego po polu o nazwie grParticipantFullname
"grParticipantFullname ASC"
additionalDateRange
Nazwa parametru | additionalDateRange |
Typ | String |
Wymagany? | Nie |
Dodatkowe zapytanie zawężające oparte o pole typu Date
(data). Kryterium zapytani musi być zdefiniowane jako zakres czyli "od do". Kryterium zapisane jako przedział liczb milisekund reprezentujących datę1.
Przykład kryterium ograniczenia wyników do spraw utworzonych w przedziale od 1999-12-31
do 2019-06-31 21:26:34.143
"mrc_createDate:[946681200000 TO 1564608394143]"
resultTypeName
Nazwa parametru | resultTypeName |
Typ | String |
Wymagany? | Nie |
Nazwa typu jaki ma reprezentować wynik grupowania.
Typ (definicja typu sprawy) o podanej nazwie musi być zdefiniowany w bazie HgDB.
Przykład, w którym wszystkie wyniki wyszukiwania zostaną przekształcone do sprawy typu ElixAddress
"ElixAddress"
Przykład żądania metody
Przykład żądania w postaci JSON
{
"context": {
"appName": "mercury-ws-app",
"appVersion": "1.0",
"userName": "admin",
"maxResults": 10000,
"queryTimeout": 2147483647,
"locale": "pl_PL",
"timeZone": "Europe/Warsaw",
"eager4omdBuilder": "true",
"trustedData": false,
"currentRole": "mrc-user",
"userRoles": ["mrc-user","mrc-useradmin"],
"sourceOfRequest": "USER_DEV.localhost",
"directRequest": false,
"formats": {
"date.format.long": "dd-MM-yyyy HH:mm:ss XXX"
},
"ignoreAlternateFields": true,
"decodeResult": "DATE_AND_LOB",
"maxDepthResult": 1,
"decodeRequest": "DATE_AND_LOB",
"ignoreCaseHeaderInResponse": true,
"cacheUsage": "REFRESH",
"httpResponseCacheUsage": "NONE"
},
"query": "mrc_Case_id:[806000 TO 806525] mrc_Case_id:[706525 TO 709000]",
"page": {
"size": 10,
"number": 1
},
"sortClause": "mrc_Case_id DESC",
"additionalDateRange": "mrc_createDate:[946681200000 TO 1564608394143]",
"resultTypeName": "ElixAddress"
}
Parametry odpowiedzi metody
Odpowiedź przyjmuje następujące parametry wyjściowe:
errorCode
- Kod błędu. Gdy operacja zakończy się sukcesem, przyjmuje wartość null . Informacje na temat danych zawartych w wartości tego parametru można uzyskać czytając artykuł Co oznacza wartość pola "errorCode"?errorMessage
- Komunikat błędu. Gdy operacja zakończy się sukcesem, przyjmuje wartośćnull
.queryStats
- Statystyki wykonania zapytania w postaci obiektu QueryStats.
{
"allExecTime": 1339,
"mainPrepareTime": 11,
"collValidationTime": 1,
"mainCollExecTime": 0,
"mainCollExecCount": 47281,
"subCollExecTime": 4,
"subCollExecCount": 8,
"subExecLeve1Time": 1337,
"subExecLeve2Time": 0,
"subExecLeve3Time": 0,
"subExecLeve4Time": 0,
"initResultSetTime": 6,
"resultSetSize": 3
}
dto
- Wynik działania usługi w postaci obiektuPagedResult
. Elementy listy są reprezentowane przez typ zdefiniowany jako argument wejściowy metodyresultTypeName
- daje to możliwość ujednolicenia danych w wierszach i daje możliwość prezentacji w tabeli. Jeżeli parametrresultTypeName
nie jest ustawiony (tzn. przyjmuje wartośćnull
), to obiekty spraw przyjmują taką formę w jakiej są składowane (as is).
Pełen przykład prezentacji obiektu odpowiedzi w postaci JSON
{
"errorCode": "",
"errorMessage": "",
"queryStats": {
"allExecTime": 39,
"mainPrepareTime": 44,
"collValidationTime": 0,
"mainCollExecTime": 0,
"mainCollExecCount": 2,
"subCollExecTime": 0,
"subCollExecCount": 0,
"subExecLeve1Time": 39,
"subExecLeve2Time": 0,
"subExecLeve3Time": 0,
"subExecLeve4Time": 0,
"initResultSetTime": 0,
"resultSetSize": 2
},
"dto": {
"resultSize": 2,
"result": [
{
"mrcCaseHeader": {
"caseId": 808300,
"groupId": 301039,
"typeId": 5014,
"typeCode": "Month",
"status": "A",
"previousVersionId": 808298,
"rootVersionId": 808298,
"priceValue": 0,
"storeCount": 1,
"storeId": 2507,
"createDate": "21-01-2019 18:51:05 +01:00",
"createdBy": "slawas",
"lastModifyDate": "28-04-2021 12:47:21 +02:00",
"lastModifiedBy": "slawas",
"modifyComment": "SOAP request",
"createdByRoleName": "mrc-user",
"lastModifiedByRoleName": "CKBPM-Team",
"className": "Month",
"objectID": "?.Month",
"rootVersionContextID": "?",
"version": "1015949",
"dirty": false,
"pkPropertyName": "id"
},
"id": 2018.04,
"displayName": "kwiecień'2018",
"revenue": 127564.34,
"costs": 155344.34,
"vat": 73432.23
},
{
"mrcCaseHeader": {
"caseId": 808289,
"groupId": 301037,
"typeId": 5012,
"typeCode": "Quarter",
"status": "A",
"rootVersionId": 808289,
"priceValue": 0,
"storeCount": 1,
"storeId": 2507,
"createDate": "21-01-2019 15:05:54 +01:00",
"createdBy": "slawas",
"lastModifyDate": "21-01-2019 15:05:54 +01:00",
"lastModifiedBy": "slawas",
"modifyComment": "SOAP request",
"createdByRoleName": "CKBPM-Team",
"lastModifiedByRoleName": "CKBPM-Team",
"className": "Quarter",
"objectID": "?.Quarter",
"rootVersionContextID": "?",
"version": "50917",
"dirty": false,
"pkPropertyName": "id"
},
"status": "Closed",
"id": "2018.Q1",
"name": "Kwartał 1'2018",
"months": [
{
"mrcCaseHeader": {
"caseId": 808792,
"groupId": 301037,
"typeId": 5014,
"typeCode": "Month",
"status": "A",
"previousVersionId": 808292,
"rootVersionId": 808292,
"priceValue": 0,
"storeCount": 1,
"storeId": 2507,
"createDate": "23-01-2019 08:55:57 +01:00",
"createdBy": "slawas",
"lastModifyDate": "23-01-2019 08:55:57 +01:00",
"lastModifiedBy": "slawas",
"modifyComment": "SOAP request",
"createdByRoleName": "CKBPM-Team",
"lastModifiedByRoleName": "CKBPM-Team",
"subCaseReferenceId": 3712,
"className": "Month",
"objectID": "?.Month",
"rootVersionContextID": "?",
"version": "51411",
"dirty": false,
"pkPropertyName": "id"
},
"id": 2018.03,
"displayName": "marzec'2018",
"revenue": 120564.34,
"costs": 120344.34,
"vat": 23432.23
},
{
"mrcCaseHeader": {
"caseId": 808795,
"groupId": 301037,
"typeId": 5014,
"typeCode": "Month",
"status": "A",
"previousVersionId": 808290,
"rootVersionId": 808290,
"priceValue": 0,
"storeCount": 1,
"storeId": 2507,
"createDate": "23-01-2019 08:55:57 +01:00",
"createdBy": "slawas",
"lastModifyDate": "23-01-2019 08:55:57 +01:00",
"lastModifiedBy": "slawas",
"modifyComment": "SOAP request",
"createdByRoleName": "CKBPM-Team",
"lastModifiedByRoleName": "CKBPM-Team",
"subCaseReferenceId": 3710,
"className": "Month",
"objectID": "?.Month",
"rootVersionContextID": "?",
"version": "51414",
"dirty": false,
"pkPropertyName": "id"
},
"id": 2018.01,
"displayName": "styczeń'2018",
"revenue": 124564.34,
"costs": 122344.34,
"vat": 23432.23
},
{
"mrcCaseHeader": {
"caseId": 808796,
"groupId": 301037,
"typeId": 5014,
"typeCode": "Month",
"status": "A",
"previousVersionId": 808291,
"rootVersionId": 808291,
"priceValue": 0,
"storeCount": 1,
"storeId": 2507,
"createDate": "23-01-2019 08:55:57 +01:00",
"createdBy": "slawas",
"lastModifyDate": "23-01-2019 08:55:57 +01:00",
"lastModifiedBy": "slawas",
"modifyComment": "SOAP request",
"createdByRoleName": "CKBPM-Team",
"lastModifiedByRoleName": "CKBPM-Team",
"subCaseReferenceId": 3711,
"className": "Month",
"objectID": "?.Month",
"rootVersionContextID": "?",
"version": "51415",
"dirty": false,
"pkPropertyName": "id"
},
"id": 2018.02,
"displayName": "luty'2018",
"revenue": 134564.34,
"costs": 132344.34,
"vat": 53432.23
}
]
}
],
"message": "ALL",
"executionTime": 361,
"currentPageInfo": {
"size": 60,
"number": 1
},
"firstPageInfo": {
"size": 60,
"number": 1
},
"previousPageInfo": {},
"nextPageInfo": {},
"lastPageInfo": {
"size": 60,
"number": 1
},
"allPages": [ {
"size": 60,
"number": 1
}],
"pagingParams": {
"offset": 0,
"cursorOfPage": 0,
"maxPageSize": 60,
"maxCount": 10000,
"pageSize": 60,
"page": {
"size": 60,
"number": 1
},
"valid": "true",
"isReadOnly": "false"
}
}
}
explainPlanGroupByQuery
Strona jest w budowie i nie zawiera jeszcze wszystkich informacji. Proszę o cierpliwość.
- Dokończyć opis metody
explainPlanSearchByQuery
Strona jest w budowie i nie zawiera jeszcze wszystkich informacji. Proszę o cierpliwość.
- Dokończyć opis metody
Footnotes
-
Przykładowa strona pozwalająca na szybkie dekodowanie daty z/do liczby milisekund: https://currentmillis.com/ ↩ ↩2 ↩3