jueves, 10 de enero de 2013

Utilizar SysTableBrowser para tablas temporales


Class SysTableBrowser
 
public void run(tableId tableId,common tmpBuffer = null)
public void run(tableId tableId)
{
    Form                            tableBrowser;
    Object                          formRun;
    formRun fr;
    FormBuildDesign                 formBuildDesign;
    FormDataSource            fds;
    FormBuildDataSource             formBuildDataSource;
    FormBuildGridControl            formBuildGridControl1;
    FormBuildGridControl            formBuildGridControl2;
    FormGridControl                 formGridControl;
    FormRadioControl                formRadioControl;
    DictTable                       dictTable;
    Args                            args;
    Args                            browserArgs;
    int                             idx;
    boolean                         hasAutoReportGroup;
    ;

    dictTable   = new DictTable(tableId);

    //If the table is abstract, don't allow creates in SysTableBrowser.
    if(dictTable.isAbstract())
    {
        allowCreate = false;
    }

    browserArgs     = new Args();
    browserArgs.name(formstr(SysTableBrowser));
    formRun         = classfactory.formRunClass(browserArgs);

    tableBrowser    = formRun.form();


    formBuildDataSource = tableBrowser.dataSource(1);
    formBuildDataSource.name(dictTable.name());
    formBuildDataSource.table(tableId);
    formBuildDataSource.autoQuery(true);
    formBuildDataSource.linkType(0);
    formBuildDataSource.allowCreate(allowCreate);
    formBuildDataSource.allowDelete(allowDelete);
    formBuildDataSource.allowEdit(allowEdit);
    formBuildDataSource.validTimeStateAutoQuery(ValidTimeStateAutoQuery::DateRange);
    formBuildDataSource.validTimeStateUpdate(ValidTimeStateUpdate::Correction);

    if (defaultIndexId)
    {
        formBuildDataSource.index(defaultIndexId);
    }

    formBuildDesign = tableBrowser.design();
    formBuildDesign.caption("@SYS54191" + ': ' + dictTable.name());
    formBuildDesign.widthMode(-1);
    formBuildDesign.widthValue(#FormWidth);
    formBuildDesign.heightMode(-1);
    formBuildDesign.heightValue(#FormHeight);

    formBuildGridControl1 = formBuildDesign.control('allFieldsGrid');
    formBuildGridControl1.dataSource(dictTable.name());
    formBuildGridControl1.allowEdit(allowEdit);
    idx = formBuildGridControl1.id();

    this.showAllFields(tableId, formBuildGridControl1, formBuildDataSource);

    formBuildGridControl2 = formBuildDesign.control('autoReportGrid');
    formBuildGridControl2.dataSource(dictTable.name());
    formBuildGridControl2.allowEdit(allowEdit);
    formBuildGridControl2.visible(false);

    hasAutoReportGroup = this.showAutoFields(tableId, formBuildGridControl2, formBuildDataSource);

    args = new Args();
    args.object(tableBrowser);
    formRun = classfactory.formRunClass(args);


    formRun.enableCountryRegion(false);
    if (tmpBuffer)
    {
        formRun.parmTmpData(tmpBuffer);
    }
    formRun.init();
    formRun.parmTableId(tableId);

    formRun.run();
    fr=formRun;
    fds=fr.dataSource(dictTable.name());
    fds.executeQuery();

    formRadioControl = formRun.getRadioControl();
    formRadioControl.visible(hasAutoReportGroup);

    formGridControl = formRun.control(idx);
    formGridControl.setFocus();

    // This call is here as a hack fix (AXSE:4564 or AX6:18807) for performance issue around Table Browser
    // loading time, and should be removed once a proper fix is in place.
    formGridControl.autoSizeColumns(false);

    formRun.detach();


}

form SysTableBrowser


class FormRun extends ObjectRun
{
    tableId tableId;
    Source sqlcmd;
    DictTable dictTable;
    Common _tmpBuffer;


}

 //agregar
private void parmTmpData(common tmpBuffer)
{

    ;
    _tmpBuffer=tmpBuffer;

}

 //modificar

void run()
{
     FormDataSource            fds;    
     Common Common;   ;
    super();
    dictTable = new DictTable(tableId);
    this.parmSQLStmt('SELECT * FROM '+tableid2name(tableId));
    fds=element.dataSource(1);   
    Common=fds.cursor();                
    Common.setTmp();
    Common.setTmpData(_tmpBuffer);
}
///ejecutar
new SysTableBrowser().run(CommonBuffer.TableId, CommonBuffer);

jueves, 8 de noviembre de 2012

Crear referencias de secuencias numericas

/////////////////////////////////////////////////////7calse  NumberSeqModuleEscenarios
public class NumberSeqModuleEscenarios extends NumberSeqApplicationModule
{

}


protected void loadModule() //sobreescribir
{
    NumberSeqDatatype datatype = NumberSeqDatatype::construct();
    ;

    /* Setup application numbers */

    datatype.parmDatatypeId(extendedtypenum(ProdOptEscenario));//crear previamente el extend
    datatype.parmReferenceHelp(literalstr("Sequencia para los escenarios"));
    datatype.parmWizardIsContinuous(true);
    datatype.parmWizardIsManual(NoYes::No);
    datatype.parmWizardIsChangeDownAllowed(NoYes::No);
    datatype.parmWizardIsChangeUpAllowed(NoYes::No);
    datatype.parmWizardHighest(999999);
    datatype.parmSortField(1);

    datatype.addParameterType(NumberSeqParameterType::DataArea, true, false);
    this.create(datatype);


}


public NumberSeqModule numberSeqModule() //sobreescribir
{
    return NumberSeqModule::Prod;
}
//////////////////////////////////////////////////////////////////////7termina clase NumberSeqModuleEscenarios
///////////////////agregar la referencia
static void CrearSequencia(Args _args)///job

{

GsNumberSeqModuleEscenarios obj = new GsNumberSeqModuleEscenarios();

obj.createReferencesForScope();

obj.load();

}



///////////////////////////////////////////////////
static void GsTestSequencia(Args _args)
{
    ;       NumberSeq::newGetNum(NumberSeqReference::findReference(extendedTypeNum(ProdOptEscenario)),true).num();
}
////////////////////////////


martes, 9 de octubre de 2012

FASTFIRSTROW" is not a recognized table hints option

para arreglar este error utilice
en el Microsoft Dynamics AX 2012 Management Shell
poner axutil.exe schema /config:standard


martes, 17 de julio de 2012

Leer un CSV Dynamics AX 2012 Con ADO


static void Job57(Args _args)
{
 
    System.Data.Common.DbConnection connection;
    System.Data.Common.DbCommand command;
    System.Data.SqlClient.SqlDataReader dataReader;
    System.Data.Common.DbProviderFactory factory=System.Data.Common.DbProviderFactories::GetFactory("System.Data.OleDb");
    int contar;
    ;
    new InteropPermission( InteropKind::ClrInterop ).assert();


    connection=factory.CreateConnection();
    connection.set_ConnectionString("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\AbinsaCobranza\\;Extended Properties=\"text;HDR=Yes;FMT=Delimited\"");

    command=factory.CreateCommand();
    command.set_CommandText("select * from BANREGIO.csv");
    command.set_Connection(connection);

    //executing SQL-query
    try
    {
        //open within catch, so that the object can correcly be disposed
        //all these try-catch are quite ennoying in X++, but this because
        //X++ does not know finally...
        connection.Open();
        try
        {
            //All code after the open must be in a seperate catch, so that the
            //open connection-object can correcly be disposed.
            dataReader = command.ExecuteReader();

            while(dataReader.Read())
            {
                if(contar>=10)
                {
                   // contar=dataReader.get_FieldCount();
                    //use the named columns instead of index.
                   info(int2str(contar));
                   print dataReader.get_Item(6);
                    pause;
                }
               
               
                contar++;

            }
            //Dispose ADO.Net objects ASAP
            dataReader.Dispose();
        }
        catch //should be more precise in a real-world application
        {
            //if exception occures while reading, DataReader need to be
            info(CLRInterop::getLastException().ToString());
            dataReader.Dispose();
        }
        catch(Exception::CLRError) //CLR exception need to be handled explicitely
        //otherwise they might be 'lost'. Happy copy&pasteing
        {
            //if exception occures while reading, DataReader need to be
            info(CLRInterop::getLastException().ToString());
            dataReader.Dispose();
        }
        connection.Dispose();
    }
    catch //should be more precise in a real-world application
    {
        info(CLRInterop::getLastException().ToString());
        connection.Dispose(); //disposing connection if it fails before opening it
    }
    catch(Exception::CLRError)
    {
        info(CLRInterop::getLastException().ToString());
        connection.Dispose();
    }
    command.Dispose();
    CodeAccessPermission::revertAssert();


}

lunes, 9 de julio de 2012

Crear Cliente AX 2012


CustCustomerService CustCustomerService;

    CustCustomer CustCustomer;
    //CustCustomer_DirParty CustCustomer_DirParty;
    CustCustomer_DirParty_DirOrganization dirOrg;
    CustCustomer_DirPartyPostalAddressView CustCustomer_DirPartyPostalAddressView;
    CustCustomer_DirPartyContactInfoView CustCustomer_DirPartyContactInfoView;


    CustCustomer_CustTable CustCustomer_CustTable;
;
    ////////////////////////////////////////////////////////////////7
    CustCustomerService= CustCustomerService::construct();
    CustCustomer=new CustCustomer();

    CustCustomer_CustTable=new CustCustomer_CustTable();
    dirOrg = new CustCustomer_DirParty_DirOrganization();
    ////////////////////////////////////////////////////////////////////////7
    CustCustomer_CustTable.parmAccountNum("0027");
    CustCustomer_CustTable.parmCustGroup("Empleados");
    CustCustomer_CustTable.parmGsCueCobClaveReferenciada("1234512333");
    CustCustomer_CustTable.parmTaxGroup("IVA 16");
    //CustCustomer_DirParty=new CustCustomer_DirParty();

   // CustCustomer_CustTable.parmAccountNum("prue1");


    dirOrg.parmName("MyCustomerName_OrgName");
    dirOrg.parmLanguageId("es-mx");
    CustCustomer_CustTable.createDirParty().add(dirOrg);
 
    CustCustomer_DirPartyPostalAddressView=dirOrg.createDirPartyPostalAddressView().addNew();
    CustCustomer_DirPartyPostalAddressView.parmStreet("De la villa");
    CustCustomer_DirPartyPostalAddressView.parmCountryRegionId("Mex");
    CustCustomer_DirPartyPostalAddressView.parmRoles("Business");
   
    CustCustomer_DirPartyContactInfoView=dirOrg.createDirPartyContactInfoView().addNew();
    CustCustomer_DirPartyContactInfoView.parmLocationName("Telefono");
    CustCustomer_DirPartyContactInfoView.parmLocator("000000000");
 
    CustCustomer_DirPartyContactInfoView.parmType(LogisticsElectronicAddressMethodType::Phone);
    CustCustomer_DirPartyContactInfoView.parmRoles("Business");
   
 
    CustCustomer.createCustTable().add(CustCustomer_CustTable);

    CustCustomerService.create(CustCustomer);






}