Curseurs d'importation (tech)

De Wiki1000
(Différences entre les versions)
(Création d'un curseur d'importation)
(Exemples)
 
(7 révisions intermédiaires par un utilisateur sont masquées)
Ligne 14 : Ligne 14 :
  
 
Pour créer un curseur d'importation dans une base de données particulière :
 
Pour créer un curseur d'importation dans une base de données particulière :
<source lang='delphi'>function ClassManager.CreateImportCursorInDatabase(aClassName,aDescriptifFileName,aSourceFileName, aImportOptions: String;  aDatabaseInfo:TdatabaseInfo):TimportCursor;</source>
+
<source lang='delphi'>function ClassManager.CreateImportCursorInDatabase(aClassName,aDescriptifFileName,aSourceFileName, aImportMode:String;  aDatabaseInfo:TdatabaseInfo):TimportCursor;</source>
  
 
Les paramètres sont :
 
Les paramètres sont :
 
{|class="wikitable"
 
{|class="wikitable"
 +
|-
 +
!Nom
 +
!Type
 +
!Usage
 
|-
 
|-
 
|aClassName
 
|aClassName
Ligne 26 : Ligne 30 :
 
|string
 
|string
 
|Ce paramètre indique le chemin du fichier descriptif d’importation  
 
|Ce paramètre indique le chemin du fichier descriptif d’importation  
{{info|Ces descriptifs ont pour extension .dip}}
 
 
|-
 
|-
 
|aSourceFileName
 
|aSourceFileName
 
|string
 
|string
 
|Ce paramètre indique le chemin du fichier à importer.
 
|Ce paramètre indique le chemin du fichier à importer.
{{warning|Ce chemin doit être accessible, préférez un chemin UNC lorsque le processus est utilisé en Serveur.}}
 
 
|-
 
|-
|aImportOptions
+
|aImportMode
 
|string
 
|string
|Ce paramètre indique les options utilisées pour l’importation.
+
|Ce paramètre indique le mode d'importation.  
Le chaîne comporte les options désirées séparées par des virgules, les options possibles sont :
+
{|
+
|-
+
|miImport
+
|Réalise une importation en création
+
|-
+
|miUpdate
+
|Réalise une importation en création / modification
+
|-
+
|miUpdateOnly
+
|Réalise une importation en modification
+
|-
+
|miRejet
+
|Génération d’un fichier de rejet.  
+
|-
+
|miNoCheckRules
+
|Ne pas exécuter les règles de validation
+
|}
+
 
|}
 
|}
 +
 +
Le paramètre ImportMode peut comporter les options désirées séparées par des virgules :
 +
 +
{{:ImportMode}}
 +
 +
{{info|Les descriptifs d'importation ont pour extension .dip}}
 +
{{warning|Le chemin du fichier source doit être accessible, préférez un chemin UNC lorsque le processus est utilisé en Serveur.}}
  
 
===Propriétés===
 
===Propriétés===
Ligne 96 : Ligne 87 :
 
{|class="wikitable"
 
{|class="wikitable"
 
|-
 
|-
|OPEN
+
!Signature
|<source lang='delphi'>procedure Open;</source>
+
!Action
|Exécute la requête.
+
 
|-
 
|-
|CLOSE
+
|procedure Open;
|<source lang='delphi'>procedure Close;</source>
+
|Ouvre le curseur et exécute la requête.
 +
|-
 +
|procedure Close;
 
|Ferme le curseur.
 
|Ferme le curseur.
 
|-
 
|-
|ROLLBACK
+
|procedure RollBack;
|<source lang='delphi'>procedure RollBack;</source>
+
|Annule toutes les modifications, insertions ou suppressions de données de la transaction en cours et termine la transaction. Valable pour un curseur de type modification.
|Annule toutes les modifications, insertions ou suppressions de données de la transaction en cours et termine la transaction Valable pour un curseur de type modification.
+
 
|-
 
|-
|NEXT
+
|procedure Next;
|<source lang='delphi'>procedure Next;</source>
+
|Déplace le curseur sur l'enregistrement suivant.
|Appelez Next pour placer le curseur sur l'enregistrement suivant.
+
 
|}
 
|}
  
Ligne 197 : Ligne 187 :
 
end;
 
end;
 
</source>
 
</source>
 +
 +
Voir aussi:
 +
 +
*[[TImportContext_(tech)|Contexte d'importation]]
 +
*[[Import (rtl)|Fonction d'importation]]
  
 
{{Footer|Code métier}}
 
{{Footer|Code métier}}
 
[[category:Objets techniques]]
 
[[category:Objets techniques]]
 
[[category:Import]]
 
[[category:Import]]

Version actuelle en date du 4 novembre 2017 à 09:19

Sommaire

Introduction

Les curseurs d’importation sont des curseurs particuliers permettant à un processus de contrôler une session d’importation.

Déclaration d'une variable Curseur d'importation

Les curseurs d'importation doivent être déclaré :

var cur:TImportCursor;

Création d'un curseur d'importation

Le ClassManager expose deux fonctions pour créer un Curseur d'importation:

Pour créer un curseur d'importation dans la base de données par défaut :

function ClassManager.CreateImportCursor(aClassName,aDescriptifFileName,aSourceFileName,aImportOptions: String):TimportCursor;

Pour créer un curseur d'importation dans une base de données particulière :

function ClassManager.CreateImportCursorInDatabase(aClassName,aDescriptifFileName,aSourceFileName, aImportMode:String;  aDatabaseInfo:TdatabaseInfo):TimportCursor;

Les paramètres sont :

Nom Type Usage
aClassName string Ce paramètre indique la classe métier sur laquelle est réalisée l'importation.
aDescriptifFileName string Ce paramètre indique le chemin du fichier descriptif d’importation
aSourceFileName string Ce paramètre indique le chemin du fichier à importer.
aImportMode string Ce paramètre indique le mode d'importation.

Le paramètre ImportMode peut comporter les options désirées séparées par des virgules :

  • miInsert
Insertion des nouveaux objets
  • miUpdateOnly
Mise à jour des objets existant
  • miUpdate
Insertion et modification des objets
  • miDeleteBefore
Suppression des objets existants-obsolète
  • miActiveControl
Application des règles métiers
  • miRejet
Génération d'un fichier contenant les lignes rejetées dans le même répertoire que le fichier importé, de même nom que le fichier importé suffixé par « rejected ». Ne fonctionne pas avec les curseurs d'import.
  • miTest
Tester le fichier d'import
  • miAppendErrorFile
Les erreurs sont ajoutées dans le fichier de rejet
  • miPass2InErrorFile
Les erreurs lors du deuxième passage sont ajoutées dans le fichier de rejet
  • miRenameFile
Après l'importation le fichier est renommé
  • miDeleteFile
Après l'importation le fichier est supprimé
  • miAtomic
Utilisation dune seule transaction
  • miUseImportRules
Utiliser les règles d'importation
  • miNoCheckRules
Ne pas exécuter les règles de validation
Info-20px.png Note : Les descriptifs d'importation ont pour extension .dip
Exclam-20px.png Attention : Le chemin du fichier source doit être accessible, préférez un chemin UNC lorsque le processus est utilisé en Serveur.

Propriétés

Nom Type Usage
EOI Boolean Indique si le curseur est positionné sur le dernier enregistrement d'un ensemble de données.
FETCHCOUNT Integer Renvoie le nombre de fetch réalisés.
OID TOID Renvoie l'identifiant de l'objet courant.
INSTANCE TitObject Renvoie l'instance d'objet courant. La classe de cette instance est la classe spécifiée à la création du curseur.
DESCFILENAME string Nom du descriptif d'importation (*)
FILENAME string Nom du fichier à importer (*)
INDEX Integer Position dans la source en cours d'importation.

(*)Ces propriétés doivent être positionnées avant l'ouverture.

Méthodes

Signature Action
procedure Open; Ouvre le curseur et exécute la requête.
procedure Close; Ferme le curseur.
procedure RollBack; Annule toutes les modifications, insertions ou suppressions de données de la transaction en cours et termine la transaction. Valable pour un curseur de type modification.
procedure Next; Déplace le curseur sur l'enregistrement suivant.

Exemples

Procesure doImport ;
var  aCursor:TImportCursor;
begin
  aCursor := ClassManager.CreateCursorImport('Tpays','pays.dip','c:\pays.txt','miUpdate');
  ClassManager.BeginTran;
  try
    aCursor.Open;
    while not aCursor.EOI do
    begin
      ShowMessage(aCursor.Instance.CodeISO);
      aCursor.Next;
    end;
  finally
    ClassManager.RollBack;
  end;
end.
procedure TImportProduit.Excute;
// curseur sur le descriptif d'import
var
  vHasGUI        : Boolean;
  vCursor        : TImportCursor;
  vImportProduit : TImportProduit;
  vCursorOpened  : Boolean;
  vOptionImport  : String;
  vIdx           : Integer;
begin
  vHasGUI := ClassManager.HasGUI;
  ClassManager.HasGUI := False;
  vOptionImport :='';
  result := 0;
  vIdx := 0;
  try
    vOptionImport := 'miImport';
    vCursor := ClassManager.CreateCursorImport('TImportProduit',descriptifImport,fichierImport,vOptionImport);
    ClassManager.BeginTran;
    vCursor.Open;
    try
      ProgressMax(vCursor.Count);
      ProgressValue(0);
      while (not vCursor.Eoi) do
      begin
        if UserAbort then
        begin
          ProgressMessage(_TP('Traitement interrompu par l''utilisateur'));
          Break;
        end;
        //
        // Une transaction doit être ouverte car on crée des objets sur Open et sur Next
        //
        try
          // 
          vImportProduit := vCursor.Instance;
          _ImporterProduit(vImportProduit);
          // supprimer l'object temporaire, on ne doit pas le sauvegarder dans la BD
          vImportProduit.Deleted := True;
          //
          ClassManager.Commit;
          ProgressMessage(Format(_TP('Produit %s importé'),[vImportProduit.codeProduit]));
        except
          result := 1;
          ClassManager.Rollback;
        end;
 
        ProgressValue(vCursor.index);
        vIdx := vIdx + 1;
        ClassManager.BeginTran;
        vCursor.Next;
      end;
    except
      ClassManager.RollBack;
      ProgressMessage(Format(_TP('Erreur(s) %s détectée(s). Le traitement est abandonné.'),[E.Message]));
    end;
  finally
    ProgressFull;
    vCursor.Close;
    ClassManager.HasGUI := vHasGUI;
  end;
end;

Voir aussi:

Code métierDéveloppement DSM

Outils personnels