Skip to main content

D365 Remove contact or update contact information

We all come across the requirements where the contact information for the customer is entered in a wrongly manner or there's whole set of records where the information provided is completely garbage.

For me it was Email and Mobile.

So we extracted data and narrowed it down to list of customers with garbage values.

For this I have prepared one csv file mainly consisting four columns.

1) Account

2) Garbage info Email/Mobile

3) Identifier Email/Mobile

4) Add for modifying existing number.

Below is the code to call the same from RunnableClass


class CustomerDataCleanupEmailAndPhone
{
    /// <summary>
    /// Runs the class with the specified arguments.
    /// </summary>
    /// <param name = "_args">The specified arguments.</param>
    public static void main(Args _args)
    {
        #define.LocationRoleName('Collection')
        AsciiStreamIo                                                                 file;
        Array                                                                               fileLines;
        FileUploadTemporaryStorageResult                              fileUpload;
        str custid;
        CustTable custTable;
        LogisticsElectronicAddress electronicAddress;     
        DirPartyTable dirPartyTable;
        DirPartyLocation partyLocation;       
        LogisticsElectronicAddressLocator cleanupdata;
        Name identifier, editnumber;
        fileUpload = File::GetFileFromUser() as FileUploadTemporaryStorageResult;
        if(fileUpload != null)
        {
            file = AsciiStreamIo::constructForRead(fileUpload.openResult());

            if (file)
            {
                if (file.status())
                {
                    throw error("@SYS52680");
                }
                file.inFieldDelimiter(',');
                file.inRecordDelimiter('\r\n');
            }
            container record;
            while (!file.status())
            {
                record = file.read();

                if (conLen(record))
                {
                    custid = strFmt("%1",conPeek(record,1));
                    cleanupdata = strFmt("%1",conPeek(record,2));
                    identifier = strFmt("%1",conPeek(record,3));
                    editnumber = strFmt("%1",conPeek(record,4));                                                       
    ttsbegin;
                    if(identifier == 'Email')
                    {
select forupdate electronicAddress
join partyLocation where partyLocation.LOCATION == electronicAddress.LOCATION
join CustTable where CustTable.PARTY == partyLocation.PARTY
&& CustTable.AccountNum == custid
&& electronicAddress.Locator == cleanupdata
&& electronicAddress.Type == LogisticsElectronicAddressMethodType::Email;
if(electronicAddress.RecId != 0)
{
electronicAddress.delete();
}
                    }
                    if(identifier == 'Mobile')
                    {
                        select forupdate electronicAddress
                            join partyLocation where partyLocation.LOCATION == electronicAddress.LOCATION
                            join CustTable where CustTable.PARTY == partyLocation.PARTY
                            && CustTable.AccountNum == custid
                            && electronicAddress.Locator == cleanupdata
                            && electronicAddress.Type == LogisticsElectronicAddressMethodType::Phone;

                        if(electronicAddress.RecId == 0)
                        {
                            select forupdate electronicAddress
                            join partyLocation where partyLocation.LOCATION == electronicAddress.LOCATION
                            join CustTable where CustTable.PARTY == partyLocation.PARTY
                            && CustTable.AccountNum == custid
                            && (electronicAddress.Locator == strFmt("0%1",cleanupdata) || electronicAddress.Locator == strFmt("00%1",cleanupdata))
                            && electronicAddress.Type == LogisticsElectronicAddressMethodType::Phone;
                        }     
                        if(electronicAddress.RecId != 0)
                        {                            
                           if (editnumber == "Add +" || editnumber == "Add +971")
                            {                                                 
                                electronicAddress.Locator = (editnumber=="Add +" ? strFmt("+%1",cleanupdata) : strFmt("+971%1",cleanupdata) );
electronicAddress.update();                             
                            }
    else
                            {
                                electronicAddress.delete();                                                       
    }                           
                        }
                    }
ttscommit;
                }
            }
            info("done");
        }
    }

Comments

Popular posts from this blog

Error 500 on the server for D365 finance and operations

While working on D365 finance and operations one fine day i came across the error 500. There are many reasons for this server. Below link can help you if encounter the same issue. https://community.dynamics.com/ax/f/33/t/195422 If any of solutions does not work for you then you might need to check if there are any newly added objects through code and they might be causing the issue. Try to remove them build and synchronize them with the database. https://community.dynamics.com/ax/b/axdilip/archive/2017/01/05/dynamics-365-for-operations-troubleshooting-http-500-httpcompileexception-error To debug more you can use solution provided in below link. https://www.linkedin.com/pulse/ax7-500-error-shashi-kant-yadav In my case the issue was related to the certificate expiration. To check the expired certificate on the server we can go to "Certificate Management Console" and see the certificates expiration date. To check this is power shell open "Windows PowerS

A reference to 'Dynamics.AX.XXXXX, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is required to compile this module.

The error "A reference to 'Dynamics.AX.Directory, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is required to compile this module." came on when i was building the project in visual studio. This error is thrown when the model is missing any reference which are needed to build the project. To update rectify this error we need to update the model. To do that go to "Dynamics 365 > Model Management > Update model parameter" A new window will open the model you want to update. Here i am selecting "Development" which i have created. Then click on next. On "Select referenced packages" select the missing packages which ones is throwing error. Here i have selected the "Directory" packages as they are the once throwing error. Select the packages. After selecting the packages click on "Next". And Click on "Finish". Rebuild the project and you are good to go.

D365 Month end and year end process

Period Closing Accounts Payable a.          Post invoices for all open/received purchase orders. b.          Post all pending invoices if received from Vendor. c.          Post and settle all payments. d.          Run Currency revaluation e.          Reconcile Vendor balance and trial balance for control accounts. f.           Set fiscal period on-hold for Vendor. Accounts Receivable a.          Post invoices for all open/delivered sales orders. b.          Post all pending free text invoices. c.          Post and settle all received payments. d.          Run Currency revaluation e.          Reconcile Vendor balance and trial balance for control accounts. f.           Set fiscal period on-hold for Customer. Cash and Bank a.          Perform Bank reconciliation b.          Set fiscal period on-hold for Bank. Procurement / Sales a.          Review and Close all open purchase/sales orders/Requisition if require. b.          Perform sort cl