Thursday, 25 August 2016

filtering lookups in a dialog in SSRS Reports Ax 2012

filtering lookups in a dialog.

You have to override the corresponding lookup method in the UI builder (using registerOverrideMethod()) and filter the query of the lookup.
This is how you can register a lookup override for a data contract field:

public void postBuild()
{
    DialogField df;
   
    super();
   
    df = this.bindInfo().getDialogField(
            this.dataContractObject(),
            methodStr(MyContract, parmMyValue));

    df.registerOverrideMethod(
          methodStr(FormStringControl, lookup),
          methodStr(MyUiBuilder, lookupMyValue), // Your lookup method
          this);  
}

Monday, 22 August 2016

How to get Company information and tax information using X++ code in Ax 2012

static void CompanyInformation(Args _args)
{
    CompanyInfo     Company;
    ;
    Company = CompanyInfo::find();
    info(strFmt("Company Name : %1", Company.Name));
    info(strFmt("Company Phone : %1", Company.phone()));
    info(strFmt("Company Phone : %1", Company.telefax()));
    info(strFmt("Company Address : %1", Company.postalAddress().Address));
}
How to get Company full name using x++ code 
str     countryName;

countryName= logisticsAddressCountryRegion::name(countryRegionId);

Company Tax details using X++ code
IEC
display TaxRegistrationNumber_IN  tax_IEC()
{
    TaxInformation_IN        taxInformation_IN;

    taxInformation_IN   = TaxInformation_IN::findDefaultbyLocation(LogisticsPostalAddress::findRecId(this.PrimaryAddressLocation).Location);

    return TaxRegistrationNumbers_IN::find(taxInformation_IN.IECRegistrationNumberTable).RegistrationNumber;
}

Service Tax (STC)
display TaxRegistrationNumber_IN  tax_STC()
{
    TaxInformation_IN        taxInformation_IN;

    taxInformation_IN   = TaxInformation_IN::findDefaultbyLocation(LogisticsPostalAddress::findRecId(this.PrimaryAddressLocation).Location);

    return TaxRegistrationNumbers_IN::find(taxInformation_IN.STCRegistrationNumberTable).RegistrationNumber;

}

Vendor STC number
public str vendorSTC(AccountNum   _accountNum)
{
    VendTable           vendTable;
    DirPartyTable       dirPartyTable;
    LogisticsLocation   logisticsLocation;
    TaxInformation_IN   taxInformation_IN;

    select vendTable where vendTable.AccountNum == _accountNum
        join dirPartyTable
            where dirPartyTable.RecId == vendTable.Party
        join logisticsLocation
            where logisticsLocation.RecId == dirPartyTable.PrimaryAddressLocation;


    taxInformation_IN   = TaxInformation_IN::findDefaultbyLocation(logisticsLocation.RecId);

    return TaxRegistrationNumbers_IN::find(taxInformation_IN.STCRegistrationNumberTable).RegistrationNumber;


}


Tax Identification number (TIN)
display TaxRegistrationNumber_IN  tax_TIN()
{
    TaxInformation_IN        taxInformation_IN;

    taxInformation_IN   = TaxInformation_IN::findDefaultbyLocation(LogisticsPostalAddress::findRecId(this.PrimaryAddressLocation).Location);

    return TaxRegistrationNumbers_IN::find(taxInformation_IN.TIN).RegistrationNumber;

}

Tax Account number(TAN) or PAN

display TaxRegistrationNumber_IN  tax_TAN()
{
    TaxInformation_IN           taxInformation_IN;
    utcDateTime                 fromDate, toDate;
    TaxRegistrationNumbers_IN   TaxRegistrationNumbers_IN;

    fromDate = DateTimeUtil::getSystemDateTime();
    toDate = DateTimeUtil::maxValue();

    taxInformation_IN   = TaxInformation_IN::findDefaultbyLocation(LogisticsPostalAddress::findByLocationAndValidDateTime_IN(this.PrimaryAddressLocation, fromDate, toDate).Location);
    select firstFast TaxRegistrationNumbers_IN
            where TaxRegistrationNumbers_IN.RecId   == taxInformation_IN.TAN
                &&   TaxRegistrationNumbers_IN.TaxType == TaxType_IN::None;

    return TaxRegistrationNumbers_IN.RegistrationNumber;
}

// Company GSTINNumber 
   select companyInfo where companyInfo.DataArea == curext()
           join dirpartytable where dirpartytable.PartyNumber == companyInfo.PartyNumber
               join dirPartyLocation where dirPartyLocation.Party == dirpartytable.RecId
                   join logisticsLocation where logisticsLocation.RecId == dirPartyLocation.Location
                      join taxInformation_IN where taxInformation_IN.RegistrationLocation == logisticsLocation.RecId
                                                              && taxInformation_IN.IsPrimary == NoYes::Yes;

  tmp.comapanyGSTINNumber = TaxRegistrationNumbers_IN::find(taxInformation_IN.GSTIN).RegistrationNumber;

 //Vendor GSTINNumber
  select vendtable1 where vendtable1.AccountNum==vendtable.AccountNum
          join dirPartyLocation where dirPartyLocation.Party == vendtable1.Party
              join logisticsLocation where logisticsLocation.RecId == dirPartyLocation.Location
                   join taxInformation_IN where taxInformation_IN.RegistrationLocation == logisticsLocation.RecId
                                                          && taxInformation_IN.IsPrimary == NoYes::Yes;

     tmp.vendorGSTINNumber = TaxRegistrationNumbers_IN::find(taxInformation_IN.GSTIN).RegistrationNumber;

  // CGST , SGST & IGST numbers with rates.
  select firstOnly HSNCode, SAC from taxDocumentRowTransaction_IN
          join RecId, DiscountAmount from taxDocumentRowTransaction
               where taxDocumentRowTransaction.RecId == taxDocumentRowTransaction_IN.TaxDocumentRowTransactionRecId
               && taxDocumentRowTransaction.TransactionHeaderTableId == vendInvoiceinfotable.TableId
               && taxDocumentRowTransaction.TransactionHeaderRecId == vendInvoiceinfotable.RecId
               && taxDocumentRowTransaction.TransactionLineTableId == vendInvoiceinfoline.TableId
               && taxDocumentRowTransaction.TransactionLineRecId == vendInvoiceinfoline.RecId;

      if(taxDocumentRowTransaction.RecId)
     {
           while select taxDocumentComponentTransaction

            where taxDocumentComponentTransaction.TaxDocumentRowTransactionRecId == taxDocumentRowTransaction.RecId
         {
               if(taxDocumentComponentTransaction.TaxCode =="CGST")
               {
                     tmp.CGST_TaxRate = taxDocumentComponentTransaction.TaxRate*100;
                     tmp.CGST = taxDocumentComponentTransaction.TaxAmountCur;
               }
              if(taxDocumentComponentTransaction.TaxCode == "SGST")
              {
                    tmp.SGST_Taxrate = taxDocumentComponentTransaction.TaxRate*100;
                    tmp.SGST = taxDocumentComponentTransaction.TaxAmountCur;
              }
             if(taxDocumentComponentTransaction.TaxCode == "IGST")
             {
                   tmp.IGST_Taxrate = taxDocumentComponentTransaction.TaxRate*100;
                   tmp.IGST = taxDocumentComponentTransaction.TaxAmountCur;
             }
       }
   }



For multiple Phone numbers and fax Details

static void Companywithmultiplephonenumber(Args _args)
{
 
    DirPartyContactInfoView         contactInfoView;
    CompanyInfo companyinfo;
 
    companyinfo = CompanyInfo::find();
    info(strfmt("%1",companyinfo.Name));
 
  while  select  contactInfoView
        where
             contactInfoView.Type == LogisticsElectronicAddressMethodType::Phone
            || contactInfoView.Type == LogisticsElectronicAddressMethodType::Fax
            && contactInfoView.Party == companyinfo.RecId
    {
         
        if(contactInfoView.Type == LogisticsElectronicAddressMethodType::Phone)
        {
            info(strFmt("Description - %1   Phone -             %2",contactInfoView.LocationName,contactInfoView.Locator));
        }
        else
        {
            info(strFmt("Description - %1   Fax - %2",contactInfoView.LocationName,contactInfoView.Locator));
        }  
    }
}



static void CompanyInfo(Args _args)
{
    DirPartyContactInfoView         contactInfoView,contactInfoPhone,contactInfoFax;
    Name                            LocationName,Phone,Fax;
    description255                  contactAddress;
    CompanyInfo                     companyInfo = CompanyInfo::find();
    container                       CompanyLogo = FormLetter::companyLogo();
    Name                            PrintedBy   = xUserInfo::find(false,curUserId()).name;

    while  select contactInfoView group by LocationName
        where contactInfoView.Party == companyinfo.RecId
     {
           LocationName = contactInfoView.LocationName;

         select contactInfoPhone where contactInfoPhone.Party == companyinfo.RecId
         && contactInfoPhone.Type == LogisticsElectronicAddressMethodType::Phone
         && contactInfoPhone.LocationName == LocationName;

         if(contactInfoPhone)
         {
             Phone     = contactInfoPhone.Locator;
         }
         select contactInfoFax where contactInfoFax.Party == companyinfo.RecId
         && contactInfoFax.Type == LogisticsElectronicAddressMethodType::Fax
         && contactInfoFax.LocationName == LocationName;

         if(contactInfoFax)
         {
            Fax       = contactInfoFax.Locator;
         }

         contactAddress += LocationName + " Tel: " + Phone + " Fax: " + Fax + " " +'\n';


    }
    info(strFmt("ContactAddress = %1 , ExcutedBy = %2",contactAddress,PrintedBy));
}

Wednesday, 20 July 2016

Customer Tax information through x++ in ax 2012

static void CustomerTaxInfo(Args _args)
{
    CustTable                   custTable;
    LogisticsLocation      logisticsLocation;
    DirPartyLocation       dirPartyLocation;
    TaxInformation_IN    taxInformation_IN;
 
    select custTable where custTable.AccountNum=="US-027"
        join dirPartyLocation where dirPartyLocation.Party == custTable.Party
            join logisticsLocation where logisticsLocation.RecId == dirPartyLocation.Location
                join taxInformation_IN where taxInformation_IN.RegistrationLocation ==                       logisticsLocation.RecId ;
 
 
    info(strFmt("Service Tax Number - %1 Tax Type - %2", TaxRegistrationNumbers_IN::find(taxInformation_IN.STCRegistrationNumberTable).RegistrationNumber,TaxRegistrationNumbers_IN::find(taxInformation_IN.STCRegistrationNumberTable).TaxType));
    info(strFmt("Sales Tax Number - %1 Tax Type - %2",TaxRegistrationNumbers_IN::find(taxInformation_IN.SalesTaxRegistrationNumber).RegistrationNumber,TaxRegistrationNumbers_IN::find(taxInformation_IN.SalesTaxRegistrationNumber).TaxType));

    info(strFmt("Tax Number(TIN) - %1 Tax Type - %2",TaxRegistrationNumbers_IN::find(taxInformation_IN.TIN).RegistrationNumber,TaxRegistrationNumbers_IN::find(taxInformation_IN.TIN).TaxType));

    info(strFmt("Tax Account Number(TIN) - %1", TaxWithholdRegNumbers_IN::find(taxInformation_IN.TAN).RegistrationNumber));

GST

info(strFmt("GST- %1 Tax Type - %2", TaxRegistrationNumbers_IN::find(taxInformation_IN.GSTIN).RegistrationNumber,TaxRegistrationNumbers_IN::find(taxInformation_IN.GSTIN).TaxType));
     
}

Monday, 11 July 2016

Reference Lookup for Customer Delivery Address


















  • Create a Table with fields CustAccount, LogisticsPostalAddress(int64)
  • maintain relation :  Table.LogisticsPostalAddress == LogisticsPostalAddress.Recid.
  • Create a new form and add above data source
  • Under Design, Take NewControl stringedit for CustAccount 
  • override lookup 

public void lookup()
{
    Query query = new Query();
    QueryBuildDataSource         qbds;
    QueryBuildRange                 queryBuildRange;
    SysTableLookup                   sysTableLookup;
    super();

    sysTableLookup         =  sysTableLookup::newParameters(tableNum(CustTable), this);
    sysTableLookup.addLookupfield(fieldnum(CustTable, AccountNum), true);
    qbds   = query.addDataSource(tablenum(CustTable));
    sysTableLookup.parmQuery(query);
    sysTableLookup.performFormLookup();

}
  • then Again Take NewControl Reference group 
  • Set Properties for reference group

























  • Override LookupReference 

public Common lookupReference()
{
    CustTable                   custTable;
    DirPartyTable               dirPartyTable;
    DirPartyLocation            dirPartyLocation;
    LogisticsPostalAddress      logisticsPostalAddress;
    SysReferenceTableLookup     sysRefTableLookup;
    Query                       lookupQuery = new Query();
    QueryBuildDataSource        lookupQueryDataSource;

    // Construct the SysRefTableLookup object
    sysRefTableLookup = SysReferenceTableLookup::newParameters(tableNum(LogisticsPostalAddress), ReferenceGroup);

    // Add the field list that will be displayed on the lookup form
   // You can Change/Add more fields in lookup based on your requirement.

    sysRefTableLookup.addLookupfield(fieldNum(LogisticsPostalAddress, Address));
    sysRefTableLookup.addLookupfield(fieldNum(LogisticsPostalAddress, Location));

    // Construct the query's data source
    lookupQueryDataSource = lookupQuery.addDataSource(tableNum(LogisticsPostalAddress));

 // To add multiple values in range.
    while select  Location from LogisticsPostalAddress
        join DirPartyLocation
        join dirPartyTable
        join custTable
            where logisticsPostalAddress.Location == dirPartyLocation.Location
                && dirPartyLocation.Party == custTable.Party
                && custTable.Party == DirPartyTable.RecId
                && custTable.AccountNum == CustomerName.valueStr()
    {
        // Add ranges to the query data source
        lookupQueryDataSource.addRange(fieldNum(LogisticsPostalAddress, Location)).value(queryValue(LogisticsPostalAddress.Location));
    }


    // Pass the query to the lookup object
    sysRefTableLookup.parmQuery(lookupQuery);

    return sysRefTableLookup.performFormLookup();
}
  • Save and Run the Form

Tuesday, 5 July 2016

Interaction Class in Ax 2012

Interaction Class

                           Interaction class contain some x++ logic to handle user interactions and make buttons or other controls visible or enabled.

                              To achieve more control over how your model driven list pages behaves, you can specify a custom interaction class by using interactionclass property of the form. The name of your class end with Listpageinteraction. It should inherits from SysListPageInteractionBase.

  •   Interaction class extends SysListPageInteractionBase class.
  •   Here we are having override methods

Initializing           :  Called when the form is initializing – Similar to the form init method
intializeQuery          :  Also called when the form is initializing – Similar to the datasource init method
selectionChanged   :   Called when the active record changes – Similar to the datasource active method.
setButtonEnabled   :  Should be overridden to dynamically enable/disable buttons based on the current selection. This is called from the selectionChanged method.
setButtonVisibility  : Shows or hides grid fields. This method is called once when the forms opens


  • difference between interaction classes and normal classes?

              The interaction classes are extending a base ListPageInteraction class. This has some methods supported by the kernel to interact e.g. with initializations of the list page form. Other classes can be build stand alone to execute e.g. a batch process or represent a web service or posting classes.

SelectionChanged 
Syntax
public void selectionChanged()
{
    TableName TableBuffer = this.listPage().activeRecord(queryDataSourceStr(QueryName, DataSourceName));
    Super();
    if(Condition)   //like - if(TableBuffer.fieldName == Something)
    this.listPage().actionPaneControlEnabled(formControlStr(FormName, ControlName),true);
}

Example:-
public void selectionChanged()
{
    Requisition requisition = this.listPage().activeRecord(queryDataSourceStr(RequisitionQuery,Requisition_1));
    super();
   
    if(requisition.WorkflowApprovalStatus == WorkflowApprovalStatus::Approved)
        this.listPage().actionPaneControlEnabled(formControlStr(RequisitionListPage,Edit),true);
    else
        this.listPage().actionPaneControlEnabled(formControlStr(RequisitionListPage,Edit),false);
}