Migration (Framework)

De Wiki1000
(Différences entre les versions)
(Page créée avec « = Scripts before <br> = C'est l'opportunité offerte au développeur de pouvoir intervenir sur le modèle existant '''AVANT''' sa synchronisation, ce qui permet d'accéd... »)
 
(Enfin, voici un exemple d'un script réel de mise à jour.)
 
Ligne 20 : Ligne 20 :
 
== Enfin, voici un exemple d'un script réel de mise à jour. ==
 
== Enfin, voici un exemple d'un script réel de mise à jour. ==
  
  <source lang='delphi'>//Procedure MAJTypeOperationBancaireCompteBancaireBefore;
+
  <source lang='delphi'> //Procedure MAJTypeOperationBancaireCompteBancaireBefore;
 
  //Cette méthode BEFORE transfère les anciennes données sur la nouvelle classe (7.00P - >7.10), pour ceux qui ont appliqué le patch.
 
  //Cette méthode BEFORE transfère les anciennes données sur la nouvelle classe (7.00P - >7.10), pour ceux qui ont appliqué le patch.
 
  Var
 
  Var
Ligne 26 : Ligne 26 :
 
   vCursor                  : TDBCursor;
 
   vCursor                  : TDBCursor;
 
   vSQL                      : String;
 
   vSQL                      : String;
   vOldTable                : String; //TABLE OPTIONNELLE
+
   vOldTable                : String;
 
   vJrnTable                : String;
 
   vJrnTable                : String;
 +
  vJrnTable_SI              : String;
 
   vTOPTable                : String;
 
   vTOPTable                : String;
 
  begin
 
  begin
   vJrnTable := ClassManager.FindClassTableName('TJournal');
+
   vJrnTable   := ClassManager.FindClassTableName('TJournal');
   vTOPTable := ClassManager.FindClassTableName('TTypeOperationBancaire');
+
  if ClassManager.ShareEnable then
 +
    vJrnTable_SI := ClassManager.FindClassTableName('TJournal_SI');
 +
   vTOPTable   := ClassManager.FindClassTableName('TTypeOperationBancaire');
 
   
 
   
  //Copie les anciennes attributions avant leur destruction
+
   vOldTable := 'TTYPEOPERATIOTBANQUE'; //Table inexistance : patch déjà appliqué ou patch 7.00P jamais appliqué
   vOldTable := 'TTYPEOPERATIOTBANQUE'; //Table inexistante : patch déjà appliqué ou patch 7.00P jamais appliqué
+
 
   
 
   
 
   if Pos('.',vJrnTable) > 0 then
 
   if Pos('.',vJrnTable) > 0 then
 
     vOldTable := Copy(vJrnTable,1,Pos('.',vJrnTable)) + vOldTable;
 
     vOldTable := Copy(vJrnTable,1,Pos('.',vJrnTable)) + vOldTable;
 
   
 
   
 +
  if Assigned(ModelManager.FindClass('TArreteCompte',True)) then SyncManager.UpdateModelDB('TArreteCompte','',sstUpdateModel); //Update
 
   SyncManager.UpdateModelDB('TCompteBancaire','',sstUpdateModel); //Update
 
   SyncManager.UpdateModelDB('TCompteBancaire','',sstUpdateModel); //Update
 
   SyncManager.UpdateModelDB('TTypeOperationBancaire','',sstUpdateModel); //Update
 
   SyncManager.UpdateModelDB('TTypeOperationBancaire','',sstUpdateModel); //Update
Ligne 48 : Ligne 51 :
 
     vCursor := QueryBroker('','TTYPEOPERATIOTBANQUE','');
 
     vCursor := QueryBroker('','TTYPEOPERATIOTBANQUE','');
 
     vCursor.Sql.Clear;
 
     vCursor.Sql.Clear;
     vSQL := 'SELECT OP.oidCompteCharge,OP.oidCompteGeneralCollect,OP.oidCompteGeneralNonCollect,OP.oidJournal,OP.oidTypePiece,'+
+
            'OP.prendreComptePrivilegie,OP.oidTTypeOperationBancaire,JR.oidcompteBancaireEts '+
+
     if ClassManager.ShareEnable then
            'FROM %s OP,%s JR WHERE (OP.oidJournal=JR.oid) AND (JR.natureJournal=%d)';
+
      begin
     vSQL := Format(vSQL,[vOldTable,vJrnTable,NatureJournal_Tresorerie]);
+
        vSQL := 'SELECT OP.oidCompteCharge,OP.oidCompteGeneralCollect,OP.oidCompteGeneralNonCollect,OP.oidJournal,OP.oidTypePiece,'+
 +
                'OP.prendreComptePrivilegie,OP.oidTTypeOperationBancaire,JR_SI.oidcompteBancaireEts '+
 +
                'FROM %s OP,%s JR, %s JR_SI WHERE (OP.oidJournal=JR.oid) AND (JR.natureJournal=%d) AND (JR_SI.oidOwner = JR.oid)';
 +
        vSQL := Format(vSQL,[vOldTable,vJrnTable,vJrnTable_SI,NatureJournal_Tresorerie]);
 +
      end
 +
     else
 +
      begin
 +
        vSQL := 'SELECT OP.oidCompteCharge,OP.oidCompteGeneralCollect,OP.oidCompteGeneralNonCollect,OP.oidJournal,OP.oidTypePiece,'+
 +
                'OP.prendreComptePrivilegie,OP.oidTTypeOperationBancaire,JR.oidcompteBancaireEts '+
 +
                'FROM %s OP,%s JR WHERE (OP.oidJournal=JR.oid) AND (JR.natureJournal=%d)';
 +
        vSQL := Format(vSQL,[vOldTable,vJrnTable,NatureJournal_Tresorerie]);
 +
      end;
 +
 
     vCursor.Sql.Add(vSQL);
 
     vCursor.Sql.Add(vSQL);
 
     Try
 
     Try
Ligne 86 : Ligne 101 :
 
     vCursor := QueryBroker('','TTYPEOPERATIOTBANQUE','');
 
     vCursor := QueryBroker('','TTYPEOPERATIOTBANQUE','');
 
     vCursor.Sql.Clear;
 
     vCursor.Sql.Clear;
     vSQL := 'SELECT OB.oidCompteCharge,OB.oidCompteGeneralCollect,OB.oidCompteGeneralNonCollect,OB.oidJournal,OB.oidTypePiece,'+
+
            'OB.prendreComptePrivilegie,OP.oidTTypeOperationBancaire,JR.oidcompteBancaireEts '+
+
     if ClassManager.ShareEnable then
            'FROM %s OP,%s JR,%s OB WHERE (OP.oidTTypeOperationBancaire=OB.oid) AND (OB.oidJournal=JR.oid) AND (JR.natureJournal=%d)';
+
      begin
 
+
        vSQL := 'SELECT OB.oidCompteCharge,OB.oidCompteGeneralCollect,OB.oidCompteGeneralNonCollect,OB.oidJournal,OB.oidTypePiece,'+
     vSQL := Format(vSQL,[vOldTable,vJrnTable,vTOPTable,NatureJournal_Tresorerie]);
+
                'OB.prendreComptePrivilegie,OP.oidTTypeOperationBancaire,JR_SI.oidcompteBancaireEts '+
 +
                'FROM %s OP,%s JR,%s JR_SI, %s OB WHERE (OP.oidTTypeOperationBancaire=OB.oid) AND (OB.oidJournal=JR.oid) AND (JR.natureJournal=%d) AND (JR_SI.oidOwner = JR.oid)';
 +
     
 +
        vSQL := Format(vSQL,[vOldTable,vJrnTable,vJrnTable_SI,vTOPTable,NatureJournal_Tresorerie]);
 +
      end
 +
     else
 +
      begin
 +
        vSQL := 'SELECT OB.oidCompteCharge,OB.oidCompteGeneralCollect,OB.oidCompteGeneralNonCollect,OB.oidJournal,OB.oidTypePiece,'+
 +
                'OB.prendreComptePrivilegie,OP.oidTTypeOperationBancaire,JR.oidcompteBancaireEts '+
 +
                'FROM %s OP,%s JR,%s OB WHERE (OP.oidTTypeOperationBancaire=OB.oid) AND (OB.oidJournal=JR.oid) AND (JR.natureJournal=%d)';
 +
     
 +
        vSQL := Format(vSQL,[vOldTable,vJrnTable,vTOPTable,NatureJournal_Tresorerie]);
 +
      end;
 +
 +
 +
 
     vCursor.Sql.Add(vSQL);
 
     vCursor.Sql.Add(vSQL);
 
     Try
 
     Try

Version actuelle en date du 14 juin 2016 à 11:32

Scripts before

C'est l'opportunité offerte au développeur de pouvoir intervenir sur le modèle existant AVANT sa synchronisation, ce qui permet d'accéder aux "anciens" attributs dans la table SQL.

En effet, il ne faut oublier que si le modèle n'est pas encore synchronisé, le nouveau métier est lui disponible.

Si l'on désire qu'une table soit actualisée, pour atteindre les nouveaux attributs, il est possible de demander une synchronisation en AJOUT pour cette table.
Ce qui permettra de disposer des nouveaux attributs (voire classes) que l'on pourra ensuite utiliser par le code métier, excepté l'extraction des données qui devra être faite en SQL par l'intermédiaire d'un curseur et d'une requête créée via le QueryBroker actuellement.

ATTENTION: On doit toujours spécifier la classe de base.

De ce fait, comme la classe est actualisée de tous les nouveaux attributs pour tous les éléments accessible du modèle comme les classes extensions, il faut impérativement vérifier dans ce cas qu'il n'est pas également nécessaire de synchroniser d'autres classes quitte à le conditionner par paquet ou par présence de la classe en question.

Exemple de synchronisation en ajout

La classe TTypeOperationCptBancaire, la classe de base elle même si elle n'existe pas, ou tous ses nouveaux attributs accessibles, seront ajoutés par cette commande unique.

SyncManager.UpdateModelDB('TTypeOperationCptBancaire','',sstUpdateModel);

Enfin, voici un exemple d'un script réel de mise à jour.

 //Procedure MAJTypeOperationBancaireCompteBancaireBefore;
 //Cette méthode BEFORE transfère les anciennes données sur la nouvelle classe (7.00P - >7.10), pour ceux qui ont appliqué le patch.
 Var
  vTypeOperationCptBancaire : TTypeOperationCptBancaire;
  vCursor                   : TDBCursor;
  vSQL                      : String;
  vOldTable                 : String;
  vJrnTable                 : String;
  vJrnTable_SI              : String;
  vTOPTable                 : String;
 begin
   vJrnTable    := ClassManager.FindClassTableName('TJournal');
   if ClassManager.ShareEnable then
     vJrnTable_SI := ClassManager.FindClassTableName('TJournal_SI');
   vTOPTable    := ClassManager.FindClassTableName('TTypeOperationBancaire');
 
   vOldTable := 'TTYPEOPERATIOTBANQUE'; //Table inexistance : patch déjà appliqué ou patch 7.00P jamais appliqué
 
   if Pos('.',vJrnTable) > 0 then
     vOldTable := Copy(vJrnTable,1,Pos('.',vJrnTable)) + vOldTable;
 
   if Assigned(ModelManager.FindClass('TArreteCompte',True)) then SyncManager.UpdateModelDB('TArreteCompte','',sstUpdateModel); //Update
   SyncManager.UpdateModelDB('TCompteBancaire','',sstUpdateModel); //Update
   SyncManager.UpdateModelDB('TTypeOperationBancaire','',sstUpdateModel); //Update
   SyncManager.UpdateModelDB('TTypeOperationCptBancaire','',sstUpdateModel); //Create
 
   //D'abord traiter le cas des anciennes instances.
 
   Try
     vCursor := QueryBroker('','TTYPEOPERATIOTBANQUE','');
     vCursor.Sql.Clear;
 
     if ClassManager.ShareEnable then
       begin
         vSQL := 'SELECT OP.oidCompteCharge,OP.oidCompteGeneralCollect,OP.oidCompteGeneralNonCollect,OP.oidJournal,OP.oidTypePiece,'+
                 'OP.prendreComptePrivilegie,OP.oidTTypeOperationBancaire,JR_SI.oidcompteBancaireEts '+
                 'FROM %s OP,%s JR, %s JR_SI WHERE (OP.oidJournal=JR.oid) AND (JR.natureJournal=%d) AND (JR_SI.oidOwner = JR.oid)';
         vSQL := Format(vSQL,[vOldTable,vJrnTable,vJrnTable_SI,NatureJournal_Tresorerie]);
       end
     else
       begin
         vSQL := 'SELECT OP.oidCompteCharge,OP.oidCompteGeneralCollect,OP.oidCompteGeneralNonCollect,OP.oidJournal,OP.oidTypePiece,'+
                 'OP.prendreComptePrivilegie,OP.oidTTypeOperationBancaire,JR.oidcompteBancaireEts '+
                 'FROM %s OP,%s JR WHERE (OP.oidJournal=JR.oid) AND (JR.natureJournal=%d)';
         vSQL := Format(vSQL,[vOldTable,vJrnTable,NatureJournal_Tresorerie]);
       end;
 
     vCursor.Sql.Add(vSQL);
     Try
       vCursor.Open;
       vCursor.First;
       while (not vCursor.Eof) do
       Begin
         vTypeOperationCptBancaire := TTypeOperationCptBancaire.Find('(oidTTypeOperationBancaire=%1) and (oidTCompteBancaire=%2)','',False,[vCursor.Fields[6].asVariant,vCursor.Fields[7].asVariant]);
         if (not Assigned(vTypeOperationCptBancaire))then
         Try
           WithP private transaction do
           Begin
             //Préparer la nouvelle instance
             vTypeOperationCptBancaire := TTypeOperationCptBancaire.Create;
             vTypeOperationCptBancaire.oidCompteCharge := vCursor.Fields[0].asVariant;
             vTypeOperationCptBancaire.oidCompteGeneralCollect := vCursor.Fields[1].asVariant;
             vTypeOperationCptBancaire.oidCompteGeneralNonCollect := vCursor.Fields[2].asVariant;
             vTypeOperationCptBancaire.oidJournal := vCursor.Fields[3].asVariant;
             vTypeOperationCptBancaire.oidTypePiece := vCursor.Fields[4].asVariant;
             vTypeOperationCptBancaire.prendreComptePrivilegie := vCursor.Fields[5].asVariant;
             vTypeOperationCptBancaire.oidTTypeOperationBancaire := vCursor.Fields[6].asVariant;
             vTypeOperationCptBancaire.oidTCompteBancaire := vCursor.Fields[7].asVariant;
           End;
         Except
           DbgMsg(Format('Profile %s',[Self.ObjectClassName]), E.message);
        End;
         vCursor.Next;
       End;
     Finally
       vCursor.Close;
     End;
 
     //Puis reporter les configurations par défaut si nécessaire
     vCursor := QueryBroker('','TTYPEOPERATIOTBANQUE','');
     vCursor.Sql.Clear;
 
     if ClassManager.ShareEnable then
       begin
         vSQL := 'SELECT OB.oidCompteCharge,OB.oidCompteGeneralCollect,OB.oidCompteGeneralNonCollect,OB.oidJournal,OB.oidTypePiece,'+
                 'OB.prendreComptePrivilegie,OP.oidTTypeOperationBancaire,JR_SI.oidcompteBancaireEts '+
                 'FROM %s OP,%s JR,%s JR_SI, %s OB WHERE (OP.oidTTypeOperationBancaire=OB.oid) AND (OB.oidJournal=JR.oid) AND (JR.natureJournal=%d) AND (JR_SI.oidOwner = JR.oid)';
 
         vSQL := Format(vSQL,[vOldTable,vJrnTable,vJrnTable_SI,vTOPTable,NatureJournal_Tresorerie]);
       end
     else
       begin
         vSQL := 'SELECT OB.oidCompteCharge,OB.oidCompteGeneralCollect,OB.oidCompteGeneralNonCollect,OB.oidJournal,OB.oidTypePiece,'+
                 'OB.prendreComptePrivilegie,OP.oidTTypeOperationBancaire,JR.oidcompteBancaireEts '+
                 'FROM %s OP,%s JR,%s OB WHERE (OP.oidTTypeOperationBancaire=OB.oid) AND (OB.oidJournal=JR.oid) AND (JR.natureJournal=%d)';
 
         vSQL := Format(vSQL,[vOldTable,vJrnTable,vTOPTable,NatureJournal_Tresorerie]);
       end;
 
 
 
     vCursor.Sql.Add(vSQL);
     Try
       vCursor.Open;
       vCursor.First;
       while (not vCursor.Eof) do
       Begin
         vTypeOperationCptBancaire := TTypeOperationCptBancaire.Find('(oidTTypeOperationBancaire=%1) and (oidTCompteBancaire=%2)','',False,[vCursor.Fields[6].asVariant,vCursor.Fields[7].asVariant]);
         if (not Assigned(vTypeOperationCptBancaire))then
         Try
           WithP Private transaction do
           Begin
             //Préparer la nouvelle instance
             vTypeOperationCptBancaire := TTypeOperationCptBancaire.Create;
             vTypeOperationCptBancaire.oidCompteCharge := vCursor.Fields[0].asVariant;
             vTypeOperationCptBancaire.oidCompteGeneralCollect := vCursor.Fields[1].asVariant;
             vTypeOperationCptBancaire.oidCompteGeneralNonCollect := vCursor.Fields[2].asVariant;
             vTypeOperationCptBancaire.oidJournal := vCursor.Fields[3].asVariant;
             vTypeOperationCptBancaire.oidTypePiece := vCursor.Fields[4].asVariant;
             vTypeOperationCptBancaire.prendreComptePrivilegie := vCursor.Fields[5].asVariant;
             vTypeOperationCptBancaire.oidTTypeOperationBancaire := vCursor.Fields[6].asVariant;
             vTypeOperationCptBancaire.oidTCompteBancaire := vCursor.Fields[7].asVariant;
           End;
         Except
          DbgMsg(Format('Profile %s',[Self.ObjectClassName]), E.message);
         End;
         vCursor.Next;
       End;
     Finally
       vCursor.Close;
     End;
   Except
   End;
 
   //Puis annuler toutes les configurations par défaut dans le cas de l'ISO20022.
   ForeachP Var vTypeOperationBancaire:TTypeOperationBancaire in TTypeOperationBancaire.CreateCursorWhere('(oidJournal<>%1) and (TypeCodification.value=%2)','',True,['',TypeCodificationBancaire_ISO20022])
   With Distinct transaction On Except Continue do
   Begin
     if (vTypeOperationBancaire.estComptaOption=True) and assigned(vTypeOperationBancaire.Journal) and (vTypeOperationBancaire.Journal.NatureJournal.value=NatureJournal_Tresorerie) then
     Begin
       vTypeOperationCptBancaire := TTypeOperationCptBancaire.Find('(oidTTypeOperationBancaire=%1) and (oidTCompteBancaire=%2)','',False,[vTypeOperationBancaire.instanceoid,vTypeOperationBancaire.Journal.oidcompteBancaireEts]);
       if not Assigned(vTypeOperationCptBancaire) then
       Begin
         //Préparer la nouvelle instance
         vTypeOperationCptBancaire := TTypeOperationCptBancaire.Create;
         vTypeOperationCptBancaire.oidCompteCharge := vTypeOperationBancaire.oidCompteCharge;
         vTypeOperationCptBancaire.oidCompteGeneralCollect := vTypeOperationBancaire.oidCompteGeneralCollect;
         vTypeOperationCptBancaire.oidCompteGeneralNonCollect := vTypeOperationBancaire.oidCompteGeneralNonCollect;
         vTypeOperationCptBancaire.oidJournal := vTypeOperationBancaire.oidJournal;
         vTypeOperationCptBancaire.oidTypePiece := vTypeOperationBancaire.oidTypePiece;
         vTypeOperationCptBancaire.prendreComptePrivilegie := vTypeOperationBancaire.prendreComptePrivilegie;
         vTypeOperationCptBancaire.oidTTypeOperationBancaire := vTypeOperationBancaire.instanceoid;
         vTypeOperationCptBancaire.oidTCompteBancaire := vTypeOperationBancaire.Journal.oidcompteBancaireEts;
       End;
     End;
     //Annuler le défaut
     vTypeOperationBancaire.oidJournal := '';
     vTypeOperationBancaire.oidCompteCharge := '';
     vTypeOperationBancaire.oidCompteCharge := '';
     vTypeOperationBancaire.oidCompteGeneralNonCollect := '';
     vTypeOperationBancaire.oidTypePiece := '';
     vTypeOperationBancaire.prendreComptePrivilegie := False;
   End;
 end;




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