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