Voici la conception de la solution que je souhaite proposer:
- tSetGlobalVar est ici pour initialiser la variable "finition" false. TLoop commence une boucle while avec
(Boolean)globalMap.get("finish") == false
comme condition de fin. TFileCopy est utilisé pour copier le fichier initial (A par exemple) dans un nouveau fichier (B).
- tFileInputDelimited lit le fichier B.
- tUniqRow élimine les doublons. Les enregistrements Uniques vont à tLogRow que vous devez remplacer par tSalesforceOutput. Duplique les enregistrements s'il y en a, allez dans tFileOutputDelimited appelé A (même nom que le fichier original) avec l'option "Lancer une erreur si le fichier existe déjà" non cochée.
- OnComponent OK après tUniqRow active le tJava qui fixe la nouvelle valeur pour la finition globale avec le code suivant:
if (((Integer)globalMap.get("tUniqRow_1_NB_DUPLICATES")) == 0) globalMap.put("finish", true);
Explaination avec les données d'échantillon suivantes:
ligne 1
ligne 2
ligne 3
ligne 2 ligne 4
ligne 2
ligne 5
ligne 3
Sur la 1ère itération, 5 dossiers de Uniques sont poussés dans tLogRow, 3 doublons sont poussés dans le fichier A et « finition » ne change pas car il y a des doublons.
Lors de la 2ème itération, les opérations sont répétées pour 2 enregistrements uniques et 1 en double.
Sur la 3ème itération, les opérations sont répétées pour 1 unique et comme il n'y a plus de doublon, "finish" est mis à true et la boucle se termine automatiquement.
Voici le résultat final:
Vous pouvez également décider d'utiliser une autre variable globale pour définir le niveau salesforce commettras (en utilisant la syntaxe (Integer)globalMap.get("commitLevel")
). Cette variable sera définie à 200 par défaut et à 1 dans le tJava s'il y a des doublons. En même temps, définissez "finish" sur true (sans tester le nombre de doublons) et vous aurez un niveau de validation de 200 pour la 1ère itération et de 1 pour la 2ème (et pas besoin de plus de 2 itérations).
Vous déciderez du meilleur choix en fonction du nombre de doublons potentiels, mais vous remarquerez que vous pouvez le faire sans modification de la conception du travail.
Je pense que cela devrait résoudre votre problème. Faites le moi savoir.
Cordialement,
TRF
Après avoir passé en revue ma 2ème option, il semble qu'il sera un peu plus compliqué que ce que j'ai écrit comme tUniqRow doive être contourné pendant l'itération 2bd. Si vous voulez adopter cette solution, remplacez tJava par un tJavaRow et ajoutez un second tSalesforceOutput après le niveau de validation défini sur 1. Enfin, il s'agit d'un processus différent. Il vous suffit de choisir lequel est le mieux adapté à votre cas d'utilisation. – TRF
Je ne suis pas sûr de savoir pourquoi le contenu du fichier changerait à chaque itération et donc le nombre de doublons changera – Edmondo1984
Parce qu'à chaque itération nous obtenons le 1er enregistrement pour un ID donné et poussons les doublons dans le fichier qui comptera moins d'enregistrements à chaque fois. – TRF