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 parametruDostępne od wersjiOpis parametruWymagalność
Autoryzacja1.0.0Schemat autoryzacji żądania. Jeśli żądany endpoint nie wymaga autoryzacji pole należy zostawić puste. Opis definiowania szablonów autoryzacji znajduje się TUTAJ.Opcjonalny
Endpoint URL1.0.0Adres URL endpointu, do którego wysłane zostanie żądanie.Wymagany
SOAPAction1.0.0Nazwa akcji soap dodawana w nagłówku żądania. Automatycznie uzupełniany parametr przy parsowaniu wsdl.Opcjonalny
Target namespace1.0.0

Logiczna przestrzeń nazw dla informacji o usłudze.

Wymagany
Request message1.0.0Zawartość wiadomości SOAP.Wymagany
Separator zmiennych tabelarycznych1.0.0Rozdziela wartości tekstowe wybranym znakiem, dla zmiennych tablicowych. 
Limit czasu na połączenie [s]1.0.7

Limit czasu, po jakim zostanie przerwana próba połączenia ze wskazanym WebService'm.

Wymagany
Limit czasu na odczyt danych [s]1.0.7Limit czasu, po jakim zostanie przerwana pobieranie danych z WebService'u.Wymagany
[Parametry wejściowe] Id1.0.0Id parametru wejściowegoWymagany
[Parametry wejściowe] Nazwa1.0.0Nazwa parametru wejściowego 
[Parametry wejściowe] Tag elementu1.0.0

Dany element zostanie skopiowany i uzupełniony kolejnymi wartościami z tabeli. Dla zmiennych tabelarycznych. W przypadku pustej tablicy zostanie pusty Tag bez elementów wewnętrznych.

UWAGA:

  • 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.
  • Aktualnie znajdowany jest tylko pierwszy pasujący element w dokumencie. Powtarzające się elementy powinny mieć inny tzw. namespace np ns1:param1 , ns2:param1
 
[Parametry wyjściowe] Id1.0.0Id parametru wyjściowegoWymagany
[Parametry wyjściowe] Nazwa1.0.0Nazwa parametru wyjściowegoWymagany
[Parametry wyjściowe] Typ1.0.0Typ parametru wyjściowego [string;integer;foat;boolean;date;datetime]Wymagany
[Parametry wyjściowe] Xpath1.0.0

Xpath wskazujący na dane, które zostaną pobrane z odpowiedzi service'u SOAP.

UWAGA: W przypadku gdy w xpath chcemy uwzględnić przestrzeń nazw (namespace), to niezależnie od wartości która wraca z odpowiedzi, używamy namespace "ns". Przykład poniżej:

        <ns2:GetAllDomainsResponse xmlns:ns2="http://services.plusmpm.com">
            <ns2:out>
                <ns2:string>SUNCODE2</ns2:string>
            </ns2:out>
        </ns2:GetAllDomainsResponse>

Poprawnym xPath dla wyciągnięcia domeny "SUNCODE2" będzie wyglądał następująco: //ns:string (pomimo tego że namespace to "ns2"). Jest to błąd wtyczki, który z uwagi na wsteczną kompatybilność nie może zostać poprawiony.

Wymagany
[Parametry wyjściowe] Nazwa elementu w XPath1.0.6

Nazwa elementu z podanej ścieżki XPath, z której zostanie pobrana wartość. W przypadku gdy wskazanego elementu nie ma, zostanie zwrócona wartość pusta.

Parametr nie może wskazywać na element, który zawiera w sobie kolejnego node'a z elementami.

 

 

Przykłady konfiguracji:

Konfiguracja źródłaWynik wywołaniaOpis

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

Przykład:

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ć ma sztywno 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 Po modyfikacjach powinniśmy dostać takiego xml.

Podczas modyfikacji Request Message upewnij się czy zmodyfikowana wersja zostanie poprawnie obsłużona przez dostawce WebSerwicu



<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> <!-- Ręcznie uzupełniona wartość-->
            <list1>
                <obj>
                    <paramTab1>{paramTab1}</paramTab1>
                    <paramTab2>{paramTab2}</paramTab2>
                    <paramTab3>{paramTab3}</paramTab3>
                </obj>
            </list1>
            <list2>
                	<paramTabA>{paramTabA}</paramTabA>
                	<paramTabB>{paramTabB}</paramTabB>
                	<paramTabC>22</paramTabC> <!-- Ręcznie uzupełniona wartość-->
            </list2>
        </data>
    </s11:Body>
</s11:Envelope>




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

idNazwaTag elementuUwagi
param1
param1
  
param2
param2
  
paramTab1
paramTab1
obj
Będzie kopiowany cały elemen (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
obj
Będzie kopiowany cały elemen (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 elemen (list2) 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 elemen (list2) 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> <!-- Ręcznie uzupełniona wartość-->
            <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>
                <paramTabA>123</paramTabA>
                <paramTabB>aaa</paramTabB>
                <paramTabC>22</paramTabC> <!-- Ręcznie uzupełniona wartość-->
			</list2>
 			<list2>
                <paramTabA>456</paramTabA>
                <paramTabB>bbb</paramTabB>
                <paramTabC>22</paramTabC> <!-- Ręcznie uzupełniona wartość-->
            </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> <!-- Ręcznie uzupełniona wartość-->
            <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>
                <paramTabA>123</paramTabA>
                <paramTabB>aaa</paramTabB>
                <paramTabC>22</paramTabC> <!-- Ręcznie uzupełniona wartość-->
			</list2> 
			<list2>
                <paramTabA>456</paramTabA>
                <paramTabB>bbb</paramTabB>
                <paramTabC>22</paramTabC> <!-- Ręcznie uzupełniona wartość-->
            </list2>
        </data>
    </s11:Body>
</s11:Envelope>

I taki Request message jest wysyłany do webserwisu.