SuiteScriptの概要と種類をサンプルコード付きで解説

NetSuiteを柔軟にカスタマイズするための強力なツール、それが SuiteScript です。業務プロセスの効率化からデータ処理の自動化、外部システムとの連携まで、幅広い用途に対応します。
今回は、SuiteScriptの概要と主な種類について解説し、それぞれのスクリプトの簡単なサンプルコードもご紹介します。

SuiteScriptとは?

SuiteScriptはNetSuiteのカスタマイズフレームワークで、JavaScriptを基盤としています。このスクリプトを利用することで、以下のことが可能になります:
業務フローの自動化:繰り返し作業や入力の自動化
データ処理のカスタマイズ:特定条件でのデータ操作
システム連携:外部システムとのデータのやり取り
SuiteScriptは用途ごとにいくつかの種類が用意されています。それぞれに得意な役割がありますので、適切なスクリプトを選ぶことが重要です。

SuiteScriptの種類とサンプルコード

1. Client Script(クライアントスクリプト)

概要

ユーザーがNetSuite画面を操作するときに動作します。入力内容の検証や、フィールド値の自動変更などに利用されます。

サンプルコード

以下は、保存前に「金額」が空欄でないかチェックするクライアントスクリプトの例です。

/**
* @NApiVersion 2.x
* @NScriptType ClientScript
*/
define(['N/ui/message'], function(message) {
function saveRecord(context) {
var currentRecord = context.currentRecord;
var amount = currentRecord.getValue({ fieldId: 'amount' });

if (!amount) {
alert('金額は必須項目です。入力してください。');
return false; // 保存をキャンセル
}
return true; // 保存を許可
}
return {
saveRecord: saveRecord
};
});

2. User Event Script(ユーザーイベントスクリプト)

概要

レコードが保存、編集、削除されるタイミングで実行されます。値の自動設定や、関連レコードの更新に適しています。

サンプルコード

以下は、新しい顧客レコードが保存される前に「メモ」を設定する例です。

/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
*/
define(['N/record'], function(record) {
function beforeSubmit(context) {
if (context.type === context.UserEventType.CREATE) {
var newRecord = context.newRecord;
newRecord.setValue({ fieldId: 'memo', value: '新規顧客です。' });
}
}
return {
beforeSubmit: beforeSubmit
};
});

3. Scheduled Script(スケジュールスクリプト)

概要

定期的なバッチ処理や大規模なデータ処理に使用します。

サンプルコード

以下は、顧客レコードの「メモ」を一括更新するスクリプトの例です。

/**
* @NApiVersion 2.x
* @NScriptType ScheduledScript
*/
define(['N/record', 'N/search'], function(record, search) {
function execute(context) {
var customerSearch = search.create({
type: search.Type.CUSTOMER,
filters: [],
columns: ['internalid']
});

customerSearch.run().each(function(result) {
var customerId = result.getValue({ name: 'internalid' });
var customerRecord = record.load({
type: record.Type.CUSTOMER,
id: customerId
});

customerRecord.setValue({
fieldId: 'memo',
value: 'スケジュールスクリプトによる更新'
});
customerRecord.save();
return true; // 次のレコードへ
});
}
return {
execute: execute
};
});

4. Suitelet(スイートレット)

概要

カスタムUIや独自のデータ入力フォームを作成する際に使用します。

サンプルコード

以下は、簡単なHTMLフォームを表示するスイートレットの例です。

/**
* @NApiVersion 2.x
* @NScriptType Suitelet
*/
define(['N/ui/serverWidget'], function(serverWidget) {
function onRequest(context) {
if (context.request.method === 'GET') {
var form = serverWidget.createForm({ title: 'カスタムフォーム' });
form.addField({
id: 'custpage_field',
type: serverWidget.FieldType.TEXT,
label: 'テキストフィールド'
});
form.addSubmitButton({ label: '送信' });
context.response.writePage(form);
}
}
return {
onRequest: onRequest
};
});

5. Map/Reduce Script(マップリデューススクリプト)

概要

大規模なデータ処理を効率的に行うための並列処理スクリプトです。

サンプルコード

以下は、顧客レコードを更新するマップリデューススクリプトの例です。

/**
* @NApiVersion 2.x
* @NScriptType MapReduceScript
*/
define(['N/record', 'N/search'], function(record, search) {
function getInputData() {
return search.create({
type: search.Type.CUSTOMER,
filters: [],
columns: ['internalid']
});
}

function map(context) {
var customerId = JSON.parse(context.value).id;
var customerRecord = record.load({
type: record.Type.CUSTOMER,
id: customerId
});

customerRecord.setValue({
fieldId: 'memo',
value: 'マップリデューススクリプトで更新'
});
customerRecord.save();
}

return {
getInputData: getInputData,
map: map
};
});

まとめ

SuiteScriptを活用することで、NetSuiteをより柔軟にカスタマイズし、業務効率を向上させることができます。今回ご紹介した各スクリプトのサンプルコードを参考に、実際に試してみてはいかがでしょうか?

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です