1
Automation Interface, Add-Ins and Tools / Re: Scritps in MDG technology
« on: November 03, 2017, 01:30:53 am »
Done, through priority support.
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
!INC Local Scripts.EAConstants-JScript
!INC EAScriptLib.JScript-XML
var DISCUSSION_TEMPLATE = "discussion";
var OUTPUT_FILE = "c:\\temp\\TestDiscussions.rtf";
var docGenerator as EA.DocumentGenerator;
var generationSuccess = false;
var saveSuccess = false;
var statusOpen = "Ouverte";
var statusClosed = "Close";
var statusPending = "En attente de compléments";
function getNodeText(string, xpath) {
var xmlDOM = XMLParseXML(string);
if (!xmlDOM) {
ReportFatal("XML fails");
}
value = XMLGetNodeText(xmlDOM, xpath);
return value;
}
function hasDiscussions(element) {
var currentElement as EA.Element;
currentElement = element;
result = Repository.SQLQuery("SELECT COUNT(*) AS nbdisc FROM t_document WHERE elementid = '" + currentElement.ElementGUID + "' AND doctype='EDisc'");
return parseInt(getNodeText(result, "EADATA/Dataset_0/Data/Row/nbdisc"));
}
function generateDiscussions(element) {
var currentElement as EA.Element;
currentElement = element;
var discussionStatus = statusOpen;
//SQL query the discussions for the element
result = Repository.SQLQuery("SELECT elementid, strcontent, doctype, style FROM t_document WHERE t_document.elementType = 'Post' AND elementid = '" + currentElement.ElementGUID + "' ORDER BY style");
var xmlDOM = XMLParseXML(result);
if (!xmlDOM) {
ReportFatal("XML fails");
}
array = xmlDOM.selectNodes("EADATA/Dataset_0/Data/*");
for (var i=0; i<array.length; i++) {
node = array.nextNode;
if (node != null) {
guid = getNodeText(node.xml, "Row/elementid");
str = getNodeText(node.xml, "Row/strcontent");
type = getNodeText(node.xml, "Row/doctype");
statusXML = getNodeText(node.xml, "Row/style");
if (statusXML.indexOf("RS_PEND") != -1) {
discussionStatus = statusPending;
} else if (statusXML.indexOf("RS_CLSD") != -1) {
discussionStatus = statusClosed;
} else {
discussionStatus = statusOpen;
}
if (type == "EDisc") {
docGenerator.InsertText("Question: " + str + " - " + discussionStatus + "\n", "Discussion - titre");
} else {
docGenerator.InsertText("Réponse: " + str + "\n", "Discussion - notes");
}
}
}
docGenerator.InsertText("\n\n", "");
}
function DumpElements(thePackage) {
var currentPackage as EA.Package;
currentPackage = thePackage;
var elementEnumerator = new Enumerator(currentPackage.Elements);
while (!elementEnumerator.atEnd()) {
var currentElement as EA.Element;
currentElement = elementEnumerator.item();
nb = hasDiscussions(currentElement);
if (nb > 0) {
ReportInfo("J'ai trouvé " + nb + " discussions, je génère une doc pour cet élément");
docGenerator.InsertText("Element: " + currentElement.Name + "\n", "");
docGenerator.InsertText("Type: " + currentElement.Type + "\n", "");
generateDiscussions(currentElement);
}
elementEnumerator.moveNext();
}
}
function DumpPackage(thePackage) {
//cast du paramètre en EA.Package pour avoir accès à l'autocomplétion
var currentPackage as EA.Package;
currentPackage = thePackage;
// Dump the elements this package contains
DumpElements(currentPackage);
// Recursively process any child packages
var childPackageEnumerator = new Enumerator(currentPackage.Packages);
while (!childPackageEnumerator.atEnd()) {
var childPackage as EA.Package;
childPackage = childPackageEnumerator.item();
DumpPackage(childPackage);
childPackageEnumerator.moveNext();
}
}
function parcoursArborescence() {
//Parcours de tous les objets du modèle, root node par root node
var modelEnumerator = new Enumerator(Repository.Models);
while (!modelEnumerator.atEnd())
{
var currentModel as EA.Package;
currentModel = modelEnumerator.item();
// Recursively process this package
DumpPackage(currentModel);
modelEnumerator.moveNext();
}
ReportInfo("Parcours de l'arborescence terminé.");
}
function main() {
//active la fenetre console
Repository.EnsureOutputVisible("Script");
Session.Output("Parcours de l'arborescence d'un projet et génération de doc en Javascript");
Session.Output("----------------------------------------------------------------------------------------");
//création du générateur de doc
docGenerator = Repository.CreateDocumentGenerator();
if (docGenerator.SetStyleSheetDocument("GAIO - Feuille de style") == false) {
ReportWarning("Stylesheet non appliquée");
}
docGenerator.NewDocument("");
//parcours de l'arborescence
parcoursArborescence();
//enregistrement du fichier
saveSuccess = docGenerator.SaveDocument(OUTPUT_FILE, dtRTF);
if ( saveSuccess )
ReportInfo( "Documentation complete!" );
else
ReportWarning( "Error saving file: " + docGenerator.GetLastError() );
}
main();
function ReportInfo(message) {
Session.Output("[INFO] " + message);
}
function ReportWarning(message) {
Session.Output("[WARNING] " + message);
}
function ReportFatal(message) {
Session.Output("[FATAL] " + message);
Session.Prompt(message, promptOK);
}