<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://frp.sage.fr/wiki1000/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://frp.sage.fr/wiki1000/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thdym</id>
		<title>Wiki1000 - Contributions de l'utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://frp.sage.fr/wiki1000/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thdym"/>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Sp%C3%A9cial:Contributions/Thdym"/>
		<updated>2026-04-05T19:49:17Z</updated>
		<subtitle>Contributions de l'utilisateur</subtitle>
		<generator>MediaWiki 1.18.6</generator>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/ImportByFormatDef_(rtl)</id>
		<title>ImportByFormatDef (rtl)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/ImportByFormatDef_(rtl)"/>
				<updated>2012-03-22T08:26:30Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;Procedure IntegrateByFormatDef(const aCodeFormat:string; const aData:TStrings; aRefObject:TitObject; const aLogLevel:FormatLogLevel);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet d'importer un fichier en utilisant un format.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|aCodeFormat&lt;br /&gt;
|Code du format à utiliser pour l'import.&lt;br /&gt;
|-&lt;br /&gt;
|aData&lt;br /&gt;
|Contenu du fichier à importer.&lt;br /&gt;
|-&lt;br /&gt;
|aRefObject&lt;br /&gt;
|Objet racine tous les objets qui seront créés.&lt;br /&gt;
|-&lt;br /&gt;
|aLogLevel&lt;br /&gt;
|Niveau de journalisation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le journal généré se situe dans répertoire [container L1000]/logs&lt;br /&gt;
&lt;br /&gt;
Trois niveaux de journalisation sont possibles :&lt;br /&gt;
&lt;br /&gt;
*Format_Log_Level_None &lt;br /&gt;
:aucune trace&lt;br /&gt;
*Format_Log_Level_Data_Errors &lt;br /&gt;
:trace les erreurs d'accès au données (formule erronée...) utile pour la mise au point des nouveaux formats&lt;br /&gt;
*Format_Log_Level_Verbose &lt;br /&gt;
:trace l'exploration du fichier / du modèle (trace importante en taille) + Format_Log_Level_Data_Errors &lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Procedure _doImport;&lt;br /&gt;
var&lt;br /&gt;
 vFormatCode : String;&lt;br /&gt;
 vFormatIntegrationFichier : TFormatIntegrationFichier;&lt;br /&gt;
 vidxRem  : Integer;&lt;br /&gt;
 vTimeOrg : LongInt;&lt;br /&gt;
 vTimeInt : LongInt;&lt;br /&gt;
 vTimeLst : LongInt;&lt;br /&gt;
 vTimeCom : LongInt;&lt;br /&gt;
 vTrackingMode : FormatLogLevel;&lt;br /&gt;
begin&lt;br /&gt;
  // Locate the format definition&lt;br /&gt;
  // Recherche du format en dur&lt;br /&gt;
  vFormatCode := 'INT_VIRNAT_160';&lt;br /&gt;
  vFormatIntegrationFichier := TFormatIntegrationFichier.Find('(code=%1)','',true,[vFormatCode]);&lt;br /&gt;
&lt;br /&gt;
  // Set logging mode&lt;br /&gt;
  if estVerbeux then&lt;br /&gt;
    vTrackingMode := Format_Log_Level_Verbose&lt;br /&gt;
  else&lt;br /&gt;
    vTrackingMode := Format_Log_Level_None;&lt;br /&gt;
&lt;br /&gt;
  if Assigned(vFormatIntegrationFichier) then&lt;br /&gt;
  begin&lt;br /&gt;
   // Start a long transaction&lt;br /&gt;
   ClassManager.BeginLongTran(1,'TImportRemiseBancaire');&lt;br /&gt;
   try&lt;br /&gt;
     CreerSessionImport;&lt;br /&gt;
&lt;br /&gt;
     // Load the source file in a TStrings&lt;br /&gt;
     ProgressMessage(Format(_TP('Chargement du fichier %s.'),[FichierImport]));&lt;br /&gt;
     content.LoadFromFile(FichierImport);&lt;br /&gt;
&lt;br /&gt;
     vTimeOrg := GetTickCount;&lt;br /&gt;
     ProgressMessage(Format(_TP('Intégration du fichier %s.'),[FichierImport]));&lt;br /&gt;
&lt;br /&gt;
     // Import the source file here&lt;br /&gt;
     ImportbyFormatDef(vFormatIntegrationFichier.GetFileFormatNameRef,Content.Strings,self,vTrackingMode);&lt;br /&gt;
&lt;br /&gt;
     vTimeInt := GetTickCount;&lt;br /&gt;
     ProgressMessage(Format(_TP('Intégration en %s ms.'),[TickToString(vTimeInt-vTimeOrg)]));&lt;br /&gt;
&lt;br /&gt;
     ProgressMessage(_TP('Fermeture de la transaction.'));&lt;br /&gt;
&lt;br /&gt;
     ClassManager.CommitlongTran; &lt;br /&gt;
     vTimeCom := GetTickCount;&lt;br /&gt;
     ProgressMessage(Format(_TP('Clôture transaction en %s Ms, sur un total de %s Ms.'),[TickToString(vTimeCom-vTimeLst),TickToString(vTimeCom-vTimeOrg)]));&lt;br /&gt;
   except&lt;br /&gt;
     ClassManager.RollBacklongTran;&lt;br /&gt;
     ProgressMessage(Format(_TP('Erreur d''import : %s'),[e.Message]));&lt;br /&gt;
     raise;&lt;br /&gt;
   end;&lt;br /&gt;
 end&lt;br /&gt;
 else&lt;br /&gt;
   ERule.Create(Format(_TP('Le format %s n''a pas été trouvé.'),[vFormatCode]));&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
&lt;br /&gt;
{{Footer|Développement DSM}}&lt;br /&gt;
[[category:RTL Framework]]&lt;br /&gt;
[[Category:RTL Format de fichier]]&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/ImportByFormatDef_(rtl)</id>
		<title>ImportByFormatDef (rtl)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/ImportByFormatDef_(rtl)"/>
				<updated>2012-01-11T10:52:24Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;Procedure IntegrateByFormatDef(const aCodeFormat:string; const aData:TStrings; aRefObject:TitObject; const aLogLevel:FormatLogLevel);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet d'importer un fichier en utilisant un format.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|aCodeFormat&lt;br /&gt;
|Code du format à utiliser pour l'import.&lt;br /&gt;
|-&lt;br /&gt;
|aData&lt;br /&gt;
|Contenu du fichier à importer.&lt;br /&gt;
|-&lt;br /&gt;
|aRefObject&lt;br /&gt;
|Objet racine tous les objets qui seront créés.&lt;br /&gt;
|-&lt;br /&gt;
|aLogLevel&lt;br /&gt;
|Niveau de journalisation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le journal généré se situe dans répertoire [container L1000]/logs&lt;br /&gt;
&lt;br /&gt;
Trois niveaux de journalisation sont possibles :&lt;br /&gt;
&lt;br /&gt;
*Format_Log_Level_None &lt;br /&gt;
:aucune trace&lt;br /&gt;
*Format_Log_Level_Data_Errors &lt;br /&gt;
:trace les erreurs d'accès au données (formule erronée...) utile pour la mise au point des nouveaux formats&lt;br /&gt;
*Format_Log_Level_Verbose &lt;br /&gt;
:trace l'exploration du fichier / du modèle (trace importante en taille) + Format_Log_Level_Data_Errors &lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Procedure _doImport;&lt;br /&gt;
var&lt;br /&gt;
 vFormatCode : String;&lt;br /&gt;
 vFormatIntegrationFichier : TFormatIntegrationFichier;&lt;br /&gt;
 vidxRem  : Integer;&lt;br /&gt;
 vTimeOrg : LongInt;&lt;br /&gt;
 vTimeInt : LongInt;&lt;br /&gt;
 vTimeLst : LongInt;&lt;br /&gt;
 vTimeCom : LongInt;&lt;br /&gt;
 vTrackingMode : Integer;&lt;br /&gt;
begin&lt;br /&gt;
  // Locate the format definition&lt;br /&gt;
  // Recherche du format en dur&lt;br /&gt;
  vFormatCode := 'INT_VIRNAT_160';&lt;br /&gt;
  vFormatIntegrationFichier := TFormatIntegrationFichier.Find('(code=%1)','',true,[vFormatCode]);&lt;br /&gt;
&lt;br /&gt;
  // Set logging mode&lt;br /&gt;
  if estVerbeux then&lt;br /&gt;
    vTrackingMode := Format_Log_Level_Verbose&lt;br /&gt;
  else&lt;br /&gt;
    vTrackingMode := Format_Log_Level_None;&lt;br /&gt;
&lt;br /&gt;
  if Assigned(vFormatIntegrationFichier) then&lt;br /&gt;
  begin&lt;br /&gt;
   // Start a long transaction&lt;br /&gt;
   ClassManager.BeginLongTran(1,'TImportRemiseBancaire');&lt;br /&gt;
   try&lt;br /&gt;
     CreerSessionImport;&lt;br /&gt;
&lt;br /&gt;
     // Load the source file in a TStrings&lt;br /&gt;
     ProgressMessage(Format(_TP('Chargement du fichier %s.'),[FichierImport]));&lt;br /&gt;
     content.LoadFromFile(FichierImport);&lt;br /&gt;
&lt;br /&gt;
     vTimeOrg := GetTickCount;&lt;br /&gt;
     ProgressMessage(Format(_TP('Intégration du fichier %s.'),[FichierImport]));&lt;br /&gt;
&lt;br /&gt;
     // Import the source file here&lt;br /&gt;
     ImportbyFormatDef(vFormatIntegrationFichier.GetFileFormatNameRef,Content.Strings,self,vTrackingMode);&lt;br /&gt;
&lt;br /&gt;
     vTimeInt := GetTickCount;&lt;br /&gt;
     ProgressMessage(Format(_TP('Intégration en %s ms.'),[TickToString(vTimeInt-vTimeOrg)]));&lt;br /&gt;
&lt;br /&gt;
     ProgressMessage(_TP('Fermeture de la transaction.'));&lt;br /&gt;
&lt;br /&gt;
     ClassManager.CommitlongTran; &lt;br /&gt;
     vTimeCom := GetTickCount;&lt;br /&gt;
     ProgressMessage(Format(_TP('Clôture transaction en %s Ms, sur un total de %s Ms.'),[TickToString(vTimeCom-vTimeLst),TickToString(vTimeCom-vTimeOrg)]));&lt;br /&gt;
   except&lt;br /&gt;
     ClassManager.RollBacklongTran;&lt;br /&gt;
     ProgressMessage(Format(_TP('Erreur d''import : %s'),[e.Message]));&lt;br /&gt;
     raise;&lt;br /&gt;
   end;&lt;br /&gt;
 end&lt;br /&gt;
 else&lt;br /&gt;
   ERule.Create(Format(_TP('Le format %s n''a pas été trouvé.'),[vFormatCode]));&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
&lt;br /&gt;
{{Footer|Développement DSM}}&lt;br /&gt;
[[category:RTL Framework]]&lt;br /&gt;
[[Category:RTL Format de fichier]]&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Environnement_des_tests_unitaires_(testsuite)</id>
		<title>Environnement des tests unitaires (testsuite)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Environnement_des_tests_unitaires_(testsuite)"/>
				<updated>2011-12-13T13:29:32Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Une bonne pratique consiste à exécuter les tests unitaires dans un Dossier de test qui présente la particularité de n'être pas rattaché à une base de données. &lt;br /&gt;
&lt;br /&gt;
A l'intérieur de ce dossier vos premiers tests enregistreront et créeront une base de données puis initialiseront cette base des données de test. Ainsi vos tests s'exécuteront dans un environnement isolé et stable qui garantira la reproductibilité. &lt;br /&gt;
&lt;br /&gt;
Pour ce faire :&lt;br /&gt;
&lt;br /&gt;
1. Créer un dossier de test dans l'administration en cochant l'option &amp;quot;Ce dossier est un dossier de test&amp;quot; sur la page de sélection de la base de données.&lt;br /&gt;
&lt;br /&gt;
2. A l'intérieur de vos tests définissez une première classe de test dont la responsabilité est de :&lt;br /&gt;
&lt;br /&gt;
:* Enregistrer une base de données dont le nom est unique et lié à votre session de test.&lt;br /&gt;
:* Supprimer cette base de données&lt;br /&gt;
:* Créer cette base de données&lt;br /&gt;
:* Synchroniser cette base de données &lt;br /&gt;
:* Exécuter un script d'initialisation sur cette base de données&lt;br /&gt;
:* Initialiser cette base de données&lt;br /&gt;
&lt;br /&gt;
Créer ensuite vos donner de test.&lt;br /&gt;
&lt;br /&gt;
Actuellement, il est recommandé d'intégrer à votre application le module &amp;quot;Module Test Suite - Core&amp;quot; si vous souhaiter utiliser cette fonctionnalité, ce module contenant la classe de test fourni dans cet article.&lt;br /&gt;
&lt;br /&gt;
{{#images:image9.png|dsm\designer\testsuite}}&lt;br /&gt;
&lt;br /&gt;
L'arborescence des tests doit être organisée de sorte que ces tests d'initialisation soient exécutés en premier, utilisé l'ordre du nom de test pour ceci.&lt;br /&gt;
&lt;br /&gt;
Le code de ces tests sera le suivant : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Procedure Test_0_RegisterDatabase;&lt;br /&gt;
var dbi:TDatabaseInfo;&lt;br /&gt;
begin&lt;br /&gt;
  Abort(GlbTestSuiteEnvName&amp;lt;&amp;gt;'','Test environnement not set');&lt;br /&gt;
  Abort(GlbTestSuiteDatabaseName&amp;lt;&amp;gt;'','Test database name not set');&lt;br /&gt;
  dbi := ClassManager.RegisterTestDatabase(GlbTestSuiteEnvName,GlbTestSuiteDatabaseName);&lt;br /&gt;
  Abort(Assigned(dbi),'Register database failed');&lt;br /&gt;
  ClassManager.defDatabaseURL := dbi.URL;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//Procedure Test_1_drop_database;&lt;br /&gt;
var dbi:TDatabaseinfo;&lt;br /&gt;
begin&lt;br /&gt;
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);&lt;br /&gt;
  Check(Assigned(dbi),'No database context');&lt;br /&gt;
  Abort(ClassManager.DropDatabase(dbi),'Drop database failed');&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//Procedure Test_2_create_database;&lt;br /&gt;
var dbi:TDatabaseinfo;&lt;br /&gt;
begin&lt;br /&gt;
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);&lt;br /&gt;
  Check(Assigned(dbi),'No database context');&lt;br /&gt;
  Abort(ClassManager.CreateDatabase(dbi),'Create database failed');&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//Procedure Test_3_sync_database;&lt;br /&gt;
var dbi:TDatabaseinfo;&lt;br /&gt;
begin&lt;br /&gt;
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);&lt;br /&gt;
  Check(Assigned(dbi),'No database context');&lt;br /&gt;
  Abort(ClassManager.SyncDatabase(dbi),'Sync database failed');&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//Procedure Test_4_execute_script;&lt;br /&gt;
var dbi:TDatabaseinfo;errorMsg:string;&lt;br /&gt;
begin&lt;br /&gt;
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);&lt;br /&gt;
  Check(Assigned(dbi),'No database context');&lt;br /&gt;
  Abort(ClassManager.ExecuteTestSuiteScript(dbi,GlbTestSuiteEnvName,errorMsg),errorMsg);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//Procedure Test_5_init_database;&lt;br /&gt;
var dbi:TDatabaseinfo;&lt;br /&gt;
begin&lt;br /&gt;
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);&lt;br /&gt;
  Check(Assigned(dbi),'No database context');&lt;br /&gt;
  Abort(ClassManager.InitDatabase(dbi),'Init database failed');&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les paramètres GlbTestSuiteEnvName et GlbTestSuiteDatabaseName font référence à des paramètres du contexte qui peuvent être défini au niveau des préférences du concepteur de modèle :&lt;br /&gt;
&lt;br /&gt;
{{#images:image10.png|dsm\designer\testsuite}}&lt;br /&gt;
&lt;br /&gt;
GlbTestSuiteEnvName&lt;br /&gt;
:Nom d'un contexte de test, [[Contexte de test unitaire (testsuite)|le contexte]] défini les paramètres de la base de données.&lt;br /&gt;
A noter que cet environnement peut contenir le script nécessaire à l'initialisation de la base. Il est IMPÉRATIF de n'employer cette possibilité uniquement si c'est réellement nécessaire, auquel cas il doit être le plus court possible.&lt;br /&gt;
&lt;br /&gt;
GlbTestSuiteDatabaseName&lt;br /&gt;
:Nom de la base de données&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Contexte de test unitaire (testsuite)|Contexte de test unitaire]]&lt;br /&gt;
* [[RegisterTestDatabase (CM)|RegisterTestDatabase]]&lt;br /&gt;
* [[DropDatabase (CM)|DropDatabase]]&lt;br /&gt;
* [[CreateDatabase (CM)|CreateDatabase]]&lt;br /&gt;
* [[SyncDatabase (CM)|SyncDatabase]]&lt;br /&gt;
* [[InitDatabase (CM)|InitDatabase]]&lt;br /&gt;
* [[SelectSociety (CM)|SelectSociety]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Tests unitaires]]&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Environnement_des_tests_unitaires_(testsuite)</id>
		<title>Environnement des tests unitaires (testsuite)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Environnement_des_tests_unitaires_(testsuite)"/>
				<updated>2011-12-13T13:26:32Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Une bonne pratique consiste à exécuter les tests unitaires dans un Dossier de test qui présente la particularité de n'être pas rattaché à une base de données. &lt;br /&gt;
&lt;br /&gt;
A l'intérieur de ce dossier vos premiers tests enregistreront et créeront une base de données puis initialiseront cette base des données de test. Ainsi vos tests s'exécuteront dans un environnement isolé et stable qui garantira la reproductibilité. &lt;br /&gt;
&lt;br /&gt;
Pour ce faire :&lt;br /&gt;
&lt;br /&gt;
1. Créer un dossier de test dans l'administration en cochant l'option &amp;quot;Ce dossier est un dossier de test&amp;quot; sur la page de sélection de la base de données.&lt;br /&gt;
&lt;br /&gt;
2. A l'intérieur de vos tests définissez une première classe de test dont la responsabilité est de :&lt;br /&gt;
&lt;br /&gt;
:* Enregistrer une base de données dont le nom est unique et lié à votre session de test.&lt;br /&gt;
:* Supprimer cette base de données&lt;br /&gt;
:* Créer cette base de données&lt;br /&gt;
:* Synchroniser cette base de données &lt;br /&gt;
:* Exécuter un script d'initialisation sur cette base de données&lt;br /&gt;
:* Initialiser cette base de données&lt;br /&gt;
&lt;br /&gt;
Créer ensuite vos donner de test.&lt;br /&gt;
&lt;br /&gt;
Actuellement, il est recommandé d'intégrer à votre application le module &amp;quot;Module Test Suite - Core&amp;quot; si vous souhaiter utiliser cette fonctionnalité, ce module contenant la classe de test fourni dans cet article.&lt;br /&gt;
&lt;br /&gt;
{{#images:image9.png|dsm\designer\testsuite}}&lt;br /&gt;
&lt;br /&gt;
L'arborescence des tests doit être organisée de sorte que ces tests d'initialisation soient exécutés en premier, utilisé l'ordre du nom de test pour ceci.&lt;br /&gt;
&lt;br /&gt;
Le code de ces tests sera le suivant : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Procedure Test_0_RegisterDatabase;&lt;br /&gt;
var dbi:TDatabaseInfo;&lt;br /&gt;
begin&lt;br /&gt;
  Abort(GlbTestSuiteEnvName&amp;lt;&amp;gt;'','Test environnement not set');&lt;br /&gt;
  Abort(GlbTestSuiteDatabaseName&amp;lt;&amp;gt;'','Test database name not set');&lt;br /&gt;
  dbi := ClassManager.RegisterTestDatabase(GlbTestSuiteEnvName,GlbTestSuiteDatabaseName);&lt;br /&gt;
  Abort(Assigned(dbi),'Register database failed');&lt;br /&gt;
  ClassManager.defDatabaseURL := dbi.URL;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//Procedure Test_1_drop_database;&lt;br /&gt;
var dbi:TDatabaseinfo;&lt;br /&gt;
begin&lt;br /&gt;
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);&lt;br /&gt;
  Check(Assigned(dbi),'No database context');&lt;br /&gt;
  Abort(ClassManager.DropDatabase(dbi),'Drop database failed');&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//Procedure Test_2_create_database;&lt;br /&gt;
var dbi:TDatabaseinfo;&lt;br /&gt;
begin&lt;br /&gt;
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);&lt;br /&gt;
  Check(Assigned(dbi),'No database context');&lt;br /&gt;
  Abort(ClassManager.CreateDatabase(dbi),'Create database failed');&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//Procedure Test_3_sync_database;&lt;br /&gt;
var dbi:TDatabaseinfo;&lt;br /&gt;
begin&lt;br /&gt;
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);&lt;br /&gt;
  Check(Assigned(dbi),'No database context');&lt;br /&gt;
  Abort(ClassManager.SyncDatabase(dbi),'Sync database failed');&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//Procedure Test_4_execute_script;&lt;br /&gt;
var dbi:TDatabaseinfo;errorMsg:string;&lt;br /&gt;
begin&lt;br /&gt;
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);&lt;br /&gt;
  Check(Assigned(dbi),'No database context');&lt;br /&gt;
  Abort(ClassManager.ExecuteTestSuiteScript(dbi,GlbTestSuiteEnvName,errorMsg),errorMsg);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//Procedure Test_5_init_database;&lt;br /&gt;
var dbi:TDatabaseinfo;&lt;br /&gt;
begin&lt;br /&gt;
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);&lt;br /&gt;
  Check(Assigned(dbi),'No database context');&lt;br /&gt;
  Abort(ClassManager.InitDatabase(dbi),'Init database failed');&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les paramètres GlbTestSuiteEnvName et GlbTestSuiteDatabaseName font référence à des paramètres du contexte qui peuvent être défini au niveau des préférences du concepteur de modèle :&lt;br /&gt;
&lt;br /&gt;
{{#images:image10.png|dsm\designer\testsuite}}&lt;br /&gt;
&lt;br /&gt;
GlbTestSuiteEnvName&lt;br /&gt;
:Nom d'un contexte de test, [[Contexte de test unitaire (testsuite)|le contexte]] défini les paramètres de la base de données.&lt;br /&gt;
&lt;br /&gt;
GlbTestSuiteDatabaseName&lt;br /&gt;
:Nom de la base de données&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Contexte de test unitaire (testsuite)|Contexte de test unitaire]]&lt;br /&gt;
* [[RegisterTestDatabase (CM)|RegisterTestDatabase]]&lt;br /&gt;
* [[DropDatabase (CM)|DropDatabase]]&lt;br /&gt;
* [[CreateDatabase (CM)|CreateDatabase]]&lt;br /&gt;
* [[SyncDatabase (CM)|SyncDatabase]]&lt;br /&gt;
* [[InitDatabase (CM)|InitDatabase]]&lt;br /&gt;
* [[SelectSociety (CM)|SelectSociety]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Tests unitaires]]&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/CalCleIBan_(rtl)</id>
		<title>CalCleIBan (rtl)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/CalCleIBan_(rtl)"/>
				<updated>2011-11-15T10:05:00Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;Function CalCleIBan(const iCodePays:String; const iCodeCompte:String):String;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction calcule une clé de contrôle suivant la norme IBAN&lt;br /&gt;
&lt;br /&gt;
IBAN est l'abréviation de International Bank Account Number. Il s'agit d'une norme développée&lt;br /&gt;
par l'ISO (International Organization for Standardization) et l'ECBS (European Committee for&lt;br /&gt;
Banking Standards) pour la représentation d'identifications de banques et de numéros de comptes.&lt;br /&gt;
&lt;br /&gt;
L'IBAN est composée des éléments suivants :&lt;br /&gt;
&lt;br /&gt;
code de pays à 2 positions alphabétiques (LL)&lt;br /&gt;
chiffre de contrôle (CC) à 2 positions numériques portant sur l'ensemble de l'IBAN&lt;br /&gt;
Basic Bank Account Number (BBAN) de 30 positions au maximum, renfermant l'identification de l'établissement financier (IID) et du Bank Account Number (BAN).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|Retourne la valeur de la clé IBAN sous forme d'une chaîne de caractère.&lt;br /&gt;
|-&lt;br /&gt;
|iCodePays&lt;br /&gt;
|Code ISO du pays.&lt;br /&gt;
|-&lt;br /&gt;
|iCodeCompte&lt;br /&gt;
|Code compte IBAN.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
La valeur de CodeCompte doit être CodeBanque+CodeGuichet+CodeCompte+cleRIb pour calculé une clé IBAN française (ici alias de numéro de compte BBAN).&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
&lt;br /&gt;
{{Footer|Développement DSM}}&lt;br /&gt;
[[category:RTL Métier]]&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Format_de_g%C3%A9n%C3%A9ration_de_fichier_plat</id>
		<title>Format de génération de fichier plat</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Format_de_g%C3%A9n%C3%A9ration_de_fichier_plat"/>
				<updated>2011-11-15T09:58:48Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:def_format_genplat_5.jpg|formats]]&lt;br /&gt;
&lt;br /&gt;
==Attributs du format spécifiques==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Attributs de la balise spécifiques==&lt;br /&gt;
&lt;br /&gt;
'''Fin de balise'''&lt;br /&gt;
* Séparateur : insère le caractère paramétré à l'issue de l'exploration de cette balise&lt;br /&gt;
* Fin de ligne : insère un retour chariot à l'issue de l'exploration de cette balise&lt;br /&gt;
&lt;br /&gt;
Exemple : &lt;br /&gt;
[[Fichier:def_format_genplat_4.jpg|formats]]&lt;br /&gt;
&lt;br /&gt;
==Attributs de la donnée spécifiques==&lt;br /&gt;
&lt;br /&gt;
'''Mode padding droite''' : si la donnée retournée est plus courte que la longueur paramétrée, elle complétée par le caractère de padding à droite.&lt;br /&gt;
&lt;br /&gt;
'''Mode padding gauche''' : si la donnée retournée est plus courte que la longueur paramétrée, elle complétée par le caractère de padding à gauche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:RTL Format de fichier]]&lt;br /&gt;
[[Category:Tahoe]]&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Fichier:Def_format_genplat_4.jpg</id>
		<title>Fichier:Def format genplat 4.jpg</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Fichier:Def_format_genplat_4.jpg"/>
				<updated>2011-11-15T09:58:03Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : Exemple écran génération fichier plat avec annotation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exemple écran génération fichier plat avec annotation.&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Format_de_g%C3%A9n%C3%A9ration_de_fichier_plat</id>
		<title>Format de génération de fichier plat</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Format_de_g%C3%A9n%C3%A9ration_de_fichier_plat"/>
				<updated>2011-11-15T09:39:26Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:def_format_genplat_5.jpg|formats]]&lt;br /&gt;
&lt;br /&gt;
==Attributs du format spécifiques==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Attributs de la balise spécifiques==&lt;br /&gt;
&lt;br /&gt;
'''Fin de balise'''&lt;br /&gt;
* Séparateur : insère le caractère paramétré à l'issue de l'exploration de cette balise&lt;br /&gt;
* Fin de ligne : insère un retour chariot à l'issue de l'exploration de cette balise&lt;br /&gt;
&lt;br /&gt;
Exemple : &lt;br /&gt;
{{#images:def_format_4.png|formats}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Attributs de la donnée spécifiques==&lt;br /&gt;
&lt;br /&gt;
'''Mode padding droite''' : si la donnée retournée est plus courte que la longueur paramétrée, elle complétée par le caractère de padding à droite.&lt;br /&gt;
&lt;br /&gt;
'''Mode padding gauche''' : si la donnée retournée est plus courte que la longueur paramétrée, elle complétée par le caractère de padding à gauche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:RTL Format de fichier]]&lt;br /&gt;
[[Category:Tahoe]]&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Fichier:Def_format_genplat_5.jpg</id>
		<title>Fichier:Def format genplat 5.jpg</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Fichier:Def_format_genplat_5.jpg"/>
				<updated>2011-11-15T09:35:58Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : Exemple format génération plat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exemple format génération plat&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Format_de_g%C3%A9n%C3%A9ration_de_fichier_plat</id>
		<title>Format de génération de fichier plat</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Format_de_g%C3%A9n%C3%A9ration_de_fichier_plat"/>
				<updated>2011-11-15T09:29:11Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : Annulation des modifications 6005 de Thdym (discussion)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#images:def_format_5.png|formats}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Attributs du format spécifiques==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Attributs de la balise spécifiques==&lt;br /&gt;
&lt;br /&gt;
'''Fin de balise'''&lt;br /&gt;
* Séparateur : insère le caractère paramétré à l'issue de l'exploration de cette balise&lt;br /&gt;
* Fin de ligne : insère un retour chariot à l'issue de l'exploration de cette balise&lt;br /&gt;
&lt;br /&gt;
Exemple : &lt;br /&gt;
{{#images:def_format_4.png|formats}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Attributs de la donnée spécifiques==&lt;br /&gt;
&lt;br /&gt;
'''Mode padding droite''' : si la donnée retournée est plus courte que la longueur paramétrée, elle complétée par le caractère de padding à droite.&lt;br /&gt;
&lt;br /&gt;
'''Mode padding gauche''' : si la donnée retournée est plus courte que la longueur paramétrée, elle complétée par le caractère de padding à gauche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:RTL Format de fichier]]&lt;br /&gt;
[[Category:Tahoe]]&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Format_de_g%C3%A9n%C3%A9ration_de_fichier_plat</id>
		<title>Format de génération de fichier plat</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Format_de_g%C3%A9n%C3%A9ration_de_fichier_plat"/>
				<updated>2011-11-15T09:28:20Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#images:Def_format_genplat_5.png|formats}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Attributs du format spécifiques==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Attributs de la balise spécifiques==&lt;br /&gt;
&lt;br /&gt;
'''Fin de balise'''&lt;br /&gt;
* Séparateur : insère le caractère paramétré à l'issue de l'exploration de cette balise&lt;br /&gt;
* Fin de ligne : insère un retour chariot à l'issue de l'exploration de cette balise&lt;br /&gt;
&lt;br /&gt;
Exemple : &lt;br /&gt;
{{#images:def_format_4.png|formats}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Attributs de la donnée spécifiques==&lt;br /&gt;
&lt;br /&gt;
'''Mode padding droite''' : si la donnée retournée est plus courte que la longueur paramétrée, elle complétée par le caractère de padding à droite.&lt;br /&gt;
&lt;br /&gt;
'''Mode padding gauche''' : si la donnée retournée est plus courte que la longueur paramétrée, elle complétée par le caractère de padding à gauche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:RTL Format de fichier]]&lt;br /&gt;
[[Category:Tahoe]]&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Fichier:Def_format_genplat_5.png</id>
		<title>Fichier:Def format genplat 5.png</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Fichier:Def_format_genplat_5.png"/>
				<updated>2011-11-15T09:27:40Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : Exemple format de génération plat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exemple format de génération plat&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Format_de_g%C3%A9n%C3%A9ration_de_fichier_plat</id>
		<title>Format de génération de fichier plat</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Format_de_g%C3%A9n%C3%A9ration_de_fichier_plat"/>
				<updated>2011-11-15T09:18:51Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#images:Def_format_5.png|formats}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Attributs du format spécifiques==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Attributs de la balise spécifiques==&lt;br /&gt;
&lt;br /&gt;
'''Fin de balise'''&lt;br /&gt;
* Séparateur : insère le caractère paramétré à l'issue de l'exploration de cette balise&lt;br /&gt;
* Fin de ligne : insère un retour chariot à l'issue de l'exploration de cette balise&lt;br /&gt;
&lt;br /&gt;
Exemple : &lt;br /&gt;
{{#images:def_format_4.png|formats}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Attributs de la donnée spécifiques==&lt;br /&gt;
&lt;br /&gt;
'''Mode padding droite''' : si la donnée retournée est plus courte que la longueur paramétrée, elle complétée par le caractère de padding à droite.&lt;br /&gt;
&lt;br /&gt;
'''Mode padding gauche''' : si la donnée retournée est plus courte que la longueur paramétrée, elle complétée par le caractère de padding à gauche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:RTL Format de fichier]]&lt;br /&gt;
[[Category:Tahoe]]&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Fichier:Def_format_5.png</id>
		<title>Fichier:Def format 5.png</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Fichier:Def_format_5.png"/>
				<updated>2011-11-15T09:15:07Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : Exemple écran génération fichier plat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exemple écran génération fichier plat&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/ImportByFormatDef_(rtl)</id>
		<title>ImportByFormatDef (rtl)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/ImportByFormatDef_(rtl)"/>
				<updated>2011-11-15T09:04:32Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;Procedure IntegrateByFormatDef(const aCodeFormat:string; const aData:TStrings; aRefObject:TitObject; const aLogLevel:FormatLogLevel);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet d'importer un fichier en utilisant un format.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|aCodeFormat&lt;br /&gt;
|Code du format à utiliser pour l'import.&lt;br /&gt;
|-&lt;br /&gt;
|aData&lt;br /&gt;
|Contenu du fichier à importer.&lt;br /&gt;
|-&lt;br /&gt;
|aRefObject&lt;br /&gt;
|Objet racine tous les objets qui seront créés.&lt;br /&gt;
|-&lt;br /&gt;
|aLogLevel&lt;br /&gt;
|Niveau de journalisation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le journal généré se situe dans répertoire [container L1000]/logs&lt;br /&gt;
&lt;br /&gt;
Trois niveaux de journalisation sont possibles :&lt;br /&gt;
&lt;br /&gt;
*Format_Log_Level_None &lt;br /&gt;
:aucune trace&lt;br /&gt;
*Format_Log_Level_Data_Errors &lt;br /&gt;
:trace les erreurs d'accès au données (formule erronée...) utile pour la mise au point des nouveaux formats&lt;br /&gt;
*Format_Log_Level_Verbose &lt;br /&gt;
:trace l'exploration du fichier / du modèle (trace importante en taille) + Format_Log_Level_Data_Errors &lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Procedure _doImport;&lt;br /&gt;
var&lt;br /&gt;
 vFormatCode : String;&lt;br /&gt;
 vFormatIntegrationFichier : TFormatIntegrationFichier;&lt;br /&gt;
 vidxRem  : Integer;&lt;br /&gt;
 vTimeOrg : LongInt;&lt;br /&gt;
 vTimeInt : LongInt;&lt;br /&gt;
 vTimeLst : LongInt;&lt;br /&gt;
 vTimeCom : LongInt;&lt;br /&gt;
 vTrackingMode : Integer;&lt;br /&gt;
begin&lt;br /&gt;
  // Locate the format definition&lt;br /&gt;
  // Recherche du format en dur&lt;br /&gt;
  vFormatCode := 'INT_VIRNAT_160';&lt;br /&gt;
  vFormatIntegrationFichier := TFormatIntegrationFichier.Find('(code=%1)','',true,[vFormatCode]);&lt;br /&gt;
&lt;br /&gt;
  // Set logging mode&lt;br /&gt;
  if estVerbeux then&lt;br /&gt;
    vTrackingMode := Format_Log_Level_Verbose&lt;br /&gt;
  else&lt;br /&gt;
    vTrackingMode := Format_Log_Level_None;&lt;br /&gt;
&lt;br /&gt;
  if Assigned(vFormatIntegrationFichier) then&lt;br /&gt;
  begin&lt;br /&gt;
   // Start a long transaction&lt;br /&gt;
   ClassManager.BeginLongTran(1,'TImportRemiseBancaire');&lt;br /&gt;
   try&lt;br /&gt;
     CreerSessionImport;&lt;br /&gt;
&lt;br /&gt;
     // Load the source file in a TStrings&lt;br /&gt;
     ProgressMessage(Format(_TP('Chargement du fichier %s.'),[FichierImport]));&lt;br /&gt;
     content.LoadFromFile(FichierImport);&lt;br /&gt;
&lt;br /&gt;
     vTimeOrg := GetTickCount;&lt;br /&gt;
     ProgressMessage(Format(_TP('Intégration du fichier %s.'),[FichierImport]));&lt;br /&gt;
&lt;br /&gt;
     // Import the source file here&lt;br /&gt;
     ImportbyFormatDef(vFormatIntegrationFichier.GetFileFormatNameRef,Content.Strings,self,vTrackingMode);&lt;br /&gt;
&lt;br /&gt;
     vTimeInt := GetTickCount;&lt;br /&gt;
     ProgressMessage(Format(_TP('Intégration en %s ms.'),[TickToString(vTimeInt-vTimeOrg)]));&lt;br /&gt;
&lt;br /&gt;
     //&amp;lt;&amp;lt;Début section ancien modèle avant Tahoe, désormais inutile car la session est affectée automatiquement&lt;br /&gt;
     //A noter que si l'on ne veut pas garder les données -: vider la liste &amp;amp; rollback&lt;br /&gt;
     ProgressMessage(Format(_TP('Ajout des %s remises dans la session.'),[IntToStr(ListeRemise.Count]));&lt;br /&gt;
     vTimeLst := GetTickCount;&lt;br /&gt;
     for vIdxRem := 0 to ListeRemise.Count-1 do&lt;br /&gt;
       SessionImportation.ImportDonneeList.Addref(ListeRemise.Refs[vIdxRem]);&lt;br /&gt;
&lt;br /&gt;
     listeRemise.Clear;&lt;br /&gt;
     ProgressMessage(Format(_TP('Liste des données créées en %s ms.'),[TickToString(vTimeLst-vTimeInt)]));&lt;br /&gt;
     //Fin de section optionnelle&amp;gt;&amp;gt;&lt;br /&gt;
     ProgressMessage(_TP('Fermeture de la transaction.'));&lt;br /&gt;
&lt;br /&gt;
     ClassManager.CommitlongTran; &lt;br /&gt;
     vTimeCom := GetTickCount;&lt;br /&gt;
     ProgressMessage(Format(_TP('Clôture transaction en %s Ms, sur un total de %s Ms.'),[TickToString(vTimeCom-vTimeLst),TickToString(vTimeCom-vTimeOrg)]));&lt;br /&gt;
   except&lt;br /&gt;
     ClassManager.RollBacklongTran;&lt;br /&gt;
     ProgressMessage(Format(_TP('Erreur d''import : %s'),[e.Message]));&lt;br /&gt;
     raise;&lt;br /&gt;
   end;&lt;br /&gt;
 end&lt;br /&gt;
 else&lt;br /&gt;
   ERule.Create(Format(_TP('Le format %s n''a pas été trouvé.'),[vFormatCode]));&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
&lt;br /&gt;
{{Footer|Développement DSM}}&lt;br /&gt;
[[category:RTL Framework]]&lt;br /&gt;
[[Category:RTL Format de fichier]]&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Guide_des_formats</id>
		<title>Guide des formats</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Guide_des_formats"/>
				<updated>2011-09-12T06:31:06Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : /* Gestion des formats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{new|tahoe}}&lt;br /&gt;
&lt;br /&gt;
Les formats de fichier permettent de décrire les correspondances entre une structure de données et un modèle métier. Une fois cette correspondance établie il est possible d'importer ou d'exporter les fichiers correspondants à cette structure.&lt;br /&gt;
&lt;br /&gt;
==Vue globale==&lt;br /&gt;
&lt;br /&gt;
{{#images:apres_tahoe.jpg|formats}}&lt;br /&gt;
&lt;br /&gt;
==Administration==&lt;br /&gt;
&lt;br /&gt;
Les formats sont stockés dans le référentiel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#images:admin1.jpg|formats}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Filtres de caractères ===&lt;br /&gt;
&lt;br /&gt;
{{#images:admin_format_gen_xml_2.png|formats}}&lt;br /&gt;
&lt;br /&gt;
Pour les formats de génération, il est possible de filtrer les données écrites dans le fichier généré.&lt;br /&gt;
&lt;br /&gt;
Pour cela, quatre choix sont possibles.&lt;br /&gt;
 &lt;br /&gt;
* Aucun &lt;br /&gt;
* CFONB : [[TextToCFONBText_(rtl)|Voir le fonctionnement du filtre]]&lt;br /&gt;
* EDI : [[TextToEDIText_(rtl)|Voir le fonctionnement du filtre]]&lt;br /&gt;
* Personnalisé : Pour chaque caractère de la chaîne à filtrer, si le caractère appartient à la liste des caractères autorisés il n’est pas filtré sinon on enlève ses éventuels accents, si le caractère sans accent n’appartient toujours pas à la liste des caractères autorisés, il est remplacé par un blanc.&lt;br /&gt;
&lt;br /&gt;
Exemple de filtre personnalisé : Caractères autorisés « abcde »&lt;br /&gt;
&lt;br /&gt;
« aa » --&amp;gt; « aa »&lt;br /&gt;
&lt;br /&gt;
« azza » --&amp;gt; « a  a »&lt;br /&gt;
&lt;br /&gt;
« aéèêa » --&amp;gt; « aeeea »&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Schémas===&lt;br /&gt;
&lt;br /&gt;
{{#images:admin_format_gen_xml_3.png|formats}}&lt;br /&gt;
&lt;br /&gt;
Pour les formats de type xml, un schéma (fichier xsd) est requis à l'exécution.&lt;br /&gt;
&lt;br /&gt;
Lorsque le schéma est chargé, il apparaît (lui ainsi que les schémas qu'il référence éventuellement)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#images:admin_format_int_xml_2.png|formats}}&lt;br /&gt;
&lt;br /&gt;
==Mise en œuvre==&lt;br /&gt;
&lt;br /&gt;
===Importer un fichier===&lt;br /&gt;
&lt;br /&gt;
L'importation d'un fichier en utilisant un format de définition peut s'effectuer &lt;br /&gt;
&lt;br /&gt;
* Dans un processus métier par script métier&lt;br /&gt;
&lt;br /&gt;
Utiliser la méthode d'[[ImportByFormatDef (rtl)|importation de fichier en utilisant un format]].&lt;br /&gt;
&lt;br /&gt;
* A partir de l'assistant d'importation&lt;br /&gt;
Cochez &amp;quot;Format de fichier&amp;quot; puis sélectionner le format de définition souhaité.&lt;br /&gt;
&lt;br /&gt;
{{#images:format7.png|formats}}&lt;br /&gt;
&lt;br /&gt;
{{tip|En général l'importation de fichier structuré complexe nécessite un processus pour transformer et compléter les informations de sorte que cette méthode utilisant l'assistant d'importation est rarement utilisable.}}&lt;br /&gt;
&lt;br /&gt;
===Exporter un fichier===&lt;br /&gt;
&lt;br /&gt;
Utiliser la méthode de [[ExportByFormatDef (rtl)|génération de fichier en utilisant un format]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gestion des formats==&lt;br /&gt;
&lt;br /&gt;
Si les formats sont stockés sous forme xml dans le référentiel pour des raisons de performance, la définition des formats s'effectue dans une base métier. (La conception d'un format peut ainsi s'effectuer en web).&lt;br /&gt;
&lt;br /&gt;
Ainsi, il est nécessaire d'enregistrer le format dans le référentiel pour que les modifications apportées soient prises en compte lors de l'exécution.&lt;br /&gt;
&lt;br /&gt;
{{#images:SCRFORMGENXML_ACTION.png|formats}}&lt;br /&gt;
&lt;br /&gt;
Utiliser les interfaces utilisateurs situées dans le menu &amp;quot;Outils/Définition des formats&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{#images:format1.png|formats}}&lt;br /&gt;
&lt;br /&gt;
{{#images:format2.png|formats}}&lt;br /&gt;
&lt;br /&gt;
Pour créer un format utilisez l'assistant de création de format :&lt;br /&gt;
&lt;br /&gt;
{{#images:format6.png|formats}}&lt;br /&gt;
&lt;br /&gt;
{{tip|La duplication est une solution simple pour apporter des modifications à format système}}&lt;br /&gt;
&lt;br /&gt;
Voir aussi : &lt;br /&gt;
&lt;br /&gt;
[[Reference_format_fichier|Référence des formats de fichiers]]&lt;br /&gt;
&lt;br /&gt;
[[Category:RTL Format de fichier]]&lt;br /&gt;
[[Category:Tahoe]]&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Fichier:SCRFORMGENXML_ACTION.png</id>
		<title>Fichier:SCRFORMGENXML ACTION.png</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Fichier:SCRFORMGENXML_ACTION.png"/>
				<updated>2011-09-12T06:28:56Z</updated>
		
		<summary type="html">&lt;p&gt;Thdym : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Thdym</name></author>	</entry>

	</feed>