2


I'm trying to write a script (JavaScript) inside a product called Enterprise Architect ver 13.0.1310 (Editor : Sparx Systems). Enterprise Architect is designed to manage UML models.
Sparx Systems says that Enterprise Architect has a SpiderMonkey Javascript 1.8 engine builted-in.
But, when I try to execute : parentNode.appendChild(childNode), EA says that the function appendChild() doesn't exist.

  • Does anybody knows how to handle a XML DOM with SpiderMonkey 1.8 ?

  • Does anybody knows how I could do the same thing that appendChild(childnode) within SpiderMonkey 1.8 ? Maybe another function ?

  • Where can I found the references and available functions of
    SpiderMonkey 1.8 ?
  • Do you have some examples of script (JAVASCRIPT) written for SpiderMonkey 1.8 ?

    Best Regards

Here is the code in JScript (not JavaScript) that operates seamlessly within Enterprise Architect :

// ==========================================
//  GLOBAL DEFINITIONS
// ==========================================
var DIAGRAM_OT        = 8;

var SEARCH_SPECIFICATION = "<ReportViewData>" +
                            "<Fields>" +
                            "<Field name=\"CLASSGUID\" />" +
                            "<Field name=\"CLASSTABLE\" />" +
                            "<Field name=\"CLASSTYPE\" />" +
                            "<Field name=\"ID\" />" +
                            "<Field name=\"Name\" />" +
                            "<Field name=\"Type\" />" +
                            "<Field name=\"Stéréotype\" />" +                           
                            "<Field name=\"Notes\" />" +
                            "<Field name=\"Source\" />" +
                            "<Field name=\"Type_Source\" />" +
                            "<Field name=\"Destination\" />" +
                            "<Field name=\"Type_Destination\" />" +
                            "<Field name=\"Direction\" />" +
                            "<Field name=\"Source Aggregation\" />" +
                            "<Field name=\"Source Cardinality\" />" +
                            "<Field name=\"Source Role\" />" +
                            "<Field name=\"Destination Aggregation\" />" +
                            "<Field name=\"Destination Cardinality\" />" +
                            "<Field name=\"Destination Role\" />" +
                            "</Fields>" +
                            "<Rows/>" +
                            "</ReportViewData>";


function ListDiagramConnectors() {

    var treeSelectedType;
    var theDiagram as EA.Diagram;
    var xmlDOM;

    /* 
    * Vérifie que la fenetre "System Output" (Console) est visible.
    * Ouvre la fenetre "System Output" (Console) si nécessaire.
    */
    Repository.EnsureOutputVisible( "Script" );

    Session.Output( "JScript: List Diagram Relationships" );
    Session.Output( "=========================================" );



    treeSelectedType = Repository.GetTreeSelectedItemType();


    switch ( treeSelectedType )
    {

        case DIAGRAM_OT:
        {

            theDiagram = Repository.GetTreeSelectedObject();


            xmlDOM = creerEtRetournerXMLDOM();

            Session.Output( "Working on diagram '" + theDiagram.Name + "' (Type=" +
            theDiagram.Type + ", ID=" + theDiagram.DiagramID + ")" );


            /* ***************************************************************************/
            /* function XMLDOM.loadXML(String pXML) : 
             * Fonction JScript.
             * charge un fichier XML fourni 
             * sous forme de String dans un XMLDOM. 
             * @pXML : String : contenu XML.
             * @return : boolean : true si le chargement dans le DOM s'est bien déroulé.
             */
            /* ***************************************************************************/          
            /* Charge la structure fournie dans la String 
             * SEARCH_SPECIFICATION dans le DOM XML xmlDOM. */
            if( xmlDOM.loadXML(SEARCH_SPECIFICATION) )
            {

                /* Se positionne sur la racine des enregistrements ROWS dans le DOM. */
                var nodeRows = xmlDOM.selectSingleNode( "//ReportViewData//Rows" );

                /*
                 * Un connecteur a une relation un-a-plusieurs avec t_diagram.
                 * [t_connector] - [t_diagramlinks] - [t_diagram].
                 * Un connecteur peut apparaitre sur plusieurs diagrammes.
                 * L'objet DiagramLink représente une instance d'un connecteur sur un diagramme (lien).
                 * Un DIagramLink contient des propriétés comme la visibilité du connecteur, sa géométrie, ...
                 */
                // Récupère la EA.Collection de liens diagramLinks
                // pour le diagramme sélectionné dans le Project Browser.
                var diagramLinks as EA.Collection;
                diagramLinks = theDiagram.DiagramLinks;

                /* ************************************************** */
                /* PARCOURS D'UNE EA.COLLECTION EN JScript : INDICE.  */
                /* ************************************************** */                    
                for ( var i = 0 ; i < diagramLinks.Count ; i++ )
                {
                    /* Récupère le lien EA.DiagramLink en cours. */
                    var currentLink as EA.DiagramLink;
                    currentLink = diagramLinks.GetAt( i );

                    /* Récupère le connecteur dans le lien. */
                    var correspondingConnector as EA.Connector;
                    correspondingConnector = Repository.GetConnectorByID( currentLink.ConnectorID );

                    /* Ajoute un enregistrement (ROW) correspondant au connecteur 
                     * sous la balise Rows. */
                    AddRow(xmlDOM, nodeRows, correspondingConnector);    
                }

                /* **************************************************************** */
                /* Fonction EA RepositoryRunModelSearch( "", "", "", xmlDOM.xml ) : */
                /* **************************************************************** */              
                /* Ouvre et Remplit la fenetre de Requete 'Find In Project'. */
                Repository.RunModelSearch( "", "", "", xmlDOM.xml );

            }
            else
            {
                Session.Prompt( "Impossible de charger SEARCH_SPECIFICATION", 0 );
            }

            break;
        }
        default:
        {
            // Error message
            Session.Prompt( "Ce script ne fonctionne que si vous sélectionnez un DIAGRAMME dans le Project Browser", 0 );
        }
    }

    Session.Output( "FINI !" );

} // Fin de function ListDiagramConnectors().__________________________________________________________________



/*
 * **********************************************************************************
 * function creerEtRetournerXMLDOM() :
 * CREATION D'UN XMLDOM en JScript. - new ActiveXObject( "MSXML2.DOMDocument.4.0" )
 *
 * @return : Document Object Model (DOM).
 */
function creerEtRetournerXMLDOM() {

    var xmlDOM;

    xmlDOM = new ActiveXObject( "MSXML2.DOMDocument.4.0" );
    xmlDOM.validateOnParse = false;
    xmlDOM.async = false;

    return xmlDOM;

} // Fin de function creerEtRetournerXMLDOM()._________________________________________



/*
 * *************************************************************************************
 * function AddRow(pXmlDOM, pRacineEnregistrements, pConnector) :
 * Ajoute un enregistrement (balise ROW) correspondant à un connecteur pConnector 
 * sous le noeud pRacineEnregistrements du DOM pXmlDOM.
 *
 * @pXmlDOM : DOM XML.
 * @pRacineEnregistrements : node (balise) sous laquelle il faut insérer 
 * les enregistrements dans le DOM pXmlDOM.
 * @pConnector : EA.Connector : Connecteur dont on veut ajouter 
 * les caractéristiques dans le DOM XML.
 */
function AddRow(pXmlDOM, pRacineEnregistrements, pConnector) {

    /* Cast le paramètre pConnector pour bénéficier 
     * de la complétion (intellisense). */
    var connector as EA.Connector;

    connector = pConnector;

    var row;
    var source as EA.Element; /* Source du connecteur. */
    var sourceEnd as EA.ConnectorEnd; /* ???  Semble contenir les propriétés (cardinalité, ...) du coté source du connecteur. */
    var destination as EA.Element;  /* Destination du connecteur. */
    var destinationEnd as EA.ConnectorEnd; /* ???  Semble contenir les propriétés (cardinalité, ...) du coté destination du connecteur. */
    var guid = ""; /* ConnectorGUID. */
    var type = ""; /* Connector_Type. */
    var id = ""; /* Connector_ID. */
    var nom = ""; /* Nom du Connecteur. */
    var stereotype = ""; /* Stéréotype du Connecteur. */
    var notes = ""; /* Notes du Connecteur. */
    var direction = ""; /* Direction du Connecteur; */

    /* Crée un élément (balise) "ROW". */
    /* FONCTION JScript createElement("Row"). */
    row = pXmlDOM.createElement("Row");

    /* Récupère les caractéristiques du connecteur. */
    guid = connector.ConnectorGUID;
    type = connector.MetaType;
    nom = connector.Name;
    id = connector.ConnectorID;
    stereotype = connector.Stereotype;
    notes = connector.Notes;
    direction = connector.Direction;

    /* Récupère les caractéristiques de la source du connecteur. */    
    source = Repository.GetElementByID( connector.ClientID );
    sourceEnd = connector.ClientEnd;

    /* Récupère les caractéristiques de la destination du connecteur. */
    destination = Repository.GetElementByID( connector.SupplierID );
    destinationEnd = connector.SupplierEnd;

    /* *********************************************** */
    /* CONSTITUTION D'UN ENREGISTREMENT (ROW). */
    /* *********************************************** */
    /* Ajoute toutes les caractéristiques du connecteur 
     * dans des balises sous un noeud ROW. */
    AddField( pXmlDOM, row, "CLASSGUID", guid );
    AddField( pXmlDOM, row, "CLASSTABLE", "t_connector" );
    AddField( pXmlDOM, row, "CLASSTYPE", type );
    AddField( pXmlDOM, row, "ID", id );
    AddField( pXmlDOM, row, "Name", nom );
    AddField( pXmlDOM, row, "Type", type );
    AddField( pXmlDOM, row, "Stereotype", stereotype );
    AddField( pXmlDOM, row, "Notes", notes );
    AddField( pXmlDOM, row, "Source", source.Name );
    AddField( pXmlDOM, row, "Type_Source", source.MetaType );
    AddField( pXmlDOM, row, "Destination", destination.Name );
    AddField( pXmlDOM, row, "Type_Destination", destination.MetaType );
    AddField( pXmlDOM, row, "Direction", direction );
    AddField( pXmlDOM, row, "Source Aggregation", sourceEnd.Aggregation );
    AddField( pXmlDOM, row, "Source Cardinality", sourceEnd.Cardinality );
    AddField( pXmlDOM, row, "Source Role", sourceEnd.Role );
    AddField( pXmlDOM, row, "Destination Aggregation", destinationEnd.Aggregation );
    AddField( pXmlDOM, row, "Destination Cardinality", destinationEnd.Cardinality );
    AddField( pXmlDOM, row, "Destination Role", destinationEnd.Role );


    /* Ajoute un noeud ROW sous la racine des enregistrements. */
    pRacineEnregistrements.appendChild( row );

} // Fin de function AddRow(pXmlDOM, pRacineEnregistrements, pConnector).__________________________




/*
 * **************************************************************************************************
 * AJOUT D'UNE BALISE (ELEMENT) EN JScript.
 * **************************************************************************************************
 * function AddField(pXmlDOM, pRow, pNomDuChamp, pValeurDuChamp) :
 * Ajoute un Element (balise) 'Field' à l'Element pRow d'un DOM pXmlDOM.
 * Ajoute deux attributs 'name' et 'value' à l'Element 'Field ajouté.
 * Fixe la valeur des attributs ajoutés à pNomDuChamp et pValeurDuChamp comme suit :
 * <Field name="pNomDuChamp" value="pValeurDuChamp"/>.
 * Par exemple :
 * <Field name="Stereotype" value="Realization"/>.
 *
 * @pXmlDOM : Document Objet Model (DOM).
 * @pRow : Node : Balise (Element) de pXmlDOM à laquelle on ajoute l'Element 'Field' créé.
 * @pNomDuChamp : String : valeur à attribuer à l'attribut 'name' de l'Element 'Field' créé.
 * @pValeurDuChamp : String : valeur à attribuer à l'attribut 'value' de l'Element 'Field' créé.
 */
function AddField(pXmlDOM, pRow, pNomDuChamp, pValeurDuChamp) {

    /* Crée une balise (Element) 'Field'. */
    var fieldNode = pXmlDOM.createElement("Field");

    /* Crée un premier attribut 'name'. */
    var nameAttribute = pXmlDOM.createAttribute("name");
    /* passe la valeur pNomDuChamp à l'attribut 'name'. */
    nameAttribute.value = pNomDuChamp;
    /* Ajoute l'attribut valué 'name' à la collection d'attributs de la balise 'Field'. */
    fieldNode.attributes.setNamedItem(nameAttribute);

    /* Crée un second attribut 'value'. */
    var valueAttribute = pXmlDOM.createAttribute("value");
    /* passe la valeur pValeurDuChamp à l'attribut 'value'. */
    valueAttribute.value = pValeurDuChamp;
    /* Ajoute l'attribut valué 'value' à la collection d'attributs de la balise 'Field'. */
    fieldNode.attributes.setNamedItem(valueAttribute);

    /* Ajoute la balise 'Field' nouvellement créée comme enfant de pRow. */
    pRow.appendChild( fieldNode );

} // Fin de function AddField(pXmlDOM, pRow, pNomDuChamp, pValeurDuChamp)._________________




ListDiagramConnectors();
</code>

Here is the code for the same script but in JavaScript. This code won't operate within Enterprise Architect 13.0.1310 because the function appendChild(childNode) is not defined :

<code>
// ==========================================
//  GLOBAL DEFINITIONS
// ==========================================
/* Object_type d'un Diagram == 8 dans EA. */
var DIAGRAM_OT        = 8;


/* String XML qui définit les champs qui apparaitront 
 * dans la fenetre 'Find In Project' 
 * et la forme d'un fichier XML correspondant à une requete Search. */
var SEARCH_SPECIFICATION = "<ReportViewData>" +
                            "<Fields>" +
                            "<Field name=\"CLASSGUID\" />" +
                            "<Field name=\"CLASSTABLE\" />" +
                            "<Field name=\"CLASSTYPE\" />" +
                            "<Field name=\"ID\" />" +
                            "<Field name=\"Name\" />" +
                            "<Field name=\"Type\" />" +
                            "<Field name=\"Stéréotype\" />" +                           
                            "<Field name=\"Notes\" />" +
                            "<Field name=\"Source\" />" +
                            "<Field name=\"Type_Source\" />" +
                            "<Field name=\"Destination\" />" +
                            "<Field name=\"Type_Destination\" />" +
                            "<Field name=\"Direction\" />" +
                            "<Field name=\"Source Aggregation\" />" +
                            "<Field name=\"Source Cardinality\" />" +
                            "<Field name=\"Source Role\" />" +
                            "<Field name=\"Destination Aggregation\" />" +
                            "<Field name=\"Destination Cardinality\" />" +
                            "<Field name=\"Destination Role\" />" +
                            "</Fields>" +
                            "<Rows/>" +
                            "</ReportViewData>";




/*
 * ***************************************************************************************************
 * function ListDiagramConnectors() :
 * Main function.
 * Liste l'ensemble des connecteurs présents dans un diagramme sélectionné dans le Project Browser.
 * Le résultat est affiché dans la fenetre de Requete 'Find In Project'.
 * Cette fenetre 'Find In Project' s'ouvre automatiquement.
 */
function ListDiagramConnectors() {

    var treeSelectedType;
    var theDiagram as EA.Diagram;
    var xmlDOM;

    /* 
    * Vérifie que la fenetre "System Output" (Console) est visible.
    * Ouvre la fenetre "System Output" (Console) si nécessaire.
    */
    Repository.EnsureOutputVisible( "Script" );

    Session.Output( "JScript: List Diagram Relationships" );
    Session.Output( "=========================================" );


    /* ********************************************************************** */
    /* RECUPERATION DU TYPE DE L'OBJET SELECTIONNE DANS LE PROJECT BROWSER.   */
    /* FONCTION EA13 Repository.GetTreeSelectedItemType().                    */
    /* ********************************************************************** */
    /* Récupère le type de l'objet sélectionné dans le Project Browser. */
    /* Ce type est un entier. */
    treeSelectedType = Repository.GetTreeSelectedItemType();

    /* ********************************* */
    /* SELECT CASE en JScript.           */
    /* ********************************* */
    /* Traitement du type d'objet sélectionné dans le Project Browser. */
    switch ( treeSelectedType )
    {
        /* Lorsqu'un diagramme est selectionné dans le ProjectBrowser. */
        case DIAGRAM_OT:
        {
            /* Récupération de l'objet sélectionné dans le Project Browser. */           
            theDiagram = Repository.GetTreeSelectedObject();

            /* Récupère un Document Object Model (DOM). */
            xmlDOM = creerEtRetournerXMLDOM();

            Session.Output( "Working on diagram '" + theDiagram.Name + "' (Type=" +
            theDiagram.Type + ", ID=" + theDiagram.DiagramID + ")" );


            /* ***************************************************************************/
            /* function XMLDOM.loadXML(String pXML) : 
             * Fonction JScript.
             * charge un fichier XML fourni 
             * sous forme de String dans un XMLDOM. 
             * @pXML : String : contenu XML.
             * @return : boolean : true si le chargement dans le DOM s'est bien déroulé.
             */
            /* ***************************************************************************/          
            /* Charge la structure fournie dans la String 
             * SEARCH_SPECIFICATION dans le DOM XML xmlDOM. */
            if( xmlDOM.loadXML(SEARCH_SPECIFICATION) )
            {

                /* Se positionne sur la racine des enregistrements ROWS dans le DOM. */
                var nodeRows = xmlDOM.selectSingleNode( "//ReportViewData//Rows" );

                /*
                 * Un connecteur a une relation un-a-plusieurs avec t_diagram.
                 * [t_connector] - [t_diagramlinks] - [t_diagram].
                 * Un connecteur peut apparaitre sur plusieurs diagrammes.
                 * L'objet DiagramLink représente une instance d'un connecteur sur un diagramme (lien).
                 * Un DIagramLink contient des propriétés comme la visibilité du connecteur, sa géométrie, ...
                 */
                // Récupère la EA.Collection de liens diagramLinks
                // pour le diagramme sélectionné dans le Project Browser.
                var diagramLinks as EA.Collection;
                diagramLinks = theDiagram.DiagramLinks;

                /* ************************************************** */
                /* PARCOURS D'UNE EA.COLLECTION EN JScript : INDICE.  */
                /* ************************************************** */                    
                for ( var i = 0 ; i < diagramLinks.Count ; i++ )
                {
                    /* Récupère le lien EA.DiagramLink en cours. */
                    var currentLink as EA.DiagramLink;
                    currentLink = diagramLinks.GetAt( i );

                    /* Récupère le connecteur dans le lien. */
                    var correspondingConnector as EA.Connector;
                    correspondingConnector = Repository.GetConnectorByID( currentLink.ConnectorID );

                    /* Ajoute un enregistrement (ROW) correspondant au connecteur 
                     * sous la balise Rows. */
                    AddRow(xmlDOM, nodeRows, correspondingConnector);    
                }

                /* **************************************************************** */
                /* Fonction EA RepositoryRunModelSearch( "", "", "", xmlDOM.xml ) : */
                /* **************************************************************** */              
                /* Ouvre et Remplit la fenetre de Requete 'Find In Project'. */
                Repository.RunModelSearch( "", "", "", xmlDOM.xml );

            }
            else
            {
                Session.Prompt( "Impossible de charger SEARCH_SPECIFICATION", 0 );
            }

            break;
        }
        default:
        {
            // Error message
            Session.Prompt( "Ce script ne fonctionne que si vous sélectionnez un DIAGRAMME dans le Project Browser", 0 );
        }
    }

    Session.Output( "FINI !" );

} // Fin de function ListDiagramConnectors().__________________________________________________________________



/*
 * **********************************************************************************
 * function creerEtRetournerXMLDOM() :
 * CREATION D'UN XMLDOM en JavaScript. - new COMObject( "MSXML2.DOMDocument" )
 *
 * @return : Document Object Model (DOM).
 */
function creerEtRetournerXMLDOM() {

    var xmlDOM;

    xmlDOM = new COMObject( "MSXML2.DOMDocument" );
    xmlDOM.validateOnParse = false;
    xmlDOM.async = false;

    return xmlDOM;

} // Fin de function creerEtRetournerXMLDOM()._________________________________________



/*
 * *************************************************************************************
 * function AddRow(pXmlDOM, pRacineEnregistrements, pConnector) :
 * Ajoute un enregistrement (balise ROW) correspondant à un connecteur pConnector 
 * sous le noeud pRacineEnregistrements du DOM pXmlDOM.
 *
 * @pXmlDOM : DOM XML.
 * @pRacineEnregistrements : node (balise) sous laquelle il faut insérer 
 * les enregistrements dans le DOM pXmlDOM.
 * @pConnector : EA.Connector : Connecteur dont on veut ajouter 
 * les caractéristiques dans le DOM XML.
 */
function AddRow(pXmlDOM, pRacineEnregistrements, pConnector) {

    /* Cast le paramètre pConnector pour bénéficier 
     * de la complétion (intellisense). */
    var connector as EA.Connector;

    connector = pConnector;

    var row;
    var source as EA.Element; /* Source du connecteur. */
    var sourceEnd as EA.ConnectorEnd; /* ???  Semble contenir les propriétés (cardinalité, ...) du coté source du connecteur. */
    var destination as EA.Element;  /* Destination du connecteur. */
    var destinationEnd as EA.ConnectorEnd; /* ???  Semble contenir les propriétés (cardinalité, ...) du coté destination du connecteur. */
    var guid = ""; /* ConnectorGUID. */
    var type = ""; /* Connector_Type. */
    var id = ""; /* Connector_ID. */
    var nom = ""; /* Nom du Connecteur. */
    var stereotype = ""; /* Stéréotype du Connecteur. */
    var notes = ""; /* Notes du Connecteur. */
    var direction = ""; /* Direction du Connecteur; */

    /* Crée un élément (balise) "ROW". */
    /* FONCTION JavaScript createElement("Row"). */
    row = pXmlDOM.createElement("Row");

    /* Récupère les caractéristiques du connecteur. */
    guid = connector.ConnectorGUID;
    type = connector.MetaType;
    nom = connector.Name;
    id = connector.ConnectorID;
    stereotype = connector.Stereotype;
    notes = connector.Notes;
    direction = connector.Direction;

    /* Récupère les caractéristiques de la source du connecteur. */    
    source = Repository.GetElementByID( connector.ClientID );
    sourceEnd = connector.ClientEnd;

    /* Récupère les caractéristiques de la destination du connecteur. */
    destination = Repository.GetElementByID( connector.SupplierID );
    destinationEnd = connector.SupplierEnd;

    /* *********************************************** */
    /* CONSTITUTION D'UN ENREGISTREMENT (ROW). */
    /* *********************************************** */
    /* Ajoute toutes les caractéristiques du connecteur 
     * dans des balises sous un noeud ROW. */
    AddField( pXmlDOM, row, "CLASSGUID", guid );
    AddField( pXmlDOM, row, "CLASSTABLE", "t_connector" );
    AddField( pXmlDOM, row, "CLASSTYPE", type );
    AddField( pXmlDOM, row, "ID", id );
    AddField( pXmlDOM, row, "Name", nom );
    AddField( pXmlDOM, row, "Type", type );
    AddField( pXmlDOM, row, "Stereotype", stereotype );
    AddField( pXmlDOM, row, "Notes", notes );
    AddField( pXmlDOM, row, "Source", source.Name );
    AddField( pXmlDOM, row, "Type_Source", source.MetaType );
    AddField( pXmlDOM, row, "Destination", destination.Name );
    AddField( pXmlDOM, row, "Type_Destination", destination.MetaType );
    AddField( pXmlDOM, row, "Direction", direction );
    AddField( pXmlDOM, row, "Source Aggregation", sourceEnd.Aggregation );
    AddField( pXmlDOM, row, "Source Cardinality", sourceEnd.Cardinality );
    AddField( pXmlDOM, row, "Source Role", sourceEnd.Role );
    AddField( pXmlDOM, row, "Destination Aggregation", destinationEnd.Aggregation );
    AddField( pXmlDOM, row, "Destination Cardinality", destinationEnd.Cardinality );
    AddField( pXmlDOM, row, "Destination Role", destinationEnd.Role );


    /* Ajoute un noeud ROW sous la racine des enregistrements. */
    /* ************************************* */
    /* NE FONCTIONNE PAS EN JavaScript; !!!! */
    /* ************************************* */
    pRacineEnregistrements.appendChild( row );

} // Fin de function AddRow(pXmlDOM, pRacineEnregistrements, pConnector).__________________________




/*
 * **************************************************************************************************
 * AJOUT D'UNE BALISE (ELEMENT) EN JavaScript.
 * **************************************************************************************************
 * function AddField(pXmlDOM, pRow, pNomDuChamp, pValeurDuChamp) :
 * Ajoute un Element (balise) 'Field' à l'Element pRow d'un DOM pXmlDOM.
 * Ajoute deux attributs 'name' et 'value' à l'Element 'Field ajouté.
 * Fixe la valeur des attributs ajoutés à pNomDuChamp et pValeurDuChamp comme suit :
 * <Field name="pNomDuChamp" value="pValeurDuChamp"/>.
 * Par exemple :
 * <Field name="Stereotype" value="Realization"/>.
 *
 * @pXmlDOM : Document Objet Model (DOM).
 * @pRow : Node : Balise (Element) de pXmlDOM à laquelle on ajoute l'Element 'Field' créé.
 * @pNomDuChamp : String : valeur à attribuer à l'attribut 'name' de l'Element 'Field' créé.
 * @pValeurDuChamp : String : valeur à attribuer à l'attribut 'value' de l'Element 'Field' créé.
 */
function AddField(pXmlDOM, pRow, pNomDuChamp, pValeurDuChamp) {

    /* Crée une balise (Element) 'Field'. */
    var fieldNode = pXmlDOM.createElement("Field");

    /* Crée un premier attribut 'name' et lui passe sa valeur pNomDuChamp. */
    fieldNode.setAttribute("name", pNomDuChamp);

    /* Crée un second attribut 'value' et lui passe sa valeur pValeurDuChamp. */
    fieldNode.setAttribute("value", pValeurDuChamp);

    /* Ajoute la balise 'Field' nouvellement créée comme enfant de pRow. */
    /* ************************************* */
    /* NE FONCTIONNE PAS EN JavaScript; !!!! */
    /* ************************************* */
    pRow.appendChild(fieldNode);

} // Fin de function AddField(pXmlDOM, pRow, pNomDuChamp, pValeurDuChamp)._________________




ListDiagramConnectors();
</code>
  • 1
    Welcome to [Stack Overflow](http://stackoverflow.com/) ! Please read [How to Ask Question](http://stackoverflow.com/help/how-to-ask) and provide a [Minimal, Complete, and Verifiable example](http://stackoverflow.com/help/mcve) ! – Saurabh Bhandari Jun 15 '17 at 15:15
  • All I can tell you for now is that Spidermonkey 1.8 basically means javascript as of Firefox version 3.0 https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Releases/1.8 (Spidermonkey is the modzilla implementation of ECMA (known as javascript) so check if your methods can run on firefox 3.0 – Mart10 Jun 15 '17 at 16:21
  • I'd also sugest using Jscript (Microsoft Javascript) instead as its compatible with ActiveXCom Objects, which I Havent been able to use them with Javascript – Mart10 Jun 15 '17 at 16:22
  • Hi Saurabh, I didn't put code inside my post because you will only be able to test it within Enterprise Architect. – daniel.levy Jun 15 '17 at 16:38
  • but you should still post it so people with EA like me can test it, it should still be runnable in any javascript console – Mart10 Jun 15 '17 at 16:42

1 Answers1

1

Does anybody knows how to handle a XML DOM with SpiderMonkey 1.8 ?

To my knowledge, Spidermonkey does not have that capability, as it was developed for applications without a DOM

Where can I found the references and available functions of SpiderMonkey 1.8 ? Do you have some examples of script (JAVASCRIPT) written for SpiderMonkey 1.8 ?

So basically, SpiderMonkey is the same as JavaScript, minus DOM Manipulation (and XML)

Does anybody knows how I could do the same thing that appendChild(childnode) within SpiderMonkey 1.8 ? Maybe another function ?

You will need to use either VBscript or Jscript(Jscript is the Microsoft implementation of Javascript).

Here's an example Jscript

 main();

function main()
{
  var dom = MakeDOM(null);

  try {  
    // Create a processing instruction targeted for xml.
    var node = dom.createProcessingInstruction("xml",
                                      "version='1.0'");
    dom.appendChild(node);
    node = null;
    ...

There is a library available in the EAScriptLib group of your ea client

Mart10
  • 758
  • 3
  • 14
  • I can't understand Sparx Systems Strategy : they told me to script in JavaScript because I can't debugg anymore the VBScripts and JScripts on my computer since I installed Microsoft Windows 10 Pro. Microsoft abandoned the Microsoft Script Debugger (scd10en.exe wich is necessary to debug JScript and VBScript) and Sparx recommanded me to script in JavaScript... But if you do (for instance) : Repository.SQLQuery(aQuery); in any scripting langage, it will return an XML flow. So how will I read the XML flow without DOM manipulation ? – daniel.levy Jun 15 '17 at 17:23
  • If you want to try my JScript code above within Enterprise Architect, just create a new JScript in a Project Browser Group and copy-paste my code in it. Then right-click on a diagram (with some connectors in it) in your project Browser > Script > Your new Script. It will open the search window with your connectors. – daniel.levy Jun 15 '17 at 17:28
  • for your information, I found that function to create a DOM in JScript and it's better than mine in my code JScript above : function creerEtRetournerXMLDOM() { var xmlDOM; try { xmlDOM = new ActiveXObject( "MSXML2.DOMDocument.4.0" ); } catch(e) { xmlDOM = new ActiveXObject( "MSXML2.DOMDocument.6.0" ); } xmlDOM.validateOnParse = false; xmlDOM.async = false; return xmlDOM; } – daniel.levy Jun 15 '17 at 17:38