Eksport danych z użyciem szablonów xslt

Dzięki funkcjonalności obsługi szablonów XSLT możliwe jest eksportowanie danych ze spraw praktycznie do dowolnej postaci XML, text, html, a nawet MS Excel czy MS Word

 

Co to jest XSLT?

 

XSLT (ang. eXtensible Stylesheet Language Transformations) – oparty na XML język przekształceń dokumentów XML.

 

Ponieważ AMODIT dostarcza dane dotyczące sprawy w postaci XML, to używając pliku przekształceń XSLT możemy uzyskać np: inną postać pliku XML np taką jaką wymaga Comarch Optima (zobacz opis tutaj), albo przekształcić generowany przez ABBYY FlexiCapture plik XML do postaci wymaganej przez AMODIT (zobacz opis tutaj).

 

Aby przystąpić do tego zadania musimy wiedzieć kilka rzeczy:

  1. Jaka jest struktura XML, w której AMODIT zwraca dane?
  2. Jak przygotować plik XSLT uwzględniający dane z XML zwracanego przez AMODIT?
  3. Gdzie i jak załączyć szablon XSLT?
  4. Jak przygotować eksport wielu spraw do jednego pliku wynikowego?

Struktura pliku XML, którą zwraca AMODIT

W jakich sytuacjach będziemy mieli do czynienia z danymi sprawy w postaci XML:

  • gdy użyjemy funkcji GetXML() w ramach reguł
  • gdy będzie dostępny szablon typu xslt i użytkownik kliknie go, aby pobrać plik. Wtedy do przekształcenia danych zostanie przekazany XML z danymi ze sprawy
  • gdy wywołamy metodę GetCase() poprzez WebService

Poniżej przykładowy formularz sprawy a pod nim odpowiadająca mu struktura danych w postaci XML

<AMODCases>
   <AMODCase>
	<Property Name="CaseTitle" Type="String" >Proces ABC (52015)</Property>
	<Property Name="CaseOwnerId" Type="Int32" >1</Property>
	<Property Name="CaseCreated" Type="DateTime" >2019-07-18 20:22:59</Property>
	<Property Name="CaseCreatedById" Type="Int32" >1</Property>
	<Property Name="CaseModified" Type="DateTime" >2019-07-18 20:25:16</Property>
	<Property Name="CaseModifiedById" Type="Int32" >1</Property>
	<Property Name="CaseForwarded" Type="DateTime" >0001-01-01 00:00:00</Property>
	<Property Name="CaseForwardedById" Type="Int32" >0</Property>
	<Property Name="CaseProcedureId" Type="Int32" >565</Property>
	<Property Name="CaseStatusId" Type="Int32" >944</Property>
	<Property Name="CaseRead" Type="Boolean" >True</Property>
	<Property Name="CaseIsClosed" Type="Boolean" >False</Property>
	<Property Name="CaseId" Type="Int32" >52015</Property>
	<Property Name="CaseForwardedCC" Type="List`1" ></Property>
	<Property Name="CaseContributors" Type="List`1" ></Property>
	<Property Name="CaseReadText" Type="String" >Read</Property>
	<Property Name="Nazwa pola 1" Type="Varchar" DBValue="Wartość w polu 1">Wartość w polu 1</Property>
	<Property Name="Nazwa pola 2" Type="Money" DBValue="2000,0000">2 000,00</Property>
	<Property Name="Nazwa pola 3" Type="DateTime" DBValue="2019-07-18 00:00:00">2019-07-18</Property>
	<Property Name="Nazwa tabeli" Type="Table" >
		<Row CaseId="52016" Index="1">
			<Property Name="Kolumna 1" Type="DefinedDictionary" DBValue="9507">Toruń</Property>
			<Property Name="Kolumna 2" Type="Money" DBValue="100,0000">100,00</Property>
			<Property Name="Kolumna 3" Type="Varchar" DBValue="przykładowy tekst">przykładowy tekst</Property>
		</Row>
	</Property>
   </AMODCase>
</AMODCases>

Metoda GetCase(caseId) dostępna poprzez WebService zwraca tę samą treść ale bez nadrzędnego tagu <AMODCases></AMODCases>

 

Przykład pliku XSLT dający w wyniku plik tekstowy

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet 
	version="2.0" 
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 	xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:output method="text" />
<xsl:template match="/">

	<!-- wiersz nagłówkowy -->
	<xsl:text>Nazwa pola 1;Nazwa pola 2;</xsl:text>

	<!-- nowa linia po wierszu nagłówkowym-->
	<xsl:text>&#10;</xsl:text>


	<xsl:for-each select="AMODCases/AMODCase">
		<!-- wiersz z danymi dla kazdej sprawy -->
                <xsl:value-of select="./Property[@Name='Nazwa pola 1']"/><xsl:text>;</xsl:text>
		<xsl:value-of select="translate(./Property[@Name='Nazwa pola 2']/@DBValue,',','.')" /><xsl:text>;</xsl:text>
		
		
		<!-- nowa linia po każdym wierszu -->
		<xsl:text>&#10;</xsl:text>
	</xsl:for-each> 

</xsl:template>
</xsl:stylesheet>

Gdzie załączyć szablon xslt

Plik z treścią jak wyżej nazwany np szablon.xslt należy załączyć tak jak każdy inny szablon w zakładce 'SZABLONY’ definicji procesu.

Jeżeli chcemy aby szablon był dostępny z poziomu sprawy, to należy wskazać na którym etapie procesu ma być dostępny.

Można podać przyjazną nazwę, którą zobaczy użytkownik.

Jeżeli planujemy, że nie dopuszczamy eksportu z poziomu pojedynczej sprawy, a jedynie eksport masowy, to nie wskazujemy żadnego etapu dla szablonu i postępujemy wg poniższych wskazówek.

Eksport wielu spraw

Mając załączony plik xslt jako szablon, możemy go użyć do przygotowania masowego eksportu danych z wielu spraw. Do tego celu wykorzystamy „Wyszukiwanie zaawansowane”.

W Wyszukiwaniu zaawansowanym:

  • wskazujemy nasz proces,
  • budujemy zestawienie.
    • Wybrane do wyświetlenia kolumny nie mają wpływu na eksport danych, gdyż bierze on pod uwagę te dane, które autor przewidział w treści pliku xslt.
    • użyjmy filtrów aby wyświetlały się określone sprawy np z konkretnego etapu
  • zapisujemy definicję wyszukiwania pod dowolną nazwą np „Faktury do eksportu”
  • w opcjach wybieramy „Ustawienia eksportu”
    • wskazujemy plik xslt
    • w zależności co plik xslt będzie produkował wybieramy odpowiednie rozszerzenie pliku np csv
    • można też wskazać regułę ręczną, która ma się wykonać dla każdej wyeksportowanej sprawy
  • jeszcze raz zapisujemy

Od teraz użytkownik korzystający z tego zestawienia, w opcji „Pobierz” będzie miał dodatkową pozycję z eksportem wg szablonu xslt. Wyświetli się nazwa podana przy załączaniu szablonu do definicji procesu.

Jeżeli z tych samych danych chcemy mieć wiele różnych eksportów w oparciu o różne pliki xslt, to należy dla każdego przypadku użycia xslt do eksportu przygotować nowe wyszukiwanie zaawansowane.

 

Was this article helpful?
0 out Of 5 Stars
5 Stars 0%
4 Stars 0%
3 Stars 0%
2 Stars 0%
1 Stars 0%
How can we improve this article?
Please submit the reason for your vote so that we can improve the article.