Utiliser le service Web d'intégration du chargeur de données HCM

Vous pouvez utiliser un service Web SOAP du chargeur de données HCM pour importer et charger les fichiers de données stockés temporairement sur le serveur WebCenter Content. Vous pouvez traiter ces fichiers de données manuellement à partir de la page Importer et charger des données de l'interface utilisateur Oracle Cloud HCM.

Vous devez d'abord installer Oracle JDeveloper 11.1.1.9 pour obtenir les bibliothèques requises pour appeler les services Web SOAP à partir d'Oracle Cloud HCM.

A propos du service d'intégration du chargeur de données HCM

Vous pouvez utiliser un service Web SOAP Oracle Cloud HCM pour télécharger des fichiers à l'aide de l'API SOAP.

Vous pouvez obtenir les détails du service Web Data Loader Service à partir d'Oracle Fusion Cloud Human Resources dans le lien Developer Connect, sous Outils dans le menu Navigateur, comme tout autre service Web SOAP.

Vous pouvez appeler le service Web SOAP après avoir placé le fichier ZIP contenant les fichiers DAT sur le serveur WebCenter Content. Vous pouvez ensuite le sécuriser avec le compte hcm/dataloader/import. Ce service Web peut être utilisé pour importer et charger des données dans Oracle Cloud HCM.

A propos des enveloppes SOAP permettant d'appeler le chargeur de données HCM

Lorsque vous appelez le service Web SOAP du chargeur de données HCM, les enveloppes de demande et de réponse sont envoyées et reçues.
Vous pouvez utiliser ces enveloppes pour effectuer des demandes au service Web SOAP HCMDataLoader :
http://{Host}/hcmCommonDataLoader/HCMDataLoader

A propos de la méthode importAndLoadData

La méthode importAndLoadData lance le traitement d'un fichier de données hébergé sur le serveur WebCenter Content. Il s'agit d'un travail asynchrone qui renvoie uniquement la valeur ProcessId du processus soumis.

Utilisez cette enveloppe pour appeler la fonction importAndLoadData dans le service 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>

Les paramètres de la méthode importAndLoadData envoyés avec l'enveloppe sont les suivants :

ContentId : ID de contenu du fichier sur le serveur WebCenter Content (valeur identique au paramètre dDocName dans l'appel Java WebCenter Content).

Paramètres : paires nom-valeur. Les noms de paramètre suivants sont disponibles, mais ne sont pas obligatoires :

  • ImportMaximumErrors : pourcentage de lignes de fichier dans une erreur qui peut se produire pour un objet fonctionnel avant arrêt du traitement d'importation.

  • LoadMaximumErrors : pourcentage d'instances d'objet fonctionnel en erreur pouvant survenir pour un objet fonctionnel avant arrêt du traitement de validation et de chargement.

  • LoadConcurrentThreads : nombre de threads simultanés lors de la validation ou du chargement.

  • LoadGroupSize : nombre d'objets fonctionnels traités comme une seule unité de travail par un thread simultané.

  • FileEncryption : type de chiffrement du fichier. Par exemple, PBE (Password Based Encryption).

  • DeleteSourceFile : valeur Y ou N. Si la valeur est Y ou laissée vide, le fichier source est supprimé du serveur WebCenter Content une fois le contenu du fichier transféré dans les tables intermédiaires du chargeur de données HCM et n'est plus requis.

Par exemple, la balise <ns1:Parameters> peut contenir les paires nom/valeur suivantes :<ns1:Parameters>ImportMaximumErrors=100,LoadMaximumErrors=100,LoadConcurrentThreads=4,FileEncryption=PGPSIGNED,DeleteSourceFile=N</ns1:Parameters>

Le serveur répond avec cette enveloppe :
<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>

A propos de la méthode getDataSetStatus

La méthode getDataSetStatus renvoie le statut en cours du fichier de données spécifié.

Utilisez cette enveloppe pour appeler la fonction getDataSetStatus dans le service 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>

Les paramètres de la méthode getDataSetStatus envoyés avec l'enveloppe sont les suivants :

ContentId : ID de contenu du fichier sur le serveur WebCenter Content (valeur identique au paramètre dDocName dans l'appel Java WebCenter Content).

ProcessId : ID du processus lancé et renvoyé par la méthode importAndLoadData.

Générer une classe de proxy pour l'appel de HCM DataLoader

L'une des options d'appel d'un service Web SOAP Oracle Cloud HCM consiste à utiliser des classes proxy générées.

Vous pouvez générer des classes de proxy en indiquant l'URL du fichier WSDL du service au générateur de votre choix. Ces classes proxy sont utilisées pour appeler le service Web.

Remarque :

Les services Web SOAP d'Oracle Cloud HCM sont protégés par les stratégies de sécurité OWSM (Oracle Web Services Manager).
  1. Connectez-vous à Oracle Cloud HCM.
  2. Dans le menu Navigateur, localisez l'en-tête Outils, puis cliquez sur Connexion au développeur.
  3. Dans la zone de recherche Rechercher, saisissez Chargeur de données, puis cliquez sur l'icône de recherche.
  4. Cliquez sur le service Chargement de données. La page Synthèse du service apparaît.
    La page Récapitulatif affiche les informations pertinentes pour le service Web SOAP, telles que l'emplacement du fichier WSDL.
  5. Ouvrez une invite de commande, puis exécutez la commande wsimport, disponible sur $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>

    Dans la commande, le premier paramètre est le dossier dans lequel les fichiers générés doivent être placés. Le second paramètre est également le dossier dans lequel les fichiers générés doivent être placés. Le troisième paramètre est l'URL WSDL du chargeur de données HCM. Par exemple :

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

    Les fichiers générés sont placés dans les deux dossiers suivants :

    • com

    • sdo

  6. Ajoutez le code généré à un fichier JAR :
    zip loaderIntegrationProxy.jar -r * -

A propos des implications de sécurité lors de l'utilisation du chargeur de données HCM

Lorsqu'un client appelle un service Web SOAP du chargeur de données HCM, ce dernier doit satisfaire la stratégie de protection des messages pour s'assurer que les données traitées sont transportées de manière cryptée ou via la couche de transport SSL.

Le service Web HCMDataLoader est sécurisé à l'aide de la stratégie Oracle Web Services Manager suivante : oracle/wss11_saml_or_username_token_with_message_protection_service_policy.

Du côté client, vous pouvez utiliser la stratégie Oracle Web Services Manager suivante :oracle/wss11_username_token_with_message_protection_client_policy.

Pour utiliser cette stratégie, le message doit être chiffré à l'aide d'une clé publique fournie par le serveur. Lorsque le message atteint le serveur, il peut être déchiffré par la clé privée du serveur. Vous pouvez créer un élément KeyStore pour importer le certificat fourni dans le fichier WSDL du service. Toutefois, pour des raisons de sécurité, vous devez inviter l'utilisateur à saisir le mot de passe Oracle Cloud HCM chaque fois que vous exécutez le code.

Vous pouvez créer un fichier texte de propriétés qui peut être analysé dans votre code pour accéder aux informations Keystore, par exemple :

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=;

Invitez l'utilisateur à fournir ses informations d'identification Oracle Cloud HCM à l'aide des éléments suivants :

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

Dans l'exemple, fusionUserPass est une variable qui peut être utilisée pour stocker le mot de passe Oracle Cloud HCM de l'utilisateur, puis transmise au service Web SOAP du chargeur de données HCM.

Appeler le service Web SOAP HCM DataLoader

Vous pouvez charger des données à partir d'un fichier ZIP vers Oracle Cloud HCM à l'aide du service Web SOAP du chargeur de données HCM à partir d'une classe Java.

Créez d'abord un fichier ZIP et téléchargez-le vers le serveur WebCenter Content manuellement ou par programmation. Vous pouvez ensuite charger les données à l'aide du service Web importAndLoadData.

Remarque :

Les exemples de code fournis dans cette solution ont été testés avec JDK version 8 pour appeler des services Web sur Oracle WebLogic Server 12c. Pour une utilisation avec d'autres versions de JDK et d'Oracle WebLogic Server, testez le code avec des bibliothèques spécifiques aux versions souhaitées.

  1. Créez une classe client dans le dossier : /com/oracle/xmlns/apps/hcm/common/dataloader/core/dataloaderintegrationservice/.
    Pour générer la classe, vous devez disposer du fichier JAR suivant :
    • Pour WebLogic Server 11g : ws.api_1.1.0.0.jar
    • Pour WebLogic Server 12c : wls-api.jar

    Ce fichier JAR est disponible à l'emplacement suivant dans le dossier d'installation JDeveloper :

    • Pour WebLogic Server 11g : $MIDDLEWARE_HOME/modules
    • Pour WebLogic Server 12c : $MIDDLEWARE_HOME/wlserver/server/lib
  2. Veillez à importer les bibliothèques Java suivantes dans votre code 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. Créez une fonction qui renvoie un objet HCMDataLoader et qui reçoit les paramètres url, username, password et keystore. Par exemple :
    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. Dans le corps de la fonction, créez l'objet de service 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. Créez un objet BindingProvider et définissez ses paramètres de contexte.
    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. Chargez les données dans Oracle Cloud HCM à l'aide de la fonction 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. Vous pouvez créer une autre fonction pour obtenir le statut à partir du fichier de données que vous avez téléchargé :
    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. Récupérez la réponse de statut à l'aide de la fonction 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 renvoie un objet XML contenant des détails sur le processus de chargement et d'importation.

  9. Créez une autre fonction pour analyser la réponse XML à partir de l'appel 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. Une fois le code Java terminé, compilez-le à l'aide de la commande javac :
    • Pour 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
    • Pour WebLogic Server 12c :
      javac -classpath path of the folder where with generated JAX-WS files;location of wls-api.jar HCMDataLoaderServiceSoapHttpPortClient.java
  11. Exécutez la classe HCMDataLoaderServiceSoapHttpPortClient pour appeler le service d'intégration du chargeur de données HCM à l'aide de la commande java :
    • Pour 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
    • Pour 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