Как обновить NetSuite через Salesforce? - PullRequest
0 голосов
/ 28 мая 2019

Как бы вы обновили NetSuite через Salesforce.Я знаю, что вы использовали бы код RESTlet и Salesforce Apex NetSuite для их соединения, но как бы вы на самом деле пошли на это шаг за шагом?

1 Ответ

0 голосов
/ 28 мая 2019

Чтобы отправить данные из Salesforce в NetSuite (в частности, данные о клиенте / учетной записи), вам необходимо выполнить некоторые предварительные настройки в обоих.

В NetSuite:

СоздатьRESTlet Script, который имеет как минимум Get и Post.Например, я бы создал на своем рабочем столе файл javascript, содержащий:

/**
 *@NApiVersion 2.x
 *@NScriptType restlet
 */

//Use: Update NS customer with data (context) that is passed from SF

define(['N/record'], function(record) //use the record module
{
    function postData(context)
    {
        //load the customer I'm gonna update
        var cust = record.load({type:context.recordtype, id:context.id});
        log.debug("postData","loaded the customer with NSID: " + context.id);

        //set some body fields
        cust.setValue("companyname", context.name);
        cust.setValue("entityid", context.name + " (US LLC)");
        cust.setValue("custentity12", context.formerName);
        cust.setValue("phone",context.phone);
        cust.setValue("fax",context.fax);

        //remove all addresses
        while(cust.getLineCount('addressbook') != 0)
            cust.removeLine('addressbook',0);

        //add default billing address
        cust.insertLine('addressbook',0);
        cust.setSublistValue('addressbook','defaultbilling',0,true);
        cust.setSublistValue('addressbook','label',0,'BILL_TO');
        var billingAddress=cust.getSublistSubrecord('addressbook','addressbookaddress',0);
        billingAddress.setValue('country',context.billingCountry);
        billingAddress.setValue('addr1', context.billingStreet);
        billingAddress.setValue('city',context.billingCity);
        billingAddress.setValue('state',context.billingState);
        billingAddress.setValue('zip',context.billingZip);

        //add default shipping address
        cust.insertLine('addressbook',0);
        cust.setSublistValue('addressbook','defaultshipping',0,true);
        cust.setSublistValue('addressbook','label',0,'SHIP_TO');
        var shippingAddress=cust.getSublistSubrecord('addressbook','addressbookaddress',0);
        shippingAddress.setValue('country',context.shippingCountry);
        shippingAddress.setValue('addr1',context.shippingStreet);
        shippingAddress.setValue('city',context.shippingCity);
        shippingAddress.setValue('state',context.shippingState);
        shippingAddress.setValue('zip',context.shippingZip);

        //save the record
        var NSID = cust.save();
        log.debug("postData","saved the record with NSID: " + NSID);
        return NSID; //success return the ID to SF
    }

    //get and post both required, otherwise it doesn't work
    return {
      get : function (){return "get works";},
      post : postData //this is where the sauce happens
    };
});

После того, как вы сохранили этот файл, перейдите в NetSuite> Настройки> Сценарии> Сценарии> Новый.

Выбратьновый файл, который вы сохранили и создайте запись скрипта.Ваша запись сценария в NetSuite должна иметь проверку GET и POST в соответствии со сценариями.

Далее щелкните сценарий развертывания и выберите, кто будет вызывать этот сценарий, в частности, пользователь, который войдет в систему Salesforce, в NetSuite.

На странице развертывания вам понадобится внешний URL-адрес, который выглядит примерно так: https://1234567.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=123&deploy=1

Примечание. Если какие-либо данные, которые вы обновляете, имеют решающее значение для процесса, я настоятельно рекомендую создать их в песочнице.сначала для тестирования, прежде чем перейти к производству.

В изолированной программной среде Salesforce:

Щелкните YourName> Консоль разработчика. В консоли разработчика выберите Файл> Создать и создайте класс Apex:

global class NetSuiteWebServiceCallout
{
    @future (callout=true) //allow restlet callouts to run asynchronously
    public static void UpdateNSCustomer(String body)
    {
        Http http = new Http();
        HttpRequest request = new HttpRequest();
        request.setEndPoint('https://1234567.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=123&deploy=1'); //external URL
        request.setMethod('POST');
        request.setHeader('Authorization', 'NLAuth nlauth_account=1234567, nlauth_email=login@login.com, nlauth_signature=password'); //login to netsuite, this person must be included in the NS restlet deployment
        request.setHeader('Content-Type','application/json');
        request.setBody(body);
        HttpResponse response = http.send(request);
        System.debug(response);
        System.debug(response.getBody());
    }
}

Вам нужно будет указать конечную точку здесь: внешний URL-адрес, авторизацию nlauth_account = [номер вашей учетной записи netsuite] и заголовок вашего адреса электронной почты и пароля для входа в систему человека, который участвует в развертывании.сценария NS, тело будет установлено в триггере, который вызывает этот класс.

Затем создайтетриггер, который будет вызывать этот класс.Я запускал этот скрипт каждый раз, когда обновляю учетную запись в Salesforce.

trigger UpdateNSCustomer on Account (after update)
{
    for(Account a: Trigger.new)
    {
        String data = ''; //what to send to NS
        data = data + '{"recordtype":"customer","id":"'+a.Netsuite_Internal_ID__c+'","name":"'+a.Name+'","accountCode":"'+a.AccountCode__c+'",';
        data = data + '"formerName":"'+a.Former_Company_Names__c+'","phone":"'+a.Phone+'","fax":"'+a.Fax+'","billingStreet":"'+a.Billing_Street__c+'",';
        data = data + '"billingCity":"'+a.Billing_City__c+'","billingState":"'+a.Billing_State_Province__c+'","billingZip":"'+a.Billing_Zip_Postal_Code__c+'",';
        data = data + '"billingCountry":"'+a.Billing_Country__c+'","shippingStreet":"'+a.Shipping_Street__c+'","shippingCity":"'+a.Shipping_City__c+'",';
        data = data + '"shippingState":"'+a.Shipping_State_Province__c+'","shippingZip":"'+a.Shipping_Zip_Postal_Code__c+'","shippingCountry":"'+a.Shipping_Country__c+'"}';
        data = data.replaceAll('null','').replaceAll('\n',',').replace('\r','');
        System.debug(data);
        NetSuiteWebServiceCallout.UpdateNSCustomer(data); //call restlet
    }
}

В этом скрипте data - это тело, которое вы отправляете в NetSuite.

Кроме того, у вас будетсоздать авторизованную конечную точку для NetSuite в настройках вашего удаленного сайта в Salesforce (песочница и производство).Перейдите к настройке и быстро найдите настройки удаленного сайта, которые будут находиться под контролем безопасности.Создайте новый удаленный сайт, для которого в качестве URL-адреса удаленного сайта указана первая половина вашего внешнего URL: https://1234567.restlets.api.netsuite.com.

Отсюда проведите некоторое тестирование в песочнице.Если все выглядит хорошо, разверните класс и запустите производство Salesforce.

...