« Vue locale (langage) » : différence entre les versions

De Wiki1000
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 30 : Ligne 30 :
   BNF style grammar :  
   BNF style grammar :  


   <nom_vue> ::= ViewOf(<class_dec>) [<attribute_def>] end  
   <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;


var inst:MyView; cursor:MyViewCursor
begin
begin
   cursor := MyView.CreateCursorWhere(''unCode=%1'','''',true,[S]);
   ...
  foreach inst in cursor do
  begin
    ...
  end;
end;
end;
</source>
</source>
Ligne 108 : Ligne 106 :
   end;
   end;


var inst:MyView; cursor:MyViewCursor
begin
begin
   cursor := MyView.CreateCursorWhere(''unCode=%1'','''',true,[S]);
   ...
   foreach inst in cursor do
end;
  begin
</source>
    ...
 
  end;
'''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 à 13:19

{{#images:versionTahoe-32x32.png|stock}}

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 :

<source lang="delphi"> 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 </source>

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  :

<source lang="delphi"> 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; </source>

Vue sur des combinaisons uniques d'attributs :

<source lang="delphi"> function foo(const S:string):Integer; Type

 MyView = viewof(ClassA distinct)
   unCode:string = unCodeA primary;
   unEntier:Integer = refB.unEntierB;
 end;

begin

 ...

end; </source>

Vue avec agrégats :

<source lang="delphi"> function foo(const S:string):Integer; Type

 MyView = viewof(ClassA)
   unCode:string = unCodeA primary;
   unEntier:Integer = sum(unEntier);
 end;

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; </source>


Voir aussi :