Altova MapForce 2024 Enterprise Edition

L’exemple Jscript suivant montre comment charger un document existant avec un mappage simple, accéder à ses composants, définir des noms de fichier d’instance d’entrée et de sortie et exécuter le mappage.

 

/*
Cet exemple de fichier réalise les opérations suivantes :
 
Charger le document de mappage de MapForce.
Trouver le composant source et cible.
Définir les noms de fichier d’instance d’entrée et de sortie.
Exécuter la transformation.
 
Fonctionne avec l’hôte de scripting Windows.
*/
 
// ---- assistance générale ------------------------------
 
function Exit( message )
{
WScript.Echo( message );
WScript.Quit(-1);
}
 
function ERROR( message, err )
{
if( err != null )
Exit( "ERROR: (" + (err.number & 0xffff) + ") " + err.description + " - " + message );
else
Exit( "ERROR: " + message );
}
 
 
 
// ---- constantes MapForce -----------------------
 
var eComponentUsageKind_Unknown = 0;
var eComponentUsageKind_Instance = 1;
var eComponentUsageKind_Input = 2;
var eComponentUsageKind_Output = 3;
 
 
 
// ---- assistance MapForce -----------------------
 
// Cherche dans le mappage spécifié pour un composant par le nom et le renvoie.
// Si pas trouvé, renvoie une erreur.
function FindComponent( mapping, component_name )
{
var components = mapping.Components;
for( var i = 0 ; i < components.Count ; ++i )
{
var component = components.Item( i + 1 );
if( component.Name == component_name )
return component;
}
throw new Error( "Cannot find component with name " + component_name );
}
 
 
 
// Parcourt les composants dans un mappage et renvoie le premier qu’il trouve agissant en tant que
// composant source (c’est-à-dire qui a des connexions à sa droite).
function GetFirstSourceComponent( mapping )
{
var components = mapping.Components;
for( var i = 0 ; i < components.Count ; ++i )
{
var component = components.Item( i + 1 );
if( component.UsageKind == eComponentUsageKind_Instance &&
component.HasOutgoingConnections )
{
return component;
}
}
throw new Error( "Cannot find a source component" );
}
 
// Parcourt les composants dans un mappage et renvoie le premier qu’il trouve agissant en tant que
// composant cible (c’est-à-dire qui a des connexions à sa gauche).
function GetFirstTargetComponent( mapping )
{
var components = mapping.Components;
for( var i = 0 ; i < components.Count ; ++i )
{
var component = components.Item( i + 1 );
if( component.UsageKind == eComponentUsageKind_Instance &&
component.HasIncomingConnections )
{
return component;
}
}
throw new Error( "Cannot find a target component" );
}
 
 
 
function IndentTextLines( s )
{
return "\t" + s.replace( /\/g, "\\t" );
}
 
function GetAppoutputLineFullText( oAppoutputLine )
{
var s = oAppoutputLine.GetLineText();
var oAppoutputChildLines = oAppoutputLine.ChildLines;
var i;
 
for( i = 0 ; i < oAppoutputChildLines.Count ; ++i )
{
oAppoutputChildLine = oAppoutputChildLines.Item( i + 1 );
sChilds = GetAppoutputLineFullText( oAppoutputChildLine );
s += "\" + IndentTextLines( sChilds );
}
 
return s;
}
 
// Créer un string bien formaté depuis AppOutputLines
function GetResultMessagesString( oAppoutputLines )
{
var s1 = "Transformation result messages:\";
var oAppoutputLine;
var i;
 
for( i = 0 ; i < oAppoutputLines.Count ; ++i )
{
oAppoutputLine = oAppoutputLines.Item( i + 1 );
s1 += GetAppoutputLineFullText( oAppoutputLine );
s1 += "\";
}
 
return s1;
}
 
 
 
// ---- PRINCIPAL -------------------------------------
 
var wshShell;
var fso;
var mapforce;
 
// créer le Shell et FileSystemObject du windows scripting system
try
{
wshShell = WScript.CreateObject( "WScript.Shell" );
fso = WScript.CreateObject( "Scripting.FileSystemObject" );
}
catch( err )
{ ERROR( "Can't create windows scripting objects", err ); }
 
// ouvrir MapForce ou accéder à une instance en cours d’exécution
try
{
mapforce = WScript.GetObject( "", "MapForce.Application" );
}
catch( err )
{ ERROR( "Can't access or create MapForce.Application", err ); }
 
try
{
// Rendre l’IU de MapForce visible. Il s’agit d’une exigence API pour la génération de sortie.
mapforce.Visible = true;
 
// ouvrir un mappage existant.
// **** ajustez le chemin des exemples à vos besoins ! **************
var sMapForceExamplesPath = fso.BuildPath(
wshShell.SpecialFolders( "MyDocuments" ),
"Altova\\MapForce2024\\MapForceExamples" );
var sDocFilename = fso.BuildPath( sMapForceExamplesPath, "PersonList.mfd" );
var doc = mapforce.OpenDocument( sDocFilename );
 
// Trouver des composants existants par le nom dans le mappage principal.
// Notez que les noms des composants ne sont pas nécessairement uniques étant donné que le nom du composant d’un schéma
// est dérivé de son nom de fichier du schéma.
var source_component = FindComponent( doc.MainMapping, "Employees" );
var target_component = FindComponent( doc.MainMapping, "PersonList" );
// Si vous ne connaissez pas les noms des composants pour une raison ou une autre, vous pourrez
// utiliser les fonctions suivantes à la place de FindComponent.
//var source_component = GetFirstSourceComponent( doc.MainMapping );
//var target_component = GetFirstTargetComponent( doc.MainMapping );
 
// spécifier les fichiers d’entrée et de sortie désirés.
source_component.InputInstanceFile = fso.BuildPath( sMapForceExamplesPath, "Employees.xml" );
target_component.OutputInstanceFile = fso.BuildPath( sMapForceExamplesPath, "test_transformation_results.xml" );
 
// Effectuer la transformation.
// Vous pouvez utiliser doc.GenerateOutput() si vous n’avez pas besoin de messages de résultat.
// Si vous avez un mappage avec plus d’un compostant cible et vous voulez
// exécuter la transformation uniquement pour un seul composant cible,
// appelez target_component.GenerateOutput() à la place.
var result_messages = doc.GenerateOutputEx();
 
var summary_info =
"Transformation performed from " + source_component.InputInstanceFile + "\" +
"to " + target_component.OutputInstanceFile + "\" +
GetResultMessagesString( result_messages );
WScript.Echo( summary_info );
}
catch( err )
{
ERROR( "Failure", err );
}

© 2018-2024 Altova GmbH