Skip to main content

Phone Number Formatting Mask

The following methods were added/changed:

ClassDeclaration of Customers form


public class FormRun extends ObjectRun
{
    ...
  
   boolean sisValidateCalled;
}


StringEdit Phone field methods:


public void enter()
{
   super();
   sisValidateCalled  = false;
}

public boolean validate()
{
   #define.CorrectPhoneLettersNumber(14)
   boolean ret;
   int length;
   Phone newPhone;
   ;
   ret = super();

   // creates new phone number in the format (xxx) xxx-xxxx[x]
   newPhone = SISTools::formatPhoneNumber(this.text());
   length = strlen(newPhone);

   if (length != #CorrectPhoneLettersNumber)
       checkFailed(strfmt("Phone numbers should be like: (xxx) xxx-xxxx"));

   CustTable.Phone = newPhone;
   CustTable_ds.write();
   sisValidateCalled  = true;
   return ret;
}
public boolean leave()
{
boolean ret;

   ret = super();

   if (!sisValidateCalled)
       this.validate();

   return ret;
}

SISTools class (some collection of utilities)


// creates new phone number in the format (xxx) xxx-xxxx[x]
static public Phone formatPhoneNumber(Phone _phone = "")
{
   Phone newPhone = "";
   str char;
   int length = strlen(_phone);
   int i;
   container numbers = ['0','1','2','3','4','5','6','7','8','9'];
   ;
   // remove all non numbers from field text
   for (i=1; i<=length; i++)
   {
       char = substr(_phone,i,1);
       if (confind(numbers,char))
       {
           newPhone = newPhone + char;
       }
   }
   length = strlen(newPhone);

   // create new phone number in the format (xxx) xxx-xxxx from 1234567890
   newPhone = "(" + substr(newPhone,1,3) + ") " + substr(newPhone,4,3) + "-" + substr(newPhone,7, length-6);

   return newPhone;
}
 

Popular posts from this blog

Dynamics Axapta: Sales Orders & Business Connector

Well, again folllowing my same idea of writting close to nothing and pasting code, I'll paste in some code to create a sales order from some basic data and the invoice it. I'll try to explain more in the future. AxaptaObject axSalesTable = ax.CreateAxaptaObject("AxSalesTable"); AxaptaRecord rcInventDim = ax.CreateAxaptaRecord("InventDim"); AxaptaRecord rcCustTable = ax.CreateAxaptaRecord("CustTable"); rcCustTable.ExecuteStmt("select * from %1 where %1.AccountNum == '" + MySalesOrderObject.CustAccount + "'"); if (MySalesOrderObject.CurrencyCode.Trim().Length == 0) MySalesOrderObject.CurrencyCode = rcCustTable.get_Field("Currency").ToString().Trim(); string sTaxGroup = rcCustTable.get_Field("taxgroup").ToString().Trim(); //set header level fields axSalesTable.Call("parmSalesName", MySalesOrderObject.SalesName.Trim()); axSalesTable.Call("parmCustAccount", M

Passing values between form and class

Class name is EmplDuplication and Form is EmplTable . void clicked() {    MenuFunction mf;    args args = new Args();    ;     args.record(EmplTable);     mf = new menufunction(identifierstr(EmplDuplication), MenuItemType::Action); mf.run(args); } Meanwhile, in the main() method of the EmplDuplication class, we need to put this Axapta x++ code to get the datasource: static void main(Args args) {     EmplDuplication EmplDuplication; EmplTable localEmplTable; ;     if(args.record().TableId == tablenum(EmplTable)) localEmplTable = args.record();     ... }