Tuesday, June 14, 2011

Adding a custom lookup to a form control

In Dynamics AX one way you can add a custom lookup or drop down list to a form control by overriding the lookup method of the control.  Below is some example code for doing this.

public void lookup() 
 { 
     //This lookup basis the list criteria on information in 2 tables
     //All display fields come from Table1, Table2 is used for limiting criteria
     
     //super(); 
     
     //This Next Line initializes the the sysTableLookupClass
     sysTableLookup          sysTableLookup  =
                     SysTableLookup::newParameters(tableNum(<TABLENAME1>), this); 
     
     Query                   query           = New Query(); 
     QueryBuildDataSource    qbdsTbl1, qbdsTbl2; 
     QueryBuildRange         qbr; 
     ; 
     
     //Add Tables to the data source
     qbdsTbl1      = query.addDataSource(tableNum(<TABLENAME1>)); 
     qbdsTbl2     = qbdsTbl1.addDataSource(tableNum(TABLENAME2)); 
  
  
     //Add Query Ranges to limit List records     
     qbr = qbdsTbl1.addRange(fieldNum(<TABLENAME1>,<RANGEFIELDNAME1>)); 
     qbr.value(<CRITERIAVALUE>); 
  
     qbr = qbdsTbl1.addRange(fieldNum(<TABLENAME1>, <RANGEFIELDNAME2>)); 
     qbr.value(<CRITERIAVALUE>); 
  
     qbr = qbdsTbl1.addRange(fieldNum(<TABLENAME1>, <RANGEFIELDNAME3>)); 
     qbr.value(<CRITERIAVALUE>); 
     
     //Since we have multiple tables in the query turn on relations
     qbdsTbl1.relations(true); 
  
     //Add Ranges to the Table2
     qbr = qbdsTbl2.addRange(fieldNum(<TABLENAME2>, <RANGEFIELDNAME4>)); 
     qbr.value(<CRITERIAVALUE>); 
     
     qbdsTbl2.relations(true); 
  
     //The next 2 lines actualy adds the fields that will be displayed in the lookup grid
     sysTableLookup.addLookupfield(fieldNum(<TABLENAME1>, <DISPLAYFIELDNAME>)); 
     sysTableLookup.addLookupfield(fieldNum(<TABLENAME1>, <DISPLAYFIELDNAME>)); 
     
     //Hand the created query to the sysTableLookupClass
     sysTableLookup.parmQuery(query); 
  
     //Display the drop down 
     sysTableLookup.performFormLookup(); 
  
 }




Another example single table with field and table names instead of variable place holders



//Single table example with actual table and field names instead of  place holders
 public void lookup() 
 { 
     //This lookup basis the list criteria on information in 2 tables
     //super(); 
     sysTableLookup          sysTableLookup  = 
                 SysTableLookup::newParameters(tableNum(salesBillOfLadingJournalTable), this); 
     Query                   query           = New Query(); 
     QueryBuildDataSource    qbdsJT, qbdsBLR; 
     QueryBuildRange         qbr; 
     ; 
  
     qbdsJT      = query.addDataSource(tableNum(salesBillOfLadingJournalTable)); 
     qbdsBLR     = qbdsJT.addDataSource(tableNum(salesBLReservation)); 
  
  
  
     qbr = qbdsJT.addRange(fieldNum(salesBillOfLadingJournalTable,isMaster)); 
     qbr.value(enum2str(noYes::No)); 
  
     qbr = qbdsJT.addRange(fieldNum(salesBillOfLadingJournalTable, custAccount)); 
     qbr.value((salesBillOfLadingJournalTableMaster.CustAccount)); 
  
     qbr = qbdsJT.addRange(fieldNum(salesBillOfLadingJournalTable, masterBLID)); 
     qbr.value(&quot;&quot;&quot;&quot;); 
  
     qbdsJT.relations(true); 
  
     qbr = qbdsBLR.addRange(fieldNum(salesBLReservation, blOpen)); 
     qbr.value(enum2str(noYes::Yes)); 
     qbdsBLR.relations(true); 
  
     sysTableLookup.addLookupfield(fieldNum(salesBillOfLadingJournalTable, BillOfLadingID)); 
     sysTableLookup.addLookupfield(fieldNum(salesBillOfLadingJournalTable, salesID)); 
     sysTableLookup.parmQuery(query); 
  
     sysTableLookup.performFormLookup(); 
  
 }
 

Thursday, June 9, 2011

Sales order creation at the most basic with ax Classes

 

Programmatic creation of a sales order can range from complex to easy, this is by far the Easy example making use of the axSalesTable and axSalesLine classes you dont get much easier than this.   The example should be a good starting point the ID’s used are part of the standard Demo data.

static void CreateSalesOrder_Job(Args _args)
{
    axSalesTable axSalesTable;
    salesID salesID;
    axSalesline axSalesLine;
 
    ;
    ttsBegin;
    axSalesTable = new axSalesTable();
 
    axSalesTable.parmCustAccount('1101');
    axSalesTable.save();
 
    salesID = axSalestable.salesTable().SalesId;
 
    info(salesID);
 
    axSalesline = new axSalesLine();
    axSalesLine.parmSalesId(salesID);
    axSalesline.parmItemId('7009');
    axSalesLine.parmSalesQty(10);
    axSalesLine.save();
    
    //Line with dimensions
    axSalesline = new axSalesLine();
    axSalesLine.parmSalesId(salesID);
    axSalesline.parmItemId('1001');
    axSalesLine.parmSalesQty(1);
    axSalesLine.axInventDim().parmConfigId('HD');
    axSalesLine.axInventDim().parmInventSizeId('42');
    axSalesLine.axInventDim().parmInventColorId('02');
    axSalesLine.save();
    ttsCommit;
 
}