LoginSignup
0
0

More than 3 years have passed since last update.

Aura Enabledリクエストでは、セッションIDがAPI呼び出しを行うことができない

Last updated at Posted at 2020-11-01

:cloud: Metadata API
原文:https://salesforce.stackexchange.com/questions/110515/getting-session-id-in-lightning

概要

  1. 現在、Lightningコンポーネントには$Apiグローバル変数はありません。 {! $Api.whatever}は常に失敗します。
  2. これは現時点では意図的なものです。 LightningコンポーネントでAPI対応のセッションIDを取得するための公式/サポートされている方法はありません。繰り返しますが、これは仕様によるものです。
  3. ほんの少しの創造性と巧妙さで、{!を使用して必要最低限​​のVisualforceページを作成できます。 $ Api.SessionID}、次にApexからgetContent(thatPage)を呼び出して、API対応のセッションIDを含むページを取得します。これは簡単にパースできるはずです。

そこから、AuraEnabledメソッドを介してそのセッションIDをLightningコンポーネントに渡すことは難しくありません。

ただし、明確にしましょう。これはハックであり、パフォーマンスが低下します。また、API対応のセッションIDをLightningコンポーネントコードから除外するのには十分な理由があります。

回避策

そのため、Lightningで機能するための回避策として、推奨されないハックを作成することになりました。

次のように単純なVisualforceページを作成するだけです。

MetadataSessionId.vfp
<apex:page>
    Start_Of_Session_Id{!$Api.Session_ID}End_Of_Session_Id
</apex:page>

次に、visualforce_Page.getContent()メソッドを使用してセッションIDを取得します。次のようになります。

public static MetadataService.MetadataPort createService()
{
    MetadataService.MetadataPort service = new MetadataService.MetadataPort();
    service.SessionHeader = new MetadataService.SessionHeader_element();
    //service.SessionHeader.sessionId = UserInfo.getSessionId();
    PageReference pageRef = new PageReference('/apex/MetadataSessionId');
    service.SessionHeader.sessionId = MetadataUtils.getSessionIdFromVFPage(pageRef);
    return service;
}
global class MetadataUtils {
    global static String getSessionIdFromVFPage(PageReference visualforcePage){
        String content = visualforcePage.getContent().toString();
        Integer s = content.indexOf('Start_Of_Session_Id') + 'Start_Of_Session_Id'.length(),
                e = content.indexOf('End_Of_Session_Id');
        return content.substring(s, e);
    }
}

そして、使用できる有効なセッションIDを取得しました。

0
0
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
0
0