Axapta V/s Me

Yet another blog for Dynamics 365 for Finance and Operations. This blog primarily targets the technical readers. I will be sharing my experience with Dynamics AX using code snippets, errors, and solutions, Tips, and tricks.

Create delivery address run time [Dynamics 365 FO]

Folk,

Here is quick code to create the delivery address on runtime. You can use this on Purchase Requisition, Purchase order or a person.
So we are going to use LogisticsPostalAddressEntity to get the right address with a new one or an existing one. This code should also handle if there is any update in any existing record by updating effective date stamp.

Have a look on below code,

Public static LogisticsPostalAddressRecId createAddress(tmpNewAddress  _tmpNewAddress)
     {
         LogisticsPostalAddress          deliveryAddress;
         LogisticsPostalAddressEntity    postalAddressEntity;
         LogisticsPostalAddressView      addressView;
         DirPartyPostalAddressView       partyAddressView;

       // get location from current user setup
        LogisticsLocation           logisticsLocation = LogisticsLocation::find(HcmWorkerTitle::findByWorker(curUserId()).Location);
   
        //Address type default to delivery
         LogisticsLocationRole       logisticsLocationRole = LogisticsLocationRole::findBytype(LogisticsLocationRoleType::Delivery);
         CompanyInfo                 companyInfo = CompanyInfo::findRecId(‘USMF’); //you may need to get if from current logged in user.

       //if current user doesn't have setup for location try to get it from LogisticsLocationDefault class
        if (!logisticsLocation)
         {
             HcmWorker hcmWorker = HcmWorker::find(HcmWorker::userId2Worker(curUserId()));
             logisticsLocation = LogisticsLocationDefault::findSimpleDefault(hcmWorker, logisticsLocationRole);
         }

       //if location is still empty get it from companyInfo
        if (!logisticsLocation)
         {
             logisticsLocation = LogisticsLocationDefault::findSimpleDefault(companyInfo, logisticsLocationRole);
         }

       //Below code to set buffer with the new address values
        deliveryAddress.clear();
         deliveryAddress.initValue();
         deliveryAddress.CountryRegionId = SysUserInfo::find().DefaultCountryRegion;
         deliveryAddress.Street = _tmpNewAddress.streetAddress;
//add other fields in same way
        partyAddressView.initFromPostalAddress(deliveryAddress);
         partyAddressView.LocationName = logisticsLocation.Description;
        
         postalAddressEntity = LogisticsPostalAddressEntity::construct();
         addressView.initFromPartyPostalAddressView(partyAddressView);
         deliveryAddress = postalAddressEntity.createPostalAddress(addressView);
        return deliveryAddress.RecId; //return the LogisticsPostalAddress table recId which directly can flow in respective table.
     }
Give a try and share your feedback.

Cheers!!!
Harry.

No comments:

Post a Comment

Thanks

Note: Only a member of this blog may post a comment.