Как обновить NetSuite через Salesforce?

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
362
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

В NetSuite:

Создайте сценарий RESTlet, который имеет как минимум функции получения и публикации. Например, я бы создал файл 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>Customization>Scripting>Scripts>New.

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

Затем нажмите «Развернуть сценарий» и выберите, кто будет вызывать этот сценарий, в частности, пользователь, который будет входить в NetSuite со стороны отдела продаж.

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

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

В песочнице Salesforce:

Щелкните Ваше имя > Консоль разработчика. В консоли разработчика нажмите «Файл»> «Создать» и создайте класс 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, [email protected], 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.

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

Другие вопросы по теме