Vue locale (langage)
De Wiki1000
(Différences entre les versions)
| Ligne 30 : | Ligne 30 : | ||
BNF style grammar : | BNF style grammar : | ||
| − | <nom_vue> ::= ViewOf(<class_dec>) [< | + | <nom_vue> ::= ViewOf(<class_dec>) [<attributes>] end |
<class_dec> ::= <class_name> | <class_name> <class_dec> | <class_dec> ::= <class_name> | <class_name> <class_dec> | ||
<class_name> ::= identifier | <class_name> ::= identifier | ||
<class_dec> ::= distinct | <class_dec> ::= distinct | ||
| + | <attributes> ::= <attribute_def> | <attribute_def> <where_def> | ||
<attribute_def> ::= <simple_attribute_def> | <simple_attribute_def> <attribute_directive> | <attribute_def> ::= <simple_attribute_def> | <simple_attribute_def> <attribute_directive> | ||
<simple_attribute_def> ::= <attribute_dec> | <attribute_dec> = <attribute_ref> | <simple_attribute_def> ::= <attribute_dec> | <attribute_dec> = <attribute_ref> | ||
| Ligne 42 : | Ligne 43 : | ||
<date_operator> ::= year|month|quarter|week|day|dayofyear|dayofweek|hour|minute|second | <date_operator> ::= year|month|quarter|week|day|dayofyear|dayofweek|hour|minute|second | ||
<attribute_directive> ::= primary | orderby | orderby desc | <attribute_directive> ::= primary | orderby | orderby desc | ||
| + | <where_def> ::= [ <expression> ] | ||
Type | Type | ||
| Ligne 51 : | Ligne 53 : | ||
Attribut : Type = AliasDe orderby; | Attribut : Type = AliasDe orderby; | ||
Attribut : Type = AliasDe orderby desc; | Attribut : Type = AliasDe orderby desc; | ||
| + | [ expression ] | ||
end; | end; | ||
</pre> | </pre> | ||
| Ligne 88 : | Ligne 91 : | ||
end; | end; | ||
| − | |||
begin | begin | ||
| − | + | ... | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
end; | end; | ||
</source> | </source> | ||
| Ligne 108 : | Ligne 106 : | ||
end; | end; | ||
| − | |||
begin | begin | ||
| − | + | ... | |
| − | + | end; | |
| − | + | </source> | |
| − | + | ||
| − | + | '''Vue avec un opérateur de date :''' | |
| + | |||
| + | <source lang="delphi"> | ||
| + | function foo(const S:string):Integer; | ||
| + | Type | ||
| + | MyView = viewof(ClassC distinct) | ||
| + | unCode:string = unCodeC primary; | ||
| + | unMois:Integer = month(uneDate); | ||
| + | end; | ||
| + | |||
| + | begin | ||
| + | ... | ||
| + | end; | ||
| + | </source> | ||
| + | |||
| + | '''Vue avec filtre :''' | ||
| + | |||
| + | <source lang="delphi"> | ||
| + | function foo(const S:string):Integer; | ||
| + | Type | ||
| + | MyView = viewof(ClassA) | ||
| + | unCodeAA:string = unCodeA; | ||
| + | unCodeBB:string = refB.unCodeB; | ||
| + | [ unCodeA='A1' ] | ||
| + | end; | ||
| + | |||
| + | begin | ||
| + | ... | ||
end; | end; | ||
</source> | </source> | ||
Version du 19 septembre 2011 à 14:19
Les vues locales sont des type de données vues déclarées localement à l'intérieur d'une opération.
Par exemple le code suivant déclare une vue MyView et effectue une recherche sur cette vue :
function foo(const S:string):Integer; Type MyView = viewof(ClassA) unCode:string = unCodeA; unEntier:Integer = refB.unEntierB; end; var inst:MyView; begin inst := MyView.Find('unCode=%1','',true,['B1']); if Assigned(inst) then begin ... end; end
Le périmètre du type est limité à la procédure, il n'est donc pas possible de passer les objets de la vue en paramètre à d'autres fonctions (pour cela utilisez une vue globale).
La syntaxe pour définir une vue locale :
BNF style grammar :
<nom_vue> ::= ViewOf(<class_dec>) [<attributes>] end
<class_dec> ::= <class_name> | <class_name> <class_dec>
<class_name> ::= identifier
<class_dec> ::= distinct
<attributes> ::= <attribute_def> | <attribute_def> <where_def>
<attribute_def> ::= <simple_attribute_def> | <simple_attribute_def> <attribute_directive>
<simple_attribute_def> ::= <attribute_dec> | <attribute_dec> = <attribute_ref>
<attribute_dec> ::= <attribute_name> : <type_name>
<attribute_ref> ::= <main_class_attribute_name> | <operator>(<main_class_attribute_name>)
<operator> ::= <aggregate_operator> | <date_operator>
<aggregate_operator> ::= count|sum|max|min
<date_operator> ::= year|month|quarter|week|day|dayofyear|dayofweek|hour|minute|second
<attribute_directive> ::= primary | orderby | orderby desc
<where_def> ::= [ <expression> ]
Type
NomDeVue = ViewOf(NomDeClassePrincipale)
Attribut : Type;
Attribut : Type = AliasDe;
Attribut : Type = operator(AliasDe);
Attribut : Type = AliasDe primary;
Attribut : Type = AliasDe orderby;
Attribut : Type = AliasDe orderby desc;
[ expression ]
end;
Les vues peuvent utiles pour effectuer des traitement sur des classes complexes, par exemples :
Curseur sur une classe vue :
function foo(const S:string):Integer; Type MyView = viewof(ClassA) newCode:string; unCode:string = unCodeA; unEntier:Integer = refB.unEntierB; end; var inst:MyView; cursor:MyViewCursor begin Result := 0; cursor := MyView.CreateCursorWhere(''unCode=%1'','''',true,[S]); foreach inst in cursor do begin Result := Result + inst.unEntier; end; end;
Vue sur des combinaisons uniques d'attributs :
function foo(const S:string):Integer; Type MyView = viewof(ClassA distinct) unCode:string = unCodeA primary; unEntier:Integer = refB.unEntierB; end; begin ... end;
Vue avec agrégats :
function foo(const S:string):Integer; Type MyView = viewof(ClassA) unCode:string = unCodeA primary; unEntier:Integer = sum(unEntier); end; begin ... end;
Vue avec un opérateur de date :
function foo(const S:string):Integer; Type MyView = viewof(ClassC distinct) unCode:string = unCodeC primary; unMois:Integer = month(uneDate); end; begin ... end;
Vue avec filtre :
function foo(const S:string):Integer; Type MyView = viewof(ClassA) unCodeAA:string = unCodeA; unCodeBB:string = refB.unCodeB; [ unCodeA='A1' ] end; begin ... end;
Voir aussi :
| Whos here now: Members 0 Guests 0 Bots & Crawlers 1 |