Definicja raportu składa się z danych sekcji xml. Główną sekcją raportu jest sekcja report. W niej zaś zawarte są następujące:
- reportHeader
- reportType
- orderOnList
- onListVisibillity
- arguments
- elements
W celu opisania elementów składowych raportów jako przykład wykorzystany zostanie standardowy raport dostępny w aplikacji Comarch Mobile – Podsumowanie dnia, którego definicja znajduje się w pliku 2#SummaryOfTheDay#pol.xml.
Nagłówek
Nagłówek raportu opisany jest sekcją reportHeader, w niej zaś znajdują się poniższe:
Nazwa | name |
Opis | Nazwa raportu. |
Parametry |
|
Nazwa | description |
Opis | Opis raportu. |
Parametry |
|
<name>Podsumowanie dnia</name>
<description>Podsumowanie wykonanych w dniu operacji. Sprzedaż wg grup. Udział grup w sprzedaży dnia.</description>
</reportHeader>
Typ raportu
Sekcja oznaczająca typ raportu: reportType. Musi zawierać następującą sekcję:
Nazwa | value |
Opis | Wartość typu raportu. Np. jeżeli użytkownik nie posiada praw do dokumentów zakupowych, to nie wykona raportu o typie 1 oraz 0. |
Parametry |
|
<value>0</value>
</reportType>
Kolejność raportów
Sekcja oznaczająca priorytet raportu: orderOnList. Musi zawierać następującą sekcję:
Nazwa | value |
Opis | Priorytet wyświetlania raportu na liście raportów w kaflu Stan. |
Parametry |
|
<value>1</value>
</orderOnList>
Widoczność raportu
Sekcja onListVisibillity określa miejsca w aplikacji mobilnej poza kaflem Raporty, z których dostępny jest raport. Musi zawierać następującą sekcję:
Nazwa | value |
Opis | Wartość występowania raportu. Możliwe wartości łączone np. 129 = 128+1 – raport widoczny zarówno na liście kontrahentów jak i karcie kontrahenta. |
Parametry |
|
<value>8</value>
</onListVisibillity>
Argumenty
Raport może wykorzystywać podane przez użytkownika aplikacji po kliknięciu w ikonę ołówka argumenty (parametry). Argumenty znajdują się w sekcji arguments definicji raportu, zaś poszczególne argumenty opatrzone są sekcją argument według następującego przykładu:
<argument>
…
</argument>
</arguments>
Argument może zawierać następujące sekcje:
Nazwa | id |
Opis | Identyfikator argumentu. |
Parametry |
|
Nazwa | typeId |
Opis | Typ argumentu. |
Parametry |
|
<![CDATA[select date(’now’,’localtime’)]]>
zaś posibleSQL zostawić puste wstawiając:
<![CDATA[]]>
<argument>
<id>3</id>
<typeId>6</typeId>
<name>mag</name>
<visibleName>Magazyn</visibleName>
<defaultSQL><![CDATA[
SELECT '(’ || group_concat(id, ’,’) || ’)’ AS Conc, 'Wszystkie’ AS Value
FROM Warehouses
WHERE IsActive = 1 AND Id > 0
GROUP BY Value ]]>
</defaultSQL>
<posibleSQL><![CDATA[
SELECT id || ’ [’ || code || ’] ’ , name FROM Warehouses WHERE IsActive = 1 AND Id > 0 ]]>
</posibleSQL>
</argument>
Nazwa | name |
Opis | Nazwa argumentu używana w poleceniach SQL. |
Parametry |
|
Nazwa | visibleName |
Opis | Nazwa argumentu widoczna w aplikacji. |
Parametry |
|
Nazwa | defaultSQL |
Opis | Wartość parametru ustawiana domyślnie. Jeżeli wartość pozostanie pusta (ustawiona na <![CDATA[]]>) to wartość parametru w aplikacji ustawi się na 'Wybierz wartość’ i konieczny będzie wybór tego parametru przed otwarciem raportu. |
Parametry |
|
Nazwa | posibleSQL |
Opis | Wartości parametru możliwe do wyboru. |
Parametry |
|
Nazwa | isErpSQL |
Opis | Znacznik decydujący czy polecenie SQL ma być wykonywane na bazie systemu ERP. Używany w raportach online. |
Parametry |
|
Nazwa | validationRule |
Opis | Znacznik definiujący sposób walidacji argumentu (tylko dla typu data). |
Parametry |
|
<id>2</id>
<typeId>2</typeId>
<name>grupowanie</name>
<visibleName>Sposób grupowania</visibleName>
<defaultSQL><![CDATA[select 0,’Brak’]]></defaultSQL>
<posibleSQL><![CDATA[select 0,’Brak’ union all select 1,’Kategoria’ union all select 2,’Marka’ union all select 3,’Producent’ union all select 4,’Grupa’]]></posibleSQL>
</argument>
Zdefiniowany w powyższym przykładzie argument widoczny jest w aplikacji w następujący sposób:
Elementy
Elementy raportu składają się na jego wygląd w aplikacji mobilnej. Poszczególne elementy raportu znajdują się w sekcji elements definicji raportu, zaś każda z poniżej opisanych sekcji może znajdować się w sekcji element, która jest definicją jednego elementu.
<element>
…
</element>
</elements>
Nazwa | id |
Opis | Identyfikator elementu. |
Parametry |
|
Nazwa | typeId |
Opis | Typ elementu. |
Parametry |
|
Nazwa | sql |
Opis | Polecenie SQL wykonywane na bazie SQL, które tworzy tabelę wynikową. Podanie argumentu odbywa się poprzez umieszczenie jego nazwy w znakach @ np. @grupowanie@. |
Parametry |
|
Nazwa | header |
Opis | Nagłówek elementu. |
Parametry |
|
Nazwa | headerType |
Opis | Typ nagłówka raportu. |
Parametry |
|
Nazwa | isSummary |
Opis | Znacznik czy element zawiera podsumowanie zwartości tabeli. W przypadku jego użycia w sekcji sql należy umieścić polecenia sumujące wybrane kolumny tabeli. |
Parametry |
|
Nazwa | isSummaryType |
Opis | Typ znacznika podsumowania. |
Parametry |
|
Nazwa | isErpSQL |
Opis | Znacznik czy polecenie ma być wykonane na bazie systemu ERP. Używany w raportach online. |
Parametry |
|
Nazwa | reportTypeVisibility |
Opis | Widoczność elementu w zależności od rodzaju raportu. |
Parametry |
|
Nazwa | showNumberOfRows |
Opis | Wyświetla liczbę zwróconych rekordów w tabeli jako ostatni wiersz tabeli. Używane tylko gdy sekcja isSummary przyjmuje wartość 1. |
Parametry |
|
Nazwa | isExecute |
Opis | Znacznik czy wykonać dany element. |
Parametry |
|
Nazwa | isExecuteType |
Opis | Typ znacznika wykonania elementu. |
Parametry |
|
<element> <id>8</id> <typeId>3</typeId> <sql> <![CDATA[ select coalesce(categories.name, 'Brak kategorii') as Kategoria, sum(DocumentsPositions.GrossValueInSystemCurrency) as NetValue from documents join documentspositions on documentspositions.documentid = documents.id AND DocumentsPositions.DocumentIsLocal = Documents.DocumentIsLocal and DocumentsPositions.IsItemsSetVirtualPosition = 0 and DocumentsPositions.RelatedItemsSetOrdinal is null join items on items.id = documentspositions.itemid left join categories on items.categoryid = categories.id where Documents.DocumentIsLocal = 1 AND documents.NumeratorId IN (16,17) AND datetime(DocumentDate/1000, 'unixepoch','localtime') >datetime(date(@data@/1000, 'unixepoch', 'localtime'),'start of day') and datetime(DocumentDate/1000, 'unixepoch','localtime') <datetime(date(@data@/1000, 'unixepoch','localtime'),'start of day','+1 day', '-1 seconds') and 1 = @grupowanie@ group by categories.name union all select coalesce(brands.name, 'brak marki') as Marka, sum(DocumentsPositions.GrossValueInSystemCurrency) as NetValue from documents join documentspositions on documentspositions.documentid = documents.id AND DocumentsPositions.DocumentIsLocal = Documents.DocumentIsLocal and DocumentsPositions.IsItemsSetVirtualPosition = 0 and DocumentsPositions.RelatedItemsSetOrdinal is null join items on items.id = documentspositions.itemid left join brands on items.brandid = brands.id where Documents.DocumentIsLocal = 1 AND documents.NumeratorId IN (16,17) AND datetime(DocumentDate/1000, 'unixepoch','localtime') >datetime(date(@data@/1000, 'unixepoch', 'localtime'),'start of day') and datetime(DocumentDate/1000, 'unixepoch','localtime') <datetime(date(@data@/1000, 'unixepoch','localtime'),'start of day','+1 day', '-1 seconds') and 2 = @grupowanie@ group by brands.name union all select coalesce(Producers.name, 'brak producenta') as Grouping, sum(DocumentsPositions.GrossValueInSystemCurrency) as NetValue from documents join documentspositions on documentspositions.documentid = documents.id AND DocumentsPositions.DocumentIsLocal = Documents.DocumentIsLocal and DocumentsPositions.IsItemsSetVirtualPosition = 0 and DocumentsPositions.RelatedItemsSetOrdinal is null join items on items.id = documentspositions.itemid left join Producers on items.producerid = Producers.id where Documents.DocumentIsLocal = 1 AND documents.NumeratorId IN (16,17) AND datetime(DocumentDate/1000, 'unixepoch','localtime') >datetime(date(@data@/1000, 'unixepoch', 'localtime'),'start of day') and datetime(DocumentDate/1000, 'unixepoch') <datetime(date(@data@/1000, 'unixepoch','localtime'),'start of day','+1 day', '-1 seconds') and 3 = @grupowanie@ group by Producers.name union all select coalesce(ig.name , 'brak grupy towaru') as Grupa , sum(DocumentsPositions.GrossValueInSystemCurrency) as GrossValue from documents join documentspositions on documentspositions.documentid = documents.id AND DocumentsPositions.DocumentIsLocal = Documents.DocumentIsLocal and DocumentsPositions.IsItemsSetVirtualPosition = 0 and DocumentsPositions.RelatedItemsSetOrdinal is null join items on items.id = documentspositions.itemid join itemsgroupslinks igl on items.id = igl.itemid join itemsgroups ig on groupid = ig.id where Documents.DocumentIsLocal = 1 AND documents.NumeratorId IN (16,17) AND (select count(*) from itemsgroups join itemsgroupslinks on itemsgroupslinks.itemid = igl.itemid and itemsgroups.id = itemsgroupslinks.groupid where parentid = ig.id) = 0 and datetime(DocumentDate/1000, 'unixepoch','localtime') >datetime(date(@data@/1000, 'unixepoch', 'localtime'),'start of day') and datetime(DocumentDate/1000, 'unixepoch','localtime') <datetime(date(@data@/1000, 'unixepoch','localtime'),'start of day','+1 day', '-1 seconds') and @grupowanie@=4 group by ig.name]]> </sql> <header>Wykres zakupu wg grupowania</header> <isSummary>0</isSummary> <reportTypeVisibility>2</reportTypeVisibility> </element>