DÉVELOPPEMENT D'APPLICATIONS AVEC ...




COURS 3 - LE LANGAGE POWERSCRIPT






LE POWERSCRIPT PAINTER

Comme vous savez de l'exercice précédent, pour ouvrir le Powerscript painter vous devez soit cliquer sur le bouton Script dans la barre d'outils ou cliquer sur Script avec le bouton droit de la souris sur un objet.


Fig. 3-1


Vous noterez que le painter a sa propre barre d'outils pour les fonctions d'édition principales. Les fonctions Delete, Cut, Copy et Paste fonctionnent toutes comme dans un éditeur de texte ordinaire. En plus, il vous offre des fonctions pour coller dans le script des noms de variables, des objets et même des structures de code standard.

Avant de continuer, je vous suggère de vous familiariser avec les fonctions d'aide qui sont disponible sur le sujet du Powerscript. D'abord, il y a le Help dans le menu qui vous conduira aux techniques de codage. Pour y arriver faites: Help --> Help contents --> Contents --> PowerScript language. Et, si vous avez le CD References, dans Online Books vous avez accès à toute la documentation sur le langage dans le PowerScript Reference que vous pouvez lire au moyen du DynaText reader.


Fig. 3-2




Bientôt nous allons commencer à étudier l'application exemple qui est fournie avec le logiciel PowerBuilder. Cette application est très complète et très bien conçue et vaut la peine d'être étudiée. Ça démontre un système d'entrée de commandes et de facturation pour une compagnie qui vend des noix. Si vous avez le logiciel d'installer sur votre C: vous trouverez l'application ABNC (Anchor Bay Nut Company) comme suit:
C:\PWRS\Pb5i32\Ex\Abnc\Abnc_ord.pbl


LE POWERSCRIPT: TECHNIQUES DE BASE

Lignes de code

Le langage PS n'est pas très rigide: les espaces, indentations, etc. n'ont pas d'importance pour le compilateur. Cependant, elles en ont pour le professeur et vous devrez respecter les techniques de base concernant la lisibilité du code.

En général on écrit une commande par ligne; pour la lisibilité il est parfois préférable de mettre la commande sur 2 lignes en utilisant le caractère de continuation &
La ligne suivante est correcte:

MessageBox ("Erreur SQL", String(SQLCA.SQLDBcode) + ": " + SQLCA.SQLErrText)

Mais il serait préférable de la lire en 2 lignes dans un script:

MessageBox ("Erreur SQL", String(SQLCA.SQLDBcode) &
       + ": " + SQLCA.SQLErrText)


Dans le cas contraire on pourrait écrire 2 commandes sur une ligne en les séparant par un ; mais ce n'est pas une pratique recommandée!

L'utilisation de majuscules ou minuscules n'a pas d'importance, sauf pour la lisibilité

Commentaires

On recommande l'usage de commentaires dans les scripts partout ou des explications sont requises.
Les commentaires peuvent être sur une ligne en utilisant // comme:
// Ceci est un commentaire
sle_nom.Text = "Michel" // Ce commentaire suit une commande
On peut indiquer un bloc de commentaires avec le /* au début et */ à la fin:
/* Ceci est un bloc
de commentaires sur
plusieurs lignes */

Noms de variables

- Le nom doit commencer par une lettre
- Maximum de 40 caractères
- Ne doit pas contenir d'espaces; peut contenir les signes   -   _   %    $    #
(le trait d'union - quoique légal est fortement déconseillé car il porte à confusion avec l'opération moins; utilisez plutôt le underscore comme: nom_famille ou les majuscules comme: NomFamille)

- Ne doit pas être un mot réservé (qui fait partie du code )

Types de données

Data type Description
Blob Binary large object. Used to store an unbounded amount of data (for example, generic binary, image, or large text, such as a word-processing document).
Boolean Contains TRUE or FALSE.
Char or character A single ASCII character.
Date The date, including the full year (1000 to 3000), the number of the month (01 to 12), and the day (01 to 31).
DateTime The date and time in a single data type, used only for reading and writing DateTime values from and to a database. To convert DateTime values to data types that you can use in PowerBuilder, use:· The Date(datetime) function to convert a DateTime value to a PowerBuilder date value after reading from a database· The Time(datetime) function to convert a DateTime value to a PowerBuilder time value after reading from a database· The DateTime (date, time) function to convert a date and (optional) time to a DateTime before writing to a DateTime column in a databasePowerBuilder supports microseconds in the database interface for any DBMS that supports microseconds.
Decimal or Dec Signed decimal numbers with up to 18 digits.You can place the decimal point anywhere within the 18 digits. For example, 123.456, 0.000000000000000001 or 12345678901234.5678.
Double A signed floating-point number with 15 digits of precision and a range from 2.2E-308 to 1.7E+308.
Integer or Int 16-bit signed integers, from -32768 to +32767.
Long 32-bit signed integers, from -2,147,483,648 to +2,147,483,647.
Real A signed floating-point number with six digits of precision and a range from 1.17 E -38 to 3.4 E +38.
String Any ASCII characters with variable length (0 to 60,000).
Time The time in 24-hour format, including the hour (00 to 23), minute (00 to 59), second (00 to 59), and fraction of second (up to six digits) with a range from 00:00:00 to 23:59:59.999999.PowerBuilder supports microseconds in the database interface for any DBMS that supports microseconds.
UnsignedInteger, UnsignedInt, or UInt 16-bit unsigned integers, from 0 to 65,535.
UnsignedLong or ULong 32-bit unsigned integers, from 0 to 4,294,967,295.
Any A variable whose type is Any is a chameleon data type—it takes the data type of the value assigned to it. Any variables can hold data of simple data types, structures, objects, and arrays.

Declarations and assignments··
You declare Any variables just as you do any other variable.
You assign data to Any variables with standard assignment statements. You can assign an array to a simple Any variable. You can also declare an array of Any variables, where each element of the array can have a different data type.
After you assign a value to an Any variable, you can test the variable with the ClassName function and find out the actual data type.
any la_spreadsheetdata
la_spreadsheetdata = ole_1.Object.cells(1,1).value
CHOOSE CASE ClassName(la_spreadsheetdata)
CASE "integer"
...
CASE "string"
...
END CHOOSE


Déclarations

Exemples de déclarations de valeurs dans des variables:
Integer NombreJours

Real MontantDu

String NomClient, AdresseClient

Integer PasseDu = 30, Delinquent = 60

Real ValeurPi = 3.1416

Constant Real ValeurPi = 3.1416

En ajoutant le mot Constant devant la déclaration on assure que la valeur ne pourra pas être changée par le code dans le script.

Opérateurs

Les opérateurs habituels sont disponibles:
   +  -  *  /   ^

ainsi que les opérateurs d'assignation:
   ++  --  +=  -=  *=  /=  ^=

Avec les variables de type String le signe + dénote une concaténation
String alpha, beta, chaine
alpha = "Chaine divisée "
beta = "en deux parties"
chaine = alpha + beta
Les opérateurs de comparaison habituels sont utilisés:
   =     >     <     <=     >=    <>

Fonctions PB

MessageBox()
Le format général est :
li_button_pressed = MessageBox (title, text, icon, buttons, default)
Les seuls paramètres obligatoires sont title et text mais si on spécifie un autre paramètre il faut spécifier tous ceux qui viennent avant.
Par exemple, pour afficher:

     
          Fig. 3-3

on écrit:
MessageBox("Lancement de l'application", "L'application débute maintenant")


Beep()

Le format est:    Beep(times)



Les fonctions Is ...

Les fonctions IsNumber, IsDate, IsTime retourne True si un paramètre est de type voulu. Normalement utilisées dans une condition, comme:
If IsNumber(sle_dividend.text) Then ...
Si la valeur entrée dans le contrôle (single line edit) sle_dividend est de type numérique, le code après le Then est exécuté.



Conversion de type

Pour convertir un String en numérique:
Integer(string)
Long(string)
Par exemple:
Integer li_count
If IsNumber(sle_count.text) Then
     li_count = Integer(sle_count.text)
End If

Pour aller dans l'autre direction:
String(number, format)


Les pronoms (comme en grammaire...)

This
Réfère à l'objet courant, celui pour lequel on est en train d'écrire le script. Par exemple supposons que je suis dans le Clicked du bouton cb_push et que je veux changer le text je pourrais écrire:
cb_push.text = "nouveau"
mais, il serait préférable d'écrire:
this.text = "nouveau"
De cette façon, si jamais je copie le code dans un autre script, il fonctionnera quand même.


Parent
Réfère au window actuel, celui dans lequel le contrôle est placé.
Pour fermer le window, dans le code du bouton Exit, au lieu d'écrire:
Close (w_win)
je peux écrire:
Close (Parent)


La structure de décision

La structure de décision est comme dans tous les autres langages:
If (condition est vraie) Then
     (commandes)
ElseIf (autre condition est vraie)
     (commandes)
Else
     (commandes)
End If


La structure de cas

Aussi comme dans les autres langages:
Choose Case Pourcent
Case >= 90
    Lettre = "A"
Case 60 to 89
    Lettre = "B"
Case Else
    Lettre = "F"
End Choose




[ PAGE D'ACCUEIL ]      [ PRÉCÉDENTE ]      [ SUIVANTE ]