3
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?

More than 3 years have passed since last update.

ユーティリティバーからAuraコンポーネントを 呼び出そうとして困ったこと

Last updated at Posted at 2020-06-28

#はじめに
レコードページからユーティリティバーのボタンを押し、
そのレコードに関連するレコード一覧をAuraコンポーネントを介して
表示させようとしたときに困ったことがあったのでまとめてみました。

#1 initイベントでレコードIDを取得できない

レコードIDを取得する方法は通常、
以下の方法で行うと思います。

test.cmp
<aura:component implements="force:hasRecordId,force:lightningQuickAction,flexipage:availableForAllPageTypes" >
<aura:handler name="init" action="{!c.doInit}" value="{!this}"/>

</aura:component>
testController.js
({
	doInit: function(component, helper, event){
	        var recordId = component.get("v.recordId"); 
	        alert("initで:" + recordId); 
	}
})

しかし、ユーティリティバーからAuraコンポーネントを呼び出した場合、
initメソッド内でcomponent.get("v.recordId")を使用しても
レコードIDを取得できません。
aura1.png
しかし、cmp側で{!v.recordId}を指定するとちゃんとレコードIDが表示されるのです。

test.cmp
<p>The current recordId is {!v.recordId}.</p>			// 表示される
<ui:outputText aura:id="recId" value="{!v.recordId}"/>	// こっちも表示される

どちらもレコードIDが画面上に表示されます。
aura3.png

ならばとoutputTextにIdを設定してfindメソッド使えば取れるんじゃないかと試しました。

testController.js
var recordId = component.find('recId').get("v.value");
alert("findで":recordId);

しかしこちらも不発。
aura2.png

さてどうしたものか、とさらにググってみると…

#2 解決方法
公式ドキュメントで解決方法が記載されていました。
ユーティリティバー API でのページコンテキストの使用:
https://developer.salesforce.com/docs/atlas.ja-jp.api_console.meta/api_console/sforce_api_console_js_lightning_utility_bar_page_context.htm

ドキュメントによれば、initイベントを使用するのでなく
changeイベントを使用するとよいとのこと。
試してみます。

test.cmp
<aura:component implements="force:hasRecordId,force:lightningQuickAction,flexipage:availableForAllPageTypes" >
<aura:handler name="change" value="{!v.recordId}" action="{!c.onRecordIdChange}"/>

</aura:componnt>
testController.js
({ 
    onRecordIdChange : function(component, event, helper) {
        var recordId = component.get("v.recordId");
        alert("onchangeで:" + recordId);
    }
})

無事取得できました。
aura4.png

#3 Auraコンポーネントで呼びだしたフローをリセットできない
※こちらはまだ未解決の問題です。

取得したレコードIDを使ってさらにフローで処理できないか相談を受けたので
調査しました。
結論から言えば、flowに取得したIDをフロー渡して処理を行えます。
詳しくはこちら:https://developer.salesforce.com/docs/atlas.ja-jp.lightning.meta/lightning/components_using_flow.htm

ただひとつ問題が。
別のレコードページに移動しても、最初にユーティリティバーで起動した
レコードIDを使ったままなのです。

changeイベントを使用しているので、見るレコードが変わるたびにイベントを呼び、実際にレコードIDも新しいものを取得できているのにも関わらずにです。

以下のことを試してみましたがフローの内容がリセットされませんでした。

  • cmp側でforce:refleshViewイベントを宣言してみる
  • コントローラで$A.get('e.force:refreshView').fire()を行う

こちらについては引き続き調べてみたいと思います。

3
1
0

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
3
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?