NETSUITE / RESTLET

RESTletは、
外から来たデータをNetSuiteにつなぐ処理だった。

RESTletという名前を見たとき、 最初は何をするものなのか よく分かっていませんでした。

コードを追っていくと、 外部システムから来たデータを受け取って、 NetSuite上のレコードを探したり更新したりしている。

そこまでつながって、 ようやくRESTletの役割が 見えてきました。

FIRST QUESTION

そもそも、
RESTletって何なんだろう。

RESTletという名前を見たとき、 最初は何をするものなのか よく分かっていませんでした。

コードを見ても、 普通の画面処理とは少し違う。

どこから呼ばれているのかも、 最初は分かりづらかったです。

調べながら処理を追っていくと、 RESTletは、 外部システムからNetSuiteへアクセスするための SuiteScriptの仕組みだと分かりました。

外部からHTTPリクエストを受け取って、 NetSuite側で処理する。

例えば、 JSONで送られてきたデータを受け取って、 レコードを登録したり更新したりする。

自分の中では、 「外部システムとNetSuiteをつなぐ入口」 と考えると一番分かりやすかったです。

NEXT QUESTION

じゃあ、
この処理はどこから来てる?

RESTletが外部との入口だと分かると、 次に気になったのが 「じゃあ、この処理は誰が呼んでいるんだろう」 というところでした。

NetSuiteの画面から始まる処理なら、 ボタンや画面遷移を追えば 入口を見つけやすいです。

でもRESTletは、 外部システムからリクエストが来て 処理が始まります。

なので、 RESTletのコードだけを見るより、 まず何が渡ってきているのか。

そのデータがどこから来たのか。

そこまで見る方が、 処理の意味をつかみやすかったです。

FLOW

1本の処理を、
最後まで追ってみる。

例えば、 外部システムから 顧客コードと更新する値が渡ってくる処理があったとします。

DATA JSON
{
    "customerCode": "CUST-001",
    "companyName": "サンプル株式会社"
}

RESTlet側では、 まずこのデータを受け取ります。

CODE RESTlet
function post(requestBody) {

    var customerCode =
        requestBody.customerCode;

    var companyName =
        requestBody.companyName;

    // このあと対象レコードを探して更新する

}

次に、 N/search で 対象のレコードを探します。

CODE N/search
var customerSearch = search.create({

    type: search.Type.CUSTOMER,

    filters: [
        ['externalid', 'is', customerCode]
    ],

    columns: [
        'internalid'
    ]

});

var results = customerSearch.run().getRange({
    start: 0,
    end: 1
});

対象が見つかったら、 N/record で読み込んで更新する。

CODE N/record
var customer = record.load({
    type: record.Type.CUSTOMER,
    id: results[0].id
});

customer.setValue({
    fieldId: 'companyname',
    value: companyName
});

customer.save();

こうやって、

外部からデータが来る

RESTletで受け取る

対象レコードを探す

NetSuite上のデータを更新する

という1本の流れで見ると、 RESTletが何をしているのか かなり分かりやすくなりました。

CHECK

エラーが出たら、
どこまで来ているかを見る。

外部連携でうまくいかないときも、 最初から全部を疑う必要はありません。

まず、 RESTletまでリクエストが来ているか。

必要な値が入っているか。

検索で対象レコードが見つかっているか。

更新処理まで進んでいるか。

ログを見ながら 一つずつ確認していくと、 問題の場所を絞りやすくなります。

RESTletだから特別というより、 ここでも結局やっていたのは 「どこまでは動いているのか」を 一つずつ確認することでした。

RESTletやMap/Reduceでは、 NetSuite上のデバッグ機能も かなり使っていました。

画面からコードを動かして確認したり、 デプロイしたスクリプトを実際に呼び出して、 ログを見ながら挙動を追ったりする。

使い方が分かると、 NetSuiteのデバッグ機能は かなり便利でした。

NetSuiteのデバッグ機能を使って処理を追った話 →

SUMMARY

RESTletだけを見るより、
データの流れを見る。

最初は 「RESTletって何?」 というところからでした。

そこから、 どこから呼ばれているのか。

何が渡ってきているのか。

NetSuite側で どのレコードを触っているのか。

一つずつ追っていくと、 RESTletの役割も見えてきました。

コード単体ではなく、
データがどこから来て、 どこへつながるのかを見る。

自分にとっては、 その見方が一番分かりやすかったです。