Bonjour à tous !
J’ai été confronté au besoin d’ajouter des champs spécifiques dans des courriers Word, via CRM 7.0. Ces champs spécifiques, comme leur nom l’indique, ne sont pas proposés par défaut par SAP lors de la création du Web Service qui sert d’interface entre SAP et Word. Fort heureusement, SAP a prévu un BAdI pour pallier ce potentiel manque.
Après avoir galéré une journée pour comprendre ce qu’il fallait faire et comment, j’ai enfin résolu le problème, et je partage aujourd’hui la méthode à mettre en place…
________
Dans CRM 7.0 (et supérieurs ?), il est possible de créer des modèles de courrier Word pour ajouter des fichiers à une opération commerciale (CRM Order).
Ces courriers Word peuvent être pré-alimentés avec des données issues de cet Order, mais il est également possible d’ajouter des zones spécifiques qui ne sont donc pas proposées par le standard, et ce via une implémentation de BAdI.
Créer un template Word
La note OSS 1566793 l’explicite mieux que je ne le ferais, mais pour résumer :
– dans le Template Designer, créer un nouveau Template ;
– renseigner le nom et une description, ainsi le nom du Web Service à utiliser, le type d’objet, et le type du document (Word ou Adobe par exemple) ;
– cliquer sur le bouton pour télécharger le schéma XML du Web Service ;
– cliquer sur le bouton pour démarrer le Designer (ceci ouvre une fenêtre Word vide) ;
– retourner sur le Web UI CRM et cliquer sur le bouton pour télécharger le template ;
– retourner dans Word et ouvrir le template ;
– dans l’onglet Développeurs de Word, cliquer sur Schéma, puis Schéma XML et ajouter un schéma avec pour source celui du Web Service ;
– décocher Valider le document en fonction des schémas attachés et cocher Permettre l’enregistrement au format XML même si non valide ;
– remplir le template comme désiré, les champs du Web Service sont disponibles via la structure XML importé par le schéma ;
– pour créer un champ non disponible dans le Web Service, écrire son identifiant en l’entourant de trois crochets, par exemple : [[[CUST_FIELD]]] ;
– sauvegarder le template et fermer Word ;
– retourner dans le Web UI CRM et uploader le template pour le sauvegarder automatiquement.
Implémentation de BAdI
La note OSS 1420943, là encore, explique la marche à suivre.
– créer une implémentation du BAdI CRM_OFFICE_TEMPLATE_BADI ;
– la classe implémentante possède trois méthodes mais seules deux d’entre elles sont nécessaires ;
– implémenter la méthode GET_ATTRIBUTES pour déclarer les champs spécifiques à envoyer au template Word ;
– pour cela, il suffit d’ajouter des lignes à la table interne CT_ATTRIBUTES (de structure [NAME;DESCRIPTION], par exemple [CUST_FIELDS;test]) ;
– implémenter la méthode GET_VALUES pour valoriser les champs ;
– pour cela, lire la table interne CT_VALUE de structure [NAME;VALUE] et valoriser chaque champ selon les règles de gestion requises ;
– dans cette même méthode, la structure IS_OBJECT contient les référence (type BOR) de l’objet (CRM Order) concerné (donc notamment le GUID d’en-tête) et la référence IR_CONTENT contient les paramètres valorisés du Web Service associé au template Word.
Attacher un fichier à un CRM Order
Dans le Web UI CRM, ouvrir l’Order concerné, aller dans le bloc Pièces jointes.
Créer une pièce jointe avec modèle et sélectionner le template Word.
Une ligne s’ajoute dans le bloc Pièces jointes. Il suffit de cliquer sur nom pour ouvrir avec Word le courrier généré, où les zones standard et spécifiques sont valoriées.