Connector for Oracle eBusiness Suite The Oracle eBusiness Suite Connector is built on the Web Services Connector. Please refer to the TechNet documentation for the Web Services Connector for additional information. Summary Features Connected data source versions Scenarios Operations Schema Supported variants Oracle E-Business Suite 12.1.3 Object Lifecycle Management Password Management Full import(with custom code) Delta import (with custom code) Export Password Management Person/Employee User Permissions in connected data source To create or perform any of the supported tasks in Web Service connector for all the supported data sources, you must have following permissions. Apps Schema Connect Role' (UMX|APPS_SCHEMA_CONNECT) Ports and protocols This depends upon the Oracle E-Business Suite installation and configuration. Connector update history Build 5.0.458.0 Release 2012 June Revision list First release of the Web Services Connector. Requirements, before you begin, and installation Installation of Default Projects The default project installer file is available at the Microsoft Download Center. Download the installer file and run to install. Double click the downloaded project file to begin installation. a. The following screen appears, click Yes. b. Next license agreement screen appears; click Yes to accept the terms and conditions. c. The next screen prompts to specify the location for installing the default project. Specify the location: %FIM_INSTALL_DIR\2010\Synchronization Service\Extensions and click OK. d. The installation starts and the successful completion is reported. Click OK to exit setup wizard. Content of Default Project Web Services The discovery operation retrieve the endpoints defaultPersonAdd, defaultPersonAssignment, defaultPersonFullImport, defaultPersonFullImportCustom, defaultPersonUpdate, defaultUserCreate, defaultUserFullImportCustom and defaultUserUpdateDisable and all the packages that have been exposed through the web service at Oracle EBS. The exposed web service here includes the packages listed below: FND_USER_PKG.LOAD_ROW IRC_PARTY_API.UPDATE_USER HR_EMPLOYEE_API. CREATE_EMPLOYEE HR_PERSON_ADDRESS_API.CREATE_PERSON_ADDRESS HR_ASSIGNMENT_API.UPDATE_EMP_ASG_CRITERIA HR_ASSIGNMENT_API.UPDATE_EMP_ASG HR_PHONE_API.CREATE_PHONE HR_PERSON_API.DELETE_PERSON HR_ASSIGNMENT_API.DELETE_ASSIGNMENT HR_PHONE_API.DELETE_PHONE HR_PERSON_API.UPDATE_PERSON HR_ASSIGNMENT_API.UPDATE_EMP_ASG HR_PERSON_ADDRESS_API.UPDATE_PERSON_ADDRESS HR_ASSIGNMENT_API.UPDATE_EMP_ASG_CRITERIA HR_ASSIGNMENT_API.ACTIVATE_EMP_ASG HR_ASSIGNMENT_API.ACTUAL_TERMINATION_EMP_ASG HR_ASSIGNMENT_API.SET_NEW_PRIMARY_ASG HR_ASSIGNMENT_API.SUSPEND_EMP_ASG HR_ASSIGNMENT_API.UPDATE_EMP_ASG_CRITERIA HR_EX_EMPLOYEE_API.ACTUAL_TERMINATION_EMP HR_EX_EMPLOYEE_API.UPDATE_TERM_DETAILS_EMP HR_PHONE_API.UPDATE_PHONE Workflows A native package in Oracle EBS is used to perform a single task. There are certain operations for which native packages are not available and hence the default project support them using custom packages. Following are the workflows that are supported for: User Object FIM Operation Implemented through native web service (package) operation Full Import Yes Delta Import No Export Add Yes Export Delete Yes Export Replace Yes Set Password Yes Change Password Yes Person Object FIM Operation Implemented through native web service (package) operation Full Import Yes Delta Import No Export Add Yes Export Delete Yes Export Replace Yes Set Password N/A Change Password N/A Exposing Native & Custom Web Service for Oracle EBS 12.1.3 Connector Web Service Configuration Tool discovers the Web service through a WSDL (Web Services Description Language) and retrieves its services, endpoints and operations (APIs) it provides. Services, endpoints and operations (APIs) are used by the Web Service Connector to access the Oracle e-Business Suite (EBS) server and synchronize identities with Forefront Identity Manager (FIM) 2010. For a web service to be discovered, it is first required to be exposed at the Oracle EBS 12.1.3. This topic describes the process of exposing the web service from Oracle EBS 12.1.3 Integrated SOA Gateway. You must perform following activities to expose the web service at Oracle EBS server: 1. Generate and Deploy WSDL 2. Grant WSDL access to users Generate and Deploy WSDL 1. Login with Admin user SYSADMIN. 2. The Integrated SOA Gateway responsibility screen appears. 3. After selecting the Integrated SOA Gateway responsibility, access Integrated SOA Repository. 4. Navigate through Application Technology --> User Management, to retreive all the API’s that can be exposed in the module. 5. To expose User related API, click User under User Management. You will see the list of available user related API’s that can be exposed. Click the one you want to expose. After selecting, the next screen provides the details of integration point. Click the new Generate WSDL button to expose the selected API. 6. After two or three seconds you should get a confirmation message, like the one below, to let you know this was completed successfully. Also, the Generate WSDL button will be replaced by Regenerate WSDL. Next you need to enable this new service. This is done by clicking on the Deploy button which is highlighted in the image below. After successful WSDL generation, button Generate WSDL will disappear and you will see the Regenerate WSDL and a Deploy button below. 7. After successful deployment, you will receive the confirmation for successful deployment and the Redeploy button appears. Using View WSDL link, you can see the complete WSDL that is generated and use it to call the exposed service. Grant WSDL access to users The final step is to grant access to the service, so that you will be able to invoke it. To do this, expand the list of operations in the last part of the interface page in Integration Repository, and check the box next to the interface you want to grant access to, and click the Create Grant button. You can choose to grant it to “All Users” or “Specific User”. 1. Select the operation/operations to be granted and click Create Grant button. 2. Now enter the username for the user you want to grant access to, or use the search button to find the user. In this example, it will be sufficient to grant access to ASADMIN. 3. Select the user and Apply it. 4. If you want to see to which Users have been Granted the permission to consume the WSDL, Click on Show. Once expanded, you can see the list of users to which permission have been granted. Important: This security grant will not be effective unless we bounce the application tier. Command for bouncing the application tier services. 1) Go to %ADMIN_SCRIPTS_HOME% 2) 3) 4) 5) Run adoacorectl.cmd STOP Run adoafmctl.cmd STOP Run adoacorectl.cmd START Run adoafmctl.cmd START Custom Web Service Native packages are not available to achieve following features: Get User Details Get Person Object Version number Get Assignment Object Version number Get Last Employee Id Get Last User Id Develop the custom package and later expose them as Web Service and Web Service Configuration Tool discover the Web service through a WSDL. Important: Perquisites to develop and expose custom packages: 1. Integration Repository Parser 2. Perl Module a. Compress-Raw-Zlib-2.009 b. Compress-Zlib-2.009 c. Class-MethodMaker-1.12 Sample Custom Operations Get User Detail and Last User Id Operations Package Specification CREATE OR REPLACE PACKAGE FND_USER_DTL AS /* $Header: FND_USER_DTL.pls */ /*# * This is the source file to FND_USER_DTL * @rep:scope public * @rep:product FND * @rep:displayname FND User Detail */ --/*# * This is source for GET_USER_DETAILS * @rep:displayname Get User Details * @rep:category BUSINESS_ENTITY FND_USER * @rep:scope public * @rep:lifecycle active */ PROCEDURE GET_USER_DETAILS(p_start_user_id IN number, p_end_user_id IN number, p_user OUT SYS_REFCURSOR, p_error OUT nocopy varchar2); /*# * This is source for GET_USER_DETAILS * @rep:displayname Get Last User ID * @rep:category BUSINESS_ENTITY FND_USER * @rep:scope public * @rep:lifecycle active */ PROCEDURE GET_LAST_USER_ID(p_last_user_id OUT number); END FND_USER_DTL; Package Body CREATE or REPLACE PACKAGE BODY FND_USER_DTL AS /* $Header: FND_USER_DTL.pls $ */ ---Procedure to return user details -PROCEDURE GET_USER_DETAILS( p_start_user_id IN NUMBER, p_end_user_id IN NUMBER, p_user OUT SYS_REFCURSOR, p_error OUT NOCOPY VARCHAR2) IS BEGIN OPEN p_user FOR SELECT user_id, user_name, description, start_date, end_date, last_logon_date, password_date, password_accesses_left, password_lifespan_accesses, password_lifespan_days, employee_id, email_address, fax, customer_id, supplier_id, person_party_id FROM FND_USER WHERE user_id BETWEEN p_start_user_id AND p_end_user_id; EXCEPTION WHEN OTHERS THEN p_error := substr(SQLERRM,1,1500); END GET_USER_DETAILS; --- Procedure for returning Last User ID -PROCEDURE GET_LAST_USER_ID( p_last_user_id OUT NUMBER) IS BEGIN SELECT MAX(user_id) INTO p_last_user_id FROM FND_USER; END GET_LAST_USER_ID; END FND_USER_DTL; Get Last Person Id, Person Object and Assignment Object Version number Package Specification CREATE OR REPLACE package HR_PERSON_INFO AS /* $Header: HR_PERSON_INFO.pls $ */ /*# * This package contains APIs * for getting Last person ID , object_version_number. * @rep:scope public * @rep:product per * @rep:displayname Person Table Info * @rep:lifecycle active * @rep:compatibility S * @rep:category BUSINESS_ENTITY PER_EMPLOYEE */ --- Returns Last Person_ID from PER_ALL_PEOPLE_F --- {Start Of Comments} /*# * This API returns the Last Person ID * @param x_last_person_ID out number Last Person ID * @rep:scope public * @rep:lifecycle active * @rep:displayname Last Person ID * @rep:compatibility S */ PROCEDURE Get_Last_Person_ID(x_last_person_ID OUT NUMBER); --- Get_person_object_version (PUBLIC) -- Get person version number for a person on some effective date --- Input (Mandatory) -- Effective Date -- Person ID -- Returns -- Get person version number for a person on some effective date --- {Start Of Comments} /*# * This API returns the person object version number * @param x_effective_date Effective Date * @param x_person_id Person ID * @param x_object_version_number Object Version Number * @rep:scope public * @rep:lifecycle active * @rep:displayname Person object Version Number * @rep:compatibility S */ PROCEDURE Get_person_object_version ( x_person_id IN NUMBER, x_effective_date IN DATE, x_object_version_number OUT NUMBER ); --- Get_assignment_object_version (PUBLIC) -- Get assignment version number for a person on some effective date --- Input (Mandatory) -- Effective Date -- Assignment ID -- Returns -- Get assignment version number for a person on some effective date --- {Start Of Comments} /*# * This API returns the assignment object version number * @param x_effective_date Effective Date * @param x_assignment_id Assignment ID * @param x_object_version_number Object Version Number * @rep:scope public * @rep:lifecycle active * @rep:displayname Assignment Version Number * @rep:compatibility S */ PROCEDURE Get_assignment_object_version ( x_assignment_id IN NUMBER, x_effective_date IN DATE, x_object_version_number OUT NUMBER ); END HR_PERSON_INFO; Package Body CREATE or REPLACE PACKAGE BODY HR_PERSON_INFO AS --- Procedure Get_Last_Person_ID Returns the Last Person_ID in the system -PROCEDURE Get_Last_Person_ID(x_last_person_ID l_max_person_id NUMBER; OUT number) IS BEGIN SELECT MAX(person_id) INTO l_max_person_id FROM per_all_people_f; x_last_person_ID := l_max_person_id ; END Get_Last_Person_ID; --- Procedure Get_person_object_version Returns the person object_version_number on some effective date -- PROCEDURE Get_person_object_version ( x_person_id IN NUMBER, x_effective_date IN DATE, x_object_version_number OUT NUMBER ) IS l_object_version_number NUMBER; BEGIN IF x_person_id IS NULL THEN fnd_message.set_name('PER', 'PER_INVALID_PERSON'); fnd_message.set_token('PERSON_ID', X_PERSON_ID); app_exception.raise_exception; END IF; IF x_person_id IS NULL THEN fnd_message.set_name('PER', 'EFFECTIVE_DATE cannot be Blank'); fnd_message.set_token('EFFECTIVE_DATE', X_EFFECTIVE_DATE); app_exception.raise_exception; END IF; SELECT object_version_number INTO l_object_version_number FROM per_all_people_f WHERE person_id = x_person_id AND x_effective_date BETWEEN effective_start_date AND effective_end_date; x_object_version_number := l_object_version_number; END Get_person_object_version; --- Procedure Get_assignmen_object_version Returns the assignment object_version_number on some effective date -PROCEDURE Get_assignment_object_version ( x_assignment_id IN NUMBER, x_effective_date IN DATE, x_object_version_number OUT NUMBER ) IS BEGIN IF x_assignment_id IS NULL THEN fnd_message.set_name('PER', 'ASSIGNMENT_ID cannot be Blank'); fnd_message.set_token('ASSIGNMENT_ID', X_ASSIGNMENT_ID); app_exception.raise_exception; END IF; IF x_effective_date IS NULL THEN fnd_message.set_name('PER', 'EFFECTIVE_DATE cannot be Blank'); fnd_message.set_token('PERSON_ID', X_EFFECTIVE_DATE); app_exception.raise_exception; END IF; SELECT object_version_number INTO x_object_version_number FROM per_all_assignments_f WHERE assignment_id = x_assignment_id AND x_effective_date BETWEEN effective_start_date AND effective_end_date; END Get_assignment_object_version; END HR_PERSON_INFO; Generating iLDT file Expose custom packages as web service required ildt file need to generate. Please follow the instructions from the Integrated SOA Gateway Implementation Guide (Integration Repository Parser) section “Generating ILDT Files”. Note: If “.pls” file is not placed on proper location for example: User:<drive>:\< Oracle Install folder>\<Server Name>\apps\apps_st\appl\fnd\12.0.0\patch\115\sql Person:<drive>:\< Oracle Install folder>\<Server Name>\apps\apps_st\appl\per\12.0.0\patch\115\sql If “.pls” file are not placed on above location integration repository parser will not be able to read the file and will give errors. Uploading iLDT file Once the ildt file are generated please follow the follow the instructions from the Integrated SOA Gateway Implementation Guide (Integration Repository Parser) section “Uploading ILDT Files to Integration Repository” Creating security grants This is similar to the native packages. Generating web services This is similar to the native packages. Deploying web service This is similar to the native packages. Note: This setting will not be effective unless we bounce the application tier. Performance Testing Scale 10,000 User objects data 10,000 Person objects data Topology Hardware Two servers FIM Server Hardware Configuration: FIM Synchronization Service and FIM Synchronization database collocated on one server (FIM Server). 2-gigabyte (GB) SDRAM Intel® Xeron® 2.27GHz Processor Hard disk volumes: Oracle ebusiness Suite Application Server o Single volume Note: The server hardware used is not representative for a large organization. The numbers presented should be used to understand the difference between different operations. You are encouraged and expected to configure your own test environments to more accurately estimate capacity and performance. Microsoft cannot guarantee that organizations will experience the same capacity or performance characteristics, even if the FIM Synchronization service components are deployed and configured identically to the components that are described in this guide, The tests and results shown in the following table were performed using scripted provisioning code. The Web Service Connector was connected to the Oracle EBS Server as shown in the previous table. Operation OracleEBS Connector Full Import (User Object) OracleEBS Connector Full Import (Person Object) OracleEBS Connector Export (User Object) OracleEBS Connector Export (Person Object) Elapsed time (minutes: seconds) 67:12 25:19 a) 124:23 b) 236:24 c) 115:49 a) 440:55 b) 872:36 c) 136:36 Reference information Statistics Rate Total Imported users: 10,000 2.48 objects read/ second Total Imported Persons: 10,000 6.58 objects read/ second a) Adds: 10,000 Users b) Update: 10,000 Users c) Delete: 10,000 Users a) 1.34 Objects exported / second b) .705 Objects updated/ second c) 1.439 Objects deleted / second a) Adds: 10,000 Persons b) Update: 10,000 Persons c) Delete:10,000 Persons a) 0.378 Objects exported/ second d) 0.191 Objects updated/ second b) 1.22 Objects deleted / second