Showing posts with label XQuery. Show all posts
Showing posts with label XQuery. Show all posts

Wednesday, September 4, 2013

ตัวอย่างการใช้งาน Service Callout และ Publish (XQuery transformation)

ตัวอย่างการใช้งาน Service Callout และ Publish (XQuery transformation)
Prepare database
EMPLOYEE
Column
Datatype
Nullable
EMP_ID
NUMBER(22)
False
EMP_FIRSTNAME        
VARCHAR2(50)
False
EMP_SURNAME
VARCHAR2(50)
True
OU_ID
NUMBER(22)   
False
BIRTH_DATE       
DATE
True
NATIONAL_ID      
CHAR(13)     
False
EMPLOYEE_BAK
Column
Datatype
Nullable
ID
NUMBER(22)
True
FIRSTNAME        
VARCHAR2(50)
True
SURNAME
VARCHAR2(50)
True
OU_ID
NUMBER(22)   
True
BIRTH_DATE       
DATE
True
NATIONAL_ID      
CHAR(13)     
True
insertEmployee
CREATE OR REPLACE PROCEDURE OSBDEMO.insertEmployee(
  p_emp_firstname IN EMPLOYEE.EMP_FIRSTNAME%TYPE,
  p_emp_surname IN EMPLOYEE.EMP_SURNAME%TYPE,
  p_ou_id IN EMPLOYEE.OU_ID%TYPE,
  p_birth_date IN EMPLOYEE.BIRTH_DATE%TYPE,
  p_national_id IN EMPLOYEE.NATIONAL_ID%TYPE)
IS
BEGIN
 INSERT INTO OSBDEMO.EMPLOYEE ("EMP_ID", "EMP_FIRSTNAME", "EMP_SURNAME", "OU_ID", "BIRTH_DATE", "NATIONAL_ID")
 VALUES (EMP_SEQ.NEXTVAL, p_emp_firstname,p_emp_surname, p_ou_id, p_birth_date, p_national_id);
END;



Artifact files
Inbound
Files
Schema
xsd/CopyEmployeeService.xsd
WSDL
CopyEmployeeService.wsdl
Proxy Service
CopyEmployeeProxyService2.proxy


Outbound (AddNewEmployee)
Files
WSDL
NewEmployeeService.wsdl
JCA config files
NewEmployeeService_db.jca
Schema
xsd/NewEmployeeService_sp.xsd
Business Service
NewEmployeeService_db.biz
NewEmployeeService_db.wsdl
Outbound (QueryAllEmployee)
Files
WSDL
QueryEmployeeService1.wsdl
JCA config files
QueryEmployeeService1_db.jca
Schema
xsd/QueryEmployeeService1.xsd
Business Service
QueryEmployeeService1_db.biz
QueryEmployeeService1_db.wsdl


Outbound (ReplicaAllEmployee)
Files
WSDL
MergeEmployeeService1.wsdl
JCA config files
MergeEmployeeService1_db.jca
MergeEmployeeService1-or-mappings.xml
MergeEmployeeService1-properties.xml
Schema
MergeEmployeeService1_table.xsd
Business Service
MergeEmployeeService1_db.biz
MergeEmployeeService1_db.wsdl


XQuery transformation
From
To
Files
Inbound
AddNewEmployee
CopyEmployeeProxyService_To_NewEmployeeService.xq
Inbound
QueryAllEmployee
CopyEmployeeProxyService_To_QueryEmployeeService1.xq
QueryAllEmployee
ReplicaAllEmployee
QueryEmployeeService1_To_MergeEmployeeService1.xq











XQuery Transformation =>
Create new XQuery transformation






CopyEmployeeProxyService_To_NewEmployeeService.xq


(:: pragma bea:global-element-parameter parameter="$copyEmployeeRequest1" element="ns1:CopyEmployeeRequest" location="../xsd/CopyEmployeeService.xsd" ::)
(:: pragma bea:global-element-return element="ns0:InputParameters" location="../../Adapter/xsd/NewEmployeeService_sp.xsd" ::)


declare namespace ns1 = "http://www.soabpm-vm.com/SOATrainingSamples/TransactionalInsert/xsd/CopyEmployeeService";
declare namespace ns0 = "http://xmlns.oracle.com/pcbpel/adapter/db/sp/NewEmployeeService";
declare namespace xf = "http://tempuri.org/DatabaseTX1/Service/xq/CopyEmployeeProxyService_To_NewEmployeeService/";


declare function xf:CopyEmployeeProxyService_To_NewEmployeeService($copyEmployeeRequest1 as element(ns1:CopyEmployeeRequest))
   as element(ns0:InputParameters) {
       <ns0:InputParameters>
           <ns0:P_EMP_FIRSTNAME>{ data($copyEmployeeRequest1/ns1:CopyEmployeeRequestInput[1]/ns1:EMP_FIRSTNAME) }</ns0:P_EMP_FIRSTNAME>
           <ns0:P_EMP_SURNAME>{ data($copyEmployeeRequest1/ns1:CopyEmployeeRequestInput[1]/ns1:EMP_SURNAME) }</ns0:P_EMP_SURNAME>
           <ns0:P_OU_ID>{ data($copyEmployeeRequest1/ns1:CopyEmployeeRequestInput[1]/ns1:OU_ID) }</ns0:P_OU_ID>
           <ns0:P_BIRTH_DATE>{ data($copyEmployeeRequest1/ns1:CopyEmployeeRequestInput[1]/ns1:BIRTH_DATE) }</ns0:P_BIRTH_DATE>
           <ns0:P_NATIONAL_ID>{ data($copyEmployeeRequest1/ns1:CopyEmployeeRequestInput[1]/ns1:NATIONAL_ID) }</ns0:P_NATIONAL_ID>
       </ns0:InputParameters>
};


declare variable $copyEmployeeRequest1 as element(ns1:CopyEmployeeRequest) external;


xf:CopyEmployeeProxyService_To_NewEmployeeService($copyEmployeeRequest1)







CopyEmployeeProxyService_To_QueryEmployeeService1.xq
xquery version "1.0" encoding "Cp1252";
(:: pragma bea:global-element-parameter parameter="$copyEmployeeRequest1" element="ns0:CopyEmployeeRequest" location="../xsd/CopyEmployeeService.xsd" ::)
(:: pragma bea:global-element-return element="ns1:QueryEmployeeService1Input" location="../../Adapter/xsd/QueryEmployeeService1.xsd" ::)


declare namespace xf = "http://tempuri.org/DatabaseTX1/Service/xq/CopyEmployeeProxyService_To_QueryEmployeeService1/";
declare namespace ns1 = "http://xmlns.oracle.com/pcbpel/adapter/db/QueryEmployeeService1";
declare namespace ns0 = "http://www.soabpm-vm.com/SOATrainingSamples/TransactionalInsert/xsd/CopyEmployeeService";


declare function xf:CopyEmployeeProxyService_To_QueryEmployeeService1($copyEmployeeRequest1 as element(ns0:CopyEmployeeRequest))
   as element(ns1:QueryEmployeeService1Input) {
       <ns1:QueryEmployeeService1Input/>
};


declare variable $copyEmployeeRequest1 as element(ns0:CopyEmployeeRequest) external;


xf:CopyEmployeeProxyService_To_QueryEmployeeService1($copyEmployeeRequest1)




QueryEmployeeService1_To_MergeEmployeeService1.xq




ลากเส้นตามลำดับ 1-7 (parent หา child)  เนื่องจาก OEPE จะสร้าง for loop ใน code
(:: pragma bea:global-element-parameter parameter="$queryEmployeeService1OutputCollection1" element="ns1:QueryEmployeeService1OutputCollection" location="../../Adapter/xsd/QueryEmployeeService1.xsd" ::)
(:: pragma bea:global-element-return element="ns0:EmployeeBakCollection" location="../../Adapter/xsd/MergeEmployeeService1_table.xsd" ::)


declare namespace ns1 = "http://xmlns.oracle.com/pcbpel/adapter/db/QueryEmployeeService1";
declare namespace ns0 = "http://xmlns.oracle.com/pcbpel/adapter/db/top/MergeEmployeeService1";
declare namespace xf = "http://tempuri.org/DatabaseTX1/Service/xq/QueryEmployeeService1_To_MergeEmployeeService1/";


declare function xf:QueryEmployeeService1_To_MergeEmployeeService1($queryEmployeeService1OutputCollection1 as element(ns1:QueryEmployeeService1OutputCollection))
   as element(ns0:EmployeeBakCollection) {
       <ns0:EmployeeBakCollection>
           {
               for $QueryEmployeeService1Output in $queryEmployeeService1OutputCollection1/ns1:QueryEmployeeService1Output
               return
                   <ns0:EmployeeBak>
                       <ns0:id>{ data($QueryEmployeeService1Output/ns1:EMP_ID) }</ns0:id>
                       <ns0:firstname>{ data($QueryEmployeeService1Output/ns1:EMP_FIRSTNAME) }</ns0:firstname>
                       <ns0:surname>{ data($QueryEmployeeService1Output/ns1:EMP_SURNAME) }</ns0:surname>
                       <ns0:ouId>{ data($QueryEmployeeService1Output/ns1:OU_ID) }</ns0:ouId>
                       <ns0:birthDate>{ data($QueryEmployeeService1Output/ns1:BIRTH_DATE) }</ns0:birthDate>
                       <ns0:nationalId>{ data($QueryEmployeeService1Output/ns1:NATIONAL_ID) }</ns0:nationalId>
                   </ns0:EmployeeBak>
           }
       </ns0:EmployeeBakCollection>
};


declare variable $queryEmployeeService1OutputCollection1 as element(ns1:QueryEmployeeService1OutputCollection) external;


xf:QueryEmployeeService1_To_MergeEmployeeService1($queryEmployeeService1OutputCollection1)

















สร้าง Proxy Service



ประกอบด้วย 3 stage 1) NewEmployee 2) Query และ 3) Replicate







Stage 1













Stage 2








Stage 3
================
Good Luck.
================