RenumberAndSeal (TSealOpeLogRegClass)
De Wiki1000
(Différences entre les versions)
| (4 révisions intermédiaires par un utilisateur sont masquées) | |||
| Ligne 1 : | Ligne 1 : | ||
<source lang='delphi'>class function RenumberAndSeal(sel:TSelector; const iUpdateProperties:Array of variant; iUpdateValues:Array of variant; var aReason:string):Integer;</source> | <source lang='delphi'>class function RenumberAndSeal(sel:TSelector; const iUpdateProperties:Array of variant; iUpdateValues:Array of variant; var aReason:string):Integer;</source> | ||
| − | |||
| − | |||
{|class="wikitable" | {|class="wikitable" | ||
| Ligne 15 : | Ligne 13 : | ||
|- | |- | ||
|iUpdateProperties | |iUpdateProperties | ||
| − | |Liste d' | + | |Liste d'attributs à mettre à jour |
|- | |- | ||
|iLastSequenceNumber | |iLastSequenceNumber | ||
| Ligne 24 : | Ligne 22 : | ||
|} | |} | ||
| + | Cette méthode [[Renumber_(selector)|renumérote]] et scelle les objets référencés par le sélecteur et crée un enregistrement de journal. | ||
| + | |||
| + | La méthode : | ||
| + | |||
| + | * Utilise le prochain numéro de séquence issu du dernier enregistrement de journal. | ||
| + | * Crée un enregistrement de journal | ||
| + | * Gère une transaction longue si aucune transaction longue n'est ouverte. | ||
| + | |||
| + | {{tip|Du fait que Renumber met à jour les objets par SQL, les attributs mis à jour (iUpdateProperties) ne doivent pas être protégés.}} | ||
| + | {{Tip|Cette méthode est une opération exclusive, la classe journal est vérrouillée durant l'opération}} | ||
| + | |||
| + | Exemple : | ||
| + | |||
| + | '''Utilisation à l'intérieur d'une transaction longue :''' | ||
| + | |||
| + | <source lang=Delphi> | ||
| + | function RenumberAndSealInsideLT(var aReason:string):Intege; | ||
| + | var AStr:string; sel:TSelector; | ||
| + | begin | ||
| + | sel := ClassSealed.CreateSelector('(SequenceNumber=%1)','',True,[0]); | ||
| + | Result := sel.Count; | ||
| + | if Result=0 then | ||
| + | begin | ||
| + | aReason := 'Nothing to seal'; | ||
| + | Exit; | ||
| + | end; | ||
| + | |||
| + | ClassManager.BeginLongTran(0,'ClassSealed'); | ||
| + | try | ||
| + | Result := ClassSealOpeLog.RenumberAndSeal(sel,['isSealed'],[True],aStr); | ||
| + | if Result=0 then | ||
| + | begin | ||
| + | aReason := aStr; | ||
| + | ClassManager.RollBackLongTran; | ||
| + | Exit; | ||
| + | end; | ||
| + | ClassManager.CommitLongTran; | ||
| + | except | ||
| + | Result := 0; | ||
| + | ClassManager.RollBackLongTran; | ||
| + | end; | ||
| + | end; | ||
| + | </source> | ||
| + | |||
| + | |||
| + | '''Utilisation avec transaction gérée par la méthode :''' | ||
| + | |||
| + | <source lang=Delphi> | ||
| + | function RenumberAndSealManageLT(var aReason:string):Intege; | ||
| + | ar AStr:string; sel:TSelector; | ||
| + | begin | ||
| + | sel := ClassSealed.CreateSelector('(SequenceNumber=%1)','',True,[0]); | ||
| + | Result := sel.Count; | ||
| + | if Result=0 then | ||
| + | begin | ||
| + | aReason := 'Nothing to seal'; | ||
| + | Exit; | ||
| + | end; | ||
| + | |||
| + | Result := ClassSealOpeLog.RenumberAndSeal(sel,['isSealed'],[True],aStr); | ||
| + | if Result=0 then | ||
| + | begin | ||
| + | aReason := aStr; | ||
| + | Exit; | ||
| + | end; | ||
| + | end; | ||
| + | </source> | ||
Voir aussi | Voir aussi | ||
Version actuelle en date du 13 avril 2017 à 08:48
class function RenumberAndSeal(sel:TSelector; const iUpdateProperties:Array of variant; iUpdateValues:Array of variant; var aReason:string):Integer;
| Paramètre | Usage |
|---|---|
| Result | Nombre d'objet scellé, 0 indique une erreur |
| sel | Sélecteur de la classe scellée |
| iUpdateProperties | Liste d'attributs à mettre à jour |
| iLastSequenceNumber | Liste des valeurs des attributs à mettre à jour |
| aReason | Information sur l'erreur |
Cette méthode renumérote et scelle les objets référencés par le sélecteur et crée un enregistrement de journal.
La méthode :
- Utilise le prochain numéro de séquence issu du dernier enregistrement de journal.
- Crée un enregistrement de journal
- Gère une transaction longue si aucune transaction longue n'est ouverte.
| Tip : Du fait que Renumber met à jour les objets par SQL, les attributs mis à jour (iUpdateProperties) ne doivent pas être protégés. |
| Tip : Cette méthode est une opération exclusive, la classe journal est vérrouillée durant l'opération |
Exemple :
Utilisation à l'intérieur d'une transaction longue :
function RenumberAndSealInsideLT(var aReason:string):Intege; var AStr:string; sel:TSelector; begin sel := ClassSealed.CreateSelector('(SequenceNumber=%1)','',True,[0]); Result := sel.Count; if Result=0 then begin aReason := 'Nothing to seal'; Exit; end; ClassManager.BeginLongTran(0,'ClassSealed'); try Result := ClassSealOpeLog.RenumberAndSeal(sel,['isSealed'],[True],aStr); if Result=0 then begin aReason := aStr; ClassManager.RollBackLongTran; Exit; end; ClassManager.CommitLongTran; except Result := 0; ClassManager.RollBackLongTran; end; end;
Utilisation avec transaction gérée par la méthode :
function RenumberAndSealManageLT(var aReason:string):Intege; ar AStr:string; sel:TSelector; begin sel := ClassSealed.CreateSelector('(SequenceNumber=%1)','',True,[0]); Result := sel.Count; if Result=0 then begin aReason := 'Nothing to seal'; Exit; end; Result := ClassSealOpeLog.RenumberAndSeal(sel,['isSealed'],[True],aStr); if Result=0 then begin aReason := aStr; Exit; end; end;
Voir aussi
— Classe_journal de scellement_(stereotype) — Développement DSM —
| Whos here now: Members 0 Guests 0 Bots & Crawlers 1 |