Vue locale (langage)

De Wiki1000
(Différences entre les versions)
(Opérateur portant sur un type numérique)
(20 révisions intermédiaires par un utilisateur sont masquées)
Ligne 1 : Ligne 1 :
{{tahoe}}
+
{{Version650}}
 +
__TOC__
  
 
Les vues locales sont des type de données vues déclarées localement à l'intérieur d'une opération.
 
Les vues locales sont des type de données vues déclarées localement à l'intérieur d'une opération.
Ligne 31 : Ligne 32 :
  
 
   <nom_vue> ::= ViewOf(<class_dec>) [<attributes>] end  
 
   <nom_vue> ::= ViewOf(<class_dec>) [<attributes>] end  
   <class_dec> ::= <class_name> | <class_name> <class_dec>
+
   <class_dec> ::= <class_names> | <class_name> <class_dec>
 +
  <class_names> ::= <class_name>| [<class_name> ,]
 
   <class_name> ::= identifier
 
   <class_name> ::= identifier
 
   <class_dec> ::= distinct
 
   <class_dec> ::= distinct
Ligne 39 : Ligne 41 :
 
   <attribute_dec> ::= <attribute_name> : <type_name>
 
   <attribute_dec> ::= <attribute_name> : <type_name>
 
   <attribute_ref> ::= <main_class_attribute_name> | <operator>(<main_class_attribute_name>)
 
   <attribute_ref> ::= <main_class_attribute_name> | <operator>(<main_class_attribute_name>)
   <operator> ::= <aggregate_operator> | <date_operator>
+
   <operator> ::= <aggregate_operator> | <date_operator> | <join_operator>
 
   <aggregate_operator> ::= count|sum|max|min
 
   <aggregate_operator> ::= count|sum|max|min
 
   <date_operator> ::= year|month|quarter|week|day|dayofyear|dayofweek|hour|minute|second
 
   <date_operator> ::= year|month|quarter|week|day|dayofyear|dayofweek|hour|minute|second
 +
  <join_operator> ::= join
 
   <attribute_directive> ::=  primary | orderby | orderby desc  
 
   <attribute_directive> ::=  primary | orderby | orderby desc  
 
   <where_def> ::= [ <expression> ]
 
   <where_def> ::= [ <expression> ]
Ligne 59 : Ligne 62 :
 
Les vues peuvent utiles pour effectuer des traitement sur des classes complexes, par exemples :
 
Les vues peuvent utiles pour effectuer des traitement sur des classes complexes, par exemples :
  
'''Curseur sur une classe vue :'''
+
===Exemples===
 +
====Curseur sur une classe vue====
  
 
<source lang="delphi">
 
<source lang="delphi">
Ligne 81 : Ligne 85 :
 
</source>
 
</source>
  
'''Vue sur des combinaisons uniques d'attributs :'''
+
====Vue avec jointure externe====
 +
 
 +
<source lang="delphi">
 +
function ViewExternalJoin(const S:string):Boolean;
 +
Type
 +
  MyView = viewof(ClassA)
 +
    newCode:string;
 +
    unCodeAA:string = unCodeA;
 +
    unCodeBB:string = refB+unCodeB;
 +
  end;
 +
var inst:MyView;
 +
begin
 +
  inst := MyView.Find('unCodeAA=%1','',true,[S]);
 +
  if Assigned(inst) and (inst.unCodeAA=S)
 +
    then Result := True
 +
    else Result := False;
 +
end;
 +
 
 +
</source>
 +
 
 +
====Vue sur une interface====
 +
 
 +
<source lang="delphi">
 +
function foo(const S:string):Integer;
 +
Type
 +
  MyView = viewof(InterfaceA, ClassA1, ClassA2)
 +
    unCode:string = unCodeA primary;
 +
    ....
 +
  end;
 +
 
 +
begin
 +
  ...
 +
end;
 +
</source>
 +
 
 +
====Vue sur des combinaisons uniques d'attributs====
  
 
<source lang="delphi">
 
<source lang="delphi">
Ligne 96 : Ligne 135 :
 
</source>
 
</source>
  
'''Vue avec agrégats :'''
+
====Vue avec agrégats====
  
 
<source lang="delphi">
 
<source lang="delphi">
Ligne 111 : Ligne 150 :
 
</source>
 
</source>
  
'''Vue avec un opérateur de date :'''
+
====Vue avec agrégats sur un montant====
 +
 
 +
<source lang="delphi">
 +
Type
 +
  myView = viewof(WFClasseX)
 +
  mysum:TMoney = sum(credit) orderby;
 +
  end;
 +
 
 +
var sel:TSelector; inst:MyView; S,stag:string;
 +
begin
 +
  sel := MyView.CreateSelector('','',true,[]);
 +
 
 +
  S := ''; stag := '';
 +
  foreach inst in Sel.AsCursor do
 +
  begin
 +
    S := S+stag+Formatfloat('0.00',inst.mysum.Value);
 +
    stag := ',';
 +
  end;
 +
  showmessage(S);
 +
 
 +
  Result := FALSE;
 +
end;
 +
</source>
 +
 
 +
<pre>
 +
select sum(t0.credit) "mysum",t0.credit_CodeDevise "mysum_CodeDevise" from dbo.WFCLASSEX t0
 +
group by t0.credit_CodeDevise
 +
order by sum(t0.credit)
 +
</pre>
 +
 
 +
====Vue avec agrégats sur un attribut enfant====
 +
 
 +
<source lang="delphi">
 +
Type
 +
  myView = viewof(WFClasseX)
 +
  mysum:TMoney = sum(credit:TCValue) orderby;
 +
  end;
 +
begin
 +
  ...
 +
end;
 +
</source>
 +
 
 +
<pre>
 +
select sum(t0.credit_TCValue) "mysum" from dbo.WFCLASSEX t0
 +
order by sum(t0.credit_TCValue)
 +
</pre>
 +
 
 +
====Vue avec un opérateur de date====
  
 
<source lang="delphi">
 
<source lang="delphi">
Ligne 126 : Ligne 212 :
 
</source>
 
</source>
  
'''Vue avec filtre :'''
+
====Vue avec un opérateur de date (diff)====
 +
 
 +
<source lang="delphi">
 +
function foo(iDayDiff):string;
 +
Type
 +
  MyView = viewof(ClassC distinct)
 +
    unCode:string = unCodeC primary;
 +
    DayDiff:Integer = DayDiff(uneDateStart,uneDateEnd);
 +
  end;
 +
 
 +
begin
 +
  inst := MyView.Find('DayDiff >= %1','',true,[iDayDiff]);
 +
    if Assigned(inst)
 +
      then Result := inst.unCode
 +
      else Result := 'Not found';
 +
end;
 +
</source>
 +
 
 +
====Vue avec référence====
 +
 
 +
<source lang="delphi">
 +
function foo(const S:string):Integer;
 +
Type
 +
  MyView = viewof(ClassA)
 +
    unCodeAA:string = unCodeA;
 +
    refB:reference = refB;
 +
  end;
 +
 
 +
begin
 +
  ...
 +
end;
 +
</source>
 +
 
 +
<source lang="delphi">
 +
function foo(const S:string):Integer;
 +
Type
 +
  MyView = viewof(ClassA)
 +
    unCodeAA:string = unCodeA;
 +
    refB:ClassB = refB;
 +
  end;
 +
 
 +
begin
 +
  ...
 +
end;
 +
</source>
 +
 
 +
====Vue avec variable référence====
 +
 
 +
<source lang="delphi">
 +
function foo(const S:string):Integer;
 +
Type
 +
  MyView = viewof(ClassA)
 +
    unCodeAA:string = unCodeA;
 +
    refB:ClassB;
 +
  end;
 +
 
 +
begin
 +
  ...
 +
end;
 +
</source>
 +
 
 +
====Vue avec filtre====
  
 
<source lang="delphi">
 
<source lang="delphi">
Ligne 142 : Ligne 289 :
 
</source>
 
</source>
  
 +
====Vue avec traversée de liste====
 +
 +
[[image:view-list-1.jpg]]
 +
 +
<source lang="delphi">
 +
function _Concat(const S:string):string;
 +
Type
 +
  MyView = viewof(ClassF)
 +
    unCodeF:string = unCodeF;
 +
    unCodeG:string = refFG.unCodeG;
 +
    unCodeH:string = refFG.listH.unCodeH;
 +
  end;
 +
 +
var ls:MyViewList; stag:string; idx:integer;
 +
begin
 +
  ls := MyView.CreateListWhere('unCodeG=%1','','unCodeH',true,-1,[S]);
 +
  Result := ''; stag := '';
 +
  for idx:=0 to ls.Count-1 do
 +
  begin
 +
    Result := Result+stag+ls.Refs[idx].unCodeH;
 +
    stag := ',';
 +
  end;
 +
end;
 +
</source>
 +
 +
====Vue avec jointure====
 +
 +
<source lang="delphi">
 +
//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;
 +
</source>
 +
 +
Dans cette exemple le modèle est celui-ci :
 +
 +
[[image:view-join-2.jpg]]
 +
 +
La classe TEtatMetier est atteinte par deux chemins différents, un issu de la classe TValideurPossible et un issu de la classe TNoteFrais. La jointure est réalisée sur l'objet TEtatMetier.
 +
 +
<pre>
 +
  vp: TValideurPossible = join(ValidationEtat.EtatPossible.EtatMetier, EtatNF);
 +
</pre>
 +
 +
* TValideurPossible est la classe qui va être jointe
 +
* vp défini un alias sur cette classe qui peut être ensuite utilisé dans la définition de la vue.
 +
* ValidationEtat.EtatPossible.EtatMetier est le chemin issu de la classe jointe
 +
* EtatNF est le chemin issu de la classe de la vue.
 +
 +
===Opérateurs===
 +
====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
 +
|-
 +
|add (view ope)|add
 +
|2
 +
|Retourne la somme de deux attributs
 +
|-
 +
|sub (view ope)|sub
 +
|2
 +
|Retourne la différence entre deux attributs
 +
|-
 +
|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
 +
|}
 +
 +
{{version900}}
 +
{|class="wikitable"
 +
|-
 +
!Opérateur
 +
!Arguments
 +
!Action
 +
|-
 +
|sumDiffP
 +
|2
 +
|Retourne la somme de la différence si elle positive et 0 sinon.
 +
|-
 +
|sumDiffA
 +
|2
 +
|Retourne la valeur absolue de la différence.
 +
|-
 +
|sumDiffS
 +
|2
 +
|Retourne le signe de la différence
 +
|}
 +
 +
====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
 +
|-
 +
|daydiff (view ope)|daydiff
 +
|2
 +
|Retourne le nombre de jour entre deux dates
 +
|}
 +
 +
====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
 +
|}
 +
 +
===Agrégat portant sur un montant===
 +
 +
C'est le type de l'attribut défini dans la vue qui détermine le résultat de l'agrégation.
 +
 +
Les opération d'agrégation effectuent un groupement par devise et agrègent les valeurs de montant (en devise, tenue de compte et reporting). Les chaînes de conversion sont à vides et la date de cours est la date du jour. 
 +
 +
{|class="wikitable"
 +
|-
 +
!Type Source
 +
!Type Vue
 +
!Opération
 +
|-
 +
|source:Money
 +
|vue:Money = sum(source)
 +
|sum(Value) group by CodeDevise
 +
|-
 +
|source:MoneyDT
 +
|vue:Money = sum(source)
 +
|sum(Value) group by CodeDevise
 +
|-
 +
|source:Money
 +
|vue:MoneyDT = sum(source)
 +
|** ERREUR **
 +
|-
 +
|source:MoneyDT
 +
|vue:MoneyDT = sum(source)
 +
|sum(Value) group by CodeDevise
 +
|-
 +
|source:Money
 +
|vue:Currency = sum(source)
 +
|sum (Value)
 +
|-
 +
|source:MoneyDT
 +
|vue:Currency = sum(source)
 +
|sum (Value)
 +
|-
 +
|source:MoneyDT
 +
|vue:Currency = sum(source:TCValue)
 +
|sum (TCValue)
 +
|-
 +
|source:MoneyDT
 +
|vue:Currency = sum(source:RPValue)
 +
|sum (RPValue)
 +
|-
 +
|source:Currency
 +
|vue:Currency = sum(source)
 +
|sum (Value)
 +
|}
  
 
Voir aussi :
 
Voir aussi :
Ligne 149 : Ligne 581 :
 
[[Category:langage]]
 
[[Category:langage]]
 
[[Category:Vue de classe]]
 
[[Category:Vue de classe]]
[[Category:Tahoe]]
+
[[Category:Version650]]

Version du 25 juillet 2019 à 14:37

version650-32x32.png

Sommaire


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 :

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 avec jointure externe

function ViewExternalJoin(const S:string):Boolean;
Type
  MyView = viewof(ClassA)
    newCode:string;
    unCodeAA:string = unCodeA;
    unCodeBB:string = refB+unCodeB;
  end;
var inst:MyView;
begin
  inst := MyView.Find('unCodeAA=%1','',true,[S]);
  if Assigned(inst) and (inst.unCodeAA=S)
     then Result := True
     else Result := False;
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 agrégats sur un montant

Type
  myView = viewof(WFClasseX)
   mysum:TMoney = sum(credit) orderby;
  end;
 
var sel:TSelector; inst:MyView; S,stag:string;
begin
  sel := MyView.CreateSelector('','',true,[]);
 
  S := ''; stag := '';
  foreach inst in Sel.AsCursor do
   begin
     S := S+stag+Formatfloat('0.00',inst.mysum.Value);
     stag := ',';
   end;
  showmessage(S);
 
  Result := FALSE;
end;
select sum(t0.credit) "mysum",t0.credit_CodeDevise "mysum_CodeDevise" from dbo.WFCLASSEX t0
group by t0.credit_CodeDevise
order by sum(t0.credit)

Vue avec agrégats sur un attribut enfant

Type
  myView = viewof(WFClasseX)
   mysum:TMoney = sum(credit:TCValue) orderby;
  end;
begin
  ...
end;
select sum(t0.credit_TCValue) "mysum" from dbo.WFCLASSEX t0
order by sum(t0.credit_TCValue)

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 un opérateur de date (diff)

function foo(iDayDiff):string;
Type
  MyView = viewof(ClassC distinct)
    unCode:string = unCodeC primary;
    DayDiff:Integer = DayDiff(uneDateStart,uneDateEnd);
  end;
 
begin
  inst := MyView.Find('DayDiff >= %1','',true,[iDayDiff]);
    if Assigned(inst)
       then Result := inst.unCode
       else Result := 'Not found';
end;

Vue avec référence

function foo(const S:string):Integer;
Type
  MyView = viewof(ClassA)
    unCodeAA:string = unCodeA;
    refB:reference = refB;
  end;
 
begin
  ...
end;
function foo(const S:string):Integer;
Type
  MyView = viewof(ClassA)
    unCodeAA:string = unCodeA;
    refB:ClassB = refB;
  end;
 
begin
  ...
end;

Vue avec variable référence

function foo(const S:string):Integer;
Type
  MyView = viewof(ClassA)
    unCodeAA:string = unCodeA;
    refB:ClassB;
  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 traversée de liste

View-list-1.jpg

function _Concat(const S:string):string;
Type
  MyView = viewof(ClassF)
    unCodeF:string = unCodeF;
    unCodeG:string = refFG.unCodeG;
    unCodeH:string = refFG.listH.unCodeH;
  end;
 
var ls:MyViewList; stag:string; idx:integer;
begin
  ls := MyView.CreateListWhere('unCodeG=%1','','unCodeH',true,-1,[S]);
  Result := ''; stag := '';
  for idx:=0 to ls.Count-1 do
   begin
     Result := Result+stag+ls.Refs[idx].unCodeH;
     stag := ',';
   end;
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;

Dans cette exemple le modèle est celui-ci :

View-join-2.jpg

La classe TEtatMetier est atteinte par deux chemins différents, un issu de la classe TValideurPossible et un issu de la classe TNoteFrais. La jointure est réalisée sur l'objet TEtatMetier.

   vp: TValideurPossible = join(ValidationEtat.EtatPossible.EtatMetier, EtatNF);
  • TValideurPossible est la classe qui va être jointe
  • vp défini un alias sur cette classe qui peut être ensuite utilisé dans la définition de la vue.
  • ValidationEtat.EtatPossible.EtatMetier est le chemin issu de la classe jointe
  • EtatNF est le chemin issu de la classe de la vue.

Opérateurs

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
add 2 Retourne la somme de deux attributs
sub 2 Retourne la différence entre deux attributs
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

version900-32x32.png

Opérateur Arguments Action
sumDiffP 2 Retourne la somme de la différence si elle positive et 0 sinon.
sumDiffA 2 Retourne la valeur absolue de la différence.
sumDiffS 2 Retourne le signe de la différence

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
daydiff 2 Retourne le nombre de jour entre deux dates

Opérateur portant sur une référence

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

Agrégat portant sur un montant

C'est le type de l'attribut défini dans la vue qui détermine le résultat de l'agrégation.

Les opération d'agrégation effectuent un groupement par devise et agrègent les valeurs de montant (en devise, tenue de compte et reporting). Les chaînes de conversion sont à vides et la date de cours est la date du jour.

Type Source Type Vue Opération
source:Money vue:Money = sum(source) sum(Value) group by CodeDevise
source:MoneyDT vue:Money = sum(source) sum(Value) group by CodeDevise
source:Money vue:MoneyDT = sum(source) ** ERREUR **
source:MoneyDT vue:MoneyDT = sum(source) sum(Value) group by CodeDevise
source:Money vue:Currency = sum(source) sum (Value)
source:MoneyDT vue:Currency = sum(source) sum (Value)
source:MoneyDT vue:Currency = sum(source:TCValue) sum (TCValue)
source:MoneyDT vue:Currency = sum(source:RPValue) sum (RPValue)
source:Currency vue:Currency = sum(source) sum (Value)

Voir aussi :





Whos here now:   Members 0   Guests 0   Bots & Crawlers 1
 
Outils personnels