Expressions objets (code)
(Nouvelle page : ===Introduction=== Le framework 1000 utilise des expressions objets pour exprimer sous forme objets des conditions utilisées dans les requêtes objets. Ces expressions objets sont e...) |
|||
Ligne 120 : | Ligne 120 : | ||
|Retourne la valeur constante Vrai. | |Retourne la valeur constante Vrai. | ||
|} | |} | ||
+ | |||
+ | Les fonctions CountObjectsWhere et ExistsObjectsWhere utilisent en argument une expression objet qui est elle même évaluée dans le contexte de l'expression qui la contient. Du point de vue SQL ces fonctions génèrent des sous requêtes. L'expression imbriquée peut utiliser les mêmes arguments que l'expression qui la contient et peut faire référence au contexte de l'expression qui la contient en utilisant le mot clé '''self'''. | ||
Exemples : | Exemples : | ||
− | '''Utilisation de ExistsObjectWhere''' | + | '''Utilisation de ExistsObjectWhere pour charger des objets dans une liste''' |
<source lang='delphi'> | <source lang='delphi'> | ||
var aList:TConstitutionSectionGCList; | var aList:TConstitutionSectionGCList; | ||
Ligne 134 : | Ligne 136 : | ||
end; | end; | ||
</source> | </source> | ||
+ | |||
+ | Dans cet exemple la liste est chargée des objets de TConstitutionSectionGC pour lesquels il existe au moins une TidentificationCentreGC dont l'identificationCentreNF est non vide. | ||
+ | |||
+ | Notez : | ||
+ | *Le doublage des quotes nécessaires pour les arguments de ExistObjectsWhere | ||
+ | *L'utilisation de self pour faire référence au contexte de TConstitutionSectionGC dans la requête sur les TIdentificationCentreGC. | ||
+ | |||
+ | '''Utilisation de ExistsObjectWhere pour rechercher un objet''' | ||
+ | <source lang='delphi'> | ||
+ | //procedure RegleAlerte_EtatMetierList:boolean; | ||
+ | var obj:TEtatPossible; | ||
+ | begin | ||
+ | //... | ||
+ | obj := ClassManager.FindObject( | ||
+ | 'TEtatPossible', | ||
+ | '(oidCircuitValidation = %1) and (ExistsObjectsWhere(''TEtatEngagement'',''(oid = self.oidEtatMetier) and (autorisePropositionAchat = True)''))', | ||
+ | 'ordre',True, | ||
+ | [instanceOID]); | ||
+ | end; | ||
+ | </source> | ||
+ | |||
+ | Dans cet exemple un objet de TEtatPossible ayant comme circuit de validation l'objet courant et pour lequel il existe au moins un TEtatEngagement pour lequel autorisePropositionAchat est vrai. | ||
+ | |||
+ | {{info|Ils existent des fonctions simulaires CountObjectsWhere et ExistsObjectsWhere utilisable dans un contexte d'objets.}} | ||
===Jointures=== | ===Jointures=== |
Version du 18 juillet 2009 à 15:16
Sommaire |
Introduction
Le framework 1000 utilise des expressions objets pour exprimer sous forme objets des conditions utilisées dans les requêtes objets. Ces expressions objets sont ensuite traduites en clauses dans les requêtes SQL ou évaluées directement sur les objets métiers.
La syntaxe de ces expressions est généralement identique à leur équivalent dans le langage 1000, des fonctionnalités suplémentaires ont été introduites pour utiliser les possibilités offertes par les bases de données.
Notation
Les expressions objets utilisent la notation pointée et la syntaxe Pascal.
Arguments
Les expressions peuvent être paramétrés par des arguments généralement passés sous forme d'un tableau de variant ou placés dans une propriété tableau.
La référence aux arguments se fait par le signe % suivi du numéro de l'argument.
La numérotation des arguments commence à 1.
Exemple :
'(code=%1) and (date>%2) and (date<%3)', ['FRF',Now-1,Now+1]
Opérateurs
Les opérateurs de comparaison et les opérateurs logiques du langage sont utilisables dans les expressions objets.
Opérateur | Usage |
---|---|
= | Egalité |
eq | Egalité |
<> | Différence |
ne | Différence |
> | Supérieur |
gt | Supérieur |
< | Inférieur |
lt | Inférieur |
>= | Supérieur ou égale |
ge | Supérieur ou égale |
<= | Inférieur ou égale |
le | Inférieur ou égale |
OR | Ou logique |
AND | Et logique |
NOT | Non logique |
like | L'opérande de gauche vérifie le modèle contenu dans l'opérande de droite
Les caractères % et _ sont des caractères jokers du modèle |
in | L'opérande de gauche est contenu dans l'opérande de droite
L'opérande de droite est une liste de valeur (chaîne ou nombre) séparées par des virgules placée entre parenthèses |
Exemple
codeCompte like '10%'
codePays in ('FR','EN','US')
codePays in %1
typeCompte.value = compteBilan
Fonctions
Certaines fonctions peuvent être utilisées dans les expressions objets :
function CountObjectsWhere(iClassName:string; iExpression:string):Integer; |
Compte le nombre d'objet de iClassName vérifiant iExpression. | ||||
function ExistsObjectsWhere(iClassName:string; iExpression:string):Integer; |
Retourne 1 si il existe au moins un objet de iClassName vérifiant iExpression; retourne 0 sinon. | ||||
function DatePart(const PartOfDate:TPartOfDate; const Attribute:Identifier):Integer; |
Retourne la partie de la date indiquée par PartOfDate de la valeur de l'attribut Attribute
| ||||
function Round(value:Double; len:Integer):Double; |
Arrondi le nombre flottant value à la longueur len. | ||||
function Assigned(const value:Identifier):Boolean; |
Retourne True si l'objet contenu dans l'argument value est affecté | ||||
function True():boolean; |
Retourne la valeur constante Vrai. |
Les fonctions CountObjectsWhere et ExistsObjectsWhere utilisent en argument une expression objet qui est elle même évaluée dans le contexte de l'expression qui la contient. Du point de vue SQL ces fonctions génèrent des sous requêtes. L'expression imbriquée peut utiliser les mêmes arguments que l'expression qui la contient et peut faire référence au contexte de l'expression qui la contient en utilisant le mot clé self.
Exemples :
Utilisation de ExistsObjectWhere pour charger des objets dans une liste
var aList:TConstitutionSectionGCList; begin aList := TConstitutionSectionGC.CreateList; aList.AddWhere('ExistsObjectsWhere(''TIdentificationCentreGC'',''(oidConstitutionSectionGC=self.oid) and (identificationCentreNF<>%1)'')','','',True,-1,['']); for idx := 0 to aList.count-1 do begin end; end;
Dans cet exemple la liste est chargée des objets de TConstitutionSectionGC pour lesquels il existe au moins une TidentificationCentreGC dont l'identificationCentreNF est non vide.
Notez :
- Le doublage des quotes nécessaires pour les arguments de ExistObjectsWhere
- L'utilisation de self pour faire référence au contexte de TConstitutionSectionGC dans la requête sur les TIdentificationCentreGC.
Utilisation de ExistsObjectWhere pour rechercher un objet
//procedure RegleAlerte_EtatMetierList:boolean; var obj:TEtatPossible; begin //... obj := ClassManager.FindObject( 'TEtatPossible', '(oidCircuitValidation = %1) and (ExistsObjectsWhere(''TEtatEngagement'',''(oid = self.oidEtatMetier) and (autorisePropositionAchat = True)''))', 'ordre',True, [instanceOID]); end;
Dans cet exemple un objet de TEtatPossible ayant comme circuit de validation l'objet courant et pour lequel il existe au moins un TEtatEngagement pour lequel autorisePropositionAchat est vrai.
Note : Ils existent des fonctions simulaires CountObjectsWhere et ExistsObjectsWhere utilisable dans un contexte d'objets. |
Jointures
La traversée d’un rôle se traduit en terme SQL par une jointure.
Un certain nombre d’extensions ont été ajoutées à cette notation pour permettre de spécifier certaines caractéristiques supplémentaires :
Signe | Usage |
---|---|
«.» | jointure simple. |
«.+» | jointure externe. |
«^» | jointure simple sur la classe d'association de la relation. |
«^+» | jointure externe sur la classe d'association de la relation. |
Ordre de trie
Signe | Usage |
---|---|
«-» | placé devant un attribut placé dans un critère de tri indique un tri décroissant. |
— Code métier — Développement DSM —