Friday, 10 June 2016

Request for the permission of type 'FileIOPermission' failed.


Problem: Generally while working with files we might get the below errors

Request for the permission of type 'FileIOPermission' failed.
(S)\Classes\FileIOPermission\demand
(S)\Classes\WinAPIServer\fileExists- line 11 

or 

Request for the permission of type 'FileIOPermission' failed.
(S)\Classes\FileIOPermission\demand
(S)\Classes\WinAPIServer\deleteFile- line 11 


Solution: 

Set permissionSet;

FileName fileName = ''Test.Xml"; 

permissionSet = new Set(Types::Class);

permissionSet.add(new InteropPermission(InteropKind::ClrInterop));
permissionSet.add(new FileIOPermission(fileName , 'rw'));
CodeAccessPermission::assertMultiple(permissionSet);

 if (WINAPIServer::fileExists(fileName))
    {
        if (Box::yesNo(strfmt("Do you want to re-write the file", filename), DialogButton::No))
        {
            WINAPIServer::deleteFile(filename);
         }
        else
        {
            return;
        }
    }
CodeAccessPermission::revertAssert();

A copy will also require FileIOPermission of 'r' on the source file.  A Move will require a permission of 'w' on the source.

Thursday, 9 June 2016

Microsoft.Dynamics.Ax.Xpp.InvalidRemoteCallException’ was thrown


Problem: While working on Files using WinAPI got the below error.

Microsoft.Dynamics.Ax.Xpp.InvalidRemoteCallException’ was thrown


Solution:

Change WinAPI to WinAPIServer

Example:

WINAPI::fileExists(fileName) to WINAPIServer::fileExists(fileName)

WINAPI::deleteFile(filename) to WINAPIServer::deleteFile(filename)



Saturday, 30 April 2016

Phone number validation in Microsoft dynamics AX 2012

The below code is used to validate the Phone number.

public boolean validateField(FieldId _fieldIdToCheck)
{
    boolean ret;
    Str         phonePattern = @"[0-9]";
 
    System.Text.RegularExpressions.Match  myMatch;

    ret = super(_fieldIdToCheck);

    if (_fieldIdToCheck == fieldNum(PracticeDemo, PhoneMobile))
    {
        myMatch = System.Text.RegularExpressions.Regex::Match(this.PhoneMobile, phonePattern);
         
        if (strLen(this.PhoneMobile)<10 || strLen(this.PhoneMobile)>10)
        {
            ret = checkFailed(strFmt("%1 please enter 10 digit mobile number", this.PhoneMobile));
        }
         
        if (!myMatch.get_Success())
        {
            ret = checkFailed(strFmt("%1 is not an valid phone number", this.PhoneMobile));
}
    }

    return ret;
}

Thursday, 14 April 2016

Email validation in Microsoft Dynamics AX 2012


The below code is used to validate the Email Id.

public boolean validateField(FieldId _fieldIdToCheck)
{
    boolean   ret;
    Str           emailPattern = @"\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}\b";
   
    System.Text.RegularExpressions.Match  myMatch;

    ret = super(_fieldIdToCheck);

    if (_fieldIdToCheck == fieldNum(PracticeDemo, EmailID))
    {
        myMatch = System.Text.RegularExpressions.Regex::Match(this.EmailID, emailPattern);

    if (!myMatch.get_Success())
{
            ret = checkFailed(strFmt("%1 is not an valid email id ", this.EmailID));
}
    }

    return ret;
}

Saturday, 21 November 2015

Department name using default dimension value in AX 2012

We can get the department name in different ways using default dimension value.


1st Way: Using Views.


static void DepartmentName(Args _args)
{
    DefaultDimensionView        defaultDimensionView;
    DimAttributeOMDepartment    dimAttributeOMDepartment;

   //DefaultDimension  =  5637151660
    select DisplayValue from defaultDimensionView
        where defaultDimensionView.DefaultDimension == 5637151660
            && defaultDimensionView.name == 'Department'
        join dimAttributeOMDepartment
            where dimAttributeOMDepartment.Value == defaultDimensionView.DisplayValue;

    info(dimAttributeOMDepartment.Name);
}


2nd Way: Using Tables.


static void getDepartmentName(Args _args)
{
str                                                       name;
DimensionAttributeValueSetItem      valueSetItem; 
DimensionAttribute                           dimAttribute; 
DimensionAttributeValue                 dimAttributeValue;

//Get the Department name for '5637151660' default dimension.
select DimensionAttributeValueSet from valueSetItem 
where valueSetItem.DimensionAttributeValueSet == 5637151660
            join RecId from dimAttributeValue 
                where valueSetItem.DimensionAttributeValue == dimAttributeValue.RecId 
            join RecId from dimAttribute 
                where dimAttributeValue.DimensionAttribute == dimAttribute.RecId 
                   && dimAttribute.Name == enum2str(sysdimension::Department);
       
         name = DimensionAttributeValue::find(dimAttributeValue.RecId).getName();
        
        info(name);
 }




Thursday, 12 March 2015

Adding Customer Address through x++ Coding



The Below code used to update or create address for an existing customer


static void BRR_Address(Args _args)
{
        CustTable                                  custTable;
        DirParty                                     DirParty;
        LogisticsPostalAddress             address;
        DirPartyPostalAddressView      addressView;
        LogisticsLocationRole               roles;


        custtable = Custtable::find("1304");

        address.Street     =   "DLF,";
        address.ZipCode    =   "500006";
        address.City       =   "CyberCity,";
        address.State      =   "TG";
        address.CountryRegionId = "IND";

        addressView.Party = custtable.Party;
        addressview.initFromPostalAddress(address);

        DirParty = DirParty::constructFromPartyRecId(CustTable.Party);
        roles = LogisticsLocationRole::findBytype(LogisticsLocationRoleType::Delivery);
        DirParty.createOrUpdatePostalAddress(addressView);
}

Wednesday, 11 March 2015

Inserting Customer's Financial Dimensions through X++ code


The Below code is used for Inserting Financial Dimensions for a particular Customer through code.

static void BRR_Finance(Args _args)
{
  CustTable custTable;
  Struct struct = new Struct();
  container ledgerDimension;
  DimensionDefault DimensionDefault;
  ;
  //set the values
  struct.add("CostCenter", "OU_4740");
  struct.add("BusinessUnit","00000005");
  struct.add("Department","OU_4771");  
  struct.add("ExpensePurpose","Training");
  ledgerDimension += struct.fields();
  ledgerDimension += struct.fieldName(1);
  ledgerDimension += struct.valueIndex(1);
  ledgerDimension += struct.fieldName(2);
  ledgerDimension += struct.valueIndex(2);
  ledgerDimension += struct.fieldName(3);
  ledgerDimension += struct.valueIndex(3);
  ledgerDimension += struct.fieldName(4);
  ledgerDimension += struct.valueIndex(4);
   ttsBegin;
  DimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId(ledgerDimension);
    //Select the Customer
  custTable = CustTable::find("2003",true);
  custTable.DefaultDimension = DimensionDefault;
  custTable.update();
  ttsCommit;
}