Thursday, 3 December 2015

How to add Attachments button on a new form


Step 1. Open your form in AOT and Go to from Design node.

Step 2. Add new button group under ActivePanTab.

Step 3. Add new command button under this new button group.

clip_image001

Step 4. Set following properties of this button

clip_image002

Now you need to do one functional setup for this new customization

Step 5: Open below from
 Organization administration/SetUp-> Document Management -> Active Document Table 

Step 6: Add your table details here and click on Always enable.

clip_image003

Step 7: So its done now.
Open your form and click on Attachment button , below form must open.

clip_image006

Sunday, 29 November 2015

Ware house Phone number

static void warehousetelephonenumber(Args _args)
{
    str                                 Warehouse;
    LogisticsElectronicAddress          LogisticsElectronicAddress;
    LogisticsLocation                   LogisticsLocation;
    InventLocationLogisticsLocation     InventLocationLogisticsLocation;
    InventLocation                      InventLocation;
    ;
    Warehouse   = "11";
    InventLocation = InventLocation::find(Warehouse);
    Select firstOnly InventLocationLogisticsLocation
        where InventLocationLogisticsLocation.InventLocation    == InventLocation.RecId;
    if (InventLocationLogisticsLocation)
    {
        select firstOnly LogisticsLocation
            where LogisticsLocation.ParentLocation      == InventLocationLogisticsLocation.Location
            && LogisticsLocation.IsPostalAddress        == NoYes::No;
        if (LogisticsLocation)
        {
            Select firstOnly LogisticsElectronicAddress
                where LogisticsElectronicAddress.Location    == LogisticsLocation.RecId;
            if (LogisticsElectronicAddress)
            {
                info(strFmt("%1",   LogisticsElectronicAddress.Locator));          
            }
        }
    } 
}

===============================================================

logisticsElectronicAddressLocator getElectronicAddressByType(LogisticsElectronicAddressMethodType _type)
{
    InventLocationLogisticsLocation     InventLocLogLocation;
    LogisticsLocation                   logisticsLocation;
    logisticsLocation                   contactInfoLogLoc;
    LogisticsElectronicAddress          logisticsElectronicAddress;
    LogisticsPostalAddress              logisticsPostalAddress;
    ;
    while select firstOnly * from logisticsLocation
            where logisticsLocation.IsPostalAddress     == NoYes::Yes
        exists join InventLocLogLocation
            where InventLocLogLocation.Location         == logisticsLocation.RecId
               && InventLocLogLocation.InventLocation   == this.RecId
               && InventLocLogLocation.IsPrimary        == NoYes::Yes
        exists join LogisticsPostalAddress
            where LogisticsPostalAddress.Location       == logisticsLocation.RecId
               && logisticsPostalAddress.ValidFrom      <= DateTimeUtil::utcNow()
               && logisticsPostalAddress.ValidTo        >  DateTimeUtil::utcNow()
        exists join contactInfoLogLoc
            where contactInfoLogLoc.ParentLocation      == logisticsLocation.RecId
        exists join LogisticsElectronicAddress
            where LogisticsElectronicAddress.Location   == contactInfoLogLoc.RecId
               && logisticsElectronicAddress.Type       == _type
    {
        return logisticsElectronicAddress.Locator;
    }

    return '';
}

Thursday, 26 November 2015

How to add a method for the click event of a button placed on action pane of a List Page

Setting the DisplayTarget property of the button to the value "Client" will hide the button if used from Enterprise Portal and will enable you to override the clicked method. If you not plan to use the list page in EP then go ahead.
Otherwise you will have to put your code in the target form init or class main method.

Wednesday, 25 November 2015

Automatic PO Confirmation and Packingslip

static void PostPOPackingSlip(Args _args)
{
        PurchFormLetter  purchFormLetter;
        PurchTable       purchTable;
    purchTable  = purchTable::find('000048');
    if (purchTable.DocumentState != VersioningDocumentState::Confirmed)
                {
                    purchFormLetter = PurchFormLetter::construct(DocumentStatus::PurchaseOrder);
                    purchFormLetter.update(purchTable, "def1");
                }

                purchTable.reread();

                if (purchTable.DocumentState == VersioningDocumentState::Confirmed)
                {
                    purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip);
                    purchFormLetter.update(purchTable,"123",systemDateGet(), PurchUpdate::All, AccountOrder::None,false,false);

                }

info("jobcompleted");

}

Thursday, 19 November 2015

AutomaticSOPackingSlip

static void AutomaticSOPackingSlip(Args _args)
{
    SalesTable  salestbl;
    SalesLine                   salesline;
    SalesFormLetter_PickingList salesFormLetter;

    salestbl    =   SalesTable::find('000184');
    while select salesline  where salesline.SalesId ==  salestbl.SalesId
    {
        salesline.selectForUpdate(true);
         ttsBegin;
            salesline.SalesDeliverNow   =   salesline.QtyOrdered;
            salesline.update();
            ttsCommit;

    }
    salesFormLetter = SalesFormLetter_PickingList::newPickingList();
    salesFormLetter.transDate(systemDateGet());

    salesFormLetter.update(salestbl,
                            systemdateget(),
                            SalesUpdate::All,
                            AccountOrder::None,
                            NoYes::No,
                            NoYes::No);

}

Wednesday, 18 November 2015

Get the String values from String separated by Delimiter


Requirement : To separate values from String with Pipe Delimited Values.

static void ValueFromStringSepdeli(Args _args)
{
    citInboundLineData x;
    container c;
    SalesShippingDate shipdate;
    int i;

    x= "SOPack"+"|"+"SO1"+"|"+"PR1"+"|"+"item1"+"|"+"10"+"|"+"25/5/2015"+"|"+"tn1";
    c = str2con(x,"|");
    //conview(c);
     for (i=1; i <= conLen(c); i++)
    {
        info (strFmt("container value %1 is %2", i, conPeek(c, i)));
    }
    shipdate    =   str2Date(conPeek(c,6),123);
    info(strFmt("%1",shipdate));
}

static void Job9(Args _args)
{
    citInboundLineData x;
    container c,toc;
    SalesShippingDate shipdate;
    int i;
     x= "SOPack"+","+"000185"+","+"PR1"+","+"T0004"+","+"10"+","+"12/31/2015"+","+"tn1";
    //toc =   con2Str(x, "|");
    toc = str2con(x,",");
    x = con2str(toc,"|");
    info(x);
    c=  str2con(x,"|");
    conview(c);
 
}

Monday, 16 November 2015

AX 2009 Reports

http://www.slideshare.net/magive249/report-microsoft-dynamics-ax

Through Report Wizard :
http://blog.rahulsharma.in/2009/12/reporting-capabilities-of-ms-dynamics_14.html

A requirement of Creating report , with Grouping / then get top 10 Highest Amount value sorting in Descending.

This is done by using Temp tables - Insert - filter values in to temp, the process to get it sort and insert.  Then send only 10 records through fetch method on to the report.

Use Programmable Section:

I got the requirement to Get details and below get the total Amounts  section .  Total amount section ( should be run only for the 10 Highest Amount Value , this all can be done in Fetch method.








public boolean fetch()
{
    boolean ret     =   false;
    q = qrun.query();

// Loop all the Query and in to Details temp table .
    while(qrun.next())
    {
        purchlineRec    =   qrun.get(tablenum(Purchline));
        inventtblRec    =   qrun.get(tablenum(InventTable));

        this.RelInventTbl(purchlineRec);
        table.ItemId        =   purchlineRec.ItemId;
        table.ItemName      =   purchlineRec.itemName();
        table.PODate        =   PurchTable::find(table.PurchId).createdDate;
        table.PurchId       =   purchlineRec.PurchId;
        table.QtyOrdered    =   purchlineRec.QtyOrdered;
        table.PurchPrice    =   purchlineRec.PurchPrice;
        table.DeliveryDate  =   purchlineRec.DeliveryDate;
        table.LineAmount    =   purchlineRec.LineAmount;
        table.VendName      =   VendTable::find(purchlineRec.VendAccount,false).Name;
        table.insert();
    }
// Insert – only one record per Item in to total temp table – Insert in to Table with Total Sum Amount etc ( fields required in Total Section)

   while select table
    {
        instbl = null;
       select instbl    where instbl.ItemId ==  table.ItemId;
       if(!instbl)
       {
        select sum(LineAmount),sum(QtyOrdered)from tablegrp where tablegrp.itemid == table.itemid;
        instbl.ItemId       =   table.ItemId;
        instbl.TotLineAmt   =   tablegrp.LineAmount;
        instbl.TotPurchQty    =   tablegrp.QtyOrdered;
        instbl.insert();
        }
    }
// Looping total Temp table , order by TotLine Amt – and get detail transactions for Details Temp table  
   while select * from instbl order by TotLineAmt desc where instbl.ItemId  != ""
   {
        while select * from table
            where table.ItemId  ==  instbl.ItemId
            {
                TotLineamt          =   instbl.TotLineAmt;
                TotPurchQty       =   instbl.TotPurchQty;

                //ttscommit;
                if(i <10)
                 element.send(table);
                else
                    break;

            }
            if(i >9)
                break;
             if (TotLineamt)
                {
                    element.execute(1); // Calling Programmable section only at required Part.

                }
              i++;

   }
    ret =   true;
    return ret;
}