Ejemplo de uso (script de muestra de UModel)

www.altova.com Imprimir este apartado Página anterior Subir un nivel Página siguiente

Inicio >  Referencia del programador > Editor de scripts >

Ejemplo de uso (script de muestra de UModel)

Este ejemplo está en la carpeta ...\UModelExamples. Se trata del archivo ScriptSampleFind.asprj.

 

Declaraciones globales:

 

// importar el espacio de nombres System.Windows.Forms para todas las macros, todos los formularios y todos los eventos:

CLR.Import( "System.Windows.Forms" );

 

Formulario FindSample

 

//aparece cada vez que el usuario carga el formulario.

function FindKinds_Load( objSender, e_EventArgs )

{

 // inicializar todos los controles:

 objSender.btnFind.Enabled = false;

 

 objSender.gbOptions.cbMatchCase.Checked = bMatchCase;

 objSender.gbOptions.cbWholeName.Checked = bMatchWholeName;

 

 objSender.gbSearchKinds.cbClasses.Checked                         = bSearchClasses;

 objSender.gbSearchKinds.cbInterfaces.Checked                         = bSearchInterfaces;

 objSender.gbSearchKinds.cbEnumerations.Checked                         = bSearchEnumerations;

 objSender.gbSearchKinds.cbPackages.Checked                         = bSearchPackages;

 objSender.gbSearchKinds.cbProperties.Checked                         = bSearchProperties;

 objSender.gbSearchKinds.cbOperations.Checked                         = bSearchOperations;

 objSender.gbSearchKinds.cbEnumerationLiterals.Checked                = bSearchEnumLiterals;

 objSender.gbSearchKinds.cbOthers.Checked                                 = bSearchOthers;

}

 

//Evento generado cuando el valor de la propiedad Text se cambia en Control.

function FindKinds_tbFindText_TextChanged( objSender, e_EventArgs )

{

 // objSender es la casilla de texto "Buscar"; además, obtener el formulario:

 var objForm = objSender.FindForm();

 

 // oara habilitar el botón Buscar, searchstring debería tener como mínimo un carácter

 objForm.btnFind.Enabled = ( objSender.Text.length > 0 );

}

 

//Aparece cuando se hace clic en el componente

function FindType_btnFind_Click( objSender, e_EventArgs )

{

 // objSender es el botón "Busar"; además, obtener el formulario:

 var objForm = objSender.FindForm();

 

 // guardar opciones elegidas en las variables de macro globales:

 bMatchCase                 = objForm.gbOptions.cbMatchCase.Checked;

 bMatchWholeName         = objForm.gbOptions.cbWholeName.Checked;

 

 bSearchClasses         = objForm.gbSearchKinds.cbClasses.Checked;

 bSearchInterfaces        = objForm.gbSearchKinds.cbInterfaces.Checked;

 bSearchEnumerations        = objForm.gbSearchKinds.cbEnumerations.Checked;

 bSearchPackages        = objForm.gbSearchKinds.cbPackages.Checked;

 bSearchProperties        = objForm.gbSearchKinds.cbProperties.Checked;

 bSearchOperations        = objForm.gbSearchKinds.cbOperations.Checked;

 bSearchEnumLiterals        = objForm.gbSearchKinds.cbEnumerationLiterals.Checked;

 bSearchOthers                = objForm.gbSearchKinds.cbOthers.Checked;

 

 var sFindText = objForm.tbFindText.Text;

 

 if ( !bMatchCase )

         sFindText = sFindText.toUpperCase();

         

 // mostrar el cursor de espera durante la búsqueda; cargar clase estática "Cursors":

 var objCursors = CLR.Static( "Cursors" );

 objForm.Cursor = objCursors.WaitCursor;

 // iniciar actualización de ListView:

 objForm.lvResults.BeginUpdate();

 // restaurar Items:

 objForm.lvResults.Items.Clear();

 // iniciar la búsqueda con el paquete raíz:

 Find( Application.ActiveDocument.RootPackage, sFindText );

 // ListView se actualizó:

 objForm.lvResults.EndUpdate();

 // restaurar el cursor predeterminado:

 objForm.Cursor = objCursors.Default;        

 

 // informar al usuario cuando no se encuentre nada:

 if ( objForm.lvResults.Items.Count == 0 )

         alert( "No se encontró nada." );

}

 

//Aparece cuando cambia la propiedad 'SelectedIndex' para esta ListView.

function FindKinds_lvResults_SelectedIndexChanged( objSender, e_EventArgs )

{

 // resaltar el elemento UML seleccionado en la Estructura del esquema:

 if ( objSender.SelectedItems.Count == 1 )

 {

         // obtener el nombre QName del elemento seleccionado:

         var selItem = objSender.SelectedItems.Item( 0 );

         var sQualifiedName = selItem.SubItems.Item( 2 ).Text;

 

         var objDocument = Application.ActiveDocument;

         // buscar el elemento UML con ayuda del nombre QName:

         var objUMLElement = objDocument.RootPackage.FindOwnedMemberWithQualifiedName( sQualifiedName );

         // resaltar el elemento UML en la Estructura del esquema:

         objDocument.FocusUMLDataInModelTree( objUMLElement, false, true );

 }

}

 

Macro Find Sample:

 

// ############################################

// Macro 'Find Sample'

// Buscar elementos del modelo UML por nombre y tipo

// ############################################

 

// variables globales de la macro

var bMatchCase                = false;

var bMatchWholeName = false;

 

var bSearchClasses                = true;

var bSearchInterfaces        = true;

var bSearchEnumerations        = true;

var bSearchPackages                  = true;

var bSearchProperties          = true;

var bSearchOperations          = true;

var bSearchEnumLiterals        = true;

var bSearchOthers                = false;

 

// comprobar si el tipo de elemento UML debe tenerse en cuenta

function MatchKind( objUMLElement )

{

 if ( objUMLElement.KindName == "Class"                         ) return bSearchClasses;

 if ( objUMLElement.KindName == "Interface"                 ) return bSearchInterfaces;

 if ( objUMLElement.KindName == "Enumeration"                ) return bSearchEnumerations;

 if ( objUMLElement.KindName == "Package"                         ) return bSearchPackages;

 if ( objUMLElement.KindName == "Property"                 ) return bSearchProperties;

 if ( objUMLElement.KindName == "Operation"                 ) return bSearchOperations;

 if ( objUMLElement.KindName == "EnumerationLiteral"        ) return bSearchEnumLiterals;

 return bSearchOthers;

}

 

// comprobar si el nombre del elemento UML coincide con las opciones de búsqueda

function MatchName( objUMLNamedElement, sFindText )

{

 var sName = objUMLNamedElement.Name;

 if ( !bMatchCase )

         sName = sName.toUpperCase();

 

 if ( bMatchWholeName )

         return ( sName == sFindText )

 else

         return ( sName.indexOf( sFindText ) != -1 )

}

 

// buscar recursivamente todos los elementos

function Find( objUMLElement, sFindText )

{

 // solo nos interesan los elementos que tengan nombre:

 if ( objUMLElement.IsKindOf( "NamedElement" ) )

 {

         var objUMLNamedElement = objUMLElement;

         

         // ver solamente los elementos cuyo nombre y tipo coincida:

         if ( MatchKind( objUMLNamedElement ) && 

              MatchName( objUMLNamedElement, sFindText ) )

         {

                 // crear una clase ListViewItem nueva

                 var newItem = CLR.Create( "ListViewItem", objUMLNamedElement.KindName );

                 // y agregarla a los elementos listview:

                 lastForm.lvResults.Items.Add( newItem );

                 // anexar el nombre y el QName en subelementos:

                 newItem.SubItems.Add( objUMLNamedElement.Name );

                 newItem.SubItems.Add( objUMLNamedElement.QualifiedName );

         }

 }

 

 // iterar en todos los secundarios (ownedElements):

 var ownedElements = objUMLElement.OwnedElements;

 var itr = new Enumerator( ownedElements );

 for ( ; !itr.atEnd(); itr.moveNext() )

         Find( itr.item(), sFindText );

}

 

// crear y ver el formulario:

ShowForm( "FindSample" );

 


© 2019 Altova GmbH