Definicje raportów dostępnych w Comarch Mobile Zarządzanie
Definicje raportów domyślnych znajdują się w katalogu z zainstalowaną aplikacją, a dokładnie
Comarch Mobile Management\Application\ReportDefinitions.
Definicja XML raportu składa się z następujących głównych sekcji:
- Nazwa raportu
- Opis
- Definicje argumentów
- Definicje elementów raportu
- Definicja klas CSS
- Definicja układu elementów raportu (layout)
Ogólna struktura raportu jest następująca:
1. Nazwa raportu
Nazwa raportu podana w elemencie
<Name> jest wyświetlana na górnej belce widoku raportu oraz na kafelkach listy raportów.
Przykład użycia:
<Name>Ranking dokumentów
</Name>
2. Opis raportu
Opis raportu podany w elemencie jest wyświetlany na kaflach listy z raportami.
Przykład użycia:
<Description>Ranking dokumentów przedstawicieli handlowych
</Description>
3. Elementy raportu
Raport może składać się z wielu elementów następującego typu:
- Tabela płaska
- Tabela wielopoziomowa
- Wykres słupkowy
- Wykres liniowy
- Wykres kołowy
- Tekst
Definicje elementów raportu należy umieścić w sekcjach wewnątrz sekcji :

Elementami XML wspólnymi dla każdego typu jest:
- Identyfikator elementu (unikalna liczba całkowita) w elemencie, np. 1,
- Typ elementu określony w węźle, np. PivotTable, dostępne wartości:
-
- Table – tabela płaska
- PivotTable – tabel wielopoziomowa
- Bar – wykres słupkowy
- Pie – wykre kołowy
- Line – wykres liniowy
- Text – element typu tekst
- Zapytanie SQL pobierające dane do elementu raportu określone w elemencie , np.

Dodatkowo dla tabel oraz wykresów można zdefiniować tytuł wyświetlany nad elementem w sekcji
<Header>, np.
<Header>Historia sprzedaży (faktury + paragony)
</Header>.
Struktura XML wspólna dla wszystkich elementów jest następująca:
4. Definicja układu elementów raportu
W ostatniej sekcji należy określić układ poszczególnych elementów raportu, wykorzystując sekcje:

Przykładowo chcąc umieścić dwa elementy raportu jeden nad drugim należy ustawić layout w następujący sposób:

Definicje argumentów
Raport może wykorzystywać podane przez użytkownika aplikacji po kliknięciu w ikonę

argumenty (parametry). Wszystkie argumenty znajdują się w sekcji
Arguments definicji raportu, zaś poszczególne argumenty opatrzone są sekcją
Argument według następującego przykładu:
Przyklad
<Arguments>
<Argument>
...
</Argument>
</Arguments>
Uwaga
Aby wstawiane polecenia SQL działały poprawnie należy umieścić je w znaczniku <![CDATA[ polecenieSQL ]> w celu wyłączenia spod analizy deserializatora XML.
Argument może zawierać następujące sekcje:
Nazwa |
Type |
Opis |
Typ argumentu. |
Zawartość |
- List - wybór z listy
- Date - wybór daty
- Text - pole tekstowe
|
Nazwa |
Name |
Opis |
Nazwa argumentu wykorzystywana w definicji raportu. |
Zawartość |
|
Nazwa |
VisibleName |
Opis |
Nazwa argumentu widoczna na wyświetlanym raporcie. |
Zawartość |
|
Nazwa |
DefaultSql |
Opis |
Wartość parametru ustawiana domyślnie. Jeżeli wartość pozostanie pusta (ustawiona na <![CDATA[]]>) to wartość parametru w aplikacji ustawi się na ‚Brak wartości’ i konieczny będzie wybór tego parametru przed otwarciem raportu. |
Zawartość |
|
Nazwa |
ListSql |
Opis |
Wartości parametru możliwe do wyboru. |
Zawartość |
|
Przyklad
<ListSql>
<![CDATA[
SELECT 0, 'Zamówień'
UNION ALL
SELECT 1, 'Ofert'
UNION ALL
SELECT 2, 'Faktur'
]]>
</ListSql>
Przyklad
Argument typu
List:
<Argument>
<Type>List</Type>
<Name>DocumentType</Name>
<VisibleName>Licz dla</VisibleName>
<DefaultSql>
<![CDATA[
DECLARE @docTypeId INT
SET @docTypeId = (SELECT COALESCE(
(
SELECT TOP 1 CAST(ruav.ArgumentValue AS nvarchar(max))
FROM esm.ReportsUserArguments ruav WHERE ruav.UserName = @LoginName AND ruav.ReportFileName = @ReportFileName AND ruav.ArgumentName = 'DocumentType'
)
, ( SELECT 1)
))
SELECT * FROM (
SELECT 0 as Id, 'Zamówień' as Name
UNION ALL
SELECT 1, 'Ofert'
UNION ALL
SELECT 2, 'Faktur'
) p WHERE p.Id = @docTypeId
]]>
</DefaultSql>
<ListSql>
<![CDATA[
SELECT 0, 'Zamówień'
UNION ALL
SELECT 1, 'Ofert'
UNION ALL
SELECT 2, 'Faktur'
]]>
</ListSql>
</Argument>
Powyższa definicja argumentu w aplikacji wygląda następująco:

Po kliknięciu w pole wartości, możliwy jest wybór wartości z listy:
Przyklad
Argument typu
Data:
<Argument>
<Type>Date</Type>
<Name>DateFrom</Name>
<VisibleName>Data początkowa</VisibleName>
<DefaultSql>
<![CDATA[
SELECT COALESCE(
(
SELECT TOP 1 CAST(ruav.ArgumentValue AS DATETIME)
FROM esm.ReportsUserArguments ruav WHERE ruav.UserName = @LoginName AND ruav.ReportFileName = @ReportFileName AND ruav.ArgumentName = 'DateFrom'
)
, ( SELECT esm.GetDateFromParts ( YEAR(GETDATE()), 1, 1 ) )
)
]]>
</DefaultSql>
<ListSql></ListSql>
</Argument>
Powyższa definicja argumentu w aplikacji wygląda następująco:

Po kliknięciu w pole wartości możliwy jest wybór daty.
Przyklad
Argument typu
Text:
<Argument>
<Type>Text</Type>
<Name>ArticleCode</Name>
<VisibleName>Kod artykułu</VisibleName>
<DefaultSql><![CDATA[SELECT ' ']]></DefaultSql>
</Argument>
Powyższa definicja argumentu w aplikacji wygląda następująco:

Możliwe jest wpisanie dowolnej wartości tekstowej.
Definicje elementów
Na raportach prezentowane są dane określane w definicjach raportów jako elementy. Elementy znajdują się w sekcji
Elements definicji raportu, zaś poszczególny element opatrzony są sekcją
Element według następującego przykładu:
Przyklad
<Elements>
<Element>
...
</Element>
</Elements>
Uwaga
Aby wstawiane polecenia SQL działały poprawnie należy umieścić je w znaczniku <![CDATA[ polecenieSQL ]> w celu wyłączenia spod analizy deserializatora XML.
Element raportu może zawierać następujące sekcje:
Nazwa |
Id |
Opis |
Identyfikator elementu |
Zawartość |
Wartość liczbowa |
Parametry |
Brak |
Nazwa |
HeaderSql |
Opis |
Wartość tekstowa lub polecenie SQL zwracające wartość wyświetlaną w nazwie elementu na raporcie |
Zawartość |
Dowolna wartość tekstowa lub polecenie SQL |
Parametry |
Brak |
Nazwa |
Type |
Opis |
Typ elementu |
Zawartość |
Jedna z poniższych wartości tekstowych:
- Text - tekst
- Bar - wykres słupkowy
- Table - tabela
- PivotTable - tabela
- Pie - wykres kołowy
- Line - wykres liniowy
|
Parametry |
Brak |
Nazwa |
Sql |
Opis |
Polecenie SQL zwracające dane wyświetlane w elemencie |
Zawartość |
Polecenie SQL |
Parametry |
Brak |
Nazwa |
IsExecute |
Opis |
Znacznik decydujący czy polecenie SQL z sekcji Sql ma zostać wykonane |
Zawartość |
Wartość true, false lub polecenie SQL zwracające jedną z tych wartości |
Parametry |
Brak |
Nazwa |
TableHeader |
Opis |
Nagłówek tabeli. Używane z typem elementu Table. |
Zawartość |
Jeden element LayoutRow i jeden HeaderRow |
Parametry |
Brak |
Elementy podrzędne |
|
Nazwa |
TableHeader: LayoutRow |
Opis |
Znacznik wiersza tabeli |
Zawartość |
Jeden lub więcej element SpaceColumn |
Parametry |
Brak |
Elementy podrzędne |
|
Nazwa |
TableHeader: LayoutRow: SpaceColumn |
Opis |
Określa szerokość kolumny |
Zawartość |
Brak |
Parametry |
- width - wartość liczbowa określająca szerokość kolumny
|
Przyklad
<LayoutRow>
<SpaceColumn width="10"/>
<SpaceColumn width="5"/>
<SpaceColumn width="10"/>
<SpaceColumn width="5"/>
</LayoutRow>
Nazwa |
TableHeader: HeaderRow |
Opis |
Znacznik nagłówka tabeli |
Zawartość |
Jeden lub więcej element TextColumn |
Parametry |
Brak |
Elementy podrzędne |
|
Nazwa |
TableHeader: HeaderRow: TextColumn |
Opis |
Określa nazwę kolumny w tabeli |
Zawartość |
Dowolna wartość tekstowa |
Parametry |
- align - wyrównanie zawartości (left, right, center)
- precision - wartość liczbowa określająca precyzję
|
Przyklad
<HeaderRow>
<TextColumn>Rejon</TextColumn>
<TextColumn>Plan</TextColumn>
<TextColumn precision="2">Realizacja</TextColumn>
<TextColumn precision="2">%</TextColumn>
</HeaderRow>
Przyklad
Element typu
Table:
<Element>
<Id>31</Id>
<Header>Realizacja w podziale na towary</Header>
<Type>Table</Type>
<Sql>
<![CDATA[
DECLARE @OperatorId int
SELECT
@OperatorId = vad.OperatorId
FROM esm.vAuthData vad
WHERE LOWER(vad.[Login]) = LOWER(@LoginName)
declare @Articles table
(
[Acronym] nvarchar(max),
[Name] nvarchar(max),
[Group] nvarchar(max),
[Quantity] numeric(12,4),
[Value] numeric(12,2),
[Progress] numeric(12,2)
)
insert into @Articles([Acronym], [Name], [Group], [Quantity], [Value], [Progress])
exec esm.[Reports_GetSalePlansTable1_pol] @OperatorId, @SalesPlan, 1, @DocumentType
select
ISNULL([Acronym], '') as [Acronym],
ISNULL([Name], '') as [Name],
ISNULL([Group], '') as [Group],
[Quantity],
[Value],
[Progress]
from @Articles
]]>
</Sql>
<IsExecute>
<![CDATA[ SELECT CASE WHEN @RealizationType = 1 THEN 1 ELSE 0 END ]]>
</IsExecute>
</Element>
Tak zdefiniowany element w aplikacji wygląda następująco:
Nazwa |
NonGroupingColumns |
Opis |
Łączy kolumny tabeli z kolumnami tabeli wynikowej polecenia SQL. |
Zawartość |
Brak |
Parametry |
Brak |
Elementy podrzędne |
|
Nazwa |
TotalSummaryColumns |
Opis |
Wiersz zawierający podsumowania poszczególnych kolumn na podstawie wcześniejszych wartości |
Zawartość |
Brak |
Parametry |
Brak |
Elementy podrzędne |
|
Przyklad

Definicja powyższego wiersza podsumowania wygląda następująco:
<TotalSummaryColumns>
<TextColumn align="center">Podsumowanie</TextColumn>
<TextColumn></TextColumn>
<SqlColumn align="center" precision="2">TotalOrdersNetValue</SqlColumn>
<SqlColumn align="center" precision="2">TotalOrdersGrossValue</SqlColumn>
<SqlColumn align="center">TotalOrdersNumber</SqlColumn>
</TotalSummaryColumns>
Nazwa |
PivotTable |
Opis |
Tabela dynamiczna. Używane z typem elementu PivotTable. |
Zawartość |
Brak |
Parametry |
- showTotalSummary - określa czy w ostatnim wierszu tabeli ma być wyświetlane podsumowanie w postaci sumy końcowej. Parametr może przyjmować wartość true lub false. Brak parametru oznacza wartość false.
- visibleRows - wartość liczbowa określająca ilość wyświetlanych wierszy (pozostałe widoczne będą po przesunięciu scrollbar'a w dół)
|
Elementy podrzędne |
|
Nazwa |
PivotTable: RowTemplate |
Opis |
Określa wiersz tabeli |
Zawartość |
Brak |
Parametry |
Brak |
Elementy podrzędne |
|
Nazwa |
PivotTable: RowTemplate: ColumnTemplate |
Opis |
Określa zawartość poszczególnych kolumn tabeli |
Zawartość |
Brak |
Parametry |
- width - szerokość elementu
- name - nazwa kolumny widoczna w wyświetlanym raporcie
- nameSql - polecenie sql
- sqlColumn - nazwa kolumny wynikowej
- showSummary - znacznik czy pokazać podsumowanie
- align - wyrównanie zawartości komórki tabeli
- groupingType - typ grupowania wyników, np. Sum
- sortOrder - kolejność sortowania
- precision - precyzja
|
Przyklad
Element typu
Pivot:
<Element>
<Id>1</Id>
<HeaderSql>
<![CDATA[
SELECT 'Wartość ' + (
CASE
WHEN @DocumentType = 0 THEN 'zamówień'
WHEN @DocumentType = 1 THEN 'ofert'
WHEN @DocumentType = 2 THEN 'faktur'
ELSE 'dokumentów'
END
) + ' za okres od ' + CAST(CAST(@DateFrom AS DATE) AS NVARCHAR(MAX)) + ' do ' + CAST(CAST(@DateTo AS DATE) AS NVARCHAR(MAX)) ]]></HeaderSql>
<!--<Type>MultiLevelTable</Type>-->
<Type>PivotTable</Type>
<Sql>
<![CDATA[
exec [esm].[Reports_pGetOrdersStatsBySubRegions_plPL] 2, @LoginName, @DateFrom, @DateTo, @DocumentType, @SessionId
]]>
</Sql>
<PivotTable showTotalSummary="true" visibleRows="8">
<RowTemplate>
<ColumnTemplate width="1" name="Rejon nadrzędny" sqlColumn="Region" showSummary="true" align="left"/>
<ColumnTemplate width="1" name="Rejon podrzędny" sqlColumn="SubRegion" showSummary="true" align="left"/>
<ColumnTemplate width="1" name="Pracownik" sqlColumn="Employee" showSummary="true" align="left"/>
<ColumnTemplate
width="1"
name="Wartość netto (PLN)"
nameSql="
DECLARE @CurrencyCode nvarchar(max)
SET @CurrencyCode =
(
SELECT
RTRIM(WaN_Symbol) AS [Value]
FROM CDN.WalNag
LEFT JOIN CDN.Konfig ON Kon_Numer=211 AND RTRIM(WaN_Symbol)=RTRIM(Kon_Wartosc)
WHERE Kon_System = 1
)
SELECT 'Wartość netto (' + @CurrencyCode + ')'
"
groupingType="Sum"
sqlColumn="OrderNetValue"
align="right"
sortOrder="desc"
precision="2" />
<ColumnTemplate
width="1"
name="Wartość brutto (PLN)"
nameSql="
DECLARE @CurrencyCode nvarchar(max)
SET @CurrencyCode =
(
SELECT
RTRIM(WaN_Symbol) AS [Value]
FROM CDN.WalNag
LEFT JOIN CDN.Konfig ON Kon_Numer=211 AND RTRIM(WaN_Symbol)=RTRIM(Kon_Wartosc)
WHERE Kon_System = 1
)
SELECT 'Wartość brutto (' + @CurrencyCode + ')'
"
groupingType="Sum"
sqlColumn="OrderGrossValue"
align="right"
precision="2" />
<ColumnTemplate
width="1"
name="Ilość"
groupingType="Sum"
sqlColumn="it"
align="right" />
</RowTemplate>
</PivotTable>
</Element>
Tak zdefiniowany element w aplikacji wygląda następująco:
Nazwa |
ChartColumns |
Opis |
Wykres. |
Zawartość |
Brak |
Parametry |
Brak |
Elementy podrzędne |
- LabelsSqlColumn
- SeriesSqlColumn
- ValuesSqlColumn
|
Nazwa |
ChartColumns: LabelsSqlColumn |
Opis |
Etykieta wartości wynikowych |
Zawartość |
Dowolna wartość tekstowa |
Parametry |
- title - nazwa etykiety wyświetlana jako nazwa kolumny wyświetlanej pod wykresem kołowym
|
Nazwa |
ChartColumns: SeriesSqlColumn |
Opis |
Nazwa serii dla wykresów wieloseryjnych |
Zawartość |
Dowolna wartość tekstowa |
Parametry |
|
Nazwa |
ChartColumns: ValuesSqlColumn |
Opis |
Znacznik wartości wynikowych |
Zawartość |
Dowolna wartość tekstowa |
Parametry |
- precision - precyzja
- title - wartość tekstowa wyświetlana jako nazwa kolumny w tabeli wyświetlanej pod wykresem kołowym
- titileSql - polecenie SQL zwracające dane wartości
- align - wyrównanie zawartości (left, right, center)
|
Przyklad
Element typu
Line wykorzystujący
ChartColumns:
<Element>
<Id>1</Id>
<HeaderSql>...</HeaderSql>
<Type>Line</Type>
<Sql>...</Sql>
<ChartColumns>
<LabelsSqlColumn>Date</LabelsSqlColumn>
<SeriesSqlColumn>LoginName</SeriesSqlColumn>
<ValuesSqlColumn>DispositionsCount</ValuesSqlColumn>
</ChartColumns>
</Element>
Tak zdefiniowany element w aplikacji wygląda następująco:
Definicja układu elementów
Układ elementów
Układ elementów znajdujących się w raporcie definiowany jest za pomocą sekcji
VerticalLayout. Każdy z elementów może znajdować się bezpośrednio w tej sekcji lub w jednym ze znaczników:
Horizontal lub
Vertical, które mogą być względem siebie zagnieżdżone jak w poniższym przykładzie:
Przyklad
<VerticalLayout width="1" height="1">
<Element cssclass="tab" height="1" width="10">1</Element>
<Horizontal height="5" width="10">
<Element cssclass="pie" height="5" width="5">3</Element>
<Element cssclass="bar" height="5" width="5">2</Element>
</Horizontal>
</VerticalLayout>
Tak zdefiniowany układ wygląda następująco:

Wartości ID na zrzucie odpowiadają wartości w sekcji Element definicji układu raportu.
Układ raportu może składać się z następujących sekcji:
Nazwa |
VerticalLayout |
Opis |
Sekcja definicji układu elementów raportu. Elementy w tej sekcji domyślnie układane są poziomo. |
Zawartość |
Sekcje:
- WidthSql
- Element
- Horizontal
|
Parametry |
- width - wartość liczbowa określająca szerokość layoutu
- minwidth - wartość liczbowa okreslająca minimalną szerokość layoutu
- height - wartość liczbowa określająca wysokość layoutu
- minwidth - wartość liczbowa okreslająca minimalną wysokość layoutu
- cssclass - odnośnik do klasy CSS
|
Nazwa |
WidthSql |
Opis |
Polecenie SQL zwracające wartość liczbową, która jest szerokością danego elementu |
Zawartość |
Polecenie SQL |
Parametry |
Brak |
Nazwa |
Element |
Opis |
Definiuje wielkość danego elementu raportu |
Zawartość |
Identyfikator elementu raportu |
Parametry |
- width - wartość liczbowa określająca szerokość elementu
- minwidth - wartość liczbowa okreslająca minimalną szerokość elementu
- height - wartość liczbowa określająca wysokość elementu
- minwidth - wartość liczbowa okreslająca minimalną wysokość elementu
- cssclass - odnośnik do klasy CSS
|
Nazwa |
Horizontal |
Opis |
Układ elementów poziomy |
Zawartość |
Elementy i/lub sekcje Vertical |
|
- width - wartość liczbowa określająca szerokość layoutu
- minwidth - wartość liczbowa okreslająca minimalną szerokość layoutu
- height - wartość liczbowa określająca wysokość layoutu
- minwidth - wartość liczbowa okreslająca minimalną wysokość layoutu
- cssclass - odnośnik do klasy CSS
|
Nazwa |
Vertical |
Opis |
Układ elementów pionowy |
Zawartość |
Elementy i/lub sekcje Horizontal |
|
- width - wartość liczbowa określająca szerokość layoutu
- minwidth - wartość liczbowa okreslająca minimalną szerokość layoutu
- height - wartość liczbowa określająca wysokość layoutu
- minwidth - wartość liczbowa okreslająca minimalną wysokość layoutu
- cssclass - odnośnik do klasy CSS
|
Klasy CSS
W definicji raportu możliwe jest wykorzystanie języka CSS do stylizacji elementów. W sekcji
Css raportu zdefiniować można odpowiednie klasy owołujące się do poszczególnych elementów raportu. Odwołanie odbywa się poprzez znacznik
Element definicji układu raportu, w którym to podany jest identyfikator danego elementu raportu.
Przyklad
<Css>
.avg-perf { color: white; font-weight: bold; height: 100%; }
.avg-perf-value { font-size: 5em; }
.avg-perf-title { font-size: 2em; }
.customHeaderColumn {height: 35px;}
.average-performance-element>.report-element-content { background-color: #a8c6d5; padding: 5px 50px 15px 50px; }
.weekend-day { color: red; }
</Css>