Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table Excerpt
nameplugininfo

Plugin info
MaintenanceDepartmentDev CUF
LicTypePłatna
ArtifactIdsoap-datasources
TypWtyczkiWtyczka
PluginIdcom.suncode.plugin-soap-datasources
ShortDescriptionZa pomocą opisywanej wtyczki oraz komponentów operujących na źródłach danych można odczytywać jak i przekazywać dane z systemu PlusWorkflow do serwisów SOAP
 

Image Added

 

Polish
Info

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.

Info
titleInformacje o protokole SOAP

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

Info
titleInformacje o Xpath

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 chcemy uwzględnić przestrzeń nazw (namespace) w xPath, niezależnie od wartości zwracanej w odpowiedzi, używamy namespace'a "ns".

Code Block
languagexml
        <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:

Info
titlePrzykładowa konfiguracja

Przykładowa konfiguracja, wykorzystująca publiczne API: http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?op=FullCountryInfo

View file
nameds_xml_websamples.countryinfo.json
height250

Konfiguracja źródłaWynik wywołaniaOpis

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

Przykład:

Przykładowy Request message

Code Block
languagexml
themeEclipse
titleRequest message
linenumberstrue
<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.

Info
titleUWAGA

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



Code Block
languagexml
themeEclipse
titleRequest message po modyfikacji
linenumberstrue
<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

 

Code Block
languagexml
themeEclipse
titleRequest message po uzupełnieniu zmiennych tabelarycznych
linenumberstrue
<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

Code Block
languagexml
themeEclipse
titleRequest message przed wysłaniem
linenumberstrue
<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.

 

 

English

 

 

...