2013年2月10日星期日

How to using code auto changed toolTipfield infomation in AX

其实在InventSize上定义titlefield1和tilefield2是没有问题的,关键是InventDim上的方法tooltipfield改变了显示的内容而已,只要在这里修改一下,就可以达到目的了。
当某个Inventdim在Form中选择父数据源有字段为ItemId的时候,该窗体栏顶端总是显示Item number信息.
public str toolTipField(fieldId _fieldId)
{
    str             ret;
    FormDataSource  formDataSource;
    formDatasource  formDatasourceJoined;
    fieldId         fieldId;
    ItemId          itemId;
    ret = super(_fieldId);
    switch(_fieldId)
    {
        case fieldNum(InventDim, configId):
        case fieldNum(InventDim, inventSizeId):
        case fieldNum(InventDim, inventColorId):
        case fieldNum(InventDim, inventBatchId):
            formDataSource = this.dataSource();
            if (formDataSource && formDataSource.table() == tableNum(InventDim))
            {
                formDatasourceJoined = formGetParentDatasource(formDataSource);
                if (formDatasourceJoined)
                {
                    fieldId = fieldName2Id(formDatasourceJoined.table(),fieldstr(InventTable,itemId));
                    if (fieldId)
                    {
                        itemId = formDatasourceJoined.cursor().(fieldId);
                        if (itemId)
                        {
                            ret = strfmt("@SYP183", itemId, this.(_fieldId));
                            return ret;
                        }
                    }
                }
            }
            return strfmt("%1", this.(_fieldId));
    }
    return ret;
}

How to using runBuf function in AX

static void THK_runBuf(Args _args)
{
    str myJob = "int myfunc(int i) {return i+7;}";
    ExecutePermission perm;
    ;

    perm = new ExecutePermission();
    if (perm != null)
    {
        perm.assert(); 
        print runBuf(myJob, 42);
        pause;
        CodeAccessPermission::revertAssert();
    }
}

2013年2月6日星期三

How to using x++ create Product Variant in AX2012

How to create a product variant with Dimensions provided  

    ecoResDistinctProductVariant        ecoResDistinctProductVariant;
    EcoResProductVariantDimensionValue  EcoResProductVariantDimensionValue;
    RefRecId                                   ecoResDistinctProductVariantRecId;
    EcoResProductReleaseManagerBase     releaseManager;
    container productDimensions;


//Create a container to hold dimension values
productDimensions = EcoResProductVariantDimValue::getDimensionValuesContainer(ConfigurationName,
                                                                                        Size,
                                                                                        ColorId,
                                                                                        InventStyleId);
//Create Product search name

ecoResDistinctProductVariant.DisplayProductNumber = EcoResProductNumberBuilderVariant::buildFromProductNumberAndDimensions(
                                                                   EcoResProduct::find(InventTable.Product).productNumber(),
                                                                    productDimensions);

//Create Product variant with Product and dimensions provided

    ecoResDistinctProductVariantRecId = EcoResProductVariantManager::createProductVariant(InventTable.Product,ecoResDistinctProductVariant.DisplayProductNumber,productDimensions);

//Find newly created Product Variant
    ecoResDistinctProductVariant = ecoResDistinctProductVariant::find(ecoResDistinctProductVariantRecId);
//Now release the Product variant
    releaseManager = EcoResProductReleaseManagerBase::newFromProduct(ecoResDistinctProductVariant);
    releaseManager.release();



Hope this will help u guys

How to using x++ create Product master in AX 2012

Following code to create Product master by using X++
static void ProductCreate(Args _args)
{

EcoResProductService erProdSvc;
EcoResEcoResProduct EcoResProd;
EcoResEcoResProduct_Product_Master ProdMast;
EcoResEcoResProduct_Translation Translation;
EcoResEcoResProduct_Identifier Identifier;
EcoResEcoResProduct_ProductDimGroup ProdDimGroup;

//Initialize the service object
erProdSvc = EcoResProductService::construct();
EcoResProd = new EcoResEcoResProduct();
ProdMast = new EcoResEcoResProduct_Product_Master();

//ProdDimGroup = new EcoResEcoResProduct_ProductDimGroup();
//Newly created and initialize prodMast
ProdMast.parmDisplayProductNumber("IDB-PM002");
ProdMast.parmProductType(EcoResProductType::Item);
ProdMast.parmSearchName("IDB Product Master 1");


//Create a new translation object:
Translation = ProdMast.createTranslation().addNew();

Translation.parmDescription("IDB product Master");
Translation.parmLanguageId("en-us");
Translation.parmName("IDB Product Master 1");
Identifier = ProdMast.createIdentifier().addNew();

Identifier.parmProductNumber("IDB-PM002");
ProdDimGroup = ProdMast.createProductDimGroup().addNew();
ProdDimGroup.parmProduct("IDB-PM001");
ProdDimGroup.parmProductDimensionGroup("Col");


ProdMast.parmVariantConfigurationTechnology(EcoResVariantConfigurationTechnologyType::PredefinedVariants);
EcoResProd.createProduct().add(ProdMast);

erProdSvc.create(EcoResProd);

How to using x++ create and Post Trade agreement in AX 2012

Hi , below job will create Trade agreement in AX 2012.


static void idbExecutePricPriceDiscJourSvcJob(Args _args)
{
    // PricePrice Vars
    PricePriceDiscJournalService            PriceDiscSvc;
    PricePriceDiscJournal                   PriceDiscJour;
    PricePriceDiscJournal_PriceDiscAdmTrans PriceDiscJourAdmTrans;
    PricePriceDiscJournal_InventDim         PriceDiscJourDim;
   
    // keys return from create process
    AifEntityKeyList                        keys;
  
    PriceDiscSvc = PricePriceDiscJournalService::construct();
    PriceDiscJour = new PricePriceDiscJournal();
    PriceDiscJourAdmTrans = PriceDiscJour.createPriceDiscAdmTrans().addNew();
    PriceDiscJourDim = PriceDiscJourAdmTrans.createInventDim().addNew();

    // Set PriceDiscJourDim
    PriceDiscJourDim.parminventDimId("your dim id");

    // Set PriceDiscJourAdmTrans
   // PriceDiscJourAdmTrans.parmInventDim().add(PriceDiscJourDim);
    PriceDiscJourAdmTrans.parmItemRelation(InventTable::findByProduct( your product).ItemId);
    PriceDiscJourAdmTrans.parmItemCode(TableGroupAll::Table);
    PriceDiscJourAdmTrans.parmAmount(100.00);
    PriceDiscJourAdmTrans.parmFromDate(today());
    PriceDiscJourAdmTrans.parmAccountCode(TableGroupAll::All);
    PriceDiscJourAdmTrans.parmrelation(PriceType::PriceSales);
    PriceDiscJourAdmTrans.parmCurrency("USD");
   

    // Post PriceDiscJour
    keys = PriceDiscSvc.create(PriceDiscJour);
        }
    }
}



How ever , this will only create trade agreement .
If you want to post automatically, then you neeed to modify the "priceDiscAdmCheckPost" method of class


public void priceDiscAdmCheckPost()
{
    PriceDiscAdmCheckPost   priceDiscAdmCheckPost = new PriceDiscAdmCheckPost(false);//To make sure posting is happen

    if (initNoErrorsInInfolog == infolog.num(Exception::Error))
    {
        priceDiscAdmCheckPost.initJournalNum(priceDiscAdmTable.JournalNum);
        priceDiscAdmCheckPost.run();
    }
}

2013年1月10日星期四

How to transfer files from client to server.


public server static void  Main(args _args)
{
    BinData             binData = new BinData();
    Container           con;
    myClass             myclass;
    FileIoPermission    perm;
    Filename            filename = "C:\\Sunset.jpg";
    Filename            tofilename = "D:\\1111.jpg";
    ;

    perm = new FileIoPermission(tofilename, "w");
    perm.assert();

    con = myclass::GetFileDataOnClient(filename);
    binData.setData(con);
    binData.saveFile(tofilename);
    CodeAccessPermission::revertAssert();
}
public client static container GetFileDataOnClient(FileName _fileName)
{
    BinData  binData = new BinData();
    FileIoPermission    perm;
    ;

    if (WinAPI::fileExists(_filename))
    {
        perm = new FileIoPermission(_filename,"r");
        perm.assert();
        binData.loadFile(_fileName);
        CodeAccessPermission::revertAssert();
        return BinData.getData();
    }

    return conNull();
}

2013年1月5日星期六

How to control one of table field allowEdit for dataSource on Form

AX2009

//VAR Changed on 1/5/2013 at 14:49:48 by Tectura7 SOM16
private void THK_allowEditFieldList(FormDataSource   _tableDS,
                                    boolean          _allowEdit = false)
{
    int             field;
    DictTable       dictTable;
    DictField       dictField;
    tableId         tableId = _tableDS.table();
    fieldId         fieldId;
    fieldId         agreeStatue,tmpId;
    Name            tmpName;
;
    agreeStatue = fieldnum(PurchAgreementHeader, AgreementState);
    dictTable = new DictTable(tableId);
    setPrefix(dictTable.name());
    for (field = 1; field <= dictTable.fieldCnt(); field++)
    {
        fieldId     = dictTable.fieldCnt2Id(field);
        dictField   = new DictField(tableId, fieldId);
        tmpId       = dictField.id();
        tmpName     = dictField.name();
        if(! dictField.isSystem())
        {
            info(tmpName);
            if( tmpId != agreeStatue)
                _tableDS.object(tmpId).allowEdit(_allowEdit);
            //else
            //    info(tmpName);
        }
    }
}

AX2012
private void THK_allowEditFieldList(FormDataSource   _tableDS,
                                    boolean          _allowEdit = false)
{
    TableId     tableId     = _tableDS.table();
    fieldid     tmpId, agreeStatue = fieldnum(PurchAgreementHeader, AgreementState);
    void allowEditAllField(TableId _tableId)
    {
        SysDictTable    sysDictTable = new SysDictTable(_tableId);
        SysDictField    sysDictField;
        FieldId         fieldId = 0;
        TableId         parentTableId = sysDictTable.extends();
        ;
        setPrefix(sysDictTable.name());
        if (parentTableId)
        {
            allowEditAllField(parentTableId);
        }
        fieldId = sysDictTable.fieldNext(fieldId);
        while (fieldId)
        {
            sysDictField    = new SysDictField(_tableId, fieldId);
            tmpId           = sysDictField.id();
            fieldId         = sysDictTable.fieldNext(fieldId);
            if (sysDictField.isSystem())
                continue;
            if(tmpId != agreeStatue)
            {
                _tableDS.object(tmpId).allowEdit(_allowEdit);
            }
            //info(strFmt("%1[%2]",sysDictField.name(),sysDictField.id()));
        }
    }
;
    allowEditAllField(tableId);
}