Saisie de données tabulaires avec le Viewer

La commande View vous permet d’afficher des données sous format tabulaire. Dans cet article nous décrivons comment vous pouvez permettre à un utilisateur de saisir des données dans des cellules de table et comment ajouter un bouton “Sauvegarder” qui permette de sauvegarder les données modifiées à l’aide d’un InputScript.

Deux méthodes existent pour afficher des données sous format tabulaire html:

  • Vous pouvez utiliser un fichier HTML gabarit qui contient un tableau avec les variables scriptes avec la désignation ###-.  Dans ce cas GuiXT génère le tableau en utilisant les valeurs des variables scriptes. Veuillez vous reporter à Display complex business objects using html pour un exemple.
     
  • Ou vous utilisez une page html fixe (pas un fichier gabarit) avec une routine JavaScript et l’interface connectHTML. Veuillez vous reporter au dernier exemple de l’article Automatisation de pages HTML.

Dans notre exemple nous utilisons la fonctionnalité avec le fichier gabarit HTML et pas l’interface connectHTML. Ce choix n’a aucune importance pour le reste de l’article. L’approche avec le fichier gabarit est plus simple en ce qui concerne le JavaScript utilisé mais l’approche connectHTML est plus flexible en ce qui concerne la présentation finale du tableau.

Tous les fichiers scriptes et le fichier HTML pour l’exemple sont contenus dans ce fichier zip. Décomprimez le fichier dans un répertoire de scriptes votre choix pour vos propres tests.

L’application aura l’aspect suivant:

Sap Guixt viewtableupdate01 Saisie de données tabulaires avec le Viewer
Nous ajoutons un bouton poussoir “Contacts” dans la transaction VAP1, sur l’écran initial

 

 

Sap Guixt viewtableupdate02 Saisie de données tabulaires avec le Viewer
Avec un seul click, les contacts pour le client spécifié seront affichés. L’utilisateur peut changer un ou plusieurs numéros de téléphone.

 

Sap Guixt viewtableupdate03 Saisie de données tabulaires avec le Viewer
Lorsque l’utilisateur appuie sur le bouton “Sauvegarder”, les numéros de téléphone sont transmis à un InputScript qui mettra à jour les numéros de téléphone dans la transaction VAP2.

 

Etape 1: Ajouter un nouveau bouton poussoir

Sap Guixt viewtableupdate16 Saisie de données tabulaires avec le Viewer

Le bouton poussoir lance l’InputScript “afficher_contacts.txt” qui positionne un repère V[display_contacts] et revient.


  
Sap Guixt viewtableupdate05 Saisie de données tabulaires avec le Viewer

Etape 2: Lire les numéros de téléphone

Le BAPI BAPI_CUSTOMER_GETCONTACTLIST est invoqué dans le scripte GuiXT et lit les informations du contact avec les numéros de téléphone. Nous devons ajouter des zéros devant le numéro de client vu que le BAPI ne convertit pas le format externe (sans zéros devant le numéro) dans le format interne.

Sap Guixt viewtableupdate04 Saisie de données tabulaires avec le Viewer

 

Etape 3: Remplir les variables scriptes dans le fichier gabarit

Le fichier modèle HTML attend des variables indexées, c’est à dire cont_1, cont_2,… pour construire les lignes de la table.

Sap Guixt viewtableupdate06 Saisie de données tabulaires avec le Viewer

Les variables cont_1, cont_2,… sont alors une copie des lignes retournées par le BAPI, avec la structure BAPICONTACT_ADDRESSDATA:

Sap Guixt viewtableupdate07 Saisie de données tabulaires avec le Viewer

GuiXT permet d’adresser les composantes symboliquement, c’est à dire V{cont_1](BAPICONTACT_ADDRESSDATA-TEL1NUMBR) pour le numéro de téléphone. Nous pouvons utiliser cette notation pour le fichier gabarit HTML:

Sap Guixt viewtableupdate08 Saisie de données tabulaires avec le Viewer


Le code HTML ci-dessous, utilisé dans le template pour la commande View,  génère le corps scrollable de la table:

Sap Guixt viewtableupdate09 Saisie de données tabulaires avec le Viewer

 

Nous ajoutons un titre, les désignations des colonnes et deux boutons: un dans le coin en haut à droite pour fermer l’affichage et un bouton “Sauvegarder” en bas qui va mettre les numéros de téléphone à jour:

Sap Guixt viewtableupdate10 Saisie de données tabulaires avec le Viewer

Le le petit bouton “Fermer” est défini comme suit:
 

Sap Guixt viewtableupdate11 Saisie de données tabulaires avec le Viewer

Lorsque l’on appuie sur le bouton la fonction JavaScript “close_contacts()” est lancée:

Sap Guixt viewtableupdate12 Saisie de données tabulaires avec le Viewer

… qui invoque l’InputScript “fermer_contacts.txt”:

Sap Guixt viewtableupdate13 Saisie de données tabulaires avec le Viewer

La commande “Return” relance l’exécution du scripte GuiXT pour cet écran et, vu que la variable repère V[display_contacts] n’a plus de valeur, la page HTML va être supprimée de l’écran.

Le scripte “Sauvegarder” est un peu plus compliqué. Le bouton “Sauvegarder” va invoquer une fonction JavaScript “save_contacts()” qui va form
er un long string de tous les numéros de téléphone séparés les uns des autres par ‘|’. Pour des raisons de sécurité, la routine va tout d’abord supprimer tout caractère ‘|’ qui existerait dans les numéros de téléphone, qui bien-sûr ne devrait pas exister mais qui pourrait, en cas d’existence,  détruire toute la logique du scripte. Le string complet sera transmis à un InputScript “sauver_contacts.txt”:

 

  Sap Guixt viewtableupdate14 Saisie de données tabulaires avec le Viewer

Une alternative serait de ne transmettre que les numéros de téléphone modifiés avec un numéro de ligne. Dans le cas où il serait possible à l’utilisateur de modifier plus d’une colonne du tableau, nous nous serions décidé un string pour chaque colonne.

L’InputScript “sauver_contacts.txt” doit alors mettre à jour les numéros de téléphone modifiés dans le système SAP. Nous pourrions le faire avec un appel de module de fonction mais semblerait qu’aucun BAPI approprié n’existe et que nous serions obligé de développer une fonction appropriée nous même pour cette tâche. Dans notre exemple d’implémentation nous n’utilisons pas d’appel de fonction mais utilisons la transaction standard du système SAP pour mettre à jour les numéros de téléphone. L’analyse de la structure du numéro de téléphone est un peu compliquée mais le reste s’exécute facilement:

 

Sap Guixt viewtableupdate15 Saisie de données tabulaires avec le Viewer

Saisie de données tabulaires avec le Viewer