この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

アクセスの制御

このフレームワークでは、access システム属性を介して、アプリケーション、属性、コンポーネント、イベント、インターフェース、メソッドへのアクセスを制御できます。access システム属性は、リソースをその名前空間外で使用できるかどうかを示します。

access システム属性は次のタグで使用します。

  • <aura:application>
  • <aura:attribute>
  • <aura:component>
  • <aura:event>
  • <aura:interface>
  • <aura:method>

アクセス値

access システム属性には、次の値を指定できます。

private
コンポーネント、アプリケーション、インターフェース、イベント、メソッド内では使用できますが、リソース外からは参照できません。この値は、<aura:attribute> または <aura:method> にのみ使用できます。
属性を非公開とマークすると、属性をリソース内でのみ使用可能になるため、その後属性のリファクタリングが容易になります。
非公開属性にアクセスすると、宣言したコンポーネントから参照した場合を除き、undefined が返されます。非公開属性が含まれるコンポーネントを拡張するサブコンポーネントから非公開属性にアクセスすることはできません。
public
組織内でのみ使用できます。これはデフォルトのアクセス値です。
global
すべての組織で使用できます。

コンポーネントなどのリソースを access="global" としてマークし、リソースを自分の組織外で使用できるようにします。たとえば、インストール済みパッケージで、または他の組織の Lightning アプリケーションビルダーユーザまたはコミュニティビルダーユーザが、コンポーネントを使用できるようにする場合などです。

メモ

次のサンプルコンポーネントにはグローバルアクセス権があります。

1<aura:component access="global">
2    ...
3</aura:component>

アクセス違反

リソースへのアクセスを許可する access システム属性のないコンポーネントなどのリソースにコードがアクセスすると、次のようになります。

  • クライアント側のコードは実行されないか、undefined を返します。 デバッグモードを有効にした場合は、ブラウザコンソールにエラーメッセージが表示されます。
  • サーバ側のコードは、コンポーネントの読み込みに失敗します。 デバッグモードを有効にした場合は、ポップアップエラーメッセージが表示されます。

アクセス権チェックエラーメッセージの構造

アクセス違反のアクセス権チェックエラーメッセージのサンプルを次に示します。

1Access  Check  Failed ! ComponentService.getDef():'markup://c:targetComponent' is not visible to 'markup://c:sourceComponent'.

エラーメッセージは、次の 4 つの部分で構成されます。

  1. コンテキスト (誰がリソースにアクセスしようとしているか)。この例では、markup://c:sourceComponent です。
  2. 対象 (アクセスされているリソース)。この例では、markup://c:targetComponent です。
  3. エラーの種類。この例では、not visible です。
  4. エラーをトリガしたコード。通常はクラスメソッドです。この例では、対象定義 (コンポーネント) にアクセスできなかったことを示す ComponentService.getDef() です。定義には、コンポーネントなどのリソースのメタデータが記述されます。

アクセス権チェックエラーの修正

コードが期待どおりに動作しない場合は、デバッグモードを有効にしてより詳細なエラーレポートを取得します。

ヒント

アクセス権チェックエラーは、次の 1 つ以上の方法を使用して修正できます。

  • 所有するリソースに適切な access システム属性を追記する。
  • 使用できないリソースへの参照をコードから削除する。前の例では markup://c:targetComponentmarkup://c:sourceComponent からのアクセスを許可するアクセス値はありません。
  • <aura:attribute> 定義を参照して、アクセスしている属性が存在することを確認する。name の大文字小文字の区別も含め正しいスペルを使用していることを確認します。

    未定義属性にアクセスした場合も非公開属性などの範囲外の属性にアクセスした場合も、同じアクセス違反メッセージがトリガされます。アクセスコンテキストでは属性が未定義であるかアクセスできないかを判断できません。

例: is not visible to 'undefined'

1ComponentService.getDef():'markup://c:targetComponent' is not visible to 'undefined'

このエラーメッセージのキーワードは、フレームワークがコンテキストを失ったことを示す undefined です。これは、setTimeout() または setInterval() コールや ES6 Promise など、通常のフレームワークライフサイクル外でコードがコンポーネントにアクセスすると発生します。

このエラーを修正するには、コードを $A.getCallback() コールでラップトップします。詳細は、「フレームワークのライフサイクル外のコンポーネントの変更」を参照してください。

例: Cannot read property 'Yb' of undefined

1Action failed: c$sourceComponent$controller$doInit [Cannot read property 'Yb' of undefined]

このエラーメッセージは、値が undefined である変数のプロパティを参照した場合に表示されます。このエラーはさまざまな状況で発生する可能性がありますが、その一例がアクセス権チェックに失敗した場合の副次的影響です。たとえば、JavaScript で未定義属性である imaginaryAttribute にアクセスしようとするとどうなるか見てみましょう。

1var whatDoYouExpect = cmp.get("v.imaginaryAttribute");

これはアクセス権チェックエラーで、whatDoYouExpectundefined に設定されています。この場合に、whatDoYouExpect のプロパティにアクセスしようとすると、エラーが表示されます。

1Action failed: c$sourceComponent$controller$doInit [Cannot read property 'Yb' of undefined]

エラーメッセージの c$sourceComponent$controller$doInit の部分は、エラーが c 名前空間にあるsourceComponent コンポーネントのコントローラの doInit メソッドにあることを示しています。