注文書を作成または編集する際、すべてのアイテム・ラインに同じ場所を適用する必要がある場合があります。たとえば、すべてのアイテムを同じ倉庫から出荷する場合や、配送を単一の配送センターで処理する必要がある場合があります。これは、特に多くのライン・アイテムがある注文に対して手動で行うと、時間がかかり、エラーが発生しやすくなります。
このプロセスを簡略化するために、SuiteScriptを利用して、すべてのアイテム・ラインを単一の場所で自動的に更新できます。このアプローチにより、正確性が確保され、手作業が軽減され、注文管理の一貫性が維持されます。
重要: 「場所」フィールドが「注文書」フォームに表示されるようにしてください。表示されないと、「アイテム」サブリストに表示されず、スクリプトで更新できなくなります。
次に、同じ場所のすべてのアイテム・ラインを更新する定期スクリプトのサンプルを示します。
/**
* @NApiVersion 2 .x
* @NScriptType ScheduledScript
*/
define(['N/search', 'N/record', 'N/log'], function(search, record, log) {
function execute(context) {
try {
var salesOrderId = 12345; // <-- your Sales Order internal ID
var newLocationId = 1; // <-- your target location's internal ID
var soRecord = record.load({
type: record.Type.SALES_ORDER,
id: salesOrderId
});
var lineCount = soRecord.getLineCount({ sublistId: 'item' });
for (var i = 0; i < lineCount; i++) {
soRecord.setSublistValue({
sublistId: 'item',
fieldId: 'location',
line: i,
value: newLocationId
});
var itemId = soRecord.getSublistValue({
sublistId: 'item',
fieldId: 'item',
line: i
});
log.debug('Updated Item Line', 'Line: ' + i + ', Item ID: ' + itemId + ', New Location: ' + newLocationId);
}
// Save your changes!
var updatedId = soRecord.save();
log.audit('Sales Order Updated', 'Record ID: ' + updatedId);
} catch (e) {
log.error('Error Updating Sales Order', e);
}
}
return {
execute: execute
};
});
コード・スニペット | 説明 |
|---|
var salesOrderId = 12345;var newLocationId = 1; | 注文書およびターゲットの場所の内部IDを定義します。必要に応じて、これらの値を更新します。 |
var soRecord = record.load({ type: record.Type.SALES_ORDER, id: salesOrderId }); | 内部IDを使用して注文書レコードをロードします。 |
var lineCount = soRecord.getLineCount({ sublistId: 'item' }); | 「アイテム」サブリスト内のライン数(アイテム)を取得します。 |
for (var i = 0; i < lineCount; i++) { ... } | サブリスト内の各アイテム・ラインを反復処理します。 |
soRecord.setSublistValue({ sublistId: 'item', fieldId: 'location', line: i, value: newLocationId }); | 各アイテム・ラインの「場所」フィールドを新しい場所に設定します。 |
var itemId = soRecord.getSublistValue({ sublistId: 'item', fieldId: 'item', line: i }); | ロギングまたはそれ以上の使用のためにアイテム内部IDを取得します。 |
log.debug('Updated Item Line', ...); | 検証のために更新の詳細(ライン番号、アイテムID、新しい場所)を記録します。 |
var updatedId = soRecord.save(); | すべてのライン・レベルの変更を含む注文書レコードを保存します。 |
log.audit('Sales Order Updated', 'Record ID: ' + updatedId); | 監査の完了および最終注文書IDを記録します。 |
catch (e) { log.error('Error Updating Sales Order', e); } | トラブルシューティングの処理中に発生したエラーを捕捉してログに記録します。 |
ここに記載されているサンプルコードは、法律で許可される最大限の範囲で、いかなる種類の保証もなく「現状のまま」提供されます。Oracle + NetSuite Inc. は、サンプルコードの開発プラットフォームへの実装や、独自のWebサーバー構成の使用において、開発者の個々の成功を保証または保証しません。
Oracle + NetSuite Inc. は、サンプルコードに関連するデータまたは情報の使用、使用結果、正確性、適時性、完全性に関して、いかなる保証も行わず、すべての保証(明示的または黙示的)を否認します。特に、商品性、特定の目的への適合性、コードに関連するサービスまたはソフトウェアに関する保証を否認します。
Oracle + NetSuite Inc. は、サンプルコードに関連する行動から生じるいかなる種類の直接的、間接的または結果的な損害や費用についても責任を負いません。
SuiteScriptのデプロイの詳細は、これらのNetSuiteの始め方記事を確認してください。
SuiteScriptを使用してレコードを自動化する方法について、別の方法をご存じですか。ここで自由に共有しましょう!