La gestion des accès se fera par le global tool et non pas pas SB+.
SB+Security sera uniquement là pour limitier les accounts.
Les applications seront développées sous Universe en FLAVOR Pick.
Au cas ou le FLAVOR d’execution est INFORMATION (pour cause de compatibilité avec les anciens prog) ; Il faut installer le programme INBASIC.UV UV.SELECT
en surdéfinition de SELECT, SSELECT.
Les FieldDefn crée des dictionnaires de type D ou I
DMCONT SB.CONTROL<34,1> = ‘1’
Le commonblock SB+ est à usage du développeur et du système.
Les développements IN-tools se réservent la variable DIM PARMS(30..40) donc il est interdit à une application de charger ces données d'applications sur ces niveaux.
Interne | Externe | input char |
---|---|---|
1 | Client | C |
2 | Fournisseur | F |
3 | Achat | A |
4 | Vente | V |
Equates = | |
---|---|
1 | _TCC.CLI |
2 | _TCC.FOUR |
3 | _TCC.ACHAT |
4 | _TCC.VENTE |
IF CLI.CAT.COMPTE = _TCC.CLI THEN
…cela améliore fortement la lisibilité…. Dans la mesure du possible, les commentaires seront saisis en anglais dans les programmes. Si cela constitue une difficulté pour le développeur, sinon en le français .
Les process paragraph devront avoir une en-tête1) commune telle que :
P.XXX.YYY... ***************************************************************** * This process is used for ... ***************************************************************** * Parameters : * * - PAR... : description ***************************************************************** * History : * * dd/mm/yyyy (user) : Initial Release ***************************************************************** LOCAL ...
Chaque process est susceptible d'être appelé par un phantom (sans interaction avec l'utilisateur) et d'être inclus dans une transaction.
Pour cela, il est important de respecter les règles suivantes :
GP.ERROR
GP.DIALOG
_SILENCE # _OUI
Quand un fichier est créé, on doit générer les equates par l'outil /EQUATES. De là, on aura une entrée dans le fichier xxINCLUDE qui contiendra les equates sur le dictionnaire.
Exemple :
$EQU.CYC ************************************************************ * Equates for File Fxx.CYC ************************************************************ EQU EQU_CYC.GLB.CYC.CODE TO 0 ;* Cycle EQU EQU_CYC.GLB.STAMP TO 1 ;* Stamp EQU EQU_CYC.GLB.LIB TO 2 ;* Libell‚ EQU EQU_CYC.GLB.LIB.FR TO 2 ;* Libell‚ EQU EQU_CYC.GLB.LIB.NL TO 2 ;* Libell‚ EQU EQU_CYC.GLB.LIB.EN TO 2 ;* Libell‚ EQU EQU_CYC.GLB.UTG.CODE TO 3 ;* Unit‚ de temps EQU EQU_CYC.DEB TO 4 ;* D‚but ************************************************************
Chaque basic devra être écrit dans le fichier xxBASIC et sera nommées telle que SYSID.xxx et devra commencer par une en-tête standard :
SUBROUTINE xx_my_subroutine(parameters) ************************************************************ * This subroutine is used for ... ************************************************************ * Paramters : * * param1 : description ************************************************************ * History : * * dd/mm/yyyy (user) : Initial Release ************************************************************
Dans la liste des paramètres d'une sous-routine, le paramètre de retour sera toujours le premier paramètre ; ce qui permet d'exploiter la subroutine dans un descripteur I-Type :
SUBROUTINE xx_ma_subroutine(result, parameter.in.1, parameter.in.2, ...)
Certains process sont nécessaire au bon fonctionnement des applications avec IN-tools.
Doit charger en common _SUB.x les valeurs exploitées par les DVS
_SUB.D F(@SYSID:"DEFN","SUB#D") _SUB.V F(@SYSID:"DEFN","SUB#V") _SUB.S F(@SYSID:"DEFN","SUB#S") @RTN.FLAG 0 _USR.LGE P("P.USR.LGE")
Ce process est le premier qui sera exécuté à l'entrée d'une application HK/CONTROL/Process at set common.
Si l'on l'écrit une application à vocation d'upgrade.defn, il faut lancer le process GP.UPGRADE.VERSION
dans le process P.SET.COMMON.
EXEC “GP.UPGRADE.VERSION” EXEC “A.SET.COMMON”
Le fichier global contiendra les définitions des dictionnaires à usage multi fichier.
Fsy.GLB
Fsy{.mmm}.fff
Qsy.fff
Ssy.fff_cli
datafile if different
du PD.R / PD.IUn logical file est typiquement une “vue” sur plusieurs fichiers, L'outil de SB+ permet de définir les règles de join et de mise à jour. Un LF permet de saisir des données présente dans plusieurs fichiers physiques.
Fsy.fff.LF
Parfois on décide de créer d'emblé en mode LF
Il est possible de construire le nom en plusieurs parties séparées par un point et si possible en 3 lettres. Ex : on a les articles : FXX.ART et les auteurs de l’article : FXX.ART.AUT
FileName | Voir convention des noms |
Description | Une description claire, elle sera montrée aux end-users |
Number of Field | Estimation |
Number of Records | Estimation |
AvgLength | Estimation |
Use Global | « M »ixed |
FileType | 18 (On fera les resizing plus tard.) |
GLB.fff.x(6)
Exemple dans le client, le nom :GLB.CLI.CODE
On applique une conversion du type : MCU[I pour la mise en majuscule en output et surtout en input.
fff.x(6)
Exemple dans le client, le nom :CLI.NOM
Dans le cadre des champs gérés en tableau multivalué, on attribuera un trigramme qui permettra d'identifier les champs tous associé en controlant/dépendant. Le trigramme servira à identifier l'assoc_name.
Exemple : le tableau des lignes d'articles dans un document ART est le code d'association:
ASS_ART
ASS_ART
Les foreign data sont lue par des expression F / Trans() leur code “en local” rappelle le fichier d'origine.
fff1.fff2.x(6)
Exemple dans une facture, le nom du client : FAC.CLI.NOM. Attention, il est peut être préférable de gérer des globals fields si l’usage est répété.
Si le champs est défini comme @WORK field, il dois comporter un W dans son nom.
Le Nunméro d’attribut Work n’est pas repris, non indispensable.
fff.W.x(6) GLB.fff.W.x(6)
Texte qui se place à gauche du champs dans l’écran.
« Article » plutôt que « Code Article »,
Les numériques-monétaires seront ‘N’ afin de pouvoir modifier le nombre de décimales de présentation des valeurs.
Texte qui se place au dessus des champs
Pour les les monétaires:
Pour les clés
Les dates
La pluspart du temps, Yes, car c'est le défaut programmé qui va gérer cela.
P(“G.D ”)[M]
C:G.V
Une valeur à valider comme une clé sur un fichier sera : V.fff.CODE > C :GP.TEST.EXIST,Fsy.fff mettre le P.TST.EXIST,Fsy.fff
G.S
C;x;x;x[NomAssoc
.0001 PH 0002 la liste des champs de cette association
Par principe, les monétaires seront :
Par principe, les monétaires si associé à ACX seront : P(« A.R.DECIMAL, » :GLB.DEV.CODE) si on respecte les décimales d’une monnaie.
Influence la création du dictionnaire R/L
Permet d’avoir un champs en saise A alpha et un affichage/tri R right lors des listes. (time,…)
Les codes tables seront :
Information complémentaire sur le champs ; cette zone est du texte d’explication du champs, mais peut être détournée pour d’autres usages :
Le principe du “déterounement est d'utiliser un code suisvit de ”:“ et d'une valeur.
Les codes actuellement exploités sont :
Z:P:process
Les propriétés Gui ‘spéciales’ de ce champs. Dans le cadre de la Guitization d’un écran, il est affecté à un champs des propriétés gui de base issues du GDS, on peut ajouter ou modifier ces propriétés.
Développeement du dictionnaire au format de la plateforme (UV,…)
Dans un écran SB+ la méthode pour saisir des enregistrements dont la clé est composée de plusieurs valeurs est toujours la même.
Les différentes saisies des différentes valeurs des composantes de la clé se font distinctement sur la variable @WORK
Les champs qui la composent sont définis individuellement en physique et en work dans le global field definition.
en physique, le nom GLB.fff.x(6) référence une dérivée de la clé (<0>“Gn#1”)
, “n” étant le nombre de segment à sauter pour extraire la data depuis la clé, ce champs sera exploité dans les sélections et les reports.
en work, le nom GLB.fff.W.x(6) référence la saisie dans les écrans dans la variable @WORK<n> selon le datafile utilisé, un champ de clé composée peut être une fois en première position, deuxième,… sa saisie n’en reste pas moins la même.
Cette technique permet de sélectionner, valider chaque composant individuellement.
En début d’écran en BFS on aura un A.INIT.WORK (@WORK=”“)
Sur le dernier composant de clé, on aura la connective ‘R’ pour dire que c’est le dernier champs qui compose la clé. En process after de ce champ on aura un A.fff.KEY
(@Key=W1 :_S :W2 :_S….)
Une fois les champs créés : on lance un /EQUATES pour maintenir dans xxINCLUDE les equates pour tous les fichiers au format $Fxx.filename.
L’écran principal porte toujours le nom INPUT.
Le process INPUT de base d'un fichier sera rp*Fsy.fff*INPUT, dans le but de permettre un zoom automatique sans paramètres. Exemple:
Si des sous-écrans seront appelés depuis l’écran principal, ils devront être construits de cette manière : nom de l’écran principal.XXX. Ex. :l’écran principal s’appelle INPUT.
En principe, c'est SB+ qui gère le readU, et le WRITE dans uen séquence classique.
Dans certains cas, nous déciderons de ne pas laisser SB gérer les locks. Pour ce faire, voici ce qu'il y a à savoir :
Placer les options RN (au niveau Control/Dep/Read) sur le champs qui doit déclencher la lecture (clef de l'écran ou dernière partie d'une multi-part key).
Nous ne laissons pas SB+ écrire l'enregistrement. C'est donc à nous d'assurer les mise-à-jour db. Nous placerons donc, dans chaque afa, l'appel au process P.REC.WRT
.
On doit placer impérativement une série de process même s’il ne font rien.
x.fff.screename.step
Si le process est appelé spécifiquement dans un écran, à un step particulier :
Il faut créer le menu M.fff.screenname.SUB
; voir a utiliser le P.BUILD.MENU/P.ERASE.MENU
Les touches de fonctions seront :
F1 | Aide | Pas de process |
F2 | Sauver | G:U |
F3 | Sélection | Pas de process - c'est le F3 G.S |
F4 | Effacer | G:DE |
F5 | Zoom | GP.Z (le zoom c.f. Z:) |
F6 | Addit. | GP.ADDIT (qui lance le menu ….SUB) |
F7 | Détail | GP.DETAIL (qui lance un process paramétré selon le contexte) |
F8 | Sortir | G:X |
F9 | List | L (lance le process R*Fsy.fff*LIST) |
F10 | <Action> |
Le process PD.I fera appel au process After READ standard (à définir en template GP.AFA)
After Accept Sandard ( à définir en template GP.AFA)
Le report LIST doit être créé pour chaque fichier.
On crée, un report LIST pour chaque fichier.
Dans certains cas d’écran très usuels, nous développerons en GUI Only.
Fixer les propriétés gui telle que :
<f6><f6> dans l’écran SD :
Par la suite, il ne faudra plus revenir dans cet écran sous peine de devoir redéfinir les propriétés de base de la form (dimension et fctkeys coordinates)
SB+ crée la form de base avec les touches de fct à droite.
Fixer la propriété Dimensions de la form à 980;620
Menu > Options
Menu Window
Sélectionner les touches de fonctions avec la souris pour tout sélectionner d’un coup et grouper les par Ctrl-G
Pour ensuite les déplacer au bon endroit (900 ;10) pour la lignes verticale – dimension 2 ;610 pour la ligne verticale
Faire attention à la taille lors de la saisie. Tout les cas doivent tenir dans la boite de présentation que cela soit en hauteur et largeur même en mode saisie.
Penser à homogénéiser les champs d’encodage.
Exemple :
Lancer l’aide de 2éme niveau et vérifier les textes.
— Pascal Pontoise 12/02/2013 08:06