0

あなたが助けてくれることを願っています。私は現在、ユーザー イベント スクリプトを介して最も単純なタスクの 1 つを実行しようとしています。つまり、販売注文の「割引率」フィールドに新しい値を設定することです。スクリプトをクライアントでテストすると正常に動作しますが、スケジュールされたスクリプトがトリガーされると、フィールドの設定/更新に失敗します。

次のコードは「beforesubmit」操作内にあります。私が間違ったことを見つけられますか?

function beforeSubmit_discountVAT(type){

if(nlapiGetContext().getExecutionContext() !='scheduled')
    return;

  var getDiscountVal = nlapiGetFieldValue('discountrate');
  var correctDiscount = getDiscountVal / 1.2;
  nlapiSetFieldValue('discountrate', correctDiscount);
}

要するに - 私がしたいのは、割引値を 20% 差し引くことだけです。ユーザー イベント スクリプトがスケジュールされたスクリプトからトリガーされた場合、「nlapiSetFieldValue」を使用できますか?

前もって感謝します。

AWB

4

3 に答える 3

2

既存のレコードを編集する場合nlapiSetFieldValue、レコードと共に保存されているフィールドのロード前イベントでは使用できません。関数の JSDocs から:

特定の本文フィールドの値を設定します。この API をユーザー イベントの beforeLoad スクリプトで使用して、新しいレコードまたは保存されていないフィールドのフィールドを初期化できます。

nlapiSetFieldValueしたがって、新しいレコードまたは保存されていないフィールドのロード前にのみ確実に使用できます。

これが 1 か月前のものであることに気付いたので、おそらく解決策を見つけたので、コードを送信前イベントに移動します。スケジュールされたスクリプトを使用してこれをテストしました:

var customer = nlapiLoadRecord('customer', '31294');
nlapiSubmitRecord(customer);

顧客レコードのユーザー イベント、送信前イベント:

if (nlapiGetContext().getExecutionContext() === 'scheduled') {
    nlapiSetFieldValue('url', 'http://www.google.com/', false);
}

これは、2013.1 サンドボックス環境で期待どおりに機能します。

他の回答で述べたように送信後に使用nlapiSubmitFieldすることは、余分なガバナンス ユニットを使用する不必要に長い操作です。それがスクリプトの唯一の処理である場合は大したことではありませんが、スクリプトを拡張したりループを追加したりすると、パフォーマンスとガバナンスの使用の点ですぐに加算される可能性があります。

getDiscountValまた、必要ではないかもしれませんが、次のことを行うことで確実にする必要がありますNumber

var getDiscountVal = parseInt(nlapiGetFieldValue('discountrate'), 10);

として戻ってきたString場合、除算演算によって奇妙な結果が得られ、nlapiSetFieldValue失敗したり、フィールドが奇数に設定されたりする可能性があります。

于 2013-05-16T01:01:00.803 に答える
0

2つの提案

  • いくつかの nlapiLogExecution ステートメントを追加して、スクリプトが実行されていることを確認してください
  • beforesubmit で行う代わりに、nlapiSubmitField を使用して aftersubmit 関数でこのフィールドを変更します。
于 2013-03-28T06:35:34.083 に答える
0

"スケジュールされたスクリプトからユーザー イベント スクリプトがトリガーされた場合、「nlapiSetFieldValue」を使用できますか? "

ええ 絶対にそうです。Context も正しい予定です。

最後にレコード nlapiSubmitRecord(recordObj) を送信していることを確認してください。

nlapiSubmitRecord() に慣れていない場合は、明らかに nlapiSubmitField() を使用できます

それでも問題が解決しない場合は、完全なコードを貼り付けてください。サポートさせていただきます。

乾杯!!!

于 2013-09-04T14:41:17.320 に答える