A l'aide de nos propres éléments d'écran nous nous pouvons faire varier le déroulement de l'InputScript.

En premier exemple nous offrons deux boutons-poussoir, qui vont invoquer les répertoires des articles pour deux division. Etant donné que nous voulons travailler avec un même InputScript, nous allons utiliser un paramètre Parameter DIV. A la suite de la ligne de commande pushbutton, ce paramètre va avoir une fois la valeur "2200" (division Paris) et une fois "1000" (division Hamburg). On peut utiliser la valeur du paramètre dans l'InputScript à l'aide de "&U[DIV]".

// Scripte GuiXT
Box (0,1) (6,26) "Articles"

Image (1.6,1) (5.3,15) "materials.jpg" 

Pushbutton (2,16) "Paris"   "/NSA38" process="repertoirearticles.txt" size=(2,10)

   using DIV = "2200"

Pushbutton (4,16) "Hamburg" "/NSA38" process="repertoirearticles.txt" size=(2,10)

   using DIV = "1000"

 

// InputScript "repertoirearticles.txt

Parameter DIV

 

// ABAP : exécution du programme

Screen SAPMS38M.0101

  Set F[Programme]     "RMMVRZ00"

  Enter "/8"           // Exécuter

 

// Répertoire des articles

Screen RMMVRZ00.1000

  Set F[Article]       "M-*"

  Set F[Division]      "&U[DIV]"

  Enter "/8"           // Exécuter


L'InputScript est un peu simplifié par rapport à celui du tutoriel 1: la première fonction (invoquer la transaction SA38) est directement intégrée dans la spécification du bouton poussoir. On supprime donc le premier changement d'écran.

Nous pouvons également offrir à la place de plusieurs boutons poussoir quelques boutons radio et un un seul bouton poussoir. Dans l'exemple suivant le bouton poussoir lancera la création commande (transaction VA01) avec une présélection du type de commande.

//scripte GuiXT

pos X[IMAGE_CONTAINER] X[IMAGE_CONTAINER]+(0,50)

 

Box (0,0) (8,34) "Commande client"

Image (0.7,0.3) (7.2,14.6) "controlling.jpg" "-plain"

 

 

// Variable VA01_TypeCommande encore vide? Alors, proposer la valeur par défaut "BV"

if not V[VA01_TypeCommande]

  Set V[VA01_TypeCommande] "BV"

endif

 

// Sélection type de commande

RadioButton (1,16) "Vente au comptant"   Name="VA01_TypeCommande" value="BV"

RadioButton (2,16) "Cde client urgente"  Name="VA01_TypeCommande" value="SO"

RadioButton (3,16) "Cde client standard" Name="VA01_TypeCommande" value="TA"

RadioButton (4,16) "Retour"              Name="VA01_TypeCommande" value="RE"

 

Pushbutton (6,16) "Saisir commande" "/NVA01" Process="lancerva01.txt" "size=2"

 


// InputScript "lancerva01.txt"

Screen SAPMV45A.0101

// Remplir le champ "Type de commande" avec le contenu de la variable "VA01_TypeCommande" 

  Set   F[Type commande client]  "&V[VA01_TypeCommande]"

  Set   F[Organis. commerciale]  "1000"

  Set   F[Canal distribution]    "10"

  Set   F[Secteur d'activité]    "00"

  Enter

 

A la place des paramètres nous avons utilisé ici des variables globales  V[VA01_typecommande]. Si vous souhaitez invoquer la transaction VA01 dans le mode alternatif avec "/OVA01" au lieu de "/NVA01", ceci ne marche pas, car chaque session SAP possède son propre domaine de variables GuiXT. Dans ce cas vous pouvez transmettre la valeur sous forme de paramètre:

//scripte GuiXT

pos X[IMAGE_CONTAINER] X[IMAGE_CONTAINER]+(0,50)

 

Box (0,0) (8,34) "Commande client"

Image (0.7,0.3) (7.2,14.6) "controlling.jpg" "-plain"

 

// Variable VA01_TypeCommande encore vide? Alors, proposer la valeur par défaut "BV"

if not V[VA01_TypeCommande]

  Set V[VA01_TypeCommande] "BV"

endif

 

// Sélection type de commande

RadioButton (1,16) "Vente au comptant"   Name="VA01_TypeCommande" value="BV"

RadioButton (2,16) "Cde client urgente"  Name="VA01_TypeCommande" value="SO"

RadioButton (3,16) "Cde client standard" Name="VA01_TypeCommande" value="TA"

RadioButton (4,16) "Retour"              Name="VA01_TypeCommande" value="RE"

 

Pushbutton (6,16) "Saisir commande" "/NVA01" Process="lancerva01.txt" "size=2"

      using TYPECOMMANDE = [VA01_TypeCommande]

 

 

// InputScript "startva01.txt"

 

Parameter TYPECOMMANDE

Screen SAPMV45A.0101

// Remplir le champ "Type de commande" avec le contenu de la variable "VA01_TypeCommande" 

  Set   F[Type commande client]  "&U[TYPECOMMANDE]"

  Set   F[Organis. commerciale]  "1000"

  Set   F[Canal distribution]    "10"

  Set   F[Secteur d'activité]    "00"

  Enter

De manière similaire aux boutons radios vous pouvez également travailler avec des champs de saisie standards. Chaque champ de saisie (commande "InputField") est associé exactement à une variable GuiXT, c'est à dire que le contenu est affiché dans le champ de saisie et les valeurs saisies sont stockées dans la variable.

Dans l'exemple suivant, l'utilisateur peut vérifier en un clin d'œil la disponibilité d'un article dans 3 divisions différentes. Nous utilisons pour cela des SAP_BAPIs.

Saisie du numéro d'article. Vous pouvez également utiliser la recherche par le matchcode.

La quantité disponible est affichée pour les 3 divisions.

Un message d'erreur est affiché lors de la saisie d'un numéro d'article inexistant.

// scripte GuiXT

pos X[IMAGE_CONTAINER] X[IMAGE_CONTAINER]+(0,50)

 

Box (0,0) (8,36) "Disponibilité"

 

// Afficher le champ de saisie correspondant à la variable V[AV_Article]

// Lien avec le matchcode SAP à l'aide de techname="..."

 

InputField (1,1) "Article" (1,16) name="AV_Article" size=18 techname="MARA-MATNR"

Text (2,1) "&V[AV_Textearticle](1-34)" -proportional -intensified

 

Text (3,4) "Hamburg"

Text (3,14) "&V[AV_Qtearticle1]" -border size="8"

Text (3,24) "&V[AV_Unitearticle]"

Text (4,4) "Berlin"

Text (4,14) "&V[AV_Qtearticle2]" -border size="8"

Text (4,24) "&V[AV_Unitearticle]"

Text (5,4) "Vienne"

Text (5,14) "&V[AV_Qtearticle3]" -border size="8"

Text (5,24) "&V[AV_Unitearticle]"

 

Pushbutton (7,2) "Afficher disponibilité" Process="disponibilite.txt" size=(1,32)

 

// InputScript "disponibilite.txt"

// initialiser variables

 

Set V[AV_Textearticle]

Set V[AV_Unitearticle]

Set V[AV_Qtearticle*]

 

// Lire le texte court et l'unité de quantité

Call "BAPI_MATERIAL_GET_DETAIL" in.MATERIAL="&V[AV_Article]" out.MATERIAL_GENERAL_DATA="AV_Doneearticle"

 

// adresser les champs par un offset, voir Conseils&astuces N° 17

Set V[AV_Textearticle] "&V[AV_Doneearticle](1-41)"

Set V[AV_Unitearticle] "&V[AV_Doneearticle](156-158)"

 

// Article existant?

if not V[AV_Textearticle]

  return "E: L'article &V[AV_Article] n'existe pas" -statusline

endif

 

 

// Lire la disponibilité dans trois usines

Call "BAPI_MATERIAL_AVAILABILITY" in.MATERIAL="&V[AV_Article]" in.PLANT="1000" in.UNIT="&V[AV_Unitearticle]" out.AV_QTY_PLT="AV_Qtearticle1"

Call "BAPI_MATERIAL_AVAILABILITY" in.MATERIAL="&V[AV_Article]" in.PLANT="2000" in.UNIT="&V[AV_Unitearticle]" out.AV_QTY_PLT="AV_Qtearticle2"

Call "BAPI_MATERIAL_AVAILABILITY" in.MATERIAL="&V[AV_Article]" in.PLANT="3000" in.UNIT="&V[AV_Unitearticle]" out.AV_QTY_PLT="AV_Qtearticle3"

 

 

// Tenir compte des 3 décimales pour les quantités

Set V[AV_Qtearticle1] &V[AV_Qtearticle1] / 1000

Set V[AV_Qtearticle2] &V[AV_Qtearticle2] / 1000

Set V[AV_Qtearticle3] &V[AV_Qtearticle3] / 1000

 

// Réafficher message et écran

Return "S: Disponibilité déterminée" -statusline