Usar o Serviço Web de Integração do Carregador de Dados do HCM

É possível usar um serviço Web SOAP do Carregador de Dados do HCM para importar e carregar os arquivos de dados preparados no servidor WebCenter Content. Você pode processar esses arquivos de dados manualmente na página Importar e Carregar Dados na interface do usuário do Oracle Cloud HCM.

Primeiro instale o Oracle JDeveloper 11.1.1.9 para obter as bibliotecas necessárias para chamar web services SOAP do Oracle Cloud HCM.

Sobre o Serviço de Integração do Carregador de Dados do HCM

Você pode usar um serviço Web SOAP do Oracle Cloud HCM para fazer upload de arquivos usando a API SOAP.

Você pode obter os detalhes do serviço Web Data Loader Service do Oracle Fusion Cloud Human Resources no link Developer Connect, em Ferramentas no menu Navegador, da mesma forma que qualquer outro serviço Web SOAP.

Você pode chamar o web service SOAP depois de colocar o arquivo ZIP que contém os arquivos DAT no servidor WebCenter Content. Em seguida, você pode protegê-lo com a conta hcm/dataloader/import. Este serviço Web pode ser usado para importar e carregar dados no Oracle Cloud HCM.

Sobre os Envelopes SOAP para Invocar o Carregador de Dados do HCM

Quando você chama o serviço Web SOAP do Carregador de Dados do HCM, os envelopes de solicitação e resposta são enviados e recebidos.
Você pode usar esses envelopes para fazer solicitações ao serviço Web SOAP HCMDataLoader:
http://{Host}/hcmCommonDataLoader/HCMDataLoader

Sobre o método importAndLoadData

O método importAndLoadData inicia o processamento de um arquivo de dados hospedado no servidor WebCenter Content. É um job assíncrono que retorna somente o ProcessId do processo enviado.

Use esse envelope para fazer uma chamada para a função importAndLoadData no serviço 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>

Os parâmetros do método importAndLoadData que são enviados com o envelope são:

ContentId: ID do Conteúdo do arquivo no servidor WebCenter Content (o mesmo valor do parâmetro dDocName na chamada Java WebCenter Content).

Parâmetros: pares nome-valor. Os seguintes nomes de parâmetro estão disponíveis, mas não são obrigatórios:

  • ImportMaximumErrors: Porcentagem das linhas de arquivo em um erro que pode ocorrer para um objeto de negócios antes que o processo de importação seja interrompido.

  • LoadMaximumErrors: Porcentagem de instâncias de objetos de negócios em um erro que pode ocorrer em um objeto de negócios antes que a validação e o processo de carregamento sejam interrompidos.

  • LoadConcurrentThreads: Número de threads concorrentes ao validar ou carregar.

  • LoadGroupSize: Número de objetos de negócios processados como uma única unidade de trabalho por um thread simultâneo.

  • FileEncryption: Tipo de criptografia de arquivo. Por exemplo, Criptografia Baseada em Senha (PBE).

  • DeleteSourceFile: valor Y ou N. Se definido como Y ou deixado em branco, exclui o arquivo de origem do servidor WebCenter Content depois que o conteúdo do arquivo é transferido para as tabelas temporárias do Carregador de Dados do HCM e não é mais necessário.

Por exemplo, a tag <ns1:Parameters> pode conter os seguintes pares de nome e valor:<ns1:Parameters>ImportMaximumErrors=100,LoadMaximumErrors=100,LoadConcurrentThreads=4,FileEncryption=PGPSIGNED,DeleteSourceFile=N</ns1:Parameters>

O servidor responde com este envelope:
<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>

Sobre o método getDataSetStatus

O método getDataSetStatus retorna o status atual do arquivo de dados especificado.

Use esse envelope para fazer uma chamada para a função getDataSetStatus no serviço 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>

Os parâmetros do método getDataSetStatus que são enviados com o envelope são:

ContentId: ID do Conteúdo do arquivo no servidor WebCenter Content (o mesmo valor do parâmetro dDocName na chamada Java WebCenter Content).

ProcessId: O ID do processo iniciado e retornado pelo método importAndLoadData.

Gerar uma Classe de Proxy para Chamar o HCM DataLoader

Uma opção para chamar um web service SOAP do Oracle Cloud HCM é usar classes de proxy geradas.

Você pode gerar classes de proxy fornecendo o URL do arquivo WSDL de serviço para seu gerador de escolha. Essas classes de proxy são usadas para chamar o serviço Web.

Observação:

Os web services SOAP do Oracle Cloud HCM são protegidos pelas políticas de segurança do Oracle Web Services Manager (OWSM).
  1. Acesse o Oracle Cloud HCM.
  2. No menu Navegador, localize o cabeçalho Ferramentas e clique em Conexão do Desenvolvedor.
  3. Na caixa de pesquisa Localizar, digite Carregador de Dados e clique no ícone de pesquisa.
  4. Clique no serviço Data Loader. A página Resumo do serviço é exibida.
    A página Resumo mostra informações relevantes para o serviço Web SOAP, como o local do arquivo WSDL.
  5. Abra um prompt de comando e execute o comando wsimport, que está disponível em $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>

    No comando, o primeiro parâmetro é a pasta em que os arquivos gerados precisam ser colocados. O segundo parâmetro também é a pasta na qual os arquivos gerados precisam ser colocados. O terceiro parâmetro é o URL WSDL do Carregador de Dados do HCM. Por exemplo:

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

    Os arquivos gerados são colocados nas duas pastas a seguir:

    • com

    • sdo

  6. Adicione o código gerado a um arquivo JAR:
    zip loaderIntegrationProxy.jar -r * -

Sobre as Implicações de Segurança ao Usar o Carregador de Dados do HCM

Quando um cliente chama um serviço Web SOAP do Carregador de Dados do HCM, ele deve atender à política de proteção de mensagens para garantir que o payload seja transportado de forma criptografada ou pela camada de transporte SSL.

O serviço Web HCMDataLoader é protegido usando a seguinte política do Oracle Web Services Manager: oracle/wss11_saml_or_username_token_with_message_protection_service_policy.

No lado do cliente, você pode usar a seguinte política do Oracle Web Services Manager:oracle/wss11_username_token_with_message_protection_client_policy.

Para usar esta política, a mensagem deve ser criptografada usando uma chave pública fornecida pelo servidor. Quando a mensagem atingir o servidor, ela poderá ser descriptografada pela chave privada do servidor. Você pode criar um KeyStore para importar o certificado fornecido no arquivo WSDL de serviço. No entanto, por motivos de segurança, você deve solicitar ao usuário a senha do Oracle Cloud HCM sempre que executar seu código.

Você pode criar um arquivo de texto de propriedades que possa ser analisado dentro do código para acessar as informações de Keystore, por exemplo:

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 ao usuário suas credenciais do Oracle Cloud HCM usando o seguinte:

// 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();

No exemplo, fusionUserPass é uma variável que pode ser usada para armazenar a senha do Oracle Cloud HCM do usuário e, em seguida, passada para o serviço Web SOAP do Carregador de Dados do HCM.

Chamar o Serviço Web SOAP HCM DataLoader

Você pode carregar dados de um arquivo ZIP para o Oracle Cloud HCM usando o serviço Web SOAP do Carregador de Dados do HCM de uma classe Java.

Primeiro crie um arquivo ZIP e faça upload dele para o servidor WebCenter Content manualmente ou programaticamente. Em seguida, você pode carregar os dados usando o serviço Web importAndLoadData.

Observação:

As amostras de código fornecidas nesta solução foram testadas com o JDK versão 8 para chamar serviços Web no Oracle WebLogic Server 12c. Para uso com outras versões do JDK e do Oracle WebLogic Server, teste o código com bibliotecas específicas das versões desejadas.

  1. Crie uma classe de cliente na pasta: /com/oracle/xmlns/apps/hcm/common/dataloader/core/dataloaderintegrationservice/.
    Para gerar a classe, você precisa ter o seguinte arquivo JAR:
    • Para o Servidor WebLogic 11g: ws.api_1.1.0.0.jar
    • Para o Servidor WebLogic 12c: wls-api.jar

    Esse arquivo JAR está disponível no seguinte local na pasta de instalação JDeveloper:

    • Para o Servidor WebLogic 11g: $MIDDLEWARE_HOME/modules
    • Para o Servidor WebLogic 12c: $MIDDLEWARE_HOME/wlserver/server/lib
  2. Certifique-se de importar as seguintes bibliotecas Java no seu Código Java:
    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. Crie uma função que retorne um objeto HCMDataLoader e receba url, username, password e keystore como parâmetros. Por exemplo:
    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 do corpo da função, crie o objeto de serviço 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. Crie um objeto BindingProvider e defina seus 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. Carregue os dados no Oracle Cloud HCM usando a função 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. Você pode criar outra função para obter o status do arquivo de dados carregado:
    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 a resposta de status usando a função 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

    O getDataSetStatus retorna um objeto XML que contém detalhes sobre o processo de carregamento e importação.

  9. Crie outra função para analisar a resposta XML da chamada 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. Depois que seu código Java estiver concluído, compile-o usando o comando javac:
    • Para o Servidor WebLogic 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 o Servidor WebLogic 12c:
      javac -classpath path of the folder where with generated JAX-WS files;location of wls-api.jar HCMDataLoaderServiceSoapHttpPortClient.java
  11. Execute a classe HCMDataLoaderServiceSoapHttpPortClient para chamar o Serviço de Integração do Carregador de Dados do HCM, usando o comando java:
    • Para o Servidor WebLogic 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 o Servidor WebLogic 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