ディスカッション
AIを用いた自動化で請求書処理を合理化
AIを用いた考察を使用して、計画と予測を迅速化
Here are some examples to get your creative juices flowing.
"Did I pay vendor John Doe last month?"
"Take me to my largest sales order for this month."
"What invoices haven't been paid yet?"
クライアントスクリプトのポストソーシング関数で支払請求書の 経費のラインアイテムを編集し、追加するラインアイテムを選択
適用
製品: NetSuite 2022.1
シナリオ
クライアントスクリプトのポストソーシングで支払請求書のメインボディーのラインフィールドを更新しています。そのスクリプトで、フィールドは正常に記入できたが、経費サブリストのみでラインを記入して保存すれば、「アイテムサブリストにラインを追加してください」のエラーが発生してしまいます。ユーザーは手動でアイテムサブリストの記入をキャンセルして保存できるようになります。
修正前のスクリプトは以下です。
function PopulateValue(type, name) { if(type === 'expense' && name === 'account') { var x = nlapiGetFieldValue('memo'); var y = nlapiGetFieldValue('tranid'); nlapiSetCurrentLineItemValue('expense', 'custcol_memo', x); nlapiSetCurrentLineItemValue('expense', 'custcol_tranid', y); } else if (type === 'item' && name === 'item') { var x2 = nlapiGetFieldValue('memo'); var y2 = nlapiGetFieldValue('tranid'); nlapiSetCurrentLineItemValue('item', 'custcol_memo', x2); nlapiSetCurrentLineItemValue('item', 'custcol_tranid', y2); } }
上記コードで懸念は2つあります。
- 1つ目は「===」の演算子です。
- 「===」とは、「Strict Equality Comparison」(等しさを厳しく比較)と呼ばれています。
- 値とデータタイプを比べて判断します。
- 例
- 0 == false //真
- 0 === false //否:データ型のIntegerとBooleanは不一致
- 1 == "1" //真:数字は数値に自動変換
- 1 === "1" //否:データ型のInteger型とString型は不一致
- null == undefined //真
- null === undefined //否
- '0' == false //真
- '0' === false //否
- 2つ目はスクリプトのエントリーポイントはポストソーシングです。
- 元々、スクリプトは経費サブリストやアイテムサブリストのポストソーシングやフィールド変更後関数を実行しています。
- 支払請求書の何れかのフィールドを更新する場合、アイテムサブリストや経費サブリストにもソーシングされています。
- 例:
- メインラインから以下のサブリストフィールドをソーシングします。
- メインラインの支払請求書番号 → アイテムサブリストの仕入先請求書番号
- メインラインの仕入先 → アイテムサブリストの仕入先リスト
- 以下の手順で問題を再現できます。
- 新しい支払請求書を作成(トランザクション > 買掛金 > 支払請求書を入力)
- メインラインの仕入先を対象仕入先に設定
- メインラインの仕入先からアイテムサブリストの仕入先リストをソーシング
- アイテムサブリストのソーシングでフィールド変更後関数は実行される
- アイテムサブリストのフィールド変更でポストソーシング関数も実行される
- アイテムラインを追加
- 経費ラインアイテムを追加して、必須のフィールドも記入
- 保存を押下すると、「アイテムを追加してください」のエラーが発生
- メインラインから以下のサブリストフィールドをソーシングします。
解決策
カスタマイゼーション > スクリプト > スクリプト へ移動
修正するスクリプトを選択
スクリプトのサブタブでスクリプトファイルを編集
以下のIF条件を修正して、「===」を「==」に変更
function PopulateValue(type, name){ if(type == 'expense' && name == 'account') ...insert code... } else if (type == 'item' && name == 'item'){ ...insert code... } }
スクリプトエディターで保存を押下
スクリプトのページで編集ボタンを押下
対象関数をポストソーシング関数からフィールド変更後関数へ切り貼り
スクリプトページで保存を押下
免責事項
ここに記載されているサンプルコードは、法律で認められている最大限の範囲で、いかなる種類の保証もなく、「現状のまま」で提供されています。Oracle+NetSuite社は、開発者がそれぞれの開発プラットフォームにサンプルコードを実装したり、独自の Web サーバー構成を使用したりする際に、個々の成功を保証するものではありません。
Oracle + NetSuite社は、サンプルコードに関連するデータまたは情報の使用、使用結果、正確性、適時性または完全性に関して、いかなる保証も行わず、表明もしません。Oracle + NetSuite社は、明示的にも黙示的にもすべての保証を放棄し、特に、商品性、特定目的への適合性、およびコード、またはそれに関連するサービスやソフトウェアに関連する保証を放棄します。
Oracle + NetSuite社は、本サンプルコードに関連してお客様または他者が行った行為に起因するいかなる種類の直接的、間接的または結果的な損害または費用についても責任を負いません。