Tuesday, May 19, 2015

Create AIF Service in AX2012

Create a AIF Service

1. create a DataContract Class PaymentStatusViewContract

[DataContractAttribute]
class PaymentStatusViewContract
{
    InvoiceId invoiceId;
    str status;
}
[DataMemberAttribute]
public InvoiceId invoiceId(invoiceId id = invoiceId)
{
    invoiceId = id;
    return invoiceId;
}
[DataMemberAttribute]
public str paymentJournal(str state = status)
{
    status = state;
    return status;
}
public static PaymentStatusViewContract construct()
{
    return new PaymentStatusViewContract();
}
2. Create a Service Contract class
class PaymentStatusViewServiceClass
{
[SysEntryPointAttribute(true)]
public PaymentStatusViewContract RetreivePaymentStatus(InvoiceId id)
{
    PaymentStatusViewContract contract = PaymentStatusViewContract::construct();    
    KG_GetAllInvoicesView v; // this is a view in my proj 
    while select * from v where v.Invoice == id
    {  contract.invoiceId(id);        
        contract.paymentJournal(v.Status1);
        return contract;    }
    contract.invoiceId(id);        
    contract.paymentJournal("No Record Found");
    return contract;
}

3. Add a service "GetInvoicePaymentStatus" under AOT


  Then add Operation "RetreivePaymentStatus" by rightclick on Operations



4. Add A Service Group, and add the "GetInvoicePaymentStatus" new Service Group

5. Deploy Service group by right click and Deploy service Group

 Your service is available from AX. Get the WSDL and copy to clipboard

6. Open VisualStudio

  • Create Console application
  • Add Service reference(with copied WSDL)
  • Now you can access the service
7. Add below code






Friday, May 8, 2015

Delete AX Transactional Data ( Invoices, Sales Orders, Ledger Entries, Payment Journals . etc)


Open AX, 
Press ctrl+shift+w.
On the AOT window, go to Classes > SysDatabaseTransDelete > Right-Click > Open
Click Yes
Verify all Transactional data is cleaned. 


Monday, May 4, 2015

Reading from a file

static void ReadTextFile(Args _args)
{
    TextIo file;
    FileName filename = @"c:\TEMP\customers.txt";
    container con;
    FileIoPermission permission;
    #File
   
    try
    {
        //permission = new FileIoPermission(filename, #io_read);
        //permission.assert();
       
        file = new TextIo(filename, #io_read);
        if (!file)
            throw Exception::Error;
       
        file.inRecordDelimiter(#delimiterCRLF);
        file.inFieldDelimiter(";");
        info("AccountNum - name - InvoiceAccount - CustGroup");
        con = file.read();
        while (file.status() == IO_Status::Ok)
        {
            info(strfmt("%1 - %2 - %3 - %4",
            conpeek(con,1),
            conpeek(con,2),
            conpeek(con,3),
            conpeek(con,4)));
            con = file.read();
        }
    }
    catch(Exception::Error)
    {
        error("Access to Read the file "+filename);
    }
   // CodeAccessPermission::revertAssert();
}
Writing data to a Text File
The below code is to write data from AX 2012 table to text file
static void WriteToTextFile(Args _args)
{
    TextIO file;
    Filename    filename = @"C:\TEMP\customers.txt";
    CustTable custTable;
    container con;
    FileIOPermission permission;
    #File
    try
    {
        //permission = new FileIOPermission(filename, #io_write);
        //permission.assert();
   
        file = new TextIo(filename, #io_write);
        if(file == null)
               throw Exception::Error;
        file.outRecordDelimiter(#delimiterCRLF);
        file.outFieldDelimiter(";");
   
        while select custTable
        {
            con = conNull();
            con = conIns(con,1,custTable.AccountNum);
            con = conIns(con,2,custTable.name());
            con = conIns(con,3,custTable.InvoiceAccount);
            con = conIns(con,4,custTable.CustGroup);
            file.writeExp(con);
        }
   
    }
    catch(exception::Error)
    {
        error("Can not access to write the file");
    }

    //CodeAccessPermission::revertAssert();

}