グローバル関数の定義
グローバル関数JavaScriptモジュールは、拡張に対してresources/functions
の下に定義し、resources/functions/functions.json
で宣言する各JavaScriptリソースのメタデータを定義する必要があります。
ノート:
グローバル関数は、拡張に対してのみ定義できます。 アプリケーションUIまたは統合アプリケーションを含む他のリソース・フォルダでは定義できません。たとえば、ext-layoutは、現在の拡張機能のページ、フラグメント、動的レイアウト・アーティファクトなど、すべてのコンテナで共有される2つのJavaScriptファイルを定義する拡張機能です。 ファイル - dateUtils.js
およびstandardUtils.js
は、ext-layout/ui/self/resources/functions
の下にあります。
JavaScriptファイルは、モジュールが(requireJSを使用して)ロードされるときにファンクション名からファンクション・コールバックへのマップを返すように、ユーティリティ・スタイル・クラスを想定しています。
例1-71 グローバル関数JSモジュール
resources/functions
フォルダには、functions.json
(JavaScriptモジュールのリストを定義する構成ファイル)が含まれています(「ファイル」セクション)。
この例では、前述のロケーションで定義されているstandardUtils.js
は、いくつかの静的メソッドを定義し、一般に使用できるメソッドを返します:
'use strict';
define([], () => {
class StandardFunctions {
static join(arr = []) {
if (arr.length === 0) {
return '';
}
const newArr = (arr.slice(1, arr.length).map((o) => (${o})));
return [arr[0]].concat(newArr).join(' ');
}
/**
* Returns true if the field provided as parameter #1 contains the characters provided as parameter #2, else
* returns false.
* @param {string} field
* @param {string} characters
* @returns {boolean}
*/
static contains(field = '', characters) {
return field.indexOf(characters) >= 0;
}
/**
* Returns a string converted from a decimal.
* @param {number} field
* @returns {string}
*/
static convertNumberToString(field) {
return field.toString();
}
/**
* Convert string to number
* @param {string} field
* @return {number}
*/
static convertStringToNumber(field) {
return parseInt(field, 10);
}
/**
* Returns the number of characters in a string.
* @param {string} field
* @return {number}
*/
static lengthOfString(field = '') {
return field.length;
}
}
return {
contains: StandardFunctions.contains,
convertNumberToString: StandardFunctions.convertNumberToString,
convertStringToNumber: StandardFunctions.convertStringToNumber,
join: StandardFunctions.join,
lengthOfString: StandardFunctions.lengthOfString,
};
});
functions.jsonメタデータでのグローバル関数の宣言
前述のサンプルでは、standardUtils
JavaScriptモジュールは、関数コールバックにマップされた5つのプロパティを持つオブジェクトをエクスポートします。 これらのメソッドは、メタデータで宣言し、functions.json
メタデータ構成を使用して現在の拡張およびダウンストリーム拡張に公開できます。
{
"files": {
"utils": {
"path": "standardUtils",
"label": "Standard Utility Functions",
"referenceable": "extension",
"functions": {
"contains": {
"params": {
"field": {
"label": "field",
"description": "",
"type": "string"
},
"characters": {
"label": "characters",
"description": "",
"type": "string"
}
},
"return": "boolean"
},
"convertNumberToString": {
"referenceable": "self"
},
"convertStringToNumber": {
"referenceable": "self"
},
"join": {},
"lengthOfString": {}
}
},
"dateLocalUtils": {
"path": "date/dateUtils",
"label": "Date Utility Functions",
"referenceable": "self",
"functions": {
"dateToIsoString": {
"referenceable": "extension"
}
}
}
}
}
ノート:
前述のサンプルJSONのメタデータが編集され、関連する詳細が表示されます。 完全な構成ではありません。"files"
セクションには、1つ以上のJavaScriptファイルが含まれます。"utils"
は、"path"
プロパティで定義されているJavaScriptファイル"standardUtils.js"
の別名です(.js
拡張子は、requireJSモジュールであるため削除できます)。
"referenceable": "extensible"
は、ダウンストリームに依存する拡張機能からファイルにアクセスできることを宣言します。 パスが"date/dateUtils"
のファイル別名"dateLocalUtils"
は、"referenceable": "self"
に設定されています。これは、現在の拡張機能のアーティファクトのみにアクセスできることを意味します。
"functions"
セクションは、コール元が使用できる関数をリストするために使用できます。 関数名が存在する場合は、式で使用できます(次を参照)。 また、ファンクション・メタデータは、現在の拡張から参照できるか、依存するダウンストリーム拡張から参照できるかを定義できます。 関数は、そのアクセスに対する許容度が低くなる可能性がありますが、ファイル上のアクセス・セットを置き換えることはできません。
たとえば、ファイル"utils"
はすべての依存拡張へのアクセスを許可し("referenceable": "extension"
に設定)、"utils"
内のメソッド"convertNumberToString"
は現在の拡張へのアクセスのみを許可します("referenceable": "self"
に設定)。 これは、関数があまり許容されない可能性があるため許可されます。 これは、このモジュールをインポートする依存拡張が、"convertNumberToString"
関数をコールできないことを意味します(ログ・エラーが発生します)。
もう1つの例は、"dateToIsoString"
関数を定義するファイル"dateLocalUtils"
です。このファイルでは、許可されている範囲を超えてアクセスが拡張されます。 これは許可されず、無視されます。 この関数は、現在の拡張のアーティファクトによってのみコールできます。
関数が"referenceable"
を定義しない場合、アクセスはファイルに設定されます。 ファイルのデフォルト・アクセスは"self"
です。