Usar el servicio web de integración del cargador de datos de HCM

Puede usar un servicio web SOAP del cargador de datos de HCM para importar y cargar los archivos de datos ubicados temporalmente en el servidor de WebCenter Content. Puede procesar esos archivos de datos manualmente desde la página Importar y cargar datos de la interfaz de usuario de Oracle Cloud HCM.

Primero debe instalar Oracle JDeveloper 11.1.1.9 para obtener las bibliotecas necesarias para llamar a los servicios web SOAP desde Oracle Cloud HCM.

Acerca del servicio de integración del cargador de datos de HCM

Puede utilizar un servicio web SOAP de Oracle Cloud HCM para cargar archivos mediante la API de SOAP.

Puede obtener los detalles del servicio web Servicio de cargador de datos de Oracle Fusion Cloud Human Resources en el enlace Developer Connect, en Herramientas del menú Navegador, al igual que cualquier otro servicio web SOAP.

Puede llamar al servicio web SOAP después de colocar el archivo ZIP que contiene los archivos DAT en el servidor de WebCenter Content. A continuación, puede protegerlo con la cuenta hcm/dataloader/import. Este servicio web se puede utilizar para importar y cargar datos en Oracle Cloud HCM.

Acerca de los sobres de SOAP para llamar al cargador de datos de HCM

Al llamar al servicio web SOAP del cargador de datos de HCM, se envían y reciben sobres de solicitud y respuesta.
Puede utilizar estos sobres para realizar solicitudes al servicio web SOAP HCMDataLoader:
http://{Host}/hcmCommonDataLoader/HCMDataLoader

Acerca del método importAndLoadData

El método importAndLoadData inicia el procesamiento de un archivo de datos alojado en el servidor WebCenter Content. Es un trabajo asíncrono que devuelve solo el ProcessId del proceso ejecutado.

Utilice este sobre para realizar una llamada a la función importAndLoadData en el servicio web SOAP.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns1:importAndLoadData xmlns:ns1="http://xmlns.oracle.com/apps/hcm/common/dataLoader/core/dataLoaderIntegrationService/types/">
            <ns1:ContentId></ns1:ContentId>
            <ns1:Parameters></ns1:Parameters>
        </ns1:importAndLoadData>
    </soap:Envelope>

Los parámetros para el método importAndLoadData que se envían con el sobre son:

ContentId: ID de contenido del archivo en el servidor WebCenter Content (el mismo valor que el parámetro dDocName en la llamada de Java WebCenter Content).

Parámetros: pares nombre-valor. Los siguientes nombres de parámetros están disponibles, pero no son obligatorios:

  • ImportMaximumErrors: porcentaje de las líneas de archivo en un error que se puede producir para un objeto de negocio antes de que se detenga el proceso de importación.

  • LoadMaximumErrors: porcentaje de instancias de objetos de negocio en un error que se puede producir para un objeto de negocio antes de que se detenga el proceso de validación y carga.

  • LoadConcurrentThreads: número de threads simultáneos al validar o cargar.

  • LoadGroupSize: número de objetos de negocio procesados como única unidad de trabajo por un thread simultáneo.

  • FileEncryption: tipo de cifrado de archivo. Por ejemplo, cifrado basado en contraseña (PBE).

  • DeleteSourceFile: valor Y o N. Si se define en Y o se deja en blanco, suprime el archivo de origen del servidor de WebCenter Content después de transferir el contenido del archivo a las tablas temporales del cargador de datos de HCM y ya no es necesario.

Por ejemplo, la etiqueta <ns1:Parameters> puede contener los siguientes pares de nombre y valor:<ns1:Parameters>ImportMaximumErrors=100,LoadMaximumErrors=100,LoadConcurrentThreads=4,FileEncryption=PGPSIGNED,DeleteSourceFile=N</ns1:Parameters>

El servidor responde con este sobre:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing"> 
	<env:Header> <wsa:To>http://www.w3.org/2005/08/addressing/anonymous</wsa:To> 
	  <wsa:Action>http://xmlns.oracle.com/apps/hcm/common/dataLoader/core/dataLoaderIntegrationService/HCMDataLoader/importAndLoadDataResponse</wsa:Action>
	   <wsa:MessageID>urn:uuid:ab36195f-775b-4688-a0e4-8a4e531e904c</wsa:MessageID>
	   <wsa:RelatesTo>urn:uuid:74c7b631-c20a-4d49-bf36-1f483f3dc43e</wsa:RelatesTo>
   </env:Header> 
	<env:Body> <ns0:importAndLoadDataResponse xmlns:ns0="http://xmlns.oracle.com/apps/hcm/common/dataLoader/core/dataLoaderIntegrationService/types/"> <result xmlns="http://xmlns.oracle.com/apps/hcm/common/dataLoader/core/dataLoaderIntegrationService/types/">7958</result> </ns0:importAndLoadDataResponse> 
	</env:Body> 
</env:Envelope>

Acerca del método getDataSetStatus

El método getDataSetStatus devuelve el estado actual del archivo de datos especificado.

Utilice este sobre para realizar una llamada a la función getDataSetStatus en el servicio web SOAP.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns1:getDataSetStatus xmlns:ns1="http://xmlns.oracle.com/apps/hcm/common/dataLoader/core/dataLoaderIntegrationService/types/">
             <ns1:Parameters></ns1:Parameters>
        </ns1:getDataSetStatus>
    </soap:Envelope>

Los parámetros para el método getDataSetStatus que se envían con el sobre son:

ContentId: ID de contenido del archivo en el servidor WebCenter Content (el mismo valor que el parámetro dDocName en la llamada de Java WebCenter Content).

ProcessId: ID del proceso iniciado y devuelto por el método importAndLoadData.

Generar una clase de proxy para llamar a HCM DataLoader

Una opción para llamar a un servicio web SOAP de Oracle Cloud HCM es utilizar clases de proxy generadas.

Puede generar clases de proxy proporcionando la URL del archivo WSDL de servicio al generador que desee. Estas clases de proxy se utilizan para llamar al servicio web.

Nota:

Los servicios web SOAP de Oracle Cloud HCM están protegidos por las políticas de seguridad de Oracle Web Services Manager (OWSM).
  1. Inicie sesión en Oracle Cloud HCM.
  2. En el menú Navegador, busque la cabecera Herramientas y, a continuación, haga clic en Conexión de desarrolladores.
  3. En el cuadro de búsqueda Buscar, escriba Cargador de datos y, a continuación, haga clic en el icono de búsqueda.
  4. Haga clic en el servicio Cargador de datos. Aparece la página Resumen del servicio.
    La página Resumen muestra información relevante para el servicio web SOAP, como la ubicación del archivo WSDL.
  5. Abra un símbolo del sistema y, a continuación, ejecute el comando wsimport, que está disponible en $JAVA_HOME/bin:
    wsimport -s <Provide the folder where the generated files need to be placed> -d <Provide the folder where the generated files need to be placed> <The HCM Data Loader Integration Service URL>

    En el comando, el primer parámetro es la carpeta en la que se deben colocar los archivos generados. El segundo parámetro también es la carpeta en la que se deben colocar los archivos generados. El tercer parámetro es la URL de WSDL del cargador de datos de HCM. Por ejemplo:

    wsimport -s "D:\HCMDataLoader" -d "D:\ HCMDataLoader" https://{host}/hcmCommonDataLoader/HCMDataLoader?wsdl

    Los archivos generados se colocan en las dos carpetas siguientes:

    • com

    • sdo

  6. Agregue el código generado a un archivo JAR:
    zip loaderIntegrationProxy.jar -r * -

Acerca de las implicaciones de seguridad al utilizar el cargador de datos de HCM

Cuando un cliente llama a un servicio web SOAP del cargador de datos de HCM, el posterior debe cumplir la política de protección de mensajes para garantizar que la carga útil se transporte de forma cifrada o a través de la capa de transporte SSL.

El servicio web HCMDataLoader está protegido mediante la siguiente política de Oracle Web Services Manager: oracle/wss11_saml_or_username_token_with_message_protection_service_policy.

En el cliente, puede utilizar la siguiente política de Oracle Web Services Manager:oracle/wss11_username_token_with_message_protection_client_policy.

Para utilizar esta política, el mensaje se debe cifrar mediante una clave pública proporcionada por el servidor. Cuando el mensaje llega al servidor, la clave privada del servidor puede descifrar el mensaje. Puede crear un KeyStore para importar el certificado proporcionado en el archivo WSDL del servicio; sin embargo, por motivos de seguridad, debe solicitar al usuario la contraseña de Oracle Cloud HCM cada vez que ejecute el código.

Puede crear un archivo de texto de propiedades que se pueda analizar en el código para acceder a la información de Keystore, por ejemplo:

FUSION_USERNAME=<Your Oracle Global Human Resources Cloud User Name>
DATAPATH=C:\\My\\Assets\\cloud.asset.hcm.java-dataload-example\\data\\
HCM_DATA_LOADER_SERVICE_WSDL_LOCATION=https://<<FusionURL>/hcmCommonDataLoader/HCMDataLoader?wsdl
UCM_IDC_WEBSERVICE_LOCATION=https://<FusionURL>/idcws/GenericSoapPort
KEYSTORE_LOCATION=<Your Keystore trust location>
KEYSTORE_PASSWORD=<YourTrustPassword>
KEYSTORE_ALIAS=orakey
GETDATASETSTATUS_DELAY=5
OK=OK
ERROR=Error
WARNING=Warning
CSV_FILE_ENCODING=UTF-8
DATA_SEPERATOR=;

Solicite al usuario sus credenciales de Oracle Cloud HCM mediante lo siguiente:

// Accept password from user
Scanner scanReader = new Scanner(System.in);  // Reading from System.in
System.out.println("Enter password for user "+propertiesFile.getProperty("FUSION_USERNAME")+" :");
fusionUserPass= scanReader.next(); // Scans the next token of the input as an int.
scanReader.close();

En el ejemplo, fusionUserPass es una variable que se puede utilizar para almacenar la contraseña de Oracle Cloud HCM del usuario y, a continuación, transferir al servicio web SOAP del cargador de datos de HCM.

Llamar al servicio web SOAP DataLoader de HCM

Puede cargar datos de un archivo ZIP en Oracle Cloud HCM mediante el servicio web SOAP del cargador de datos de HCM desde una clase Java.

En primer lugar, cree un archivo ZIP y cárguelo en el servidor WebCenter Content, ya sea manualmente o mediante programación. A continuación, puede cargar los datos mediante el servicio web importAndLoadData.

Nota:

Los ejemplos de código proporcionados en esta solución se probaron con JDK versión 8 para llamar a servicios web en Oracle WebLogic Server 12c. Para utilizarlo con otras versiones de JDK y Oracle WebLogic Server, pruebe el código con bibliotecas específicas de las versiones deseadas.

  1. Cree una clase de cliente en la carpeta: /com/oracle/xmlns/apps/hcm/common/dataloader/core/dataloaderintegrationservice/.
    Para generar la clase debe tener el siguiente archivo JAR:
    • Para WebLogic Server 11g: ws.api_1.1.0.0.jar
    • Para WebLogic Server 12c: wls-api.jar

    Este archivo JAR está disponible en la siguiente ubicación de la carpeta de instalación JDeveloper:

    • Para WebLogic Server 11g: $MIDDLEWARE_HOME/modules
    • Para WebLogic Server 12c: $MIDDLEWARE_HOME/wlserver/server/lib
  2. Asegúrese de importar las siguientes bibliotecas Java en Java Code:
    import com.oracle.xmlns.apps.hcm.common.dataloader.core.dataloaderintegrationservice.HCMDataLoader;
    import com.oracle.xmlns.apps.hcm.common.dataloader.core.dataloaderintegrationservice.HCMDataLoader_Service;
    import com.oracle.xmlns.apps.hcm.common.dataloader.core.dataloaderintegrationservice.ServiceException;
    import javax.xml.ws.BindingProvider;
    import weblogic.wsee.jws.jaxws.owsm.SecurityPolicyFeature;
    
  3. Cree una función que devuelva un objeto HCMDataLoader y reciba url, username, password y keystore como parámetros. Por ejemplo:
    public static HCMDataLoader getHCMDataLoaderService(String url, String username, String password, String keystore)
    			throws MalformedURLException {
    		//The code in the next steps is placed within the function body
    }
  4. Dentro del cuerpo de la función, cree el objeto de servicio web SOAP.
    HCMDataLoader_Service webService = new HCMDataLoader_Service(new URL("/hcmCommonDataLoader/HCMDataLoader?wsdl));
    
    SecurityPolicyFeature[] securityFeatures = new SecurityPolicyFeature[] { 
    				new SecurityPolicyFeature("oracle/wss_username_token_over_ssl_client_policy") 
    }; 
    
    HCMDataLoader hcmDataLoader = webService.getHCMDataLoaderSoapHttpPort(securityFeatures);
    
  5. Cree un objeto BindingProvider y defina sus parámetros de contexto.
    BindingProvider wsbp = (BindingProvider) hcmDataLoader;
    Map<String, Object> requestContext = wsbp.getRequestContext();
    requestContext.put(BindingProvider.USERNAME_PROPERTY, username);
    requestContext.put(BindingProvider.PASSWORD_PROPERTY, password);
    return hcmDataLoader;
  6. Cargue los datos en Oracle Cloud HCM mediante la función importAndLoadData.
    HCMDataLoader hcmDataLoaderService = HCMDataLoaderUtil.getHCMDataLoaderService(url, username, password,
    		keystore);
    
    String parameters = ""; // args[1];
    
    try {
    	String response = hcmDataLoaderService.importAndLoadData(contentId, parameters);
    
    	return response;
    } catch (ServiceException e) {
    	logger.severe("Error occurred during importAndLoad call  ..." + e.getLocalizedMessage());
    	throw e;
    }
  7. Puede crear otra función para obtener el estado del archivo de datos que ha cargado:
    public static String invokeGetDataSetStatus(String url, String username, String password, String keystore,
    			Long processId, String getDataSetStatusDelay)
    			throws ServiceException, ParserConfigurationException, SAXException, IOException, InterruptedException {
    				//The code in the next steps is placed within this function body
    }
  8. Recupere la respuesta de estado mediante la función getDataSetStatus:
    HCMDataLoader hcmLoaderService = getHCMDataLoaderService(url, username, password, keystore);
    String response = hcmLoaderService.getDataSetStatus("ProcessId=" + processId);
    String loadStatus = getLoadStatusFromResponse(response); // To save the status from the response to a String variable

    getDataSetStatus devuelve un objeto XML que contiene detalles sobre el proceso de carga e importación.

  9. Cree otra función para analizar la respuesta XML desde la llamada getDataSetStatus.
    public static String getLoadStatusFromResponse(String xmlResult)
    			throws ParserConfigurationException, SAXException, IOException {
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    		DocumentBuilder builder = factory.newDocumentBuilder();
    		Document document = builder.parse(new InputSource(new StringReader(xmlResult)));
    		NodeList flowList = document.getElementsByTagName("DATA_SET_STATUS");
    		NodeList childList;
    		for (int i = 0; i < flowList.getLength(); i++) {
    			childList = flowList.item(i).getChildNodes();
    			for (int j = 0; j < childList.getLength(); j++) {
    				Node childNode = childList.item(j);
    				if ("DATA_SET".equals(childNode.getNodeName())) {
    					NodeList dataSeteChildNodes = childNode.getChildNodes();
    					{
    						for (int k = 0; k < dataSeteChildNodes.getLength(); k++) {
    							{
    								Node childDSNode = dataSeteChildNodes.item(k);
    								if ("STATUS".equals(childDSNode.getNodeName())) {
    									String status = dataSeteChildNodes.item(k).getTextContent().trim();
    									System.out.println("Current Status of the Data Set "
    											+ dataSeteChildNodes.item(k).getTextContent().trim());
    									return status;
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    		return "ERROR";
    	}
    
  10. Una vez completado el código Java, compítelo mediante el comando javac:
    • Para WebLogic Server 11g:
      javac -classpath path of the folder where with generated JAX-WS files;location of ws.api_1.1.0.0.jar HCMDataLoaderServiceSoapHttpPortClient.java
    • Para WebLogic Server 12c:
      javac -classpath path of the folder where with generated JAX-WS files;location of wls-api.jar HCMDataLoaderServiceSoapHttpPortClient.java
  11. Ejecute la clase HCMDataLoaderServiceSoapHttpPortClient para llamar al servicio de integración del cargador de datos de HCM mediante el comando java:
    • Para WebLogic Server 11g:
      java -classpath path of the folder where with generated JAX-WS files;location of weblogic.jar;location of jrf.jar com.oracle.xmlns.apps.hcm.common.dataloader.core.dataloaderintegrationservice.HCMDataLoaderServiceSoapHttpPortClient ContentId Parameters
    • Para WebLogic Server 12c:
      java -classpath path of the folder where with generated JAX-WS files;location of wlthint3client.jar;location of wls-api.jar com.oracle.xmlns.apps.hcm.common.dataloader.core.dataloaderintegrationservice.HCMDataLoaderServiceSoapHttpPortClient ContentId Parameters