« Version 2025 r2 (release note) » : différence entre les versions

De Wiki1000
Ligne 7 : Ligne 7 :


===Vue locale===
===Vue locale===
* Une vue locale peut contenir des attributs "oidXXX" sans définir le rôle
'''Exemple:'''
<source lang="delphi">
Type
  vue1 = viewOf(ClassA)
  p1:TEnum(enumName) = ...;
  oidRef:TOID = oidrefB;
  ..
  idRefB:TOID = oidrefB notInSelect;
  [ (idRefB=%ArgRefB) and ....]
  end;
</source>
* Une vue locale peut contenir des attributs non mappés dans la définition.
'''Exemple:'''
<source lang="delphi">
Type
  vue1 = viewOf(ClassA)
    ACount:Integer = count(oid)
    oidRef:TOID;
    codeRef:string;
    libelleRef:string;
  ..
  [  ...]
  end;
var sel:TSelector;
begin
  sel := vue1.createSelector();
  case iGroupBy of
  'refB':
    begin
      sel.AddColumn('oidrefB','oidRef');
      sel.AddColumn('refB.code','codeRef');
      sel.AddColumn('refB.Caption','libelleRef');
    end;
  'refC':
    begin
      sel.AddColumn('oidrefC','oidRef');
      sel.AddColumn('refC.code','codeRef');
      sel.AddColumn('refC.Caption','libelleRef');
    end;
  end;
end;
</source>


* Paramètre de type de donnée
* Paramètre de type de donnée
Ligne 34 : Ligne 84 :
* Scope de vue locale
* Scope de vue locale


Une vue locale peut être référencée en dehors de la méthode ou elle est définie.
Une vue locale peut être référencée en dehors de la méthode elle est définie.


<source lang="delphi">
<source lang="delphi">
Ligne 59 : Ligne 109 :


Une expression existe peut être utilisée dans les filtres comme une valeur logique
Une expression existe peut être utilisée dans les filtres comme une valeur logique
Note : Une expression Exists() est beaucoup plus rapide qu'un "Count<>0"


<source lang="delphi">
<source lang="delphi">

Version du 10 avril 2025 à 17:26

Modèle:Version2025r1

PREVIEW

Script

Vue locale

  • Une vue locale peut contenir des attributs "oidXXX" sans définir le rôle

Exemple:

Type
  vue1 = viewOf(ClassA)
   p1:TEnum(enumName) = ...;
   oidRef:TOID = oidrefB;
   ..
   idRefB:TOID = oidrefB notInSelect;
   [ (idRefB=%ArgRefB) and ....]
  end;
  • Une vue locale peut contenir des attributs non mappés dans la définition.

Exemple:

Type
  vue1 = viewOf(ClassA)
    ACount:Integer = count(oid)
    oidRef:TOID;
    codeRef:string;
    libelleRef:string;
   ..
   [  ...]
  end;

var sel:TSelector;
begin
  sel := vue1.createSelector();
  case iGroupBy of
   'refB':
     begin
       sel.AddColumn('oidrefB','oidRef'); 
       sel.AddColumn('refB.code','codeRef'); 
       sel.AddColumn('refB.Caption','libelleRef'); 
     end;
   'refC':
     begin
       sel.AddColumn('oidrefC','oidRef'); 
       sel.AddColumn('refC.code','codeRef'); 
       sel.AddColumn('refC.Caption','libelleRef'); 
     end;
  end; 
end;
  • Paramètre de type de donnée
Type
  vue1 = viewOf(ClassA)
   p1:TEnum(enumName) = ...;
  end;
  • Héritage de vue locale
Type
  vue1 = viewOf(ClassA)
   p1:string = ...;
   [...]
  end;

  vue2 = viewOf(vue1)
   p1:string = ...;
   [inherited]
  end;
  • Scope de vue locale

Une vue locale peut être référencée en dehors de la méthode où elle est définie.

procedure Class1.foo;
Type
  vue1 = viewOf(ClassA)
   p1:string = ...;
  end;
begin
  ...
end;

procedure Class2.bar;
Type
  vue2 = viewOf(class1.foo.vue1)
   p1:string = ...;
  end;
begin
  ...
end;
  • Expression Exists()

Une expression existe peut être utilisée dans les filtres comme une valeur logique

Note : Une expression Exists() est beaucoup plus rapide qu'un "Count<>0"

Type
  vue1 = viewOf(ClassA)
   id:string = ...;
  end;

  vue2 = viewOf(ClassB)
   id:string = ...;
   bb:boolean = vue1.Exists('(id=self.id)',True,[]) notInSelect;
   [(bb=true) and (....)]
  end;

Sélecteur

  • lastOpeStamp, lastAffectedStamp
Attributs mis à jour par la dernière opération assembliste.
  • RmvParameter()
Permet de retirer un paramètre qui a été ajouté par AddParameter()
  • Amélioration de CopyTo
Permet de créer des objets à partir d'un sélecteur
  • CopyTo, Update, UpdateFrom
Fonctionne sur les classes de stéréotype SQL

UpdateFrom

function updateFrom(sel:TSelector; iMatchedProps:Array of string; iUpdatedProps:Array of string; iUpdatedValue:Array of variant):Integer;

Permet de mettre à jour une classe à partir d'un sélecteur et d'une colonne de correspondance.

Exemple :

Type
  // Update the temp table 
  vueTemp = viewOf(TempLettrage)
    reference1:string = reference1;
    reference2:string = reference2;
    modeLettrage:Integer = modeLettrage; 
  end;
   
  vueRef1 = viewOf(TempLettrage)
    //ACount:Integer = count(id);
    ATotal:Currency = sumSign(montant:TCValue,sens,'1');
    reference1:string = reference1; 
    [(modeLettrage=0) and (reference1<>'')] 
  end; 

var selT,selG:TSelector;
begin
  withP long transaction do
    begin
     // for updating the temp table on "match" 
     selT := vueTemp.CreateSelector('','',True,[]);

     // Lettrage sur reference 1 
     selG := vueRef1.CreateSelector('(ATotal=0)','',True,[]);
     selG.useCTE := True; 
     selT.UpdateFrom(selG,['reference1'],['modeLettrage'],[1]); 
    end;
end;
with CTE as (
select sum(case when t0.sens=1 then ISNULL(t0.montant_TCValue, 0) else -ISNULL(t0.montant_TCValue, 0) end)  as "ATotal",t0.reference1  as "reference1"
from dbo.TEMPLETTRAGE t0 WITH (NOLOCK)
where ((t0.modeLettrage = 0) and (t0.reference1 IS NOT NULL))
group by t0.reference1
)
merge into dbo.TEMPLETTRAGE tm0 using (
SELECT  *
FROM CTE
Where (ATotal = 0.0000)
) tm1 on (tm1.reference1=tm0.reference1)
when matched then update set
tm0.modeLettrage = 1
;