2007.01_Business Process Execution Language_[Aplikacje Biznesowe].pdf
(
500 KB
)
Pobierz
441066273 UNPDF
Aplikacje
biznesowe
Piotr Skrobisz
Business Process
Execution Language
Materiały do artykułu
zamieszczone zostały
na płycie CD 1
i wymagania klientów, wymuszają na przed-
siębiorstwach ciągłe udoskonalanie i zmia-
nę procesów biznesowych. Powoduje to dodawanie
coraz to nowszych aplikacji i rozbudowę istniejących
systemów. W irmach o niskiej komputeryzacji budo-
wa nowych systemów wspierających jej działalność,
jak CRM (
Customer Relationship Management
), czy
ERP (
Enterprise Resource Planning
), przynosi duży
zwrot z inwestycji. Jednak przy dużej liczbie wdro-
żonych aplikacji, zwrot z coraz to nowszych projek-
tów maleje. Szefowie działów IT muszą borykać się
z napiętymi planami, ograniczonymi budżetami, ro-
snącą złożonością systemów informatycznych, ryzy-
kiem ich rozbudowy i coraz trudniejszą replikacją da-
nych pomiędzy niekompatybilnymi systemami.
Odpowiedzią na te problemy jest architektura zo-
rientowana na serwisy (ang.
Service Oriented Archi-
tecture
), w skrócie SOA. Dzięki niej możliwe jest bu-
dowanie nowych wielofunkcyjnych aplikacji poprzez
agregację funkcjonalności już istniejących systemów.
Odbywa się to w sposób 2-fazowy. Najpierw udostęp-
niane są serwisy, które eksponują usługi już istnieją-
cych systemów. Następnie wiele serwisów jest łączo-
nych i komponowanych w jeden proces biznesowy.
Przykłady zastosowań
Oracle BPEL Process Manager’a
• State Children’s Health Insurance Program (SCHIP).
Amerykańska irma Policy Studies, Inc. wykorzystała
technologię BPEL do budowy systemu typu worklow,
wspierającego przetwarzania wniosków rejestracji do
amerykańskiego programu ubezpieczeń SCHIP;
• Dostawca elektryczności – integracja aplikacji w od-
działach. Firma WIPRO użyła technologii BPEL do
usprawnienia komunikacji pomiędzy oddziałami jed-
nego z dużych dostawców elektryczności. Każdy z lo-
kalnych oddziałów posiadał swoją własną aplikację do
obsługi procesów biznesowych. Tak duża heteroge-
niczność wymusiła zastosowanie architektury SOA;
• Corrections Corporation Of America (CCA) – inte-
gracja aplikacji dla systemu więziennictwa. BPEL
został wykorzystany przez irmę BIAS do zaimple-
mentowania wymiany danych pomiędzy systemami
dwóch amerykańskich irm z sektora więziennictwa
– CCA i Hamilton County Jail Systems (CJIS);
• Health Canada – kontrola wydawania i niszcze-
nia leków. W Kanadzie BPEL znalazł zastosowa-
nie przy automatyzacji procesu kontroli wydawania
i niszczenia leków. Budowa systemu wymagała in-
tegracji z wieloma państwowymi wydziałami i agen-
cjami oraz instytucjami międzynarodowymi;
• Lufthansa Flight Training (LFT) – system CRM.
Spółka LFT, należąca do Lufthansa AG, wykorzy-
stała BPEL do budowy łatwo modyikowalnego sys-
temu CRM zintegrowanego z SAP Financials i inny-
mi wykorzystywanymi w irmie aplikacjami;
• Washington Group International (WGI) – system
ERP. WGI dostarcza usług z najróżniejszych sek-
torów przemysłu, jak budownictwo, górnictwo,
transport, czy energetyka. Działalność takiej irmy
wspierana jest przez ogromną liczbę najróżniejsze-
go oprogramowania i serwerów. Przy tak heteroge-
nicznym środowisku BPEL okazał się idealną tech-
nologią do budowy systemu ERP.
SOA i BPEL
SOA było rozwiązaniem znanym już w ubiegłym dzie-
sięcioleciu. Jednakże rynek cierpiał na brak ustanda-
ryzowanego sposobu integracji systemów. Obecnie
coraz większą popularnością cieszy się
Business Pro-
cess Execution Language for Web Services
(BPEL lub
BPEL4WS). Jest to język, który służy do deiniowania
i wykonywania procesów biznesowych z wykorzysta-
niem web serwisów, za pomocą których wyekspono-
wane są serwisy podsystemów. Budowa procesu biz-
nesowego polega na łączeniu i koordynowaniu wielu
web serwisów w jednym przepływie.
BPEL łączy cechy dwóch starszych języków
służących do opisu przepływów pracy (ang.
work-
low
). Pierwszym z nich jest WSFL (
Web Service
Flow Language
), stworzony przez IBM i oparty na
teorii grafów skierowanych. Drugim jest dziecko Mi-
crosoftu, XLANG, który wykorzystywał ideę sche-
matów blokowych.
Pierwsza wersja BPEL-a pojawiła się w sierpniu
2002 roku. Przyciągnęła ona uwagę wielu irm, któ-
re przyłączyły się do współpracy. Zaowocowało to
w marcu 2003 roku stworzeniem wersji 1.1, któ-
ra miesiąc później została przekazana do organiza-
cji standaryzacyjnej OASIS (
Organization for the Ad-
vancement of Structured Information Standards
).
Autor pracuje w irmie Oracle Corporation w dziale Mobi-
le, Wireless and Voice Solutions, gdzie zajmuje się pro-
jektowaniem systemów informatycznych. Jest również
doktorantem w Instytucie Badań Systemowych PAN.
Kontakt z autorem:
piotr.skrobisz@oracle.com
Podstawy języka
Deinicja procesu biznesowego w języku BPEL pole-
ga na określeniu porządku wywoływanych web ser-
wisów. Czy mają być one wywoływane sekwencyj-
36
www.sdjournal.org Software Developer’s Journal 1/2007
N
ieustannie zmieniające się warunki rynkowe
Business Process Execution Language
nie, czy też równolegle. Możliwe jest określenie operacji warun-
kowych, pętli, czy też obsługa wyjątków. Język pozwala na de-
iniowanie zmiennych, kopiowanie i przypisywanie ich wartości.
Dzięki temu możliwe jest przekazywanie danych pomiędzy web
serwisami i gromadzenie ich w trakcie realizacji procesu.
Składnia języka opiera się na XML-u, a z racji tego, że pro-
ces operuje na web serwisach, wykorzystywane są lub mogą
być między innymi takie standardy, jak SOAP, WSDL, UDDI,
WS-Addressing, WS-ReliableMessaging, WS-Security, WS-
Coordination, WS-Transaction. Należy zauważyć, że proces
BPEL-owy sam w sobie jest web serwisem i może być wyko-
rzystywany przez inne procesy, jako podproces. Proces biz-
nesowy składa się z czynności. Do podstawowych należą na-
stępujące elementy:
•
<pick>
- umożliwia wybór jednej z wielu alternatywnych
ścieżek na podstawie zdeiniowanych zdarzeń;
•
<catch>
i
<catchAll>
- pozwalają na przechwytywanie i ob-
sługę wyjątków podobnie, jak w Javie w przypadku kon-
strukcji try-catch.
Do bardzo ważnych elementów języka należą dodatkowo:
•
<scope>
- pozwala na wyodrębnianie logicznych bloków
w całym procesie. Taki blok może posiadać lokalne zmien-
ne niewidoczne poza nim, obsługę wyjątków dla czynno-
ści w nim zawartych oraz obsługę rekompensacji w przy-
padku wycofywania transakcji;
•
<partnerLink>
- wskaźnik na wykorzystywane web serwisy;
•
<variable>
- deinicja zmiennej.
•
<invoke>
- wywołanie web serwisu;
•
<receive>
- oczekiwanie na wywołanie procesu przez
klienta i odebranie od niego wiadomości;
•
<reply>
- zwrócenie odpowiedzi w przypadku synchronicz-
nego wywołania procesu;
•
<assign>
- operacje na wartościach zmiennych;
•
<wait>
- uśpienie procesu, na określony czas;
•
<throw>
- wyrzucenie wyjątku, analogicznie jak w Javie;
•
<terminate>
- zakończenie procesu na przykład w wyniku
błędu lub awarii;
•
<compensete>
- wywołanie czynności rekompensujących
(ang.
compansation
) w przypadku potrzeby wycofania
transakcji.
Budowa przykładowego
procesu biznesowego
Najlepszym sposobem nauki jest praktyka, dlatego w niniejszym
artykule zbudujemy prosty proces BPEL-owy do obsługi zamó-
wień książek. Aplikacja klienta (dalej dla uproszczenia nazywana
klientem) przy wywołaniu procesu będzie przekazywać informa-
cje takie jak: tytuł książki, autorzy, ilość egzemplarzy, numer kar-
ty kredytowej, datę jej ważności, imię i nazwisko zamawiające-
go oraz adres, dokąd książka ma być wysłana. Zadaniem nasze-
go systemu, będzie weryikacja podanej karty kredytowej, odpy-
tanie równolegle dwóch księgarni o cenę danej książki, wybra-
nie księgarni, gdzie cena książki jest najniższa, a następnie jej
zakup. Na końcu proces przekaże żądanie dostarczenia pacz-
ki do podsystemu, zajmującego się dostawą. Będzie go symulo-
wał inny proces BPEL-owy. Do budowy naszego systemu wyko-
rzystamy wcześniej przygotowane web serwisy, symulujące sys-
temy zewnętrzne, z którymi się zintegrujemy (operator kart kre-
dytowych oraz dwie księgarnie). Rysunek 1 przedstawia sche-
mat procesu, którego budową się zajmiemy. Do konstrukcji na-
szego procesu wykorzystamy Oracle JDeveloper 10g w wersji
10.1.3.1.0, a do jego uruchomienia Oracle BPEL Process Mana-
ger 10.1.3.1.0. Oba programy można ściągnąć za darmo z nastę-
pującej strony:
http://www.oracle.com/technology/software/tech/
Analogicznie, jak w tradycyjnych językach programowania,
tak również w BPEL-u nie obyłoby się bez elementów od-
powiedzialnych za kontrolę przepływu. Do dyspozycji mamy
między innymi:
•
<switch> -
deiniuje instrukcje warunkowe;
•
<while>
- pętla;
•
<sequence>
- oznacza, że zawarty w niej zbiór czynności
ma być wykonany sekwencyjnie;
•
<low>
- pozwala na wykonywanie czynności równolegle;
�����������������������������������
�����
���������
�����������
���������
������
����������
���������
������
�������
������������
�������������
���
�������
�������������
����������
�����
���������
�������
�����������
����
������
���������
�������
������
���������
�����
������
�������
������������
�������������
���
�������
�������������
Rysunek 1.
Schemat procesu do obsługi zamówień książek
Software Developer’s Journal 1/2007
www.sdjournal.org
37
Aplikacje
biznesowe
Rysunek 2.
Nowy asynchroniczny proces BPEL-owy
zwisko właściciela. W przypadku problemów z kartą wy-
rzucany jest wyjątek:
void checkCreditCard(String cardNo, Date validTo,
String name)
throws CreditCardException
•
BookStore1WS
– usługa pierwszej księgarni. Posiada dwie
metody. Pierwsza zwraca cenę książki. Jako parametry
wejściowe przyjmowany jest tytuł i autorzy. Druga metoda
służy do zakupu książki. Na wejściu przyjmuje tytuł, auto-
rów, numer karty, datę jej ważności, imię i nazwisko zama-
wiającego oraz ilość egzemplarzy:
double requestForQuote(String title, String authors)
int orderBook(String title, String authors,
String creditCard,
Date validTo,String name, int quantity)
•
BookStore2WS
– usługa drugiej księgarni. Posiada analo-
giczne metody. Różnią się one jedynie nazwami dla zróż-
nicowania naszego przypadku:
double RFQ(String title, String authors)
int buyBook(String title, String authors, String creditCard,
Date validTo, String name, int quantity)
webservices/index.html.
Instalacja nie powinna nastręczyć więk-
szych trudności. W przypadku JDeveloper’a sprowadza się do
jego rozpakowania. BPEL PM instaluje się przez uruchomienie
programu
setup.exe
. Do naszych celów wystarczy wybranie opcji
deweloperskiej. W dalszej części artykułu założymy, że został on
zainstalowany na domyślnym porcie 9700. W pierwszej kolejno-
ści przystąpimy do zainstalowania wyżej wspomnianych web
serwisów, a następnie zbudujemy cały proces.
Opis tworzenia web serwisów wykracza poza ten artykuł,
dlatego wymagana jest podstawowa znajomość tej techno-
logii. Czytelnik może również skorzystać z gotowych źródeł
umieszczonych na płycie dołączonej do magazynu.
Jednym ze sposobów umieszczenia web serwisów w konte-
nerze J2EE (wykorzystamy kontener OC4J dostarczany z Orac-
le BPEL PM) jest wykorzystanie JDevelopera. W tym celu wybie-
ramy z
File->New->General->Applications->Application
. Po po-
daniu nazwy i katalogu w oknie dialogowym klikamy na przycisk
Ok
. W następnym oknie rezygnujemy ze stworzenia nowego pro-
jektu. Do wybranego katalogu kopiujemy z płyty cały projekt za-
wierający web serwisy – katalog
ExternalWS
. Dodajemy go ko-
rzystając z menu
File->Open
i wybierając plik
ExternalWS.jpr
.
Przygotowanie web serwisów
Zgodnie z wcześniejszą deklaracją przy budowie naszego
procesu biznesowego skorzystamy z trzech web serwisów.
Do celów edukacyjnych wystarczy by były to jedynie proste
klasy Javy symulujące systemy zewnętrzne. Będą one udo-
stępniały następujące funkcjonalności:
•
CreditCardCheckWS
– posiada tylko jedną metodę do
weryikacji karty kredytowej. Jako parametry wejściowe
przyjmuje numer karty, datę jej ważności oraz imię i na-
Listing 1.
Nowy asynchroniczny proces BPEL-owy
<
?xml version =
"1.0"
encoding =
"UTF-8"
?
>
<
process name=
"OrderBook"
targetNamespace=
"http://xmlns.oracle.com/OrderBook"
xmlns=
"http://schemas.xmlsoap.org/ws/2003/03/
business-process/"
xmlns:client=
"http://xmlns.oracle.com/OrderBook"
xmlns:ora=
"http://schemas.oracle.com/xpath/extension"
xmlns:orcl=
"http://www.oracle.com/XSL/Transform/java/
oracle.tip.pc.services.functions.ExtFunc"
xmlns:xp20=
"http://www.oracle.com/XSL/Transform/java/
oracle.tip.pc.services.functions.Xpath20"
xmlns:ldap=
"http://schemas.oracle.com/xpath/
extension/ldap"
xmlns:bpelx=
"http://schemas.oracle.com/bpel/extension"
xmlns:bpws=
"http://schemas.xmlsoap.org/ws/
2003/03/business-process/"
>
<
partnerLinks
>
<
partnerLink name=
"client"
partnerLinkType=
"client:OrderBook"
myRole=
"OrderBookProvider"
partnerRole=
"OrderBookRequester"
/
>
<
/partnerLinks
>
<
variables
>
<
variable name=
"inputVariable"
messageType=
"client:OrderBookRequestMessage"
/
>
<
variable name=
"outputVariable"
messageType=
"client:OrderBookResponseMessage"
/
>
<
/variables
>
<
sequence name=
"main"
>
<
receive name=
"receiveInput"
partnerLink=
"client"
portType=
"client:OrderBook"
operation=
"initiate"
variable=
"inputVariable"
createInstance=
"yes"
/
>
<
invoke name=
"callbackClient"
partnerLink=
"client"
portType=
"client:OrderBookCallback"
operation=
"onResult"
inputVariable=
"outputVariable"
/
>
<
/sequence
>
<
/process
>
38
www.sdjournal.org Software Developer’s Journal 1/2007
Business Process Execution Language
W kolejnym kroku tworzymy połączenie z kontenerem
J2EE. Klikamy prawym klawiszem myszy w zakładce
Connec-
tions
na folderze
Application
Server
i wybieramy
New Appli-
cation Server Connection
. Jako typ serwera aplikacji pozosta-
wiamy opcję Autonomiczny OC4J 10g 10.1.3.
W celu umieszczenia web serwisów należy w zakład-
ce
Applications Navigator
kliknąć prawym klawiszem myszy
na pliku
WebServices.deploy
i wybrać
Deploy
To oraz nazwę
wcześniej zdeiniowanego połączenia. Jeśli wszystko się po-
wiodło, to web serwisy powinny być dostępne z poziomu prze-
glądarki, a w szczególności ich opisy WSDL:
•
http://localhost:9700/external/CreditCardCheckWSSoapHt-
tpPort?wsdl;
•
http://localhost:9700/external/BookStore1WSSoapHttpPort
?wsdl;
•
http://localhost:9700/external/BookStore2WSSoapHttpPor-
t?wsdl.
Rysunek 3.
Wywołanie web serwisu z obsługą wyjątku
Oczywiście możliwe jest umieszczenie ich na dowolnym ser-
werze aplikacyjnym, jak również stworzenie własnych web
serwisów, niekoniecznie zaimplementowanych w Javie, do
czego serdecznie zachęcam.
wybieramy F
ile->New->General->Projects->BPEL Process Pro-
ject
. Podajemy nazwę procesu, np.
OrderBook
i jako typ proce-
su pozostawiamy
Asynchronous BPEL Process
. Zatwierdzamy
wszystko naciskając przycisk
Finish
. Generator stworzył nowy
proces, który w zakładce
Diagram
powinien wyglądać tak, jak na
Rysunku 2. Zwróćmy uwagę na pliki, jakie wygenerował kreator:
Stworzenie nowego projektu BPEL
Mając już gotowe web serwisy możemy przystąpić do ich inte-
gracji budując asynchroniczny proces. Do tego celu użyjemy kre-
atora, który wygeneruje cały szkielet projektu BPEL-owego: plik
źródłowy procesu, interfejs WSDL, deskryptor oraz skrypt Ant-
owy do kompilacji i umieszczania procesu na serwerze. Z menu
•
OrderBook.bpel
– źródło procesu;
•
OrderBook.wsdl
– opis interfejsu procesu, parametry wej-
ściowe i wyjściowe. Dzięki temu możliwe jest wywoływa-
nie procesu z poziomu innych procesów i aplikacji;
•
OrderBook.xsd
– plik XML
Schema
, który deiniuje dane
wejściowe i wyjściowe dla procesu. Jest on importowany
w
OrderBook.wsdl
;
•
build.xml
i
build.properties
– pliki Ant-owe do kompilacji
i umieszczania procesu na serwerze.
Listing 2.
Deinicja parametrów wejściowych i
wyjściowych procesu
<
schema attributeFormDefault=
"unqualiied"
elementFormDefault=
"qualiied"
targetNamespace=
"http://xmlns.oracle.com/OrderBook"
xmlns=
"http://www.w3.org/2001/XMLSchema"
>
<
element name=
"OrderBookProcessRequest"
>
<
complexType
>
<
sequence
>
<
element name=
"title"
type=
"string"
/
>
<
element name=
"authors"
type=
"string"
/
>
<
element name=
"quantity"
type=
"int"
/
>
<
element name=
"creditCardNo"
type=
"string"
/
>
<
element name=
"validTo"
type=
"dateTime"
/
>
<
element name=
"name"
type=
"string"
/
>
<
element name=
"address"
type=
"string"
/
>
<
/sequence
>
<
/complexType
>
<
/element
>
<
element name=
"OrderBookProcessResponse"
>
<
complexType
>
<
sequence
>
<
element name=
"result"
type=
"string"
/
>
<
/sequence
>
<
/complexType
>
<
/element
>
<
/schema
>
Jeśli wybierzemy plik
OrderBook.bpel
i przejdziemy do zakład-
ki
Source
, będziemy mieli możliwość zobaczenia źródła procesu.
Powinien być podobny do tego z Listingu 1. Na razie proces nic
nie robi, poza odebraniem danych wejściowych od klienta (
<rece-
ive>
), który go wywołuje, oraz wywołaniem klienta i przekazaniu
mu odpowiedzi (
<invoke>
). Te dwa wywołania są korelowane auto-
matycznie dzięki wykorzystaniu standardu WS-
Addressing
. Klient
zdeiniowany jest w elemencie
<partnerLink>
w sekcji
<partner-
Links>
. Tu też będą pojawiać się połączenia do wykorzystywa-
nych web serwisów. W elemencie
<variables>
umieszczone są
dwie zmienne, przechowujące odpowiednio dane wejściowe i wyj-
ściowe. Przed przystąpieniem do komponowania procesu musi-
my określić jakie dane będzie on otrzymywał i zwracał. Dla nasze-
go prostego przykładu, jako parametry wejściowe wystarczą: tytuł,
autorzy, ilość egzemplarzy, numer karty kredytowej, data jej waż-
ności, imię i nazwisko, adres. Po zakończeniu proces będzie zwra-
cał
string
z informacją, że książka została wysłana. Informacje te
deiniuje się w pliku XML Schema, w naszym przypadku w
Order-
Book.xsd
. Należy go zmienić tak, jak pokazano to na Listingu 2.
Wywołanie web serwisu
Zgodnie z Rysunkiem 1 pierwszym krokiem w naszym procesie
jest weryikacja karty kredytowej. Sprowadza się on do wywoła-
Software Developer’s Journal 1/2007
www.sdjournal.org
39
Aplikacje
biznesowe
Te same kroki powtarzamy dla daty ważności oraz imienia
i nazwiska. W ten sposób zdeiniowaliśmy wywołanie web ser-
wisu weryikującego kartę kredytową, a tym samym skonstru-
owaliśmy pierwszy krok naszego procesu biznesowego. Efekt
powinien być zbliżony do przedstawionego na Listingu 3.
Rysunek 4.
Test procesu BPEL-owego w konsoli
administracyjnej
Obsługa wyjątków
Wywoływany web serwis może wyrzucać wyjątki. Podob-
nie do języków programowania takich jak Java, BPEL umoż-
liwia ich obsługę. W naszym przypadku metoda
checkCre-
ditCard
, może wyrzucić wyjątek
CreditCardException
przy
braku pomyślnej weryikacji karty. Gdy taka sytuacja na-
stąpi zakończymy cały proces biznesowy. Obsługę wyjąt-
ków można dodawać dla elementów
Scope
. W tym celu wy-
bieramy w nim ikonkę
Add
Catch
Branch
. Powoduje to poja-
wienie się elementu
<faultHandlers>
. Klikamy na jego repre-
zentację graiczną i w oknie dialogowym naciskamy ikonkę
Browse Faults
. Wybieramy
Partner Links->CreditCardChec-
kWS->Imported WSDL->CreditCardCheckWSSoapHttpPort-
>CreditCardException.
Do zakończenia procesu służy komponent
Terminate
. Wy-
starczy go przeciągnąć na obszar elementu
<faultHandlers>
.
Po tych operacjach nasz proces powinien przypominać ten
przedstawiony na Rysunku 3.
nia web serwisu
CreditCardCheckWS
. Całe wywołanie umieści-
my w nowym elemencie
<scope>
, co pozwoli na logiczne wyod-
rębnienie tego kroku, jak również późniejszą obsługę wyjątków.
W tym celu z zakładki
Component
Palette
przeciągamy kompo-
nent
Scope
i umieszczamy go pomiędzy już istniejącymi czynno-
ściami
receiveInput
i
callbackClient
. Rozwijamy komponent
Sco-
pe
naciskając znaczek plusa. Teraz możemy w nim umieszczać
inne elementy. Przed deiniowaniem wywołania web serwisu mu-
simy stworzyć dla niego wskaźnik. Robi się to przez przeciągnię-
cie komponentu
PartnerLink
na pole
Services
. W oknie dialogo-
wym podajemy lokalizację opisu WSDL web serwisu (np.
http://
localhost:9700/external/CreditCardCheckWSSoapHttpPort?ws
dl
) i naciskamy ikonkę
Parse
WSDL
File
. Zatwierdzamy próbę
stworzenia pliku WSDL z opisem typu Partner Link’a. Jako
Part-
ner Role
wybieramy z listy jedyną opcję,
CreditCardCheckWS_
Role
. Zamykamy okno naciskając przycisk
Ok
.
Teraz jesteśmy gotowi do zdeiniowania wywołania web ser-
wisu. W tym celu przeciągamy komponent
Invoke
i umieszczamy
go w elemencie
Scope
. Następnie przeciągamy ikonkę strzałki
do uprzednio stworzonego ParnterLink’a. W oknie dialogowym
zmieniamy nazwę i upewniamy się, że wybraną operacją web
serwisu jest ta, która służy do weryikacji karty. Następnie two-
rzymy zmienną wejściową i wyjściową, klikając na ikonki
Auto-
matically Create Input Variable
. Możemy zaznaczyć opcje
Local
Variable
, aby zmienne były widoczne jedynie w zakresie elemen-
tu
Scope
. Zatwierdzamy zmiany, naciskając przycisk
Ok
. Do tak
zdeiniowanego wywołania musimy jeszcze przekazać wartości
– numer karty kredytowej, datę jej ważności oraz imię i nazwi-
sko. Przekopiujemy je ze zmiennej wejściowej procesu do zmien-
nej wejściowej elementu
Invoke
. Dokonuje się tego poprzez uży-
cie komponentu
Assign
. Umieszczamy go przed elementem
In-
voke
. Klikamy na niego dwa razy. W oknie dialogowym wybiera-
my opcję
Create->Copy operation
. W części
From
wybieramy ze
zmiennej wejściowej procesu numer karty. Powinniśmy uzyskać
wyrażenie XPath (wyświetlane na dole okna) podobne do tego:
Listing 3.
Wywołanie web serwisu CreditCardCheckWS
<
scope name=
"checkingCreditCard"
><
variables
>
<
variable name=
"checkCreditCard_Input"
messageType=
"ns1:CreditCardCheckWS_checkCreditCard"
/
>
<
variable name=
"checkCreditCard_Output"
messageType=
"ns1:CreditCardCheckWS_checkCreditCardResponse"
/
>
<
/variables
><
sequence name=
"Sequence_1"
>
<
assign name=
"Assign_CardNo"
><
copy
>
<
from variable=
"inputVariable"
part=
"payload"
query=
"/client:OrderBookProcessRequest/
client:creditCardNo"
/
>
<
to variable=
"checkCreditCard_Input"
part=
"parameters"
query=
"/ns2:checkCreditCardElement/ns2:cardNo"
/
>
<
/copy
><
copy
>
<
from variable=
"inputVariable"
part=
"payload"
query=
"/client:OrderBookProcessRequest/client:validTo"
/
>
<
to variable=
"checkCreditCard_Input"
part=
"parameters"
query=
"/ns2:checkCreditCardElement/ns2:validTo"
/
>
<
/copy
><
copy
>
<
from variable=
"inputVariable"
part=
"payload"
query=
"/client:OrderBookProcessRequest/client:name"
/
>
<
to variable=
"checkCreditCard_Input"
part=
"parameters"
query=
"/ns2:checkCreditCardElement/ns2:name"
/
>
<
/copy
><
/assign
>
<
invoke name=
"checkCreditCard"
partnerLink=
"CreditCardCheckWS"
portType=
"ns1:CreditCardCheckWS"
operation=
"checkCreditCard"
inputVariable=
"checkCreditCard_Input"
outputVariable=
"checkCreditCard_Output"
/
>
<
/sequence
>
<
/scope
>
/client:OrderBookProcessRequest/client:creditCardNo
Analogicznie w sekcji To konstruujemy wyrażenie dla zmien-
nej wejściowej dla elementu
Invoke
:
/ns2:checkCreditCardElement/ns2:cardNo
40
www.sdjournal.org Software Developer’s Journal 1/2007
Plik z chomika:
Kapy97
Inne pliki z tego folderu:
2010.03_SOA Tworzenie serwisów wspomagających proces integracji_[Aplikacje Biznesowe].pdf
(1004 KB)
2010.05_Wdrożenia SAP – droga przez mękę_[Aplikacje Biznesowe].pdf
(1197 KB)
2010.06_Stary, dobry znajomy Oracle Forms_[Aplikacje Biznesowe].pdf
(548 KB)
2010.05_C++ Qt 4.5 _[Aplikacje Biznesowe].pdf
(1019 KB)
2009.09_Websphere MQ 7 _[Aplikacje Biznesowe].pdf
(581 KB)
Inne foldery tego chomika:
Algorytmy
Antyhaking
Aspekty
Bazy Danych
Biblioteka Miesiaca
Zgłoś jeśli
naruszono regulamin