
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 commentaireOn peut indiquer un bloc de commentaires avec le /* au début et */ à la fin:
sle_nom.Text = "Michel" // Ce commentaire suit une commande
/* 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énationString alpha, beta, chaineLes opérateurs de comparaison habituels sont utilisés:
alpha = "Chaine divisée "
beta = "en deux parties"
chaine = alpha + beta
= > < <= >= <>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)Par exemple:
Long(string)Integer li_countPour aller dans l'autre direction:
If IsNumber(sle_count.text) Then
li_count = Integer(sle_count.text)
End If
String(number, format)
Les pronoms (comme en grammaire...)
ThisRé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:Parentcb_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.
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