Instrukcja tworzenia źródeł danych w systemie - https://docs.plusworkflow.pl/confluence/pages/viewpage.action?pageId=13272439

Wtyczka zawiera implementację źródeł danych operujących na protokole SOAP.

Za pomocą opisywanych źródeł danych można odczytywać i przekazywać dane pomiędzy systemem PlusWorkflow a zewnętrznymi webservice'ami SOAP.

Źródło umożliwia parsowanie plików WSDL. Zostało to opisane tutaj.

Przed przystąpieniem do konfiguracji źródła wymagana jest podstawowa wiedza o protokole SOAP. Możesz ją znaleźć np. tutaj - https://www.tutorialspoint.com/soap/index.htm

Przed przystąpieniem do konfiguracji źródła wymagana jest podstawowa znajomość Xpath. Możesz ją znaleźć np. tutaj - https://www.tutorialspoint.com/xpath/index.htm

Walidator/Generator (przytrzymaj CTRL i najedz kursorem na interesujący Cię element) online: http://xpather.com/

Opis konfiguracji:

Nazwa parametruOpis parametruWymagalność
AutoryzacjaSchemat autoryzacji żądania. Jeśli żądany endpoint nie wymaga autoryzacji pole należy zostawić puste. Opis definiowania szablonów autoryzacji znajduje się TUTAJ.Opcjonalny
Endpoint URLAdres URL endpointu, do którego wysłane zostanie żądanie.Wymagany
SOAPActionNazwa akcji soap dodawana w nagłówku żądania. Automatycznie uzupełniany parametr przy parsowaniu wsdl.Opcjonalny
Target namespace

Logiczna przestrzeń nazw dla informacji o usłudze.

Wymagany
Request messageZawartość wiadomości SOAP.Wymagany
Separator zmiennych tabelarycznychRozdziela wartości tekstowe wybranym znakiem, dla zmiennych tablicowych. 
[Parametry wejściowe] IdId parametru wejściowegoWymagany
[Parametry wejściowe] NazwaNazwa parametru wejściowego 
[Parametry wejściowe] Tag elementu tabelarycznego (listy)

Pierwszy element zostanie skopiowany tyle  ile maksymalna długość zmiennych tabelarycznych dla tego tagu. Pozostawienie pola pustego sugeruje, że to NIE jest zmienna tabelaryczna w żądaniu SOAP

W celu skonfigurowania obiektów tablicowych, upewnij się czy RequestMessage posiada schemat jak niżej. Obiekt tablicowy musi posiadać obiekt agregujący linie tablicowe. W poniższym przypadku Tagiem elementu tabelarycznego jest "lines", powielone zostaną elementy item (np. <lines><item>...</item><item>...<item></lines>)

...
<lines>
   <item>
       <column1>?</column1>
       <column2>?</column2>
       <column3>?</column3>
    </item>
</lines
...


Wszystkie parametry oznaczone tym samym tagiem muszą mieć tą samą długość. Gdy jakiś parametr ma mieć stałą wartość i powtarzać się dla każdego wiersza to wystarczy usunąć tag dla tego parametru.

 
[Parametry wyjściowe] IdId parametru wyjściowegoWymagany
[Parametry wyjściowe] NazwaNazwa parametru wyjściowegoWymagany
[Parametry wyjściowe] TypTyp parametru wyjściowego [string;integer;foat;boolean;date;datetime]Wymagany
[Parametry wyjściowe] XpathXpath wskazujący na dane, które zostaną pobrane z odpowiedzi service'u SOAP.Wymagany

Przykłady konfiguracji:

Konfiguracja źródłaWynik wywołaniaOpis

Źródło wysyła zapytanie do systemu PlusWorkflow o istniejące domeny.

 

Przykładowy Request message

<s11:Envelope xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/">
    <s11:Header></s11:Header>
    <s11:Body>
        <data>
            <param1>{param1}</param1>
            <param2>{param2}</param2>
            <param3>{param3}</param3>
            <list1>
                <obj>
                    <paramTab1>{paramTab1}</paramTab1>
                    <paramTab2>{paramTab2}</paramTab2>
                    <paramTab3>{paramTab3}</paramTab3>
                </obj>
            </list1>
            <list2>
                <paramTabA>{paramTabA}</paramTabA>
                <paramTabB>{paramTabB}</paramTabB>
                <paramTabC>{paramTabC}</paramTabC>
            </list2>
        </data>
    </s11:Body>
</s11:Envelope>




Założenia
Dla tego xmla chcemy przesłać wartości nagłówkowe param1 , param2, param3 oraz wartości z tablicy 1 dla parametrów paramTab1, paramTab2, paramTab3 oraz dla tablicy 2 : paramTabA, paramTabB ,paramTabC. Przy czym parametry param3, paramTabC mają mieć na sztywną wartość "11" oraz "22" a paramTab3 ma mieć zawsze taką samą wartość w każdym wierszu pobraną z procesu.. W tym celu możemy zmodyfikować odpowiednio tego xmla o sztywne parametry oraz grupę parametry z elementu list2 zgrupować w jeden obiekt (który odpowiada wierszowi który będzie powielany). Po modyfikacjach powinniśmy dostać takiego xml.



<s11:Envelope xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/">
    <s11:Header></s11:Header>
    <s11:Body>
        <data>
            <param1>{param1}</param1>
            <param2>{param2}</param2>
            <param3>11</param3>
            <list1>
                <obj>
                    <paramTab1>{paramTab1}</paramTab1>
                    <paramTab2>{paramTab2}</paramTab2>
                    <paramTab3>{paramTab3}</paramTab3>
                </obj>
            </list1>
            <list2>
				<item>
                	<paramTabA>{paramTabA}</paramTabA>
                	<paramTabB>{paramTabB}</paramTabB>
                	<paramTabC>22</paramTabC>
				</item>
            </list2>
        </data>
    </s11:Body>
</s11:Envelope>




Dla takiego XML konfigurujemy parametry wejściowe źródła danych:

idNazwaTag elementu tabelarycznego (listyUwagi
param1
param1
  
param2
param2
  
paramTab1
paramTab1
list1
Będzie kopiowany cały pierwszy element z listy (obj) i wklejany tyle razy ile jest wartości w tablicy, przy czym każdy element będzie miał tylko wartość z jednego wiersza
paramTab2
paramTab2
list1
Będzie kopiowany cały pierwszy element z listy (obj) i wklejany tyle razy ile jest wartości w tablicy, przy czym każdy element będzie miał tylko wartość z jednego wiersza
paramTab3
paramTab3
  
paramTabA
paramTabA
list2
Będzie kopiowany cały pierwszy element z listy (item) i wklejany tyle razy ile jest wartości w tablicy, przy czym każdy element będzie miał tylko wartość z jednego wiersza
paramTabB
paramTabB
list2
Będzie kopiowany cały pierwszy element z listy (item) i wklejany tyle razy ile jest wartości w tablicy, przy czym każdy element będzie miał tylko wartość z jednego wiersza


oraz ustawiamy parametr Separator zmiennych tabelarycznych na ";" (średnik)

Teraz gdy takie źródło uruchomimy z następującymi parametrami:

idWartość
param1
AAA
param2
BBB
paramTab1
Ala;ma;kota
paramTab2
kot;ma;Ale
paramTab3
Stała wartość
paramTabA
123;456
paramTabB
aaa;bbb

Najpierw zostaną przetworzone zmienne tabelaryczne, więc otrzymamy takiego XML'a

 

<s11:Envelope xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/">
    <s11:Header></s11:Header>
    <s11:Body>
        <data>
            <param1>{param1}</param1>
            <param2>{param2}</param2>
            <param3>11</param3>
            <list1>
                <obj>
                    <paramTab1>Ala</paramTab1>
                    <paramTab2>kot</paramTab2>
                    <paramTab3>{paramTab3}</paramTab3>
                </obj>
  				<obj>
                    <paramTab1>ma</paramTab1>
                    <paramTab2>ma</paramTab2>
                    <paramTab3>{paramTab3}</paramTab3>
                </obj>
 				 <obj>
                    <paramTab1>kota</paramTab1>
                    <paramTab2>Ale</paramTab2>
                    <paramTab3>{paramTab3}</paramTab3>
                </obj>
            </list1>
            <list2>
				<item>
                	<paramTabA>123</paramTabA>
                	<paramTabB>aaa</paramTabB>
                	<paramTabC>22</paramTabC>
				</item>
				<item>
                	<paramTabA>456</paramTabA>
                	<paramTabB>bbb</paramTabB>
                	<paramTabC>22</paramTabC>
				</item>
            </list2>
        </data>
    </s11:Body>
</s11:Envelope>

Potem dla takiego XML są podstawiane wartości NIE tabelaryczne (bez wpisanego tagu tabelarycznego). Otrzymany XML po kolejnej operacji wygląda nastepująco

<s11:Envelope xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/">
    <s11:Header></s11:Header>
    <s11:Body>
        <data>
            <param1>AAA</param1>
            <param2>BBB</param2>
            <param3>11</param3>
            <list1>
                <obj>
                    <paramTab1>Ala</paramTab1>
                    <paramTab2>kot</paramTab2>
                    <paramTab3>Stała wartość</paramTab3>
                </obj>
  				<obj>
                    <paramTab1>ma</paramTab1>
                    <paramTab2>ma</paramTab2>
                    <paramTab3>Stała wartość</paramTab3>
                </obj>
 				 <obj>
                    <paramTab1>kota</paramTab1>
                    <paramTab2>Ale</paramTab2>
                    <paramTab3>Stała wartość</paramTab3>
                </obj>
            </list1>
            <list2>
				<item>
                	<paramTabA>123</paramTabA>
                	<paramTabB>aaa</paramTabB>
                	<paramTabC>22</paramTabC>
				</item>
				<item>
                	<paramTabA>456</paramTabA>
                	<paramTabB>bbb</paramTabB>
                	<paramTabC>22</paramTabC>
				</item>
            </list2>
        </data>
    </s11:Body>
</s11:Envelope>

I taki Request message jest wysyłany do webserwisu.