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:
| //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”:
| // 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:
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).
| // Scripte GuiXT Pushbutton (0,80) “get HTML variables” process=“get_variables.txt” Textbox (1,80) (30,140) name=“elm”
|
| // 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.
| 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):
Source: http://www.visitusa.org |  
;
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:
|
// 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 à:
Ou avec un plus grand nombre de colonnes:
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: Nous allons décrire ceci dans un “Special Topic” spécifique. |