適用
製品: NetSuite 2023.1
シナリオ
APIの戻り値を演算に参照する時、結果が誤ります。
nlapiGetFieldValueとかnlapiGetCurrentLineItemValue等のSuiteScript APIの戻り値の種類は文字列です。それぞれのAPIの戻り値は演算にて直接に使用できるが、結果は誤ることもあります。以下のサンプルコードを参照します。
var field1 = nlapiGetCurrentLineItemValue('item', 'custcol1');
var field2 = nlapiGetCurrentLineItemValue('item', 'custcol2');
var field3 = nlapiGetCurrentLineItemValue('item', 'custcol3');
var field4 = nlapiGetCurrentLineItemValue('item', 'custcol4');
var field5 = nlapiGetCurrentLineItemValue('item', 'custcol5');
//field1 = 3, field2 = 1, field3 = 2, field4 = 1, field5 = 1
var UnitWeight = nlapiGetCurrentLineItemValue('item', 'custcol_unit_weight');
var GalvRate = nlapiGetCurrentLineItemValue('item', 'custcol_galv_rate');
var ZincLevyRate = nlapiGetCurrentLineItemValue('item', 'custcol_zinc_levy_rate');
var PackingCost = nlapiGetCurrentLineItemValue('item', 'custcol_packing_cost');
var LidsCost = nlapiGetCurrentLineItemValue('item', 'custcol_lids_cost');
var answer = (field1*field2)+(field1*field3)+(field4)+(field5);
サンプルの値:
結果の実績値:911
結果の期待値:11
解決策
掛け算によって、field1, field2, field3は数字に変換されるため、演算結果は9で正しくなります。然し、field4とfield5は文字列のままとなります。ネイティブJavaScriptに従って、「数字 + 文字列 = 文字列」になります。そのため、field4とfield5は9として連結されます。
SuiteAnswers 10282 サブリストAPI > nlapiGetCurrentLineItemValue(type, fldnam)によると、現時点で選択されているラインの値は文字列として返して、未存在の場合は「null」を返します。
field4とfield5は1で掛け算して数字に自動変換される場合、解決できます。他のJavaScriptのメソッドのparseFloatのようを使用できますが、精度等を考慮する必要があります。以下を参照します。
var answer = (field1*field2)+(field1*field3)+(field4*1)+(field5*1);
免責事項
ここに記載されているサンプルコードは、法律で認められている最大限の範囲で、いかなる種類の保証もなく、「現状のまま」で提供されています。Oracle+NetSuite社は、開発者がそれぞれの開発プラットフォームにサンプルコードを実装したり、独自の Web サーバー構成を使用したりする際に、個々の成功を保証するものではありません。
Oracle + NetSuite社は、サンプルコードに関連するデータまたは情報の使用、使用結果、正確性、適時性または完全性に関して、いかなる保証も行わず、表明もしません。Oracle + NetSuite社は、明示的にも黙示的にもすべての保証を放棄し、特に、商品性、特定目的への適合性、およびコード、またはそれに関連するサービスやソフトウェアに関連する保証を放棄します。
Oracle + NetSuite社は、本サンプルコードに関連してお客様または他者が行った行為に起因するいかなる種類の直接的、間接的または結果的な損害または費用についても責任を負いません。