0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

<アクセス権限>SalesforceConnectの外部データソースは、Apexから取得でき、Where句で条件をかけられるのか?

Posted at

CTA試験において、以下のようなケースでSalesforceConnectを使うユースケースがある。
 ・大量のデータを扱うときに、古いデータをAWS S3など外部ストレージにアーカイブし、適宜Salesforceから古いデータを参照したい。
 ・ERPの注文データを、Salesforceに物理的に連携せずに、リアルにSalesforceから参照したい。
※1時間あたり2万Callout、1時間あたり新規10万行の制限あり。

ただ、SalesforcConnectは、外部データソースに対して、プロファイルや権限セットで見えるか否かくらいしか制御ができず、特定の条件においてデータを参照させるなどの制御を行うことが厳しい。
※共有設定、共有ルールを使ったデータ制限は不可。
image.png

細やかな権限制御を行う対処として、いくつか方式はあるかと思うが、カスタム開発してデータを絞り込む方法があり、以下の通り。

まず、Trailheadの手順に従い、外部データソースや外部オブジェクトの設定を行う。
そうすると、対向のHerokuシステムにあるOrderの全量が表示される。

以下の通り。
image.png

Apexの WHERE句で、customerID__c = '101'と限定する。

Apex

public with sharing class ExternalObjectController {
    public List<Order__x> orders { get; set; }

    public ExternalObjectController() {
        // 条件付きでデータを取得する
        orders = [SELECT Id, customerID__c FROM Order__x WHERE customerID__c = '101'];
    }
}

Visualforceのソースコード

<apex:page controller="ExternalObjectController">
    <apex:pageBlock title="External Orders">
        <apex:pageBlockTable value="{!orders}" var="order">
            <apex:column value="{!order.Id}" />
            <apex:column value="{!order.customerID__c }" />
        </apex:pageBlockTable>
    </apex:pageBlock>
</apex:page>

↓するとデータを限定できる。
image.png

なので、基本的にSalesforceConnectと回答するが、「アクセス権限を絞りたい要件がある場合は?」となったら、LWC+Apexでデータを限定する、というのが回答の1つ。

LWC+ApexCalloutで対向システムから条件を指定してデータを取得し表示することも理論上できるが、エンタープライズ向けだと制限に抵触したりいろいろ大変なので、LWC+Apexで外部データソースにクエリかけて絞り込んで表示がよさそ

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?