2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【NetSuite開発者必見!】ユーザーイベントスクリプトからユーザーイベントスクリプトを呼び出せない!?③

Last updated at Posted at 2025-02-26

こんにちは。Oracle NetSuiteパートナー EvangSolの湯浅です。
今回で最終回となります、弊社エンジニアが直面した、ユーザーイベントスクリプト(User Event Script:以下UE)からUEが呼び出せない事象について、具体的な対応策の後半部分とまとめについてご紹介いたします。

対応策3. Suiteletを利用する(リアルタイム処理+ユーザーコンテキストの継承)

Suiteletを使えば、現在のユーザーコンテキストを継承したまま別の処理を実行できます。同期的に動作するため、フロントエンドの操作とあわせた処理が必要な場合に適しています。

手順例:

  1. Suiteletスクリプトを作成
  2. UE内でN/redirectを使ってSuiteletにリダイレクトし、必要なパラメータを渡す

コード例(抜粋):
〇ユーザーイベントスクリプト側

/**
  * @NApiVersion 2.x
  * @NScriptType UserEventScript
  * @NModuleScope SameAccount
*/
  define(['N/log','N/redirect'],
  function(log, redirect) {
    function afterSubmit(context) {
      // logging for test
      log.debug({
        title: '****************Start**************'
      });
      //The page will redirect to Suitelet on After Submit function and pass the parameter/s to it
      redirect.toSuitelet({
        scriptId: 'customscript148' ,
        deploymentId: 'customdeploy1',
        parameters: {
          'recordId':'1273'
        }
      });
    }
    return {
    afterSubmit: afterSubmit
    };
});

〇Suitelet側

/**
  * @NApiVersion 2.x
  * @NScriptType Suitelet
  * @NModuleScope SameAccount
 */
define(['N/record','N/log'],
function(record,log) {
  function onRequest(context) {
    var requestparam = context.request.parameters;
    log.debug({
      title: 'Parameter: Record ID',
      details: requestparam.recordId
    });
    var objRecord = record.load({
      type: record.Type.PURCHASE_ORDER,
      id: requestparam.recordId,
      isDynamic: true,
    });
    objRecord.setValue({
      fieldId: 'memo',
      value: 'Sample Comment',
      ignoreFieldChange: true
    });
    objRecord.save();
  }
  return {onRequest: onRequest};
});

Suitelet vs RESTlet:どちらを選ぶべき?

比較項目 Suitelet RESTlet
UIの提供 可能(フォーム、HTML表示等) 不可(データ交換のみ)
アクセス方法 ブラウザ経由、内部スクリプト API呼び出し(外部アクセス容易)
処理特性 同期処理(リアルタイム向け) 非同期処理(高速・バッチ向け)
外部連携 やや難しい 容易(統合ツールとの連携に最適)
パフォーマンス 比較的遅い(複雑処理で遅延有) 軽量で高速
権限管理 ユーザーセッションに依存 APIキーやOAuthなど簡易管理可能

対応策4. ワークフローを活用する(ノーコードで解決!)

「そもそもコーディングしたくない」という場合には、NetSuiteのワークフロー機能を使うのも一つの手です。

手順例:

  1. レコード更新時のアクションをワークフローで設定
  2. 必要があればアクションからスクリプトを呼び出し
    ノーコードで比較的簡単に実装できるため、非エンジニアの方でも活用しやすい方法です。

まとめ – 最適な方法を選んでNetSuite開発を快適に!

「UEから別のUEを直接呼べない」というNetSuite特有の制約は一見厄介ですが、スケジュールドスクリプト・RESTlet・Suitelet・ワークフローなどを活用すれば、目的の処理を実現できます。

  • 即時処理が必要:RESTlet、あるいはSuitelet
  • 後でまとめて処理したい:スケジュールドスクリプト
  • ノーコードで対応したい:ワークフロー

要件や運用体制に合わせて最適な方法を選び、NetSuiteでの開発効率をさらに高めていきたいものです。ぜひ今回の対応策を参考にしていただき、NetSuiteライフをより快適に過ごしていただければと思います。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?