Thursday 27 August 2015

Create Sales Order From Purch Order in Ax 2009

Creating  Sales Order from Purch Order :

void clicked()
{
    NumberSeq num;
    SalesTable salesTable;
    SalesId newSalesId;
    CustTable custTable;
    SalesLine salesLine;
    InventTable inventTable;
    ;
    //create sales table
    salesTable.clear();
    salesTable.initValue();
    breakpoint;
    num = NumberSeq::newGetNum(SalesParameters::numRefSalesId());
    newSalesId = num.num();
    if (salesTable::exist(newSalesId))
    {
    num.abort();
    checkFailed("@LIQ1977");
    checkFailed(strfmt("@LIQ1978", newSalesId));
    throw error("@SYS23020");
    }
    salesTable.SalesId = newSalesId;
    num.used();
    select * from custTable where custTable.AccountNum == PurchTable.OrderAccount;
    salesTable.CustAccount = custTable.AccountNum;
    salesTable.InvoiceAccount = custTable.InvoiceAccount;
    salesTable.SalesType = SalesType::Sales;
    salesTable.SalesStatus = SalesStatus::Backorder;
    salesTable.CurrencyCode = custTable.Currency;
    salesTable.CustGroup = custTable.CustGroup;
    salesTable.DeliveryDateControlType = SalesDeliveryDateControlType::SalesLeadTime;
    salesTable.ReceiptDateRequested = PurchTable.ReceiptDateConfirmed;
    salesTable.ShippingDateRequested = PurchTable.ShippingDateRequested;
    salesTable.PurchOrderFormNum = "Test";
    salesTable.LanguageId = "EN-US";
    salesTable.DlvMode = PurchTable.DlvMode;
    salesTable.initFromCustTable();
    salesTable.DeliveryName = PurchTable.DeliveryName;
    salesTable.DeliveryStreet = PurchTable.DeliveryStreet;
    salesTable.DeliveryCity = PurchTable.DeliveryCity;
    salesTable.DeliveryZipCode =PurchTable.DeliveryZipCode;

    //Create Sales Order
    salesTable.insert();

    // Create Sales Order Line
    salesLine.SalesId = salesTable.SalesId;
    salesLine.initFromSalesTable(salesTable);
    externalItemId = PurchLine.ItemId;
    salesLine.ItemId = externalItemId;
    salesLine.SalesUnit = InventTable::find(salesLine.ItemId).salesUnitId();
    select * from inventTable where inventTable.ItemId == salesLine.ItemId;
    salesLine.initFromInventTable(inventTable);
    salesLine.InventDimId = PurchLine.inventDimId;
    salesLine.SalesQty = 1;
    salesLine.ConfirmedDlv = salesTable.ShippingDateConfirmed;
    salesLine.lineNum = SalesLine::lastLineNum(salesLine.salesId) + 1.0;
    salesLine.LinePercent = 10;
    salesLine.RemainInventPhysical = 1;
    salesLine.RemainSalesPhysical = 1;
    salesLine.DlvMode = salesTable.DlvMode;
    salesLine.SalesStatus = SalesStatus::Backorder;
    salesLine.setPriceDisc(inventDim);
    //Insert sales line items
    salesLine.insert();
    info(salesTable.SalesId);
    info("Sales Order Created");
    super();
}

Thursday 2 July 2015

Import Text(Notepad) file data to AX Table

Import the records from Text file to Ax table in ax

static void ImportTextToAXTable(Args _args)
{
FilenameOpen filename;
dialogField dialogFilename;
Dialog dialog;
TextIO file;
NotepadTable notepadTable;
container con;
str conitem,conitem1,conitem2;
Filename filepath,fileType;
int i;
#File
dialog = new Dialog("Notepad Upload");
dialogFilename = dialog.addFieldValue(extendedTypeStr(FilenameOpen),filename,"File Name");
dialog.filenameLookupFilter([".txt", #AllFiles]);
dialog.filenameLookupTitle("Upload from Text File");
dialog.caption("Upload from text file");
dialogFilename.value(filename);
if(!dialog.run())
return;
filename = dialogFilename.value();
file = new TextIO(filename, #IO_READ);
file.inRecordDelimiter('\n');
file.inFieldDelimiter(',');
[filepath, filename, fileType] = fileNameSplit(filename);
if(fileType==".txt")
{
ttsbegin;
while(file.status() == IO_STATUS::OK)
{
con = file.read();
conitem = conpeek(con,1);
if(conItem!="0")
{
notepadTable.initValue();
notepadTable.Name=conpeek(con,1);
notepadTable.Integer=conpeek(con,2);
notepadTable.insert();
}
}
ttscommit;
}
else
{
        info("File shoule be .txt format");
}

USER CAN GIVE INPUT MANUALLY INTO LOOKUP FIELD IN AX

TASK:

In my Table I have serial number field in that I want to enter manually serial numbers not taken from lookup but at the same time i don't want to save in InventSerial Table but i need to save my input into current table.

Simple Steps:
In Table level methods,

public boolean validateField(fieldId _fieldIdToCheck)
{
    boolean ret;
    ;
    if (_fieldIdToCheck == fieldnum(CurrentTable,InventSerialId))
        ret = true;
    else
        ret = super(_fieldIdToCheck);
    return ret;
}

Sunday 8 March 2015

Pass Parameter from Form to ListPage Using ListPageInteractionClass

Step 1:

Create a Form and add datasource.

Step 2:

Add a Button and write code under Clicked() method for passing parameter.


void clicked()
{
FormRun formRun;
Args args = New Args();
super();
args.name("SalesTableListPage");
args.record(SalesTable);
formRun = ClassFactory.formRunclass(args);
formRun.init();
formRun.run();
formRun.wait();
}

Step 3:

Write code in "SalesTableListPageInteraction" class Initializing() method.

public void initializing()

{

super();

SalesTable SalesTable11 ;

if(this.listPage().listPageArgs() && this.listPage().listPageArgs().externalRecord())

{
        SalesTable11 = this.listPage().listPageArgs().externalRecord();
        info("Success");
}

}

Tuesday 17 February 2015

SSRS Report Using RDP,Contract,UIBuilder Classes in Ax 2012

SSRS Report Using RDP,Contract,UIBuilder Classes in Ax 2012


UI Builder Class is needed when you want to customize your dialog which pop ups when you open a Report. UI Builder Class helps you to add run time lookups and other controls on the dialog form.




Step 1:

Create a Query in AOT.

Step 2:

Add tables as datasource into the query.

Step 3:

Create a RDP Class.


ClassDeclaration:

[
SRSReportQueryAttribute(queryStr(CustTransReport)),
SRSReportParameterAttribute(classstr(RamaCustTransContract))
]
public class RamaCustTransDP extends SRSReportDataProviderBase
{
CustTrans custTrans;
CustTable custTable;
CustTransTmp custTransTmp;
AccountNum number,custaccount;
}

Create a new method():

getCustTransTmp():

[
SRSReportDataSetAttribute(tablestr(CustTransTmp))
]
public CustTransTmp getCustTransListtmp()
{
select custTransTmp;
return custTransTmp;
}


Call the Override ProcessReport() method:

ProcessReport():

[SysEntryPointAttribute]
public void processReport()
{

QueryBuildDataSource qbds;
QueryBuildRange qbr;


RamaCustTransContract contract = this.parmDataContract() as RamaCustTransContract;
Query q = this.parmQuery();
QueryRun qr = new QueryRun(q);
qbds = qr.query().dataSourceNo(1).addDataSource(tablenum(CustTable));
number = contract.parmCustAccount();

while (qr.next())
{
custTable = qr.get(tablenum(CustTable));
custTrans = qr.get(tablenum(CustTrans));
IF(custTable.AccountNum == number)
{
custTransTmp.AccountNum = custTable.AccountNum;
custTransTmp.CustName = custTable.name();
custTransTmp.Voucher = custTrans.Voucher;
custTransTmp.Invoice = custTrans.Invoice;
custTransTmp.TransType = custTrans.TransType;
custTransTmp.TransDate = custTrans.TransDate;
custTransTmp.AmountCur = custTrans.AmountCur;
custTransTmp.RemainAmountCur = custTrans.remainAmountCur();
custTransTmp.insert();

}

}


Step 4:

Create Contract Class for Passing AccountNumber of the Customer:

ClassDecLaration:

[
DataContractAttribute,SysOperationContractProcessingAttribute(classstr(RamaCustTransUIBuilder))
]


public class RamaCustTransContract
{
CustAccount accountNum;
}


Create new method():


[
DataMemberAttribute('accountNum'),
SysOperationLabelAttribute(literalstr("Customer Id")),
SysOperationHelpTextAttribute(literalstr("Customer Id")),
SysOperationDisplayOrderAttribute("1")

]
public CustAccount parmCustAccount(CustAccount _custAccount = accountNum)
{
accountNum = _custAccount;
info("%1 contract class parmcustaccount",accountNum );
return accountNum;

}


Step 5:

Create UIBuilder Class for making Lookup in dialog.


ClassDeclaration:

class RamaCustTransUIBuilder extends SrsReportDataContractUIBuilder
{
DialogField dialogEmplId;
RamaCustTransContract contract;
}

Override the build() method:

public void build()
{
contract = this.dataContractObject();
dialogEmplId = this.addDialogField(methodStr(RamaCustTransContract, parmCustAccount),contract);
}


Create new method():



private void CustAccountLookup(FormStringControl formstringcontrol)
{
Query query = new Query();
QueryBuildDataSource qbds;
SysTableLookup sysTableLookup;
sysTableLookup = SysTableLookup::newParameters(tableNum(CustTable), formstringcontrol);
sysTableLookup.addLookupfield(fieldNum(CustTable,AccountNum));
qbds = query.addDataSource(tableNum(CustTable));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();

}

override the getFromDialog() method:


public void getFromDialog()
{
contract = this.dataContractObject();
super();
}

Override the Postbuild() method:


public void postBuild()
{
super();
dialogEmplId = this.bindInfo().getDialogField(this.dataContractObject(),methodStr(RamaCustTransContract,parmCustAccount));
dialogEmplId.registerOverrideMethod(methodStr(FormStringControl, lookup),methodStr(RamaCustTransUIBuilder,CustAccountLookup), this);
dialogEmplId.lookupButton(2);
}







Monday 2 February 2015

DATA MIGRATION FRAMEWORK IN AX

Here,

            Sample Document  for Data Migration Framework. It is easy understandable and useful for ax beginners.

Click Here.....




                   

HOW TO USE EVENT HANDLER IN AX

Here,

                   We have a wonderful blog that use of Event Handler in Ax.Follow this blog its easy understandable for ax beginners.

CLICK HERE.....




Wednesday 21 January 2015

Post a Ledger Journal in AX 2009 using X++

Here,

                   We have a wonderful blog for posting ledger journal through X++ code..Follow this blog its easy understandable for ax beginners.

CLICK HERE....

Thursday 8 January 2015

DEVELOPING SSRS REPORT WITH CHART USING RDP CLASS

DEVELOPING SSRS REPORT WITH CHART USING RDP CLASS

Here,

                   We have a wonderful blog for Developing a SSRS report with chart using the Report Data Provider...Follow this blog its easy understandable for ax beginners.

Click Here......

Wednesday 7 January 2015

DEVELOPING SSRS REPORT USING AX ENUM PROVIDER


Developing SSRS Report using Ax Enum Provider

Step 1:

Create a Query in AOT.
 
 

Step 2:

Add a datasource(SalesTable) into a Query and Set a Range for particular Enum(SalesStatus).

Step 3:

Now open Visual Studio and create new project.

Step 4:

Similarly add dataset into the report and set the property datasourcetype-->Query , Query-->Our Query Name.

Step 5:

Again add one more dataset and set datasourcetype-->Ax Enum provider , Query-->Our Enum Name(SalesStatus).
 
 
 
Step 6:

Drag and Drop the first dataset into design node.
 
 
 
 
    Finally Deploy the Report into AOT.
 
    We will get the output...
 
 


Sunday 4 January 2015

HOW TO USE THE PAYMENT JOURNAL IN THE AP MODULE

We have a wonderful blog for using payment journal in the accounts payable module in ax 2012 .....
    
 Follow this blog its easy understandable for ax beginners.


Click Here.....