/**
* 一括更新のカスタムスクリプトのテンプレート
* 自社でカスタム一括更新を作成したい場合に使用する。
* ファイル文字コード:Shift-Jis
* Version Date Author Remarks
* 1.00 2026/02/06 ichikura SuiteScript1.0
* @recType レコードタイプ(estimate,salesorder,purchaseorderなど)
* @recId レコードID(レコードの内部ID)
* 一括更新はこの引数は自動で入ります。
*/
function massUpdate(recType, recId) {
try {
// レコードをロード
// nlapiLoadRecord(type, id, initializeValues)
// レコード型のインスタンスが返ってくる
var record = nlapiLoadRecord(recType, recId);
// 値取得の例1:トランザクションIDの取得
// 読み込んだレコードに対して、内部IDを指定し、トランザクションIDの取得
// nlobjRecord.getFieldValue(internalId)
var tranid = record.getFieldValue('tranid');
// 値取得の例2:トランザクションIDの取得
// レコードタイプ、レコード内部ID、フィールド内部IDを指定して、トランザクションIDの取得
// こちらのほうがパフォーマンスがよいとされる、
// nlapiLookupField(type, internalId, fieldIds, text)
var tranid = nlapiLookupField(recType, recId, 'tranid');
// 値取得の例2:例2の続き
// fieldIdsを配列にして取得もできる。['email', 'phone', 'entityid']
var columns = nlapiLookupField(recType, recId, ['email', 'phone', 'entityid']);
var email = columns.email
var phone = columns.phone
var name = columns.entityid
// 値取得の例3:明細行数の取得
// getLineItemCount(group)
var itemCount = record.getLineItemCount('item');
// フィールド設定の例1:内部idを指定して値を設定
// setFieldValue(name, value)
record.setFieldValue('email', 'sample@xxx.co.jp');
// サブリストフィールド設定の例1:アイテムの全行に処理をするサンプル
// 明細行全部に何か処理をしたい場合、行数の指定は「1」から始めないといけないのでここはコツが必要
for (var i = 1; i <= itemCount; i++) {
// 数量取得
// getLineItemValue(group, name, linenum)
var qty = record.getLineItemValue('item', 'quantity', i);
// 数量変更を100に変更
// setLineItemValue(group, name, linenum, value)
record.setLineItemValue('item', 'quantity', i, 100)
}
// サブミットして保存
// 環境によっては、保存後のワークフローが実行される場合もある
nlapiSubmitRecord(record);
} catch (e) {
nlapiLogExecution('ERROR', '処理エラー', e.message);
// 一括更新の場合は、条件にヒットした件数を全件処理するまで中断しないので、
// 中断させた場合は、ここで再スローしたほうがいいかも。
// 例:ログ出力のサンプル
// nlapiLogExecution(type, title, details)
nlapiLogExecution('DEBUG', 'ログタイトル', 'ログの中身');
nlapiLogExecution('AUDIT', 'ログタイトル', 'ログの中身');
nlapiLogExecution('EMERGENCY', 'ログタイトル', 'ログの中身');
nlapiLogExecution('ERROR', 'ログタイトル', 'ログの中身');
}
}