Mi Primer Pattern

Unofficial Content

My First Pattern, english version

Mi Primer Pattern, versão em Português - BR 


El pattern que crearemos nos permitirá a partir de una transaction generar un SDT que represente la estructura de la transaction.

Por ejemplo, dada la transaction Country:

MyFirstPattern_img1

nos generará el siguiente SDT:

MyFirstPattern_img2

 

Los pasos a seguir son:

1. Leer Creating a New Pattern, para tener claros todos los conceptos relacionados con GeneXus Patterns y los requerimientos para implementar uno.

Nota: De seguir el documento sin leer el punto 1 tener en cuenta que se debe tener instalado: GeneXus X, GeneXus X/GeneXusPlatform SDK y Visual Studio 2005 o superior.

2. Crear un nuevo proyecto en Visual Studio: File->New->Project

3. Seleccionar el Template: GeneXus Pattern

MyFirstPattern_img3

4. Ingresar los datos de acuerdo a sus preferencias, dar Next

MyFirstPattern_img4

5. Seleccionar Transaction como objeto sobre el cual aplicaremos el pattern:

MyFirstPattern_img5

6. Indicar el tipo y nombre del objeto a crear, dar Finish

MyFirstPattern_img6

7. Indicar que se levantará GX luego de hacer Start del proyecto, para esto ir a: Project->MyFirstPattern Properties->Debug e indicar en Start external program la ruta a GeneXus.exe

MyFirstPattern_img7

8. Copiar el siguiente código en el template correspondiente a la creación de la estructura del SDT (SDTSDTStructure.dkt) debajo de <Part type="<%= PartType.SDTStructure %>">

<%--
    Sample SDT Structure definition
--%>

<%-- Aqui lo que hacemos es indicar que él SDT a crear será Collection, esto lo hacemos con una property cuyo Name es AttCollection y su Value es True --%>

   <Level Name="<%= Object.Name %>">
      <LevelInfo guid="<%= Guid.NewGuid() %>">
        <Properties>
            <Property>
                <Name>AttCollection</Name>
                <Value>True</Value>
            </Property>
        </Properties>
      </LevelInfo>

<%-- Recorremos la lista de atributos e la transcation sobre la que estamos aplicando el pattern   --%>
<% foreach (TransactionAttribute trnAtt in myInstance.ParentObject.Structure.Root.Attributes)
   {
%>

<%-- Creamos un item dentro del SDT con el mismo nombre y description que el att trnAtt  --%>
<%-- Indicamos mediante una property que el tipo del item estará basado en el tipo del att  --%>
      <Item guid="<%= Guid.NewGuid() %>" name="<%=trnAtt.Name%>" description="<%=trnAtt.Attribute.Description%>">
        <Properties>
            <Property>
                <Name>idBasedOn</Name>
                <Value>Attribute:<%=trnAtt.Name %></Value>
            </Property>
        </Properties>
      </Item>         

<%-- Recorremos los niveles de la transaction   --%>   
<%
    }
    foreach (TransactionLevel level in myInstance.ParentObject.Structure.Root.Levels)
    {
%>

<%-- Por cada level de la trn creamos un level en el SDT y le asignamos el mismo nombre y description, además indicamos que es Collection   --%>
        <Level Name="<%=level.Name%>">
        <LevelInfo guid="<%= Guid.NewGuid() %>">
        <Properties>
            <Property>
                <Name>Name</Name>
                <Value><%=level.Name%></Value>
            </Property>
            <Property>
                <Name>AttCollection</Name>
                <Value>True</Value>
            </Property>
        </Properties>
        </LevelInfo>    

<%-- Recorremos la lista de atributos de cada level y creamos un campo cuyo tipo esta basado en el tipo del atributo del level   --%>
<%
        foreach (TransactionAttribute trnAtt in level.Attributes)
        {
%>

        <Item guid="<%= Guid.NewGuid() %>" name="<%=trnAtt.Name%>" description="<%=trnAtt.Attribute.Description%>">
        <Properties>
            <Property>
                <Name>idBasedOn</Name>
                <Value>Attribute:<%=trnAtt.Name %></Value>
            </Property>
        </Properties>
      </Item>              

<%
        }    %>     
    </Level>
<%
    }    %>
    </Level>
</Part>

9. Hacer Rebuild All
10. Dar F5
11. Aplicar el pattern!!

MyFirstPattern_img8