Monday, May 11, 2015

How to create/update a phone number for a customer/vendor in X++ [AX 2012]

As a follow-up to my last post about finding phone numbers, here is sample code of how you can properly find/create/update a phone number for a customer/vendor.

static void CreatePhoneExample(Args _args)
    CustTable                           custTable = CustTable::find('100013'); // TODO - Change to your customer
    LogisticsElectronicAddress          logisticsElectronicAddress;
    container                           defaultRole = map2Con(LogisticsLocationEntity::getDefaultLocationRoleFromEntity(tableNum(DirPartyTable)));
    setPrefix(strFmt("Creating/Updating number for customer %1", custTable.AccountNum));
    // This will find/create a number for a customer
    logisticsElectronicAddress.Type = LogisticsElectronicAddressMethodType::Phone;
    logisticsElectronicAddress.Locator = '555-555-5555';
    logisticsElectronicAddress.Location = DirPartyLocation::findOrCreate(custTable.Party, 0).Location;

    // This will find or create the new logisticsElectronicAddress
    // If it does not find it, it will do a .insert() which will only persist these fields (Location, Type, Locator, LocatorExtension)
    // so if you want to set the Description or if it's primary or not, you will need to update the record after this call
    logisticsElectronicAddress = LogisticsElectronicAddress::findOrCreate(logisticsElectronicAddress);
    // We re-select it for update in case this isn't a new number and it found an existing
    // because the "find" doesn't "select for update"
    logisticsElectronicAddress = LogisticsElectronicAddress::findRecId(logisticsElectronicAddress.RecId, true);
    logisticsElectronicAddress.Description = "New Primary Phone";
    // If you set the number to primary, during the insert/update it will handle unassigning previously
    // marked primary numbers if they exist
    logisticsElectronicAddress.IsPrimary = NoYes::Yes;
    // At this point, we need to mark the "purpose" of the number.  I'm just using the default role, which should be "Business"
    LogisticsEntityLocationRoleMap::createEntityLocationRoles(tableNum(LogisticsElectronicAddressRole), logisticsElectronicAddress.RecId, conPeek(defaultRole, 1), true);
    info(strFmt("Created/updated phone number [%1] for customer %2.", logisticsElectronicAddress.Locator, custTable.AccountNum));


  1. In my case it's not updating an existing entry, is creating a new.

  2. Hello Alex,
    container defaultRole map2Con(LogisticsLocationEntity::getDefaultLocationRoleFromEntity(tableNum(DirPartyTable)));
    How can get "Invoice Email" role in the purpose instead of defaultRole i.e. Business
    Kindly advice
    shankar :)

  3. his is the exceptional component for the customer. It is exceptionally cutting-edge framework and that organization all inclusive instant to customers for phone number deciphering expensive is a 0800 line?

  4. Complete selection of telephone jack adapters are now being offered by retailers, compatible to your laptop and modem, for your worldwide travel. free business calls

  5. This is quite a new free SMS service, online in 2010 I think. It's free for india users only but you can send cheap SMS to other parts of the world if you buy credits

  6. A regular phone directory is basically used to obtain the phone number of a certain individual through the use of his or her name or address while a reverse cell phone lookup service works the other way around. this contact form