Modyfikacje raportów

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: raporty_rys4

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 : raporty_rys5 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.
raporty_rys6 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: raporty_rys7

4. Definicja układu elementów raportu

W ostatniej sekcji należy określić układ poszczególnych elementów raportu, wykorzystując sekcje: raporty_rys9 Przykładowo chcąc umieścić dwa elementy raportu jeden nad drugim należy ustawić layout w następujący sposób: raporty_rys8

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ść
  • wartość tekstowa
 
Nazwa VisibleName
Opis Nazwa argumentu widoczna na wyświetlanym raporcie.
Zawartość
  • wartość tekstowa
 
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ść
  • polecenie SQL
 
Nazwa ListSql
Opis Wartości parametru możliwe do wyboru.
Zawartość
  • polecenie SQL
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
  • LayoutRow
  • HeaderRow
 
Nazwa TableHeader: LayoutRow
Opis Znacznik wiersza tabeli
Zawartość Jeden lub więcej element SpaceColumn
Parametry Brak
Elementy podrzędne
  • SpaceColumn
 
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
  • TextColumn
 
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
  • SqlColumn
 
Nazwa TotalSummaryColumns
Opis Wiersz zawierający podsumowania poszczególnych kolumn na podstawie wcześniejszych wartości
Zawartość Brak
Parametry Brak
Elementy podrzędne
  • TextColumn
  • SqlColumn
 
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
  • RowTemplate
 
Nazwa PivotTable: RowTemplate
Opis Określa wiersz tabeli
Zawartość Brak
Parametry Brak
Elementy podrzędne
  • ColumnTemplate
 
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
  • wartość tekstowa
 
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>