Welcome Guest! Log in
×

Notice

The forum is in read only mode.
Stambia versions 2.x, 3.x, S17, S18, S19 and S20 are reaching End of Support January, 15th, 2024. Please consider upgrading to the supported Semarchy xDI versions. See Global Policy Support and the Semarchy Documentation.

The Stambia User Community is moving to Semarchy! All the applicable resources have already been moved or are currently being moved to their new location. Read more…

Topic-icon Question Récupération du nom d'un fichier

More
20 Jan 2016 10:49 #1 by letancel
Récupération du nom d'un fichier was created by letancel
Bonjour,

J'ai un répertoire PROD dans lequel un fichier (dont la structure du nom est Stambia_AAAAMMDD.txt") est déposé aléatoirement.
J'ai reversé le fichier en créant une métadonnée Fichier pour pouvoir l'exploiter, cette partie fonctionne parfaitement.

Pour intégrer automatiquement ce fichier en base, j'ai besoin de scanner quotidiennement le répertoire PROD, et , si le fichier est présent, utiliser la métadonnée Fichier à partir de son nom.
Comment récupérer le nom du fichier présent dans le répertoire PROD et est-il possible de rendre dynamique le Physical Name de la métadonnée du fichier?


Merci :-)
More
20 Jan 2016 18:42 #2 by Thomas BLETON
Replied by Thomas BLETON on topic Récupération du nom d'un fichier
Bonjour,
Il y a plusieurs moyens en utilisant l'action FileWait.
Voici deux liens sur le sujet :
stambia.org/doc/80-process/how-to/67-how...he-input-file-exists
stambia.org/doc/80-process/how-to/19-how...s-on-a-list-of-files
En espérant que cela vous donnera un point de départ :)
More
21 Jan 2016 14:12 #3 by letancel
Replied by letancel on topic Récupération du nom d'un fichier
Bonjour,

Le principe énoncé ici : stambia.org/doc/80-process/how-to/67-how...he-input-file-exists s'applique en effet.
La grosse différence est que, dans mon cas, le nom du fichier n'est pas figé, il est constitué d'une partie fixe : "nomFichier" et d'une partie variable basée sur une date AAAAMMDD : nomFichier_AAAAMMDD.txt.
Ce fichier a toujours la même structure, je l'ai donc reversé, mais comment peut-on récupérer le nom du fichier en scannant le répertoire, puis l'utiliser en tant que physical name de la métadonnée du fichier?
More
21 Jan 2016 17:31 #4 by Thomas BLETON
Replied by Thomas BLETON on topic Récupération du nom d'un fichier
La détection des fichiers peut être effectuée dans un process avec une action FileWait.
Glissez la metadata du répertoire à scruter sur FileWait.
Puis renseignez un masque comme "nomFichier_*.txt" dans la propriété WAIT_FILE_INCLUDES.
Enfin, placez un ExecuteDelivery en Bind derrière ce FileWait, pour appeler votre process/mapping, en passant en paramètre le nom du fichier, comme décrit dans le 2ème article (:{FILE_NAME}:)
More
21 Jan 2016 17:49 #5 by letancel
Replied by letancel on topic Récupération du nom d'un fichier
Effectivement ça fonctionne merci!

Nous avons testé une autre méthode juste avant votre post, basé sur le même principe :
1. FileWait avec WAIT_FILE_INCLUDES = "nomFichier_*.txt"
2. Lien Direct Bind vers un Scripting, avec Expression Editor = __ctx__.publishVariable("~/FileNameValue",":{FILE_NAME}:");
+ Paramétrage de la métadonnée du fichier avec Physical Name = ${~/FileNameValue}$
3. Lien Scripting vers le mapping d'intégration du fichier
Et ça fonctionne :-)
More
21 Jan 2016 17:59 #6 by Thomas BLETON
Replied by Thomas BLETON on topic Récupération du nom d'un fichier
Parfait !

Remarque : si plusieurs fichiers sont présent, la méthode que vous décrivez traitement le dernier fichier. C'est lié au fait que le Bind "itère" seulement l'action qui est en cible du lien. Les actions suivantes ne sont pas itérées.
More
22 Jan 2016 17:02 #7 by Josserand BRINON
Replied by Josserand BRINON on topic Récupération du nom d'un fichier
En effet, il peut y avoir plusieurs fichiers dans le cas cité par @letancel (avec qui je travaille).
Après avoir vérifié que le FileWait récupère bien le 1er fichier selon l'ordre l'alphabétique (indispensable dans notre cas), nous forçons le DirectBind à ne faire qu'une seule exécution, en ajoutant la condition suivante : ${FileWait/CORE_NB_EXECUTIONS}$==1

Nous avons tenté de remplacer le DirectBind par une flèche verte (et ainsi éviter de forcer un Bind à n'itérer qu'une seule fois), mais le paramètre :{FILE_NAME}: fonctionnant en Bind ne semble pas pouvoir se remplacer par ${FileWait/FILE_NAME}$... Ou alors nous nous y sommes mal pris.

Nous ne sommes pas certains que ça soit la solution optimale, en tout cas, ça marche bien.
Si vous avez une solution plus propre que celle que nous avons décrite sur ce post, nous sommes preneurs :)
Merci.
More
22 Jan 2016 17:08 #8 by Thomas BLETON
Replied by Thomas BLETON on topic Récupération du nom d'un fichier
Effectivement pour récupérer le nom de fichier dans :{FILE_NAME}: il faut un lien de type Bind.
Pour limiter à un seul fichier, avez-vous essayer de mettre la paramètre "Wait File Nb Files" à 1 ?