Automatisation de pages HTML

La commande View vous permet d’afficher des pager HTML (internet, intranet ou utiliser votre propre fichier ou un fichier template). L’affichage peut soit, être directement intégré dans l’écran SAP ou dans une fenêtre séparée. L’URL que vous spécifiez dans la commande View peut contenir une ou plusieurs variables &V[xxx], par ex.:

View (10,40) (30,120) “http://is0012/catalog/docu/&V[material].html”

En plus de la flexibilité pour la construction du string URL, GuiXT offre la possibilité de définir des actions automatiques sur la page affichée et de saisir ou lire des valeurs sur la page.

Pour cette fonctionnalité, il vous faut pour cela les composantes InputAssistant et Viewer.

Nous commençons avec un exemple simple d’affichage d’informations financières d’une société à travers l’appel d’une page internet sur laquelle on saisit automatiquement le nom de la société dans un champ de saisie et on appuie sur un bouton poussoir.

Sur l’écran SAP, vous présentez à l’utilisateur un petit menu où il peut sélectionner la société (ou saisir le nom directement) et appuyer sur un bouton pour faire afficher les données financières:

Sap Guixt connect01 Automatisation de pages HTML //Scripte GuiXT
Offset (18,1)

Box (0,0) (7,36) “Company information”
Radiobutton
(1,1) “DaimlerChrysler AG” name=Company value=“DaimlerChrysler”
Radiobutton
(2,1) “Intel Corporation” name=Company value=“Intel”
Radiobutton
(3,1) “SAP AG” name=Company value=“SAP”
InputField
(4,1) “Company name” (4,16) size=16 maxlength=60 name=Company
Pushbutton
(6,1) “Financials” process=“show_financials.txt”

 

L’InputScript “show_financials.txt” ouvre un une vue HTML, saisit le nom de la société et appuie sur le bouton “Search”:

Sap Guixt connect02 Automatisation de pages HTML // InputScript “show_financials.txt”
View (0,0) (40,120) “http://finance.google.com” -floating

// Saisir le nom de la société et appuyer su le bouton “Search”
Set html[text_q] “&V[Company]“
connectHTML click=“submit_Search”

Comme vous pouvez le voir dans l’InputScript, vous pouvez adresser le champ de saisie de la page HTML avec la commande Set comme une variable normale de l’InputAssistant, sauf qu’au lieu de Set V[...] “valeur” vous utilisez Set html[...] “valeur”. Pour appuyer sur le bouton sur la page HTML ou cliquer sur un lien, vous pouvez utiliser la commande connectHTML click=“…”.

Comment savoir que le champ de saisie sur la page HTML porte le nom “text_q”, et que le bouton s’appelle “submit_Search”? GuiXT utilise un nombre de règles pour la construction du nom; les règles sont décrites dans la documentation de la commande  connectHTML. Il y a deux méthodes pour obtenir les noms affichés:

La méthode la plus simple est d’utiliser la commande connectHTML -shownames dans un InputScript. Pendant le développement vous pouvez ajouter sur l’écran SAP un bouton qui exécute un scripte qui contient cette commande ou vous pouvez inclure la commande directement dans l’InputScript que vous êtes en train de développer (mais n’oubliez pas de l’effacer lorsque vous avez fini vos développements). GuiXT va alors afficher tous les noms internes sous forme d’information rapide (tooltip) sur la page même:

Sap Guixt connect03 Automatisation de pages HTML Sap Guixt connect04 Automatisation de pages HTML Sap Guixt connect06 Automatisation de pages HTML

La deuxième méthode est d’utiliser la commande connectHTML listelements=“elm” dans un InputScript. Celui-ci remplit le texte “elm” avec la liste de tous les éléments de cette page. Dans certains cas, cela peut être utile pour une application mais normalement C’est uniquement utilisé lors du développement vu que vous pouvez saisir les éléments dans une petite fenêtre d’affichage test du texte (commande Textbox).

Sap Guixt connect08 Automatisation de pages HTML // Scripte GuiXT
Pushbutton (0,80) “get HTML variables” process=“get_variables.txt”
Textbox
(1,80) (30,140) name=“elm”


 

Sap Guixt connect09 Automatisation de pages HTML // InputScript “get_variables.txt”
// récupérer tous les éléments HTML
ConnectHTML listElements=“elm”

// display current URL
ConnectHTML getURL=“url”
Message URL=&V[url]“

 


Si vous avez à effectuer plusieurs actions sur une page, vous pouvez commencer avec la commande
View dans une petite fenêtre et l’agrandir dès que toutes les actions sont exécutées. Ainsi l’utilisateur aura un signal précis lorsque l’affichage sera prêt:

// InputScript “show_financials.txt” évolué
// Démarrage avec une petite fenêtre
View (0,0) (8,60) “http://finance.google.com” returnWindow=“ViewWindow”

// Saisir le nom de la société et cliquer sur le bouton “Search”
Set html[text_q] “&V[Company]“
connectHTML click=“submit_Search”

// attendre jusqu’à ce que la page soit entièrement chargée
connectHTML

// Agrandir la fenêtre
WindowSize (40,120) window=“&V[ViewWindow]“

Vous pouvez également lire des données de pages HTML. Lorsque vous utilisez une variable &html[...] dans une instruction d’un scripte, GuiXT va automatiquement vérifier l’existence d’une vue HTML et essayer de trouver la variable. Lorsque vous avez plus d’une vue HTML d’ouverte, utilisez la commande connectHTML précédée par le paramètre window= pour indiquer de quelle vue la variable html[..] devra être lue.

Une application possible: imaginez qu’une société a déjà un système d’information basé sur l’internet pour ses articles, à partir duquel vous pouvez sélectionner des articles et les mettre dans un panier d’achat.  Dans la transaction de création de commande dans SAP vous pouvez créer un bouton qui ouvre ce catalogue à l’aide d’une commande View. L’utilisateur peut alors sélectionner les articles et se faire afficher son panier d’achat, puis, finalement appuyer sur un deuxième bouton dans la transaction SAP. Un InputScript sera alors lancé; il examinera les articles contenus dans le panier d’achat et saisira tous les numéros d’articles ainsi que les quantités souhaitées dans le tableau de saisie de la transaction SAP.

Sap Guixt connect15 Automatisation de pages HTML Un panier de commande internet est lu et intégré dans la table des postes de la transaction VA01.

(avec l’aimable autorisation d’ESA, Suisse, http://www.esashop.ch)
 

Pour avoir un exemple sur la manière comment une table HTML peut être lue, veuillez vous reporter au tableau de températures plus bas, à gauche. Nous avons utilisé la commande  connectHTML -shownames  pour faire afficher le nom de la cellule. Il y a d’autres tableaux sur la page, ceci est le tableau numéro 15. Pour vous décrire la technique supposons que nous voulions lire toutes les températures dans notre InputScript et ensuite afficher un message avec la température moyenne pour chaque ville (en bas, à droite):

Sap Guixt connect10 Automatisation de pages HTML

Source: http://www.visitusa.org 

&nbsp
;

 

 

 

L’InputScript lit la table de température de la page HTML, calcule la température moyenne pour chaque ville et affiche le résultat dan un écran message:

Sap Guixt connect11 Automatisation de pages HTML
 

// exemple de scripte pour lire une table HTML

// effacer les variables message
Set V[msg] “”

Set V[row] 2   // la première ligne contient les entêtes des colonnes, donc démarrer avec la deuxième ligne

label next_row

// fin de la table?
if not html[cell_15.&V[row].1]
 
goto end_of_table
endif

Set V[city] &html[cell_15.&V[row].1]

Set V[col] 2
Set V[temperature] 0

label next_col
if V[col=14]
 
goto end_of_row
endif

Set V[temperature] &V[temperature] + “&html[cell_15.&V[row].&V[col]]

Set V[col] &V[col] + 1
goto next_col

label end_of_row

// Average temperature
Set V[temperature] &V[temperature] / 12 decimals=1

Set V[msg] “&V[msg]&V[temperature]\t&V[city]\n   //  \t = tab  \n = newline

Set V[row] &V[row] + 1
goto next_row

label end_of_table

// afficher le message
Message “&V[msg]“ title=“Average temperature in &html[cell_15.1.1]

 

Lorsque vous automatisez des pages HTML, en particulier lorsque vous n’êtes pas vous-même maître de ces pages, il est souvent utile d’ajouter quelques vérifications surtout qu’il se pourrait que l’aspect de la page change un jour. Vous pouvez également vérifier l’actuel URL si vous voulez être sûr que l’utilisateur n’ait pas quitté la page:

// Vérifier d’abord l’URL
connectHTML getURL=viewURL
if not V[viewURL=http://....]
  Return  “This function works on page xxx only, you have navigated to a different page”
endif

// Vérification de sécurité de l’aspect de la page
Set V[month01] “&html[cell_15.1.2]“
Set V[month12] “&html[cell_15.1.13]“
if not V[month01=Jan.] or not V[month12=Dec.]
  Return  “Layout of HTML page changed, GuiXT script needs to be adapted”
endif

Lorsque vous travaillez avec vos propres pages HTML avec la commande View, comme décrit dans Concevoir des transactions d’affichage avec le GuiXT Viewer et dans Afficher des objets économiques complexes à l’aide d’HTML, les techniques d’automatisation décrites ici peuvent être utilisées pour simplifier les scriptes et nous pouvons fournir des fonctionnalités interactives supplémentaires. Pour communiquer avec la page HTML, vous pouvez utiliser des champs et des boutons invisibles vu qu’ils peuvent être adressés également par l’automatisation connectHTML. Ceci nous permet de concevoir des pages HTML qui permettent une interface pour un affichage ou une saisie de données spécifiés.

Ici nous présentons une page HTML qui peut être utilisée dans de nombreux cas, plus précisément un tableau d’affichage. Cet exemple convient bien pour montrer les principes de base et vous permet de l’utiliser directement pour vos propres applications. 

Imaginez que vous ayez quelques données tabulaires disponibles dans votre scripte, par exemple par un appel BAPI. Vous désirez afficher ces données sous forme de tableau dans une vue HTML qui pourra être également imprimé par l’utilisateur. Dans certains cas vous désirez également avoir des interactions comme par exemple sélectionner une ligne.

L’interface que nous utilisons ici consiste des éléments suivants:

  • Titre de table
  • Sous-titre de table
  • Spécification de largeur de colonne
  • Entêtes de colonnes
  • Données

Un affichage typique pour ce genre de tableau ressemble à:

Sap Guixt connect12 Automatisation de pages HTML

Ou avec un plus grand nombre de colonnes:

Sap Guixt connect13 Automatisation de pages HTML

Dans la page HTML, nous définissons l’interface (cachée) de la manière suivante:

<div style=’visibility:hidden’>
  <input type=”title” name=”title” size=”8″>
  <input type=”subtitle” name=”subtitle” size=”8″>
  <input type=”text” name=”width” size=”8″>
  <input type=”text” name=”header” size=”8″>
  <input type=”text” name=”delimiter” size=”8″ value=”;”>
  <input type=”text” name=”row1″ size=”8″>
  <input type=”text” name=”row2″ size=”8″>
  <input type=”text” name=”row3″ size=”8″>
  <input type=”text” name=”row4″ size=”8″>
  <input type=”text” name=”row5″ size=”8″>
  <input type=”text” name=”row6″ size=”8″>
  <input type=”text” name=”row7″ size=”8″>
  <input type=”text” name=”row8″ size=”8″>
  <input type=”text” name=”row9″ size=”8″ onchange=”DoAcceptRows();”>

<input type=”button” name=”DisplayTable” value=”DisplayTable” size=”8″ onclick=”DoDisplayTable();” >
</div>

L’interface peut contenir les données suivantes:

  • title: un string contenant le titre de la table. Exemple: “Business areas”. Si le string n’est pas spécifié aucun titre n’est affiché.
  • subtitle: un sting contenant le sous-titre de la table. Exemple: “List of all business area …”. Si le string n’est pas spécifié aucun sous-titre n’est affiché.
  • width: une liste de largeurs de colonnes (en pixels), séparées par “;” ou un autre délimiteur spécifié. Exemple: “60;400″. Si le paramètre n’est pas spécifié, une valeur par défaut est utilisée pour la largeur.
  • header: une liste d’entêtes de colonnes, séparées par “;” ou par un délimiteur spécifié. Exemple: “BA;Business area”. Si aucune liste n’est spécifiée, les colonnes sont affichées sans entêtes.
  • delimiter: un string qui contient les données. Exemple: “||”. Si aucun string n’est spécifié, on utilise “;”.
  • row1,…row9: une liste de données pour chaque ligne,  séparées par “;” ou par un délimiteur spécifié. Exemple: “1000; Mechanical Engineering”. A chaque fois que row9 est remplie, toutes les lignes sont automatiquement sauvegardées pour que le scripte puisse recommencer à remplir row1. Ceci est pour des raisons de performance, pour minimiser la commutation entre le scripte GuiXT et le Brows
    er. 
  • bouton DisplayTable: un click sur ce bouton lancera l’affichage du tableau complet.

D’autres éléments (tels qu’une couleur ou un pied de page) peuvent facilement être ajoutés.

Cliquez ici pour afficher le fichier HTML guixt_tabledisplay.html. Utilisez à votre gré dans vos propres applications.

L’InputScript qui affiche la liste Business Areas utilise le BAPI_BUSINESSAREA_GETLIST:

// Récupérer une liste de tous les domaines d’activités de la base de données SAP
Call “BAPI_BUSINESSAREA_GETLIST” table.BUSINESSAREA_LIST=”bal”

// Essayer d’utiliser une fenêtre ouverte ou en ouvrir une autre
ConnectHTML window=“&V[viewwindow]“
if not Q[ok]
 
View (14,0) (40,80) “guixt_tabledisplay.html” -floating returnwindow=“viewwindow”
endif

// Spécifier les paramètres d’affichage de la table
Set html[text_title] “Business areas”
Set html[text_subtitle] “List of all business areas defined in system &V[_database] client &V[_client]“
Set html[text_header] “BA;Business area”
Set html[text_width] “60;400″

// Transporter toutes les données à la page HTML
Set V[i] 1
Set V[k] 1

label set_row
CopyText fromText=“bal” toString=“ba” line=&V[i]

// toutes les lignes ont été traitées?
if not Q[ok]
  goto done
endif

// champs simples suivant la définition BAPI
Set V[f1] “&V[ba](BAPI0003_1-BUS_AREA)”
Set V[f2] “&V[ba](BAPI0003_1-BUS_AR_DES)”

// vers la page HTML
Set html[text_row&V[k]] “&V[f1];&V[f2]“

// ligne interface suivante, commencer par la première si nécessaire
Set V[k] &V[k] + 1
if not html[text_row&V[k]]
 
Set V[k] 1
endif

Set V[i] &V[i] + 1
goto set_row

label done
connectHTML click=“button_DisplayTable”

return

 

L’exemple de l’affiche de la commande est très similaire. Seules les “packed decimals” utilisés dans la table BAPI nécessitent un traitement spécial:

Parameter SDNO // numéro du document de vente

// Forcer les 0000… de tête
Set V[sdno] “&U[SDNO]” + 10000000000
Set V[sdno] “&V[sdno](2-11)”

Call “BAPI_SALESORDER_GETSTATUS” in.SALESDOCUMENT=”&am
p;V[sdno]“
table.STATUSINFO=”sdinfo”

// Essayer d’utiliser une fenêtre ouverte ou en ouvrir une nouvelle
ConnectHTML window=“&V[viewwindow]“
if not Q[ok]
 
View (14,0) (40,80) “guixt_tabledisplay.html” returnwindow=“viewwindow”
endif

// Spécifier les paramètres d’affichage de la table
Set html[text_title] “Sales document &U[SDNO]“
Set html[text_subtitle] “Overview as of &V[today_d.m.y]“
Set html[text_header] “Product;Text;Quantity;Unit;Net value;Net Price;Currency;Delivery;Date;Quantity;Purchase No; Req.Date”
Set html[text_width] “80 ;300 ;50 ;40 ;100 ;100 ;50 ;120 ;100 ;50 ;120 ;100″

Set V[i] 1
Set V[k] 1

label set_row
CopyText fromText=“sdinfo” toString=“sdline” line=&V[i]

// toutes les lignes ont été traitées?
if not Q[ok]
 
goto done
endif

// champs simples suivant la définition BAPI
Set V[f1] “&V[sdline](BAPISDSTAT-MATERIAL)”
Set V[f2] “&V[sdline](BAPISDSTAT-SHORT_TEXT)”
Set V[f3] “&V[sdline](BAPISDSTAT-REQ_QTY)” -unpack
Set V[f3] “&V[f3]” / 1000

Set V[f4] “&V[sdline](BAPISDSTAT-SALES_UNIT)”
Set V[f5] “&V[sdline](BAPISDSTAT-NET_VALUE)” -unpack
Set V[f5] “&V[f5]” / 100 decimals=2 decimalseparator=UserDefault groupseparator=UserDefault

Set V[f6] “&V[sdline](BAPISDSTAT-NET_PRICE)” -unpack
Set V[f6] “&V[f6]” / 100 decimals=2 decimalseparator=UserDefault groupseparator=UserDefault

Set V[f7] “EUR” //”&V[sdline](BAPISDSTAT-CURRENCY)”
Set V[f8] “&V[sdline](BAPISDSTAT-DELIV_NUMB)”
Set V[f9] “&V[sdline](BAPISDSTAT-DELIV_DATE)”
Set V[f10] “&V[sdline](BAPISDSTAT-DLV_QTY)” -unpack
Set V[f10] “&V[f10]” / 1000

Set V[f11] “&V[sdline](BAPISDSTAT-PURCH_NO)”
Set V[f12] “&V[sdline](BAPISDSTAT-REQ_DATE)”

// vers la page HTML
Set html[text_row&V[k]] “&V[f1];&V[f2];&V[f3];&V[f4];&V[f5];&V[f6];&V[f7];&V[f8];&V[f9];&V[f10];&V[f11];&V[f12]“

// ligne interface suivante, commencer par la première si nécessaire
Set V[k] &V[k] + 1
if not html[text_row&V[k]]
 
Set V[k] 1
endif

Set V[i] &V[i] + 1
goto set_row

label done

connectHTML click=“button_DisplayTable”

return

Vous pouvez également utiliser le même fichier HTML pour définir des interactions sur la table affichée ou pour permettre une saisie de données:

Sap Guixt connect14 Automatisation de pages HTML

 Nous allons décrire ceci dans un “Special Topic” spécifique. 

Automatisation de pages HTML