Buscar en este blog

miércoles, 29 de abril de 2015

Crear documentos asociados a un registro por código en Dynamics Ax 2012 R2 (DocuRef)


Es posible asociar documentos, notas o imágenes a un registro de ax en particular, ya sea una tabla de sistema de ax o una tabla personalizada. Para esto esto existe la tabla DocuRef que guarda lo que necesitemos y que el estándar de ax permite visualizar a través de los iconos de "Archivos adjuntos" desde la mayoría de formularios, incluso cuando creamos un formulario personalizado mediante una plantilla.

Image(88)

Ahora, el código es muy simple, solo debemos indicar el id de la tabla, el recid del registro al que esta asociado

static void insertNotaDocuRef(Common _common, Name _tituloNota, str _nota)
{
    DocuRef                 docuRef;

    docuRef.RefCompanyId = _common.dataAreaId;
    docuRef.RefTableId = _common.TableId;
    docuRef.RefRecId = _common.RecId;
    docuRef.TypeId = 'Note';
    docuRef.Name = _tituloNota;
    docuRef.Notes = _nota;
    docuRef.insert();

}

Y el resultado sería algo como esto:

Image(89)


Post relacionados:
Leer XML por código
Escribir XML por código
Leer excel por código


Y por cierto, acuérdate de darle click a algún anuncio si el post te sirvió de algo.


No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 





lunes, 27 de abril de 2015

Crear FileUpdate en Enterprise Portal de Dynamics Ax 2012


Para crear un control donde se puedan cargar archivos mediante el enterprise portal de dynamics ax 2012, lo primero es modificar el control de usuario en asp. Lo importante aquí es que nuestro control FileUpdate debe estar dentro de un UpdatePanel, si no se pone así, no podemos leer el nombre del archivo.
Image(86)

<asp: UpdatePanel ID ="DocuAddUpdatePanel" runat ="server">
   <ContentTemplate>
     <asp: Label runat ="server" id ="StatusLabel" text="Archivo UUID: " />
     <asp: FileUpload ID ="FileUploadControl" runat="server" />
     <asp: Button runat ="server" id="UploadButton" text="Carga" onclick="UploadButton_Click"/>
     </ContentTemplate>
   <Triggers>
     <asp: PostBackTrigger ControlID="UploadButton" />
   </Triggers>

</asp: UpdatePanel>


El código del control en C# para el método del click del botón, que para este caso se llama UploadButton_Click

protected void UploadButton_Click(object sender, EventArgs e)
    {
        if (FileUploadControl.HasFile)
        {
            //Leemos el nombre del archivo, por seguridad solo se puede leer el nombre, no la ruta del cliente
            string filename = Path .GetFileName(FileUploadControl.FileName);

            //Guardamos el archivo en la ruta C:\TEMP
            FileUploadControl.SaveAs( @"C:\TEMP\" + filename);
            string filenameCompleto = @"C:\TEMP\" + filename;

            //Llamamos el método en Ax dentro de nuestro dataset
            this.ds_EPVendInvoiceInfo.GetDataSet().DataSetRun.AxaptaObjectAdapter.Call("grwCargaFileNameUUID", filenameCompleto);
        }

    }

Finalmente, dentro de ax, el método creado para el tratamiento del archivo, solo guarda la ruta donde se cargo para usarlo posteriormente para otros procesos.

public void grwCargaFileNameUUID(Filename  _fileName = "")
{
    GRWTestUUIDFromEP   gRWTestUUIDFromEP;

    try
    {
        if (_fileName)
        {
            gRWTestUUIDFromEP.NombreArchivo = _fileName;
            gRWTestUUIDFromEP.insert();
        }
        else
        {
            gRWTestUUIDFromEP.NombreArchivo = "Se invoco pero no se recibio nombre" ;
            gRWTestUUIDFromEP.insert();
        }
    }
    catch
    {
      info( "error en metodo dataset");
    }

}

Y en la tabla se guardaría la ruta completa:

Image(87)

Con este código solo se selecciona un archivo, no múltiples archivos, además de que si en algún momento se selecciona dos veces el mismo archivo, en la ruta del servidor donde se carga, se sobreescribe sin previa confirmación del usuario.


<<<<<  Crear un campo edit en un control de usuario


Post relacionados:
Modificar un control de usuario en el Enterprise Portal
Crear control de usuario en Enterprise Portal
Crear DataSet
Crear ListPage con PartPreview Pane en EP   
Implementar List Page en EP 
Crear Cues en Enterprise Portal   



Y por cierto, acuérdate de darle click a algún anuncio si el post te sirvió de algo.


No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma.







miércoles, 22 de abril de 2015

Crear un campo edit en un control de usuario en Enterprise Portal de Dynamics Ax 2012 R2

 
Este post muestra cómo crear un campo edit en la tabla VendInvoiceInfoTable para que al momento de llenarlo en el enterprise portal se guarde este campo en la tabla heredada VendInvoiceInfoTable_W.

Lo primero que tengo que decir es que existe un Dataset llamado EPVendInvoiceInfo que alimenta el control de usuario EPVendInvoiceInfo. Este dataset no contiene la tabla (VendInvoiceInfoTable_W) donde necesito guardar el valor de mi campo, así que la forma más rápida de guardar este campo es mediante un campo edit en la tabla (VendInvoiceInfoTable). Cómo saber dónde esta el dataset que alimenta la pantalla que queramos modificar lo explico en el post anterior.

Lo primero es crear el método edit de siguiente forma:

edit EInvoiceCFDIUUID_MX grwEditUUID(boolean _set, EInvoiceCFDIUUID_MX _uuid)
{
    VendInvoiceInfoTable_W      vendInvoiceInfoTable_W;
    EInvoiceCFDIUUID_MX uuid = _uuid;

    if (_set)
    {
       if (uuid)
       {
            vendInvoiceInfoTable_W = VendInvoiceInfoTable_W::findByVendInvoiceInfoTable(this.RecId, true);
            if(vendInvoiceInfoTable_W.RecId != 0)
            {
                ttsBegin;
                vendInvoiceInfoTable_W.CFDIUUID_MX = uuid;
                vendInvoiceInfoTable_W.update();
                ttsCommit;
            }
        }
    }
    else
    {
        uuid = vendInvoiceInfoTable_W::findByVendInvoiceInfoTable(this.RecId).CFDIUUID_MX;
    }

    return uuid;

}

Con el método edit creado, guardamos la tabla y restauramos el dataset; esto se hace para que el dataset reconozca los cambios, en este caso, para que reconozca el nuevo método que acabamos de crear en la tabla.
Image(77)

Generamos un cil de incremento.
Y hacemos refresh al cache en Herramientas -> Cachés:
Actualizar diccionario
Actualizar datos
Actualizar elementos

Image(75)

Abrimos Visual Studio con permisos de administrador y dentro del AOT buscamos nuestro control de usuario, en este caso: EPVendInvoiceInfo y hacemos clic derecho, seleccionamos "Edit".
No, no es necesario abrir un proyecto de tipo EP ni nada. (seguro te lo preguntaste) Por qué? porque cuando le das "Edit" solito te crea el proyecto, al final, no es que no lo necesites, solo te ahorras tiempo.

Image(78)

Ubicas el grupo donde quieres meter el campo edit que se creo y lo agregas. Esto se hace dando click en la flecha derecha que sale junto al control y en "Edit fields" en el menú contextual.

Image(79)

En la ventana de campos, buscamos nuestro campo de tipo edit que para este caso práctico se llama grwEditUUID y damos click en el botón "Add Field".

Image(80)

Ya agregado el campo, como buena práctica, debemos ponerle la etiqueta, esto se hace en la propiedad "Header Text" como se muestra:

Image(81)

Le das click en salvar.
Falta implementar el control de usuario desde el aot y luego sincronizar el AOD dentro del Enterprise Portal.
Image(82)Image(83)

Con esto veremos nuestro campo ya en el enterprise portal. En caso de que se ponga caprichoso el enterprise y no te muestre el campo, te vas a tener que ir por el camino largo, esto es: sincronizar el AOT en Ax, generar cill full, sincronizar AOD en el enterprise y ahora si, listooo!

Image(84)

Y en Ax se ve de la siguiente manera:

Image(85)


<<<<<   Modificar un control de usuario                                         Crear FileUpdate >>>>>

Post relacionados:
Modificar un control de usuario en el Enterprise Portal
Crear control de usuario en Enterprise Portal
Crear DataSet
Crear ListPage con PartPreview Pane   
Implementar List Page   
Crear Cues en Enterprise Portal
Crear FileUpdate en Enterprise Portal


Y por cierto, acuérdate de darle click a algún anuncio si el post te sirvió de algo.


No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 






lunes, 20 de abril de 2015

Modificar un control de usuario en el Enterprise Portal de Dynamics Ax

Algunas veces es necesario modificar las páginas del enterprise portal y lo mas común es agregar campos a alguna pantalla. En este caso, vamos a ver cómo agregar un campo extra a la pantalla de "Editar Factura" dentro de Adquisiciones -> Factura -> Nueva factura proveedor.

El requerimiento es crear un campo en esta pantalla:

Image(64)

Para esto, necesitamos primero identificar cómo se llama esa pantalla para saber si se modifica en Ax o si por el contrario es un control de usuario y debe modificarse en visual studio por ser un control asp.

1. Identificar objeto. Vamos a la pestaña "Page" y el botón "Edit Page"

Image(65)

Nos vamos a la sección que necesitamos modificar y seleccionamos "Edit Web Part"

Image(66)

Esto nos mostrará del lado derecho la información del elemento, en este caso su nombre es: EPVendInvoiceInfo
Image(67)

Con este nombre, abrimos el AOT en Ax y lo buscamos en la ruta Web -> Web Files -> Web Controls
Image(68)

2. Modificar control de usuario. Ahora, para modificarlo necesitamos abrir Visual Studio en modo de administrador. Creamos un nuevo proyecto de tipo Microsoft Dynamics Ax -> EP Web Application

Importante: Se debe elegir .Net Framework 3.5 para que todo vaya bien.

Image(69)

Dentro del arbol de visual studio buscamos nuestro control llamado EPVendInvoiceInfo y lo agregamos a nuestro proyecto actual.

Image(70)

3. Identificar Dataset. Una vez que lo agregamos, vemos quién alimenta esta pantalla, esto lo vemos de dos formas, la primera es en el diseño, viendo cuál es el dataset, en este caso el Dataset se llama igual que el control de usuario EPVendInvoiceInfo

Image(71)

Y la otra forma de ver cuál es el dataset es en el código
Image(72)

También en esta vista del control de usuario identificamos dónde se va a visualizar nuestro campos, para mi requerimiento lo necesito dentro del grupo “Otros detalles de factura” que en visual studio se llama AxOtherInvoiceDetailsGroup.
Image(73)
Image(74)

4. Sincronizar cambios. Ya que buscamos nuestro dataset y buscamos el fieldgroup que alimenta esa sección del control de usuario, agregamos nuestro campo personalizado a la tabla, después ese mismo campo al fieldgroup. Con esto indicamos que los campos que existan en el fieldgroup se van a mostrar en nuestro control de usuario.

Sincronizamos la tabla, restauramos el dataset para que vea nuestro nuevo campo, generamos un cil de incremento.

Al final refrescamos el cache:
Image(75)

Dentro de Visual Studio, en el DataSet en vista diseño, hacemos click derecho y le damos en "Refresh Schema" con esto se va a actualizar el dataset internamente en el control de usuario.
Finalmente debemos actualizar el AOD dentro del EP
Image(76)

En caso de que no veamos nuestro campo adicional, abrimos el proyecto de Visual Studio, en el DataSet en vista diseño, hacemos click derecho y le damos en "Refresh Schema" con esto se va a actualizar el dataset internamente en el control de usuario.

Salvamos el control!
Vamos a ver nuestro formulario y listo!!!!!


Importante: No es necesario implementar el control de usuario desde visual, ni tampoco agregar el proyecto a Ax, solo con que salvemos el control de usuario en Visual Studio con esto se actualiza en el AOT en automático. Aunqueeee en algunas ocasiones el enterprise no es muy listo y se debe implementar el control desde ax, sincronizar el AOT en ax, compilar un cill full y sincronizar el AOD en el enterprise.



<<<    Crear control de usuario en Enterprise Portal                          Crear un campo edit en un control de usuario        >>>


Post relacionados:
Crear un campo edit en un control de usuario en el Enterprise Portal
Crear DataSet
Crear ListPage con PartPreview Pane en EP   
Implementar List Page en EP 
Crear Cues en Enterprise Portal   



Y por cierto, acuérdate de darle click a algún anuncio si el post te sirvió de algo.


No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma.