Mostrando entradas con la etiqueta sdk. Mostrar todas las entradas
Mostrando entradas con la etiqueta sdk. Mostrar todas las entradas

martes, 4 de julio de 2017

Guia de Implementación de EXTENSIONES GENEXUS - PARTE 4

Programando Mi Extensión 




¿Cómo crear un menú?
Para la creación de un menú agregar las siguientes referencias al proyecto (Marcos Crispino, 2008).
 Artech.Architecture.UI.Framework
Artech.Common
Artech.Common.Framework
System.Drawing 
En el archivo Package.cs agregar las siguientes directivas:
 using Artech.Architecture.Common.Packages;
using Artech.Architecture.Common.Services;
using Artech.Architecture.UI.Framework.Packages;
using System.Runtime.InteropServices;
using System;
Asegurarse que la clase Package.cs herede de la clase AbstractPackageUI.
public class Package : AbstractPackageUI
Agregar en la clase Package.cs el siguiente atributo: 
public static Guid guid = typeof(Package).GUID;
Crear la clase CommandKeys.cs
Agregar la siguiente directiva:
  using Artech.Common.Framework.Commands;
Agregar el siguiente atributo:
  private static CommandKey cmdMiComando = 
  new CommandKey(Package.guid, “MiPrimerMenu”);
Agregar la siguiente propiedad:
  public static CommandKey MiPrimerMenu {
   get { return cmdMiComando; }
  }

Crear la clase CommandManager.cs
Agregar las siguientes directivas:
  using Artech.Architecture.UI.Framework.Helper;
 using Artech.Architecture.UI.Framework.Services;
 using Artech.Common.Framework.Commands;
 using System.Windows.Forms;
Asegurarse que la clase CommandManager.cs herede de la clase CommandDelegator:
  class CommandManager:CommandDelegator
Crear los métodos siguientes:
  public bool ExecMiComando(CommandData data){
   MessageBox.Show(“Mi primer Menú!”); return true;
  }
  private bool QueryMiComando(CommandData data, 
  ref CommandStatus status) {
   status.State = CommandState.Disabled;
   if(UIServices.KB != null && UIServices.KB.CurrentKB != null){
    status.State = CommandState.Enabled;
   }
  return true;
  }
Crear el constructor y agregar el método AddCommand().
  public CommandManager() {
   AddCommand(CommandKeys.MiPrimerMenu, 
   new ExecHandler(ExecMiComando), 
   new QueryHandler(QueryMiComando));
  }

En el archivo Package.cs agregar la siguiente línea:
 public override void Initialize(IGxServiceProvider services){
  base.Initialize(services);
  AddCommandTarget(new CommandManager());
 }
Por último en el archivo GeneXusPackage.package agregar:
<Commands>
 <CommandDefinition id=’MiPrimerMenu’></CommandDefinition>
</Commands>
<Menus>
 <Menu type=’menubar’>
  <Popup id=’MiPrimerMenu’ name=’MiPrimerMenu’ insertBefore=’Help’>
   <Command refid=’MiPrimerMenu’/>
  </Popup>
 </Menu>
 </Menus>

  Para ver el resultado (ver figura 5) generar la solución del proyecto y abrir directamente el GeneXus Ev2 o presionar F5 (Modo depuración) desde la IDE de Microsoft Visual C# 2005 Express Edition.







Figura 5. Mi primer menú integrado a la IDE GeneXus Ev2. Fuente: Elaboración propia.







¿Cómo llamar una ventana desde el menú contextual?
  Para el desarrollo de la extensión es necesario invocarlo desde la IDE de GeneXus Ev2. En éste caso se invocará a la ventana principal de la extensión desde el menú contextual de Other Tool Windows, para ello ir al menú View y la opción Other Tool Windows del menú contextual.

Agregar las siguientes referencias al proyecto:
 Artech.Architecture.Common
Artech.Architecture.UI.Framework
Artech.Common
Artech.Common.Framework
Artech.Common.Properties
Artech.FrameworkDE
Artech.Udm.Framework
System
System.Drawing
System.Windows.Forms
Crear la clase MiPrimeraVentana.cs
Agregar las siguientes directivas:
  using System;
 using System.Windows.Forms;
 using System.Drawing;
 using Artech.FrameworkDE;
 using Artech.Architecture.UI.Framework.Packages;
 using Artech.Architecture.UI.Framework.Services;
 using Artech.Common.Framework.Commands;
 using Artech.Common.Framework.Selection;
 using System.Runtime.InteropServices;

Conseguir el identificador único global. 
Agregar el identificador único global:
  namespace Identificador.Packages.MiPrimeraExtension
  {
  [Guid(“64984d1c-72f2-4e69-9440-654c9a08eee9”)]
  public class MiPrimeraVentana{}
  }
Asegurarse que la clase herede de las siguientes clases:
AbstractToolWindow, ISelectionListener.
public class MiPrimeraVentana : AbstractToolWindow,ISelectionListener{}

Agregar los siguientes atributos:
private Label mensaje;
public static Guid guid;

En el constructor de la clase agregar la siguiente línea:
public MiPrimeraVentana(){
 this.InitializeComponent();
 UIServices.TrackSelection.Subscribe(Guid.NewGuid(), this);
}

Agregar el siguiente constructor statico:
static MiPrimeraVentana(){
MiPrimeraVentana.guid = typeof(MiPrimeraVentana).GUID;
}

Agregar el método InitializeComponent:

public void InitializeComponent(){
this.mensaje = new Label();
this.mensaje.Name = “lblMensaje”;
this.mensaje.Text = “Mi primera ventana!”;
this.mensaje.Location = new Point(5, 20);
this.mensaje.Font = new Font(“Verdana”, 16F,  System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point,  ((byte)(0)));
this.mensaje.Size = new Size(100, 30);
this.Controls.Add(this.mensaje);
this.SuspendLayout();
this.ResumeLayout(false);
this.PerformLayout();
}

Por último agregar el siguiente método:
public bool OnSelectChange(ISelectionContainer sc){return true;}

Crear la clase CommandKeys.cs
Agregar la siguiente directiva:
  using Artech.Common.Framework.
Commands;

Agregar el siguiente atributo:
  private static CommandKey cmdMiComando = 
  new CommandKey(MiPrimeraVentana.guid, “MiPrimeraVentana”);

Agregar la siguiente propiedad:
  public static CommandKey PrimeraVentana {
   get { return cmdMiComando; }
  }

Crear la clase CommandManager.cs
Agregar las siguientes directivas:
  using Artech.Architecture.UI.Framework.Helper;
 using Artech.Architecture.UI.Framework.Services;
 using Artech.Common.Framework.Commands;
Asegurarse que herede de la clase: CommandDelegator
  class CommandManager:CommandDelegator{}
Agregar los siguientes métodos:

public bool ExecMiComando(CommandData data){
UIServices.ToolWindows.SelectToolWindow(MiPrimeraVentana.guid);
return true;
}
  private bool QueryMiComando(CommandData data, ref CommandStatus  status){
  status.State = CommandState.Disabled;
  if (UIServices.KB != null && UIServices.KB.CurrentKB != null){
   status.State = CommandState.Enabled;
  }
  return true;
 }
Agregar el constructor:
  public CommandManager(){
   AddCommand(CommandKeys.PrimeraVentana, 
   new ExecHandler(ExecMiComando), 
   new QueryHandler(QueryMiComando));
  }
Editar la clase Package.cs
Agregar las siguientes directivas:
  using Artech.Architecture.Common.Packages;
 using Artech.Architecture.Common.Services;
 using Artech.Architecture.UI.Framework.Packages;
 using Artech.Architecture.UI.Framework.Services;
 using Artech.Common.Framework.Selection;
 using System.Runtime.InteropServices;
 using Artech.Architecture.UI.Framework.Controls;
 using System;
Asegurarse que la clase herede de: AbstractPackageUI
public class Package : AbstractPackageUI{}

Agregar el siguiente atributo:
private MiPrimeraVentana ventana;

Agregar la propiedad sobrecargado Name:
  public override string Name{
  get { return “MiPrimeraExtension”; }
 }

Agregar el método sobrecargado CreateToolWindow:
  public override IToolWindow CreateToolWindow(Guid toolWindowId){
   if (toolWindowId.Equals(MiPrimeraVentana.guid)){
    if (ventana == null){
     ventana = new MiPrimeraVentana();
    }
   return ventana;
   }
  return base.CreateToolWindow(toolWindowId);
  }
Editar el archivo GeneXusPackage.package
Agregar la siguientes líneas:
  <ToolWindows>
   <ToolWindow id =’64984d1c-72f2-4e69-9440-  654c9a08eee9’ title=’MiPrimeraVentana’ mdi=’true’/>
 </ToolWindows>


  NOTA: El identificador único global que aparece en la clase MiPrimeraVentana.cs debe coincidir con el identificador único global del id del ToolWindow en el archivo GeneXusPackage.package.
  Para ver el resultado en la IDE de GeneXus Ev2 (ver figura 6), vamos al menú View,  Other Tool Windows, opción MiPrimeraVentana.




Figura 6. MiPrimeraVentana. Fuente: Elaboración propia.


martes, 22 de noviembre de 2016

Guia de Implementación de EXTENSIONES GENEXUS - PARTE 3

  1. Crear Un Proyecto De Extensiones


Iniciar el Microsoft Visual C# 2005 Express Edition. Hacer click en el menú File, en el menú contextual click en Nuevo proyecto, aparecerá el siguiente cuadro de diálogo como se muestra en la figura 3:
D:\Tesis\Imágenes\NP.jpgFigura 3. Crear proyecto extensión paso 1. Fuente: Elaboración propia.
Elegir la plantilla GeneXus Package, colocar nombre al proyecto de extensión y Aceptar, la siguiente figura 4 muestra el siguiente paso.
D:\Tesis\Imágenes\NP2.jpg
Figura 4.  Crear proyecto extensión paso 2. Fuente: Elaboración propia.

Colocar algún identificador, éste aparecerá como el fabricante de la extensión, presionar finalizar.


martes, 15 de noviembre de 2016

Guia de Implementación de EXTENSIONES GENEXUS - PARTE 2

  1. Instalación Genexus X Platform Sdk.

Para descargar el instalador visite el download center de GeneXus (GXtechnical, 2012).
Aquí el enlace para la descarga:
Al instalar se crearán las siguientes carpetas en el directorio de instalación (CommunityWiki, 2006):
  • Bin: Contiene las librerías que pueden ser referenciadas por las extensiones.
  • PackageBuilder: Asistente integrado a Visual Studio 2005 o Visual C# 2005 Express Edition para crear proyectos para el desarrollo de extensiones.
  • PatternBuilder: Asistente integrado a Visual Studio 2005 o Visual C# 2005 Express Edition para crear proyectos para el desarrollo de patterns.
  • Patterns: Contiene las librerías que pueden ser referenciadas en proyectos de desarrollo de patterns.
  • Samples: Conjunto de proyectos que muestran diferentes posibilidades de extensiones.
  • Schemas: Contiene el archivo en formato de lenguaje de marcas extensible (XML por sus siglas en inglés eXtensible Markup Language)  que posee las diferentes configuraciones que la extensión puede tomar al acoplarse al Entorno de Desarrollo Integrado (IDE) de GeneXus Ev2.

        Resultado de imagen para genexus extensions