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本の処理を、
最後まで追ってみる。
例えば、 外部システムから 顧客コードと更新する値が渡ってくる処理があったとします。
{
"customerCode": "CUST-001",
"companyName": "サンプル株式会社"
}
RESTlet側では、 まずこのデータを受け取ります。
function post(requestBody) {
var customerCode =
requestBody.customerCode;
var companyName =
requestBody.companyName;
// このあと対象レコードを探して更新する
}
次に、
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 で読み込んで更新する。
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の役割も見えてきました。
コード単体ではなく、
データがどこから来て、
どこへつながるのかを見る。
自分にとっては、 その見方が一番分かりやすかったです。