Version 2025 r2 (release note)
De Wiki1000
(Différences entre les versions)
(→Sélecteur) |
(→Sélecteur) |
||
| (9 révisions intermédiaires par un utilisateur sont masquées) | |||
| Ligne 3 : | Ligne 3 : | ||
''' PREVIEW ''' | ''' PREVIEW ''' | ||
| + | |||
| + | ==Modèle== | ||
| + | |||
| + | ===Classes=== | ||
| + | |||
| + | * Méthode AllocOID | ||
| + | |||
| + | <source lang="delphi">class function AllocOID:TOID;</source> | ||
| + | * Alloue un oid de la classe | ||
| + | : Peut être utile dans les tests unitaires | ||
| + | |||
| + | * Méthode ToJson() | ||
| + | |||
| + | <source lang="delphi">procedure ToJson(SA:variant);</source> | ||
| + | |||
| + | * Sérialize l'objet en json | ||
| + | : SA peut être un TJsonArray ou un TJsonStruct | ||
| + | |||
| + | ===Classes SQL=== | ||
| + | |||
| + | * Options de rôle : NoRefIndex | ||
| + | |||
| + | * Options de rôle : NoForeignKey | ||
==Script== | ==Script== | ||
| + | |||
| + | ===Trace=== | ||
| + | |||
| + | <source lang="delphi">procedure dbgClear();</source> | ||
| + | : Vide la trace | ||
| + | |||
| + | <source lang="delphi">procedure dbgEnable(value:boolean);</source> | ||
| + | : Active / désactive la trace | ||
===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 14 : | Ligne 95 : | ||
vue1 = viewOf(ClassA) | vue1 = viewOf(ClassA) | ||
p1:TEnum(enumName) = ...; | p1:TEnum(enumName) = ...; | ||
| + | end; | ||
| + | </source> | ||
| + | |||
| + | * Qualifier d'attribut NotInGroupBy | ||
| + | |||
| + | <source lang="delphi"> | ||
| + | Type | ||
| + | vue1 = viewOf(ClassA) | ||
| + | p1:string = expression('...') notInGroupBy; | ||
end; | end; | ||
</source> | </source> | ||
| Ligne 28 : | Ligne 118 : | ||
vue2 = viewOf(vue1) | vue2 = viewOf(vue1) | ||
p1:string = ...; | p1:string = ...; | ||
| − | [inherited] | + | [inherited and (...)] |
end; | end; | ||
| + | </source> | ||
| + | |||
| + | '''Exemple:''' | ||
| + | |||
| + | <source lang="delphi"> | ||
| + | //function GetSelector(iGroupBy:string; iFilter:TJsonArray):TSelector; | ||
| + | Type | ||
| + | // défini une classe de base avec tous les filtres | ||
| + | // | ||
| + | vueEcritureLettrage = viewOf(TEcriture) | ||
| + | lettrable:boolean = compteGeneral.lettrable notInSelect; | ||
| + | idEtablissement:TOID = piece.oidEtablissement notInSelect; | ||
| + | idCompteGeneral:TOID = oidCompteGeneral notInSelect; | ||
| + | idRoleTiers:TOID = oidroleTiers notInSelect; | ||
| + | [(lettrable=true) | ||
| + | and ((oidLettrageEcriture='') or (dateLettrage=0)) | ||
| + | and (typeEcriture<>0) | ||
| + | and (piece.lot.origineLot<>0) | ||
| + | and (eDate>=%ArgDateInf) | ||
| + | and (eDate<=%ArgDateSup) | ||
| + | and (idEtablissement=%ArgEtablissement) | ||
| + | and (idCompteGeneral=%ArgCompteGeneral) | ||
| + | and (idRoleTiers=%ArgRoleTiers) | ||
| + | ] | ||
| + | end; | ||
| + | |||
| + | // Hérite de tous les filtres | ||
| + | // | ||
| + | vueEcritureLettrageGroupBy = viewOf(vueEcritureLettrage) | ||
| + | dateMin:TDatetime = min(eDate); | ||
| + | dateMax:TDatetime = max(eDate); | ||
| + | ACount:Integer = count(oid); | ||
| + | credit:Currency = sum('credit:TCValue'); | ||
| + | debit:Currency = sum('debit:TCValue'); | ||
| + | solde:Currency = sumDiff(debit,credit); | ||
| + | [inherited] | ||
| + | end; | ||
| + | |||
| + | begin | ||
| + | Result := vueLettrageGroupBy.CreateSelector('','',True,[]); | ||
| + | end; | ||
</source> | </source> | ||
* Scope de vue locale | * Scope de vue locale | ||
| + | |||
| + | Une vue locale peut être référencée en dehors de la méthode où elle est définie. | ||
<source lang="delphi"> | <source lang="delphi"> | ||
| Ligne 55 : | Ligne 188 : | ||
* Expression Exists() | * 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" | ||
<source lang="delphi"> | <source lang="delphi"> | ||
| Ligne 73 : | Ligne 210 : | ||
* lastOpeStamp, lastAffectedStamp | * lastOpeStamp, lastAffectedStamp | ||
: Attributs mis à jour par la dernière opération assembliste. | : 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 | * Amélioration de CopyTo | ||
| Ligne 78 : | Ligne 218 : | ||
* CopyTo, Update, UpdateFrom | * CopyTo, Update, UpdateFrom | ||
| − | : Fonctionne sur les classes SQL | + | : Fonctionne sur les classes de stéréotype SQL |
| + | |||
| + | ===ToJson()=== | ||
| + | |||
| + | <source lang="delphi">procedure ToJson(SA:TJsonArray);</source> | ||
| + | |||
| + | '''Exemple:''' | ||
| + | |||
| + | <source lang="delphi"> | ||
| + | |||
| + | //procedure GetData(SRows:TJsonArray); | ||
| + | Type | ||
| + | myView = viewOf(...) | ||
| + | ... | ||
| + | end; | ||
| + | |||
| + | var sel:TSelector; | ||
| + | begin | ||
| + | // Selector to retreive the data | ||
| + | // | ||
| + | sel := myView.CreateSelector('','',True,[]); | ||
| + | sel.ToJson(SRows); | ||
| + | end; | ||
| + | </source> | ||
| + | |||
| + | |||
| + | * Sérialize tous les objets retournés par le sélecteur | ||
| − | ===UpdateFrom=== | + | ===UpdateFrom()=== |
<source lang="delphi"> | <source lang="delphi"> | ||
| Ligne 136 : | Ligne 302 : | ||
tm0.modeLettrage = 1 | tm0.modeLettrage = 1 | ||
; | ; | ||
| − | |||
</pre> | </pre> | ||
[[Category:Version 2025 R2]] | [[Category:Version 2025 R2]] | ||
[[Category:Release note]] | [[Category:Release note]] | ||
Version du 16 avril 2025 à 16:44
Sommaire |
PREVIEW
Modèle
Classes
- Méthode AllocOID
class function AllocOID:TOID;
- Alloue un oid de la classe
- Peut être utile dans les tests unitaires
- Méthode ToJson()
procedure ToJson(SA:variant);
- Sérialize l'objet en json
- SA peut être un TJsonArray ou un TJsonStruct
Classes SQL
- Options de rôle : NoRefIndex
- Options de rôle : NoForeignKey
Script
Trace
procedure dbgClear();
- Vide la trace
procedure dbgEnable(value:boolean);
- Active / désactive la trace
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;
- Qualifier d'attribut NotInGroupBy
Type vue1 = viewOf(ClassA) p1:string = expression('...') notInGroupBy; end;
- Héritage de vue locale
Type vue1 = viewOf(ClassA) p1:string = ...; [...] end; vue2 = viewOf(vue1) p1:string = ...; [inherited and (...)] end;
Exemple:
//function GetSelector(iGroupBy:string; iFilter:TJsonArray):TSelector; Type // défini une classe de base avec tous les filtres // vueEcritureLettrage = viewOf(TEcriture) lettrable:boolean = compteGeneral.lettrable notInSelect; idEtablissement:TOID = piece.oidEtablissement notInSelect; idCompteGeneral:TOID = oidCompteGeneral notInSelect; idRoleTiers:TOID = oidroleTiers notInSelect; [(lettrable=true) and ((oidLettrageEcriture='') or (dateLettrage=0)) and (typeEcriture<>0) and (piece.lot.origineLot<>0) and (eDate>=%ArgDateInf) and (eDate<=%ArgDateSup) and (idEtablissement=%ArgEtablissement) and (idCompteGeneral=%ArgCompteGeneral) and (idRoleTiers=%ArgRoleTiers) ] end; // Hérite de tous les filtres // vueEcritureLettrageGroupBy = viewOf(vueEcritureLettrage) dateMin:TDatetime = min(eDate); dateMax:TDatetime = max(eDate); ACount:Integer = count(oid); credit:Currency = sum('credit:TCValue'); debit:Currency = sum('debit:TCValue'); solde:Currency = sumDiff(debit,credit); [inherited] end; begin Result := vueLettrageGroupBy.CreateSelector('','',True,[]); 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
ToJson()
procedure ToJson(SA:TJsonArray);
Exemple:
//procedure GetData(SRows:TJsonArray); Type myView = viewOf(...) ... end; var sel:TSelector; begin // Selector to retreive the data // sel := myView.CreateSelector('','',True,[]); sel.ToJson(SRows); end;
- Sérialize tous les objets retournés par le sélecteur
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 ;
| Whos here now: Members 0 Guests 0 Bots & Crawlers 1 |