サービス・レベルの変換
通常、サービス・レベルの変換はバックエンドに適用されるため、バックエンドのサービス接続およびサービス接続のエンドポイントによって継承できます。 ただし、RESTリソース間、またはシステムのエンドポイント(GETとPOST)間で区別する必要がある場合は、サービス接続またはそのエンドポイントについて、別の.js変換ファイルを選択するか、新しいファイルを作成できます。
サービス・レベル変換の階層内では、エンドポイントで最初に変換ファイルがチェックされ、次にサービス接続、次に子バックエンド(存在する場合)、最後にバックエンドがチェックされます。 見つかった最初の変換ファイルが使用されます。上位レベルの変換はすべて無視されます。
バックエンド、サービス接続またはエンドポイントの変換関数を表示するには、その「設定」タブに移動し、「変換」セクションの「ファイルに移動」リンクをクリックします。 新しい変換関数を作成するには、「ソース」ドロップダウン・リストをクリックし、「作成」を選択します。
サービス・レベルの変換の作成の例
次のステップでは、サービス接続のバックエンドを作成し、新しいバックエンドとそのサービス接続エンドポイントのテンプレート変換関数を使用してファイルを作成する方法を示します:
- 「サービス」パネルを開き、「バックエンド」タブを選択し、「+」アイコンをクリックして「バックエンド」を選択します。
- バックエンドの作成ウィンドウで、「カスタム」を選択してカスタム・バックエンドを作成します。
- カスタム・バックエンドの名前を指定し、オプションでその説明を入力します。
- インスタンスURLおよびその他の必要な詳細を入力します。 後でバックエンドのサービス接続を作成するときに、このURLがエンドポイントを定義するベースとして使用されます。 「作成」をクリックしてバックエンドを作成します。
- 新しいバックエンドのテンプレート変換関数を使用してファイルを作成できるようになりました。 「設定」タブの「変換」セクションで、「ソース」ドロップダウン・リストをクリックし、「作成」を選択します。
- 変換ファイルのファイル名を指定します:
- 「ベース変換」ドロップダウンで、すべての変換関数のベース・コードを指定するファイルを選択します。 ADF REST APIの場合、このファイルは常に選択されます。
- 「関数」で、変換ファイルに追加する関数を選択し、「OK」をクリックします。 選択しない関数は、変換ファイルに追加されません。
- 変換ファイルが作成されたら、「ソース」フィールドの下の「ファイルに移動」をクリックします。
- 必要に応じて、関連する変換関数を上書きします。 提供されている組込み変換関数は次のとおりです: ソート、フィルタ、ページ区切り、選択、問合せ(通常はGETコレクション・エンドポイントで使用)、本文(POSTおよびPATCHエンドポイントで使用)およびfetchByKeys。
transformsContext入力パラメータは、関連するSDPによってすべての変換関数に渡されるコンテキスト・オブジェクトであるため、現在のRESTコールのコンテキスト情報を取得して格納できます。 SDP変数には、変換関数に渡されるtransformsContextプロパティがあります。 SDPtransformsContextプロパティの詳細は、「Oracle Visual Builderページ・モデル参照 - transformsContext SDPプロパティ」を参照してください。次に、
massおよびheightのすべてのフィールドにテキストを追加するbody(result)変換関数の例を示します:body(result) { let tr = {}; if (result.body) { tr = result.body.results; for (let i = 0; i < tr.length; i++) { tr[i].mass = tr[i].mass + " kilos (kg)"; tr[i].height = tr[i].height + " cm"; } } // return tr; }作成された変換ファイルは、関連するサービス接続によって継承され、「設定」タブの「+サービス接続」ボタンを使用して作成されます。 (静的サービスの関連接続を表示するには、「関連サービス接続のロード」リンクをクリックします。)
レスポンスの本文の例の取得方法など、エンドポイントからのサービス接続の作成の詳細は、RESTエンドポイントからのサービス接続の作成を参照してください。
- バックエンドに関連するサービス接続を追加するには、「+サービス接続」をクリックし、「エンドポイント別定義」を選択してから、サービス接続エンドポイントのURLを入力し、必要な詳細を入力します:
- エンドポイントの変換ファイルを作成するには、「ソース」ダウンドロップ・リストをクリックし、「作成」を選択します。
- 変換ファイルを開くには、「ソース」フィールドの下の「ファイルに移動」をクリックします。
Oracle Cloudアプリケーションからではないエンドポイントの例
次に、Oracle Cloudアプリケーションからではないエンドポイントのリクエストおよびレスポンス変換関数の例を示します:- Request
- サーバー/エンドポイントに対してリクエストが発行される直前に、リクエスト変換関数がコールされます。 ページ作成者は、オプション(フィルタ、ページ区切り、ソートなど)を変換し、最終的なリクエスト構成を作成できます。 次に、filter、「ページ区切り」および「ソート」変換関数の記述方法のサンプルを示します:
- filter
/** * Filter Transform Function Implementation * @param configuration * @param options the JSON payload that defines the filterCriterion * @param context an object to store/retrieve any contextual information for the * current request lifecycle * @returns {object} configuration object. the url looks like ?filter=foo eq 'bar' */ PageModule.prototype.filter = function (configuration, options, context) { const c = configuration; const filterCriterion = options; function jetFilterOpToScim(fop) { switch (fop) { case '$eq': return 'eq'; case '$ne': return 'ne'; case '$co': return 'co'; default: console.warn('unable to interpret the op ' + fop); return null; } } function isEmpty(val) { return (val === undefined || val === null || val === ''); } if (typeof filterCriterion === 'object' && Object.keys(filterCriterion).length > 0) { if (filterCriterion.op && filterCriterion.attribute && !isEmpty(filterCriterion.value)) { const atomicExpr = {}; atomicExpr.op = jetFilterOpToScim(filterCriterion.op); atomicExpr.attribute = filterCriterion.attribute; atomicExpr.value = filterCriterion.value; if (atomicExpr.op && atomicExpr.attribute) { c.url = URI(c.url).addQuery({ filter: `${atomicExpr.attribute} ${atomicExpr.op} ${atomicExpr.value}`, }).toString(); } } } return c; };- paginate
// paginate Transform Function // Transform function appends limit and offset parameters to the URL PageModule.prototype.paginate = function (configuration, options, context) { const c = configuration; let newUrl = c.url; newUrl = `${newUrl}&limit=${options.size}&offset=${options.offset}`; c.url = newUrl; return c; };- sort
/** * Sort Transform Function Implementation * @param configuration * @param options the JSON payload that defines the sortCriteria * @param context an object to store/retrieve any contextual information for the * current request lifecycle. * @returns {object} configuration object. the url looks like ?orderBy=foo:asc */ PageModule.prototype.sort = function (configuration, options, context) { const c = configuration; if (options && Array.isArray(options) && options.length > 0) { const firstItem = options[0]; if (firstItem.name) { const dir = firstItem.direction === 'descending' ? 'desc' : 'asc' let newUrl = c.url; newUrl = `${newUrl}&orderBy=${firstItem.attribute}:${dir}`; c.url = newUrl; } } return c; };
- Response
- レスポンス変換ファンクションは、リクエストが正常に返された直後にコールされます。 「ページ区切り」変換ファンクションの記述方法のサンプルを次に示します:
// paginate() Response Transform Function PageModule.prototype.paginateResponse = function (result, context) { const ps = {}; const tr = {}; if (result.body) { const rb = result.body; if (rb.totalCount) { tr.totalSize = rb.totalCount; } if (rb.totalCount > 0) { tr.hasMore = !!rb.hasMore; } else { tr.hasMore = false; } } return tr; };






