Algoritmia - We are geeks, after all ;)
  Crear una cuenta
Inicio Buscar Foros Chat Downloads Login
 [Login]
Foros
Ir a los foros 

Menú Trucos Ax
 Inicio(Noticias) :
 Inicio
 Enviar Noticias
 Archivo de noticias
 Buscar
 Temas

 Miembros :
 Lista de miembros
 Tu Cuenta(Regístrate)

 Comunidad :
 Chat

 Foros

 Links

 Downloads

 Estadísticas :
 Estadísticas
 Top 10
 Encuestas

 Otros Servicios :
 Publicidad


 Miscelanea :
Añadir a favoritos
Contactar


Hemos recibido

impresiones desde Diciembre 2005


 Enlázanos :
Copia el código siguiente en tu web para enlazarnos :


Trucos Ax


Mensajes rápidos

Sólo los usuarios registrados pueden escribir login o crear una cuenta.

Trucos
Ir a trucos programación
Ir a trucos consultoría

AxSearch

AxSearch
Es un motor de búsqueda
específico sobre temas
de Axapta (Dynamics Ax)

Anuncios



Mapa

¿De donde venimos?
Ubicación de visitantes de esta página

Webs Amigas
[axapta-links.com] - The startpage for Axapta
DaxGuy


Fred Shen

Comunidad Ax
Conunidad AX

Anuncios



Trucos Ax: Foros

Trucos Ax :: View topic - Marcadores de código fuente
 Forum FAQForum FAQ   SearchSearch   UsergroupsUsergroups   ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Marcadores de código fuente

 
Post new topic   Reply to topic    Trucos Ax Forum Index -> Trucos desarrollo
View previous topic :: View next topic  
Author Message
Manekaze
Site Admin
Site Admin


Joined: Dec 02, 2005
Posts: 384

PostPosted: Tue May 10, 2011 12:04 am    Post subject: Marcadores de código fuente Reply with quote

/**********************************************************
// Tipo : Desarrollo
// Titulo : Marcadores de código fuente AX2009
// Codigo : TD0019
// Keywords : Programacion, AX2009
// Sub-keywords : Utilidades, Marcadores, Código fuente, Editor, Scripts
// ENLACE A LA DESCARGA DEL EJEMPLO : DOWNLOAD

/**********************************************************

Son muchas las veces que me encuentro siguiendo un fragmento de código, revisando un proceso, siguiendo una estructura de llamadas entre múltiples clases para saber donde debo añadir una pequeña linea de código, etc.

Durante estas sesiones, lo que suele pasar es que voy abriendo pantallas y pantallas del editor de código, saltando de función en función y anotando en papel (o en el software de notas de moda) los puntos de código por los que navego e intento indicar una pequeña descripción para no perderme.

La verdad es que depende del módulo o proceso que revisas ... esto se convierte en un auténtico infierno Twisted Evil.

El otro día, mientras realizabamos una de estas exploraciones aventureras junto con un compañero, me vino a la cabeza Idea una utilidad que, bajo mi opinión, puede resultar de mucha ayuda para estos menesteres.

No he inventado nada, ya que se trata de una utilidad que hace ya años venía "de serie" en la mayoría de los entornos de programación.

El objetivo

Nuestro objetivo consiste en crear una lista de marcadores de código a los que podamos añadir una descripción y nos permita acceder al fragmento de código sencillamente con un doble-clic sobre el marcador.

Dicha lista debe poder alimentarse desde el mismo editor de código y de una forma relativamente sencilla.


Manos a la obra

Lo primero que vamos a hacer es crear una tabla que nos permita almacenar los marcadores de código para el usuario actual.

Los campos que necesitamos son los que se ven en la imagen :


- BookmarkNum : Un simple identificador numérico
- NodePath : La ruta al nodo del AOT al que apunta el marcador
- Line : Linea de código a la que apunta el marcador
- Column : Columna de código a la que apunta el marcador
- Description : Descripción que le da el usuario al marcador
- UserId : Usuario que ha creado el marcador


A su vez, sobreescribimos el método .InitValue() para que autonumere los marcadores de forma automática (como es un proyecto simple no voy a usar secuencias numéricas) :

x++:

public void initValue()
{
    super();

    this.UserId = curUserId();
    this.BookmarkNum = (Select maxOf(BookMarkNum) from tax_CodeBookMarkTable where tax_CodeBookMarkTable.UserId == curUserId()).BookMarkNum + 1;

}


Y creamos un método estático para añadir marcadores con una simple llamada :

x++:

static void AddBookmark( TreeNodePath NodePath, int line, int col, description description )
{
    tax_CodeBookmarkTable BMTable;
    ;
    ttsbegin;

    BMTable.clear();
    BMTable.initValue();
    BMTable.NodePath = NodePath;
    BMTable.Column = col;
    BMTable.Line = line;
    BMTable.Description = Description;
    BMTable.insert();

    ttscommit;
}



Ahora creamos el form y el menuItem asociado al form :
Al form le añadimos el datasource vinculado a nuestra nueva tabla, un grid, un grupo de botones ... lo típico Wink



Es muy importante modificar ciertas propiedades del diseño del formulario :



- Frame : Dialog
- WindowType : Workspace
- AllowDocking : Yes

Esto nos permitirá que nuestro formulario se comporte como uno de los formularios del entorno de desarrollo, podrá acoplarse a un lateral, etc ...


Ha llegado la hora de modificar los scripts del editor para añadir un par de métodos :

- Un método que nos permita añadir un marcador
- Un método que nos muestre la lista de marcadores
(NOTA: Ya vimos hace tiempo como modificar los scripts del editor de Dynamics AX. Solo es necesario añadir métodos a la clase EditorScripts)


Primero : Método que nos permite añadir marcadores de código
x++:

void TrucosAX_BookmarkPosition(Editor e)
{

  Dialog dlg;
  dialogfield EdDescription;
 ;

 dlg = new Dialog("Add code-bookmark");
 EdDescription = dlg.addField(typeid(Description));

 if (dlg.run())
 {
    tax_CodeBookmarkTable::AddBookmark(e.path(), e.currentLineNo()+1, e.columnNo(), EdDescription.value());
 }
}



Segundo : Método que nos muestra la lista de marcadores
x++:

void TrucosAX_ShowBookmarks(Editor e)
{
   args _args = new args();
   MenuFunction MFunc = new MenuFunction(MenuItemDisplayStr(tax_CodeBookmarkTable), MenuItemType::Display);
  ;

  MFunc.run(_args);

}



Primera prueba

Vamos a añadir nuestro primer marcador :

Editamos la clase Activities y una vez dentro del editor, pulsamos el botón de la derecha del ratón, opción Scripts / TrucosAX / BookmarkPosition.


El sistema nos solicita una descripción y procede a añadir el marcador en nuestra lista.
(si abrimos nuestro formulario veremos que se ha creado el marcador en nuestra lista)

Bien, ahora ... nos falta una cosa importante : cuando hagamos doble-clic en el marcador de nuestro formulario ... el sistema debería llevarnos al código.

Para ello, creamos un método en nuestro form (yo lo he llamado GotoEditor) :

x++:

void GotoEditor()
{
 TreeNode TreeNode;
;
    if (tax_CodeBookmarkTable.NodePath)
    {
        treeNode = TreeNode::findNode(tax_CodeBookmarkTable.NodePath);
        if (treeNode)
        {
            treeNode.AOTedit(tax_CodeBookmarkTable.Line, tax_codeBookmarkTable.Column);
        }
    }
}


Ahora en el evento DobleClick del grid e incluso en el clicked de uno de los botones de nuestro formulario llamamos a nuestro nuevo método :

x++:

public int mouseDblClick(int _x, int _y, int _button, boolean _Ctrl, boolean _Shift)
{
    int ret;

    ret = super(_x, _y, _button, _Ctrl, _Shift);

    element.GotoEditor(); // AQUI LLAMAMOS A NUESTRO METODO

    return ret;
}



Prueba final

Ahora abrimos nuestro formulario :


Y realizamos un doble-clic sobre nuestro marcador en la lista ...




ENLACE A LA DESCARGA DEL EJEMPLO : DOWNLOAD

Saludos,

Mkz.
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    Trucos Ax Forum Index -> Trucos desarrollo All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©

 
Trucos Axapta 
Comunidad aprobada por :
Microsoft corp. MVP LogoVisit community


Axapta y Dynamics Ax son marcas registradas de Microsoft corporation.
Todos los logos y marcas son propiedad de sus respectivos propietarios.
Excepto trucosAx.com que este si que es mio :-). (c) 2005 by Manel Querol (Mkz)
TrucosAx.com no pertenece ni está asociada a Microsoft corporation.
Los fragmentos de código y proyectos importables que aquí se muestren están realizados sobre bancos de pruebas. No nos hacemos responsables de cualquier daño o pérdida de datos que se pudiera originar del hecho de instalar alguno de estos ejemplos en un sistema productivo. Es responsabilidad del usuario ser consciente del impacto que puede ocasionar en sus aplicaciones el uso del código que de aquí extraiga.