Vous avez tranquillement mis en place votre application de création de fournisseurs, ou de clients, ou de produits ou tout autre “objet”… qui vous permet de gérer de manière unitaire une demande d’ajout et puis un(e) utilisateur(rice) arrive et vous dit :
hey le boss K2 ! elle est bien ton appli, mais moi, tous mes <remplacez ici par votre objet> sont enregistrés dans un fichier Excel, me dit pas que je vais devoir tout me retaper à la main ?!??
Bon, bien évidemment, le sujet du traitement par lot n’avait jamais été abordé pendant la phase de specs… mais dans ce cas, piqué dans votre orgueil, la seule réponse possible est :
c’est qui le boss !?! laisse-moi
30 minutes1 heure et j’te fais ça !
Ce billet va donc, littéralement, vous sauver la vie, car nous allons vous montrer que vous ne vous êtes pas trop avancé, et que vous allez pouvoir vous faire un(e) nouvel(le) ami(e).
Les ingrédients nécessaires
- Un modèle fichier Excel.
- Un soupçon de smartobject.
- Une larme de processus.
- Un mininuscule smartform.
- Le custom broker Excel Import Service Broker dont on a déjà parlé dans les projets remarquables de la communauté.
- Des connaissances sur la gestion d’objets multivalués K2.
Qu’est-ce qu’on fait maintenant ?
Il faut dans un 1er temps installer le custom broker Excel Import Service Broker. La documentation accompagnant le broker est très bien faîte, donc vous pouvez la suivre aveuglément. A la fin de l’installation, vous allez générer un smartobject (par défaut son nom est Excel Import Service), il s’agit du SmartObject d’exécution qui sera nécessaire lors du transfert d’informations d’Excel vers K2.
Une fois le service broker installé, il va falloir créer le smartobject dédié à recevoir les informations, celui-ci aura une structure que vous allez définir et dont voici les contraintes :
- Ce smartobject devra avoir un ID et autant de propriétés que souhaité.
- Les propriétés doivent avoir le même nom que les colonnes de la 1ère ligne de fichier Excel afin que le service broker puisse faire l’association (peu importe l’ordre et la totalité des colonnes n’est pas non plus nécessaire).
- Il peut également y avoir des propriétés au niveau du SmO qui ne sont pas existantes dans Excel.
- Il faudra également une propriété “Identifiant du batch” afin d’identifier les données provenant d’un même fichier Excel.
Dans mon exemple voici mon fichier Excel et le SmO BatchSAP_SmoFromExcel
utilisé :

Ensuite, il ne reste plus qu’à mettre en place l’interface utilisateur qui va permettre de charger le fichier Excel, puis d’ajouter un bouton pour demander le transfert du contenu Excel dans le SmO et configurer la règle du bouton, pour cela il va falloir exécuter la règle Upload Excel Data to a SmartObject
du smartobject Excel Import Service
créé lors de l’installation du service broker.

Les options du service non utilisées dans cet exemple permettent :
Header Row Space Char Action
: mettre Replace ou Remove, va permettre de faire un traitement lorsque le nom de colonne Excel contient un espacede façon à trouver la propriété équivalente dans le SmO. Par défaut, il va remplacer l’espace par un _.Create Method Name
: permet de spécifier le nom de la méthode d’ajout d’un élément dans le SmO si la méthode en question n’a pas le nomCreate
.
A présent, toutes les données Excel sont dans un smartobject. Il est donc possible de démarrer une instance de workflow par ligne du SmO ou de créer un workflow qui va faire un traitement de chacune des lignes une par une :
- Dans le 1er cas, on déclenche un processus qui va déclencher un sous processus par ligne du smartobjet. Pour faire cela, on va s’appuyer sur la planificaton par jeton d’une activité, comme décrit dans l’article boucler sur un élément multivalué.
- Dans le 2ème cas, au sein d’une activité du processus, on prend le 1er élément de la méthode GetList sur le smartobject
BatchSAP_SmoFromExcel
filtré par rapport aux données qui nous intéressent (à savoir : batch concerné et statut de l’élément de liste positionné à “non traité”), on réalise le traitement souhaité (qui inclut la mise à jour du statut sur la ligne) puis on boucle sur l’activité jusqu’à ce que tout les éléments soient traités.
Il est bien évidemment possible de rajouter pléthore de fonctionnalités supplémentaires, comme une interFace de suivi des traitements, un démarrage planifié du traitement, une gestion des erreurs par ligne ou globale etc…
Quelques exemples d’utilisation
Dans cette première application, dont les copies d’écran ci-dessus ont été tirées, l’idée est de récupérer des données sur des fournissuers provenant d’un fichier Excel pour les créer dans SAP. Le formulaire et le workflow ont été un peu complexifiés pour gérer les besoins suivants :
- Possibilité de planifier l’intégration (cas de gros volumes de données qu’on ne ferait tourner que la nuit).
- Gestion des erreurs ligne par ligne avec interface de suivi et possibilité de correction de la donnée avant réintégration.
- Smartobjects utilisant le connecteur K2 pour SAP.
Dans cette seconde application, l’idée consiste à gérer le fichier Excel comme une source qui va déclencher autant de fois le processus de validation qu’il y a de lignes dans le fichier. Cela va donc simuler la soumission du formulaire de création client. Le besoin métier est le suivant : en tant que gestionnaire d’un compte entreprise pour une mutuelle, je souhaiterai affilier plusieurs salariés en même temps et non pas le faire un à un, chaque affiliation suit ensuite son propre processus de validation de manière indépendante des autres.
N’hésitez pas à utiliser les commentaires si vous avez des questions.
Happy K2ing!