Vue locale (langage)

De Wiki1000
(Différences entre les versions)
Ligne 28 : Ligne 28 :
  
 
<pre>
 
<pre>
 +
  BNF style grammar :
 +
 +
  <nom_vue> ::= ViewOf(<nom_classe>) [<attribute_def>] end
 +
  <nom_classe> ::= identifier
 +
  <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> ::= <agregate_operator> | <date_operator>
 +
  <agregate_operator> ::= count|sum|max|min
 +
  <date_operator> ::= year|month|quarter|week|day|dayofyear|dayofweek|hour|minute|second
 +
  <attribute_directive> ::=  primary | orderby | orderby desc
 +
 
   Type
 
   Type
 
     NomDeVue = ViewOf(NomDeClassePrincipale)
 
     NomDeVue = ViewOf(NomDeClassePrincipale)
 
       Attribut : Type;
 
       Attribut : Type;
 
       Attribut : Type = AliasDe;
 
       Attribut : Type = AliasDe;
 +
      Attribut : Type = operator(AliasDe);
 +
      Attribut : Type = AliasDe primary;
 +
      Attribut : Type = AliasDe orderby;
 +
      Attribut : Type = AliasDe orderby desc;
 
     end;
 
     end;
 
</pre>
 
</pre>

Version du 19 septembre 2011 à 10:36

versiontahoe-32x32.png

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(<nom_classe>) [<attribute_def>] end 
  <nom_classe> ::= identifier
  <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> ::= <agregate_operator> | <date_operator>
  <agregate_operator> ::= count|sum|max|min
  <date_operator> ::= year|month|quarter|week|day|dayofyear|dayofweek|hour|minute|second
  <attribute_directive> ::=  primary | orderby | orderby desc 

  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;
    end;

Les vues peuvent utiles pour effectuer des traitement sur des classes complexes, par exemple il est possible d'utiliser un 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;

Voir aussi :

Outils personnels