サーチ…


前書き

イベント駆動型システムを使用してSuiteScriptのカスタマイズを作成します。それぞれ独自のイベント・セットを持つさまざまなタイプのスクリプト・レコードを定義します。ソース・ファイルには、発生したイベントを処理するために呼び出される関数を定義します。

スクリプトは、アプリケーションを設計して構築するための主要コンポーネントの1つです。この記事の目標は、利用可能なスクリプトの種類とイベントについて知ることです。

クライアントスクリプト

クライアントスクリプトは、より一般的に使用される複雑なスクリプトタイプの1つです。その名前が示すように、クライアントスクリプトはブラウザ、つまりクライアント側で実行されます。これは、クライアント側で実行される唯一のスクリプトタイプです。他はすべてNetSuiteのサーバー側で実行されます。

クライアントスクリプトの主な用途は、NetSuite UI内のレコードフォームとのユーザー対話に応答することです。

ユーザーが編集モードでレコードフォームを読み込むとすぐに、フォームが初期化されたときにコードを実行してユーザーが操作できるようにするためにpageInitイベントが発生します。

その後、ユーザーがフォーム上のフィールドを変更すると、一連のイベントが発生します。

  1. validateFieldイベントが発生し、ユーザーがフィールドに入力しようとしている値を検証できます。これを使用して、変更が受け入れられたり、変更が行われたりするのを防ぐことができます。
  2. fieldChangedイベントが発生すると、フィールド内の新しい値に応答することができます。
  3. 最後に、 postSourcingイベントは、すべての従属フィールドの値がソースとなった後に発生します。これは、私たちは変化に対応し、我々は正しいデータの全てで作業していることを確認することができます。

この一連のイベントは、ユーザーがボディフィールドまたはサブリストフィールドを変更しているかどうかにかかわらず発生します。

ユーザーがサブリスト行を変更すると、別の一連のイベントがトリガーされます。

  1. lineInitイベントは、ユーザーが最初に新しい行または既存の行を選択するたびに、行のフィールドに変更を加える前に発生します。
  2. ユーザーが追加ボタンをクリックして新しい行を追加すると、 validateLineイベントが発生し、行全体が有効でレコードに追加できることを確認できます。
  3. ユーザーは既存のものの上に新しい行を追加するには、[挿入]ボタンをクリックするたびに、 validateInsertイベントが正確に同じように動作しており、発射されたvalidateLineイベント。
  4. 同様に、ユーザーが行を削除しようとするたびに、行の削除を許可または拒否できるvalidateDeleteが起動されます。
  5. 行への変更は、トランザクションの合計額に変更を行った場合、[のSuiteScript 1.0だけは最後に、適切な検証イベントが成功した後、その後、 recalcイベントは私たちの量の変化に対応することを可能に発射されますトランザクション。
  6. [SuiteScript 2.0のみ]最後に、適切な検証イベントが成功した後、 sublistChangedイベントが発生して、完了したライン変更に応答することができます。

最後に、レコードのSaveボタンをクリックすると、 saveRecordイベントが発生し、レコードが有効で保存可能かどうかを検証できます。保存が行われないようにするか、このイベントを続行することができます。

クライアントスクリプトは、スクリプトの種類のイベントが最も多く、そのイベント間の最も複雑な関係も持っています。

ユーザイベントスクリプト

Client Scriptには、User Event Scriptが密接に関連しています。このスクリプトタイプのイベントは、レコードがロードまたは保存されるときに再び発生しますが、代わりにサーバー側で実行されます。そのため、フィールドの変更に即座に対応するのに使用することはできませんが、フォーム上のレコードと対話するユーザーに限定されません。

ユーザーイベントスクリプトは、ユーザーがUIで作業しているかどうか、サードパーティの統合、または要求を行っている別の内部スクリプトのいずれであっても、ロードまたは送信要求がどこから来ても実行されます。

プロセスまたはユーザーがデータベースからレコードを読み取ろうとするたびに、ユーザーイベントのbeforeLoadイベントがトリガーされます。これを使用して、データを事前処理したり、デフォルト値を設定したり、ユーザーが表示する前にUIフォームを操作することができます。

プロセスまたはユーザーが新しいレコードの作成、既存のレコードの編集、またはレコードの削除のいずれであっても、データベースにレコードを送信しようとすると、次のシーケンスが発生します。

  1. まず、リクエストが実際にデータベースにbeforeSubmitれる前に、 beforeSubmitイベントが発生します。たとえば、このイベントを使用して、データベースに入る前にレコードをクリーンアップすることができます。
  2. 要求はデータベースに送信され、それに応じてレコードが作成/変更/削除されます。
  3. データベース処理が完了すると、 afterSubmitイベントが発生します。たとえば、このイベントを使用して、変更の電子メール通知を送信したり、統合されたサードパーティシステムと同期することができます。

このスクリプトタイプのイベントを視覚化するのに役立つ一連のビデオを見ることもできます。

スケジューリングされたスクリプトとマップ/縮小スクリプト

特定の定期的な間隔でバックグラウンド処理を実行するために利用できるスクリプトには2種類あります。これらはScheduledスクリプトとMap / Reduceスクリプトです。 Map / Reduceスクリプトの種類は、SuiteScript 2.0でのみ使用できます。 Scheduledスクリプトは、1.0と2.0の両方で使用できます。

スケジュールされたスクリプトは、あなたが定義したスケジュールどおりにトリガされる単一のexecuteイベントしか持っていません。たとえば、支払いを請求書に適用する夜間スクリプトや、外部システムとデータを同期させる時間別スクリプトを実行することができます。時間間隔がヒットすると、NetSuiteはScheduledスクリプトでこのexecuteイベントを発生させます。

Map / Reduceスクリプトも同様に動作しますが、トリガーされると処理が4つの異なるフェーズに分割されます。

  1. getInputDataフェーズでは、ビジネスプロセスを完了するために必要なすべての入力データを収集します。このフェーズを使用して、検索を実行し、レコードを読み取り、解読可能なデータ構造にデータをパッケージ化することができます。
  2. NetSuiteは自動的にgetInputDataフェーズの結果をmapと呼ばれる第2フェーズに渡しmap 。このフェーズでは、入力データを論理的にグループ化して処理します。たとえば、請求書に支払いを適用する場合は、最初に顧客別に請求書をグループ化することができます。
  3. mapフェーズの結果は、実際の処理が行われるreduceフェーズに渡されます。この例では、実際に支払いを請求書に適用します。
  4. 最後に、前の3つのフェーズでのすべての処理の結果に関するデータを含むsummaryフェーズが呼び出されます。これを使用して、処理が完了したレポートを生成したり、電子メールを送信したりすることができます。

Map / Reduceスクリプトの主な利点は、NetSuiteが複数のキュー(使用可能な場合)にまたがって処理を自動的に並列化することです。

これらのスクリプトタイプはいずれもガバナンス制限が非常に大きいため、バルク処理や一般的に長時間実行されるバックグラウンドプロセスにも使用できます。

これらのスクリプトタイプのいずれかの最短間隔は、15分ごとに実行するように設定できます。

これらのスクリプトの両方のタイプは、必要に応じて、ユーザーまたは他のスクリプトによってオンデマンドで呼び出すこともできます。

スイートレットとポートレットのスクリプト

しばしば、私たちはNetSuiteでカスタムUIページを構築したいと思うでしょう。スイートレットに入ってください。 Suiteletスクリプトは、内部のカスタムUIページを構築するために設計されています。ページは自由形式のHTMLでも、NetSuiteのUI Builder APIを利用してNetSuiteのルックアンドフィールに従うフォームを構築することもできます。

展開されると、Suiteletは独自の一意のURLを受け取ります。スイートレットには、HTTP GETまたはPOSTリクエストでそのURLがヒットしたときに呼び出される単一のrenderイベントがあります。通常、 GET要求への応答は、フォーム自体をレンダリングすることであり、フォームはフォームデータを処理するために自身にPOSTます。

また、スイートレットを活用して、NetSuiteの「アシスタント」UIコンポーネントを使用してウィザードスタイルのUIプログレスを構築することもできます。

ポートレットはSuiteletと非常に似ていますが、完全なカスタムページではなくカスタムダッシュボードウィジェットを構築するために特に使用されます。それ以外は、2つのスクリプトの種類は非常に似ています。

RESTlet

RESTletを使用すると、カスタムRESTベースのエンドポイントをNetSuiteに組み込むことができます。したがって、RESTletはNetSuiteへのほぼすべての統合のバックボーンを形成します。

RESTletは、最も一般的に使用される4つのHTTPリクエストメソッドの個別イベントハンドラを提供します。

  • GET
  • POST
  • PUT
  • DELETE

RESTletは要求を受け取ると、使用されているHTTP要求メソッドに基づいて適切なイベントハンドラ関数に要求をルーティングします。

RESTletへの認証は、ユーザーセッション、HTTPヘッダー、またはOAuthトークンを使用して行うことができます。

一括更新スクリプト

一括更新スクリプトを使用して、ユーザーが実行するカスタム一括更新を構築することができます。これは、通常の一括更新と同様に機能します。ユーザーが一括更新の種類を選択し、更新するレコードを返す検索を作成し、各検索結果がカスタム一括更新スクリプトに個別に渡されます。

このスクリプトは、更新されるレコードの内部IDとレコードタイプを受け取るイベントハンドラを1つeach提供します。

一括更新スクリプトは、標準の一括更新インタフェースを使用してユーザが手動で起動する必要があります。

一括更新スクリプトはガバナンス制限が非常に高く、よく使用されるカスタム一括処理を対象としています。

ワークフローアクションスクリプト

ワークフローの機能は多少制限されています。たとえば、ワークフローはラインアイテムと対話できません。ワークフローアクションスクリプトタイプは、ワークフロー自体が実行できないことを達成するためのスクリプト機能を追加するために、ワークフローによって呼び出されることを意図しています。

ワークフローアクションには、ワークフローによって呼び出される単一のonActionイベントハンドラがあります。

バンドルインストールスクリプト

最後に、Bundle Installationスクリプト・タイプを用意しました。これは、特定のバンドルのインストール、更新、およびアンインストールと対話できるようにするいくつかのイベントを提供します。これはまれに発生するスクリプトタイプですが、それにもかかわらず注意することが重要です。

バンドルのインストールには、以下のイベントハンドラが含まれています。

  • beforeInstall
  • afterInstall
  • beforeUpdate
  • afterUpdate
  • beforeUninstall


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow