Vue locale (langage)

De Wiki1000
(Différences entre les versions)
Ligne 201 : Ligne 201 :
 
</source>
 
</source>
  
 +
'''Opérateur portant sur un type numérique :'''
 +
 +
{|class="wikitable"
 +
|-
 +
!Opérateur
 +
!Arguments
 +
!Action
 +
|-
 +
|sum (view ope)|sum
 +
|1
 +
|Effectue la somme de l'attribut
 +
|-
 +
|min (view ope)|min
 +
|1
 +
|Effectue la somme de l'attribut
 +
|-
 +
|max (view ope)|max
 +
|1
 +
|Retourne le max de l'attribut
 +
|-
 +
|sumdiff (view ope)|sumdiff
 +
|2
 +
|Retourne la somme de la différence entre deux attributs
 +
|-
 +
|mindiff (view ope)|mindiff
 +
|2
 +
|Retourne le min de la différence entre deux attributs
 +
|-
 +
|maxdiff (view ope)|maxdiff
 +
|2
 +
|Retourne le max de la différence entre deux attributs
 +
|-
 +
|sumconcat (view ope)|sumconcat
 +
|2
 +
|Retourne la somme de la somme entre deux attributs
 +
|-
 +
|minconcat (view ope)|minconcat
 +
|2
 +
|Retourne la min de la somme entre deux attributs
 +
|-
 +
|maxconcat (view ope)|maxconcat
 +
|2
 +
|Retourne le max de la somme entre deux attributs
 +
|-
 +
|count (view ope)|count
 +
|1
 +
|Compte le nombre d'attribut
 +
|}
 +
 +
'''Opérateur portant sur OID :'''
 +
 +
{|class="wikitable"
 +
|-
 +
!Opérateur
 +
!Arguments
 +
!Action
 +
|-
 +
|count (view ope)|count
 +
|1
 +
|Compte les éléments de la vue
 +
|}
 +
 +
'''Opérateur portant sur une date :'''
 +
 +
Ces opérateur prennent une date comme argument.
 +
 +
{|class="wikitable"
 +
|-
 +
!Opérateur
 +
!Arguments
 +
!Action
 +
|-
 +
|year (view ope)|year
 +
|1
 +
|Retourne l'année de la date
 +
|-
 +
|quarter (view ope)|quarter
 +
|1
 +
|Retourne le trimestre de la date
 +
|-
 +
|month (view ope)|month
 +
|1
 +
|Retourne le mois de la date
 +
|-
 +
|dayofyear (view ope)|dayofyear
 +
|1
 +
|Retourne le jour de l'année de la date
 +
|-
 +
|dayofweek (view ope)|dayofweek
 +
|1
 +
|Retourne le jour de la semaine de la date
 +
|-
 +
|hour (view ope)|hour
 +
|1
 +
|Retourne le nombre d'heures de la date
 +
|-
 +
|minute (view ope)|minute
 +
|1
 +
|Retourne le nombre de minutes de la date
 +
|-
 +
|second (view ope)|second
 +
|1
 +
|Retourne le nombre de secondes de la date
 +
|-
 +
|millisecond (view ope)|millisecond
 +
|1
 +
|Retourne le nombre de millisecondes de la date
 +
|}
 +
 +
'''Opérateur portant sur une référence :'''
 +
 +
{|class="wikitable"
 +
|-
 +
!Opérateur
 +
!Arguments
 +
!Action
 +
|-
 +
|[[join (view ope)|join]]
 +
|2
 +
|Réalise une jointure sur une référence
 +
|}
  
 
Voir aussi :
 
Voir aussi :

Version du 31 mars 2014 à 08:15

version650-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(<class_dec>) [<attributes>] end 
  <class_dec> ::= <class_names> | <class_name> <class_dec>
  <class_names> ::= <class_name>| [<class_name> ,]
  <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> | <join_operator>
  <aggregate_operator> ::= count|sum|max|min
  <date_operator> ::= year|month|quarter|week|day|dayofyear|dayofweek|hour|minute|second
  <join_operator> ::= join
  <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 une interface :

function foo(const S:string):Integer;
Type
  MyView = viewof(InterfaceA, ClassA1, ClassA2)
    unCode:string = unCodeA primary;
    ....
  end;
 
begin
  ...
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;

Vue avec jointure :

//Procedure expensePendings(req:Tjson; var res:TObject);
Type
  ExpenseView = viewOf(TNoteFrais)
   vp: TValideurPossible = join(ValidationEtat.EtatPossible.EtatMetier, EtatNF);
   aManager:string = vp.ContactEtablissement.oidutilisateur;
   //
   aDate:TDatetime = nDate;
   aRef:string = referencePiece;
   aReason:string = Caption;
   aAmountOrg:TMoney = MontantTTC;
   aAmountAct:TMoney = MontantRetenu;
   aQuantity:TQuantity = Quantite;
   aUser:string = Salarie.Operateur.oidutilisateur;
   aType:string = FraisSalarie.Caption;
   aMode:Integer = FraisSalarie.modeRemboursement;
   aAmountMax:TMoney = FraisSalarie.montantPlafond;
   aStatus:Integer = Statut;
  end;
 
var json:TJson; ls:TSelector; indx,ctn:Integer; inst:ExpenseView;
    AWhere,AOrder:string; Args:Array[0..5] of variant;
begin
  json := TJson.Create('');
  res  := json;
  //
  AWhere := '(aManager=%1) and (aStatus=%2)';
  Args[0] := GlbUserName;
  Args[1] := StatutNF_AValider;
  AOrder := 'aUser,-aDate';
 
  indx := 0; ctn := 0; 
  ls := ExpenseView.CreateSelector(AWhere,AOrder,true,Args);
  foreachP inst in ls.AsCursor do
   begin
     . . . 
   end;
end;

Opérateur portant sur un type numérique :

Opérateur Arguments Action
sum 1 Effectue la somme de l'attribut
min 1 Effectue la somme de l'attribut
max 1 Retourne le max de l'attribut
sumdiff 2 Retourne la somme de la différence entre deux attributs
mindiff 2 Retourne le min de la différence entre deux attributs
maxdiff 2 Retourne le max de la différence entre deux attributs
sumconcat 2 Retourne la somme de la somme entre deux attributs
minconcat 2 Retourne la min de la somme entre deux attributs
maxconcat 2 Retourne le max de la somme entre deux attributs
count 1 Compte le nombre d'attribut

Opérateur portant sur OID :

Opérateur Arguments Action
count 1 Compte les éléments de la vue

Opérateur portant sur une date :

Ces opérateur prennent une date comme argument.

Opérateur Arguments Action
year 1 Retourne l'année de la date
quarter 1 Retourne le trimestre de la date
month 1 Retourne le mois de la date
dayofyear 1 Retourne le jour de l'année de la date
dayofweek 1 Retourne le jour de la semaine de la date
hour 1 Retourne le nombre d'heures de la date
minute 1 Retourne le nombre de minutes de la date
second 1 Retourne le nombre de secondes de la date
millisecond 1 Retourne le nombre de millisecondes de la date

Opérateur portant sur une référence :

Opérateur Arguments Action
join 2 Réalise une jointure sur une référence

Voir aussi :

Outils personnels