AX Dynamics - Job para crear clientes a través de un dialogo con campos dinámicos

martes, 19 de mayo de 2015

AX Dynamics - Job para crear clientes a través de un dialogo con campos dinámicos



Después de un tiempo ya incursionando en el mundo de axapta y su lenguaje X++, he pensado que puede venir bien escribir sobre ello, ya que hay pocos ejemplos en internet en español.

A continuación veremos un pequeño ejemplo de un job que crea clientes con dos diálogos creados dinámicamente. Para ello realizaremos los siguientes pasos

1) Ubicamos en el árbol (AOT) los jobs y presionamos botón derecho "Crear nuevo Job"


2) Especificamos el nombre del Job, lo llamaremos "InsertCustomersDinamics"


3) Introducimos el siguiente código:

static void ARInsertClients2(Args _args)
{
    //Tabla de clientes, donde insertaremos los nuevos clientes
    CustTable                    custTable;
    //Tabla de grupos de clientes
    CustGroup                   custGroup;
    //Se cuencial de clientes
    NumberSeq                  numberSeq;
    //Dialogo donde le solicitaremos al usuario, el núero de clientes a crear
    Dialog                          dialogNum;
    //Dialogo donde solicitaremos los datos de los clientes a crear
    Dialog                          dialogVals;
    DialogField                  fieldNumCus;
    DialogGroup                dialogGroupTmp;
    Array                            fieldNameCus;
    Array                            fieldCustGroup;
    boolean                        ret;
    boolean                        retAll;
    IntegerBLN                  numCustomerToCreate;
    IntegerBLN                  numCustomer;
    CustName                    custName;
    CustGroupId                custGroupId;

    //inicializamos los arrays
    fieldNameCus   = new Array(Types::Class);
    fieldCustGroup = new Array(Types::Class);

    //Solicitamos al usuario que indique el número de clientes a crear
    //textlabel @@QAP24: Carga Masiva de Clientes
    dialogNum = new Dialog("@QAP24");
    //textlabel @QAP16: Cantidad de clientes
    //textlbel @QAP23: Cantidad de clientes a crear de forma masiva
    fieldNumCus = dialogNum.addField(extendedTypeStr(IntegerBLN), "@QAP16", "@QAP23");
    fieldNumCus.mandatory_RU(true);

    dialogNum.run();
    if (dialogNum.closedOk())
    {
        numCustomerToCreate = fieldNumCus.value();

        //labeltext @QAP25: Datos de los Clientes a Crear
        dialogVals = new Dialog("@QAP25");

        for (numCustomer=1; numCustomer<=numCustomerToCreate; numCustomer+=1)
        {
            dialogGroupTmp = dialogVals.addGroup("Cliente " + int642str((numCustomer)));

            //textlabel @SYS27874: Nombre del Cliente
            fieldNameCus.value(numCustomer, dialogVals.addField(extendedTypeStr(CustName), "@SYS27874"));
            fieldNameCus.value(numCustomer).mandatory_RU(true);

            //textlabel @QAP19: Grupo de Cliente
            fieldCustGroup.value(numCustomer, dialogVals.addField(extendedTypeStr(CustGroupId), "@QAP19"));
            fieldNameCus.value(numCustomer).mandatory_RU(true);

        }

        dialogVals.run();
        if (dialogVals.closedOk())
        {
            ttsBegin;
            //inicializamos la variable rtAll a true para establecer que por defecto todo ira bien
            retAll = true;

            for (numCustomer=1; numCustomer<=numCustomerToCreate; numCustomer+=1)
            {
                custName            = fieldNameCus.value(numCustomer).value();
                custGroupId         = fieldCustGroup.value(numCustomer).value();

                //obtenemos el grupo de cliente que utilizaremos enlos clientes a crear
                custGroup = CustGroup::find(custGroupId);

                //si encontramos el grupo de clientes, continuamos
                if (custGroup)
                {
                    //Invocamos la inicialización del registro
                    custTable.initValue();

                    //obtenemos la secuencia del AccountNum de los párametros customers
                    numberSeq               = NumberSeq::newGetNum(CustParameters::numRefCustAccount());

                    //Asignamos el suguiente número
                    custTable.AccountNum    = numberSeq.num();

                    custTable.CustGroup     = custGroup.CustGroup;
                    custTable.initFromCustGroup(custGroup);

                    //ejecutamos las validaciones de la tabla
                    ret                     = custTable.validateWrite();

                    if (ret)
                    {
                        custTable.insert(DirPartyType::Organization, custName + " " + int2str(numCustomer));
                        //textlabel @QAP20: se creó satisfactoriamente el cliente cón el código {0}
                        info(strFmt("@QAP20", custTable.AccountNum));
                    }
                    else
                    {
                        //textlabel @QAP21: No se guardo el cliente
                        info("@QAP21");
                        retAll = false;
                    }
                }
                else
                {
                    //textlabel @QAP22: No se encontro el código: {0} en la tabla Grupos de Clientes
                    info(strFmt("@QAP22", custGroupId));
                    retAll = false;
                }
            }

            //si todos los registros se insertaron correctamente, hacemos el commit, sino abortamos todo.
            if (retAll)
            {
                ttsCommit;
            }
            else
            {
                ttsAbort;
            }
        }
    }

}


0 comentarios :

Publicar un comentario