Bonjour,
Pour ton problème, l'idée est d'écrire en sortie seulement les enregistrement du type 2 (Dispatch Date;Order No;Open Qty)
Et de compléter le premier enregistrement par les informations de l'enregistrement du type 1 (Material;Description;Vendor material no)
Pour ce faire tu utilises les composants suivant
tFileInputDelimited --> tMemorizeRow -> tMap -> TfileOuputDelimited.
Dans le tMemorizeRow, tu spécifies 3 lignes a sauvegarder (la courante, l'entête de type 2 et les données de type 1)
Dans le tMap, tu crées des variables pour déterminer des indicateurs :
Le type de donnée que tu vas lire (type 1 ou 2 ) que tu sauvegarde dans une variable global ,
type de variable Object
"Material".equals(row2.newColumn)?globalMap.put("TYPE","1"): "Dispatch Date".equals(row2.newColumn)?globalMap.put("TYPE","2"):""
Une variable de type Boolean pour déterminer si c'est le label que tu lis :
"Material".equals(row2.newColumn)||"Dispatch Date".equals(row2.newColumn)?true:false
Et enfin une variable de type boolean pour connaitre si c'est la première ligne de type 2 que tu lis :
"2".equals( (String)globalMap.get("TYPE") ) && Var.IsLabel ? true : false
Attention, cette dernière variable est a déclarer en première position pour exploiter l'ordre de rafraichissement des variables dans le tMap ( la globalVariable et IsLabel contiennent la valeur calculer pour l enregistrement précedent - elles seront mise a jour juste après
Ensuite en sortie du tMap, tu creer une 1ere sortie standard et une sortie "table join", tu as donc 2 zones de mapping, la première sera pour le 1er enregistrement, la seconde pour les enregistrements suivant
Tu actives les filtres sur ces sorties
filtre 1 :
"2".equals( (String)globalMap.get("TYPE") ) && !Var.IsLabel && Var.isFirstLine
filtre 2 :
"2".equals( (String)globalMap.get("TYPE") ) && !Var.IsLabel && !Var.isFirstLine
Pour le mapping tu sélectionnes les colonnes sources dont tu as besoin en fonction du premier enregistrement ou les autres.
Pour terminer, dans le mapping du premier enregistrement, tu récupères les 2 variables du tMemorizeRow, elles sont de la forme :
newColumn_tMemorizeRows_1[2]
Le 2 correspond a l'indice du tableau, 0 est l'enregistrement courant, 2 les donnée de l enregistrement de type 1. Il n'y a pas d'aide pour récupérer cette variable, il faut aller dans le code pour la syntaxe exacte.
Partager