CTA試験において、以下のようなケースでSalesforceConnectを使うユースケースがある。
・大量のデータを扱うときに、古いデータをAWS S3など外部ストレージにアーカイブし、適宜Salesforceから古いデータを参照したい。
・ERPの注文データを、Salesforceに物理的に連携せずに、リアルにSalesforceから参照したい。
※1時間あたり2万Callout、1時間あたり新規10万行の制限あり。
ただ、SalesforcConnectは、外部データソースに対して、プロファイルや権限セットで見えるか否かくらいしか制御ができず、特定の条件においてデータを参照させるなどの制御を行うことが厳しい。
※共有設定、共有ルールを使ったデータ制限は不可。
細やかな権限制御を行う対処として、いくつか方式はあるかと思うが、カスタム開発してデータを絞り込む方法があり、以下の通り。
まず、Trailheadの手順に従い、外部データソースや外部オブジェクトの設定を行う。
そうすると、対向のHerokuシステムにあるOrderの全量が表示される。
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>
なので、基本的にSalesforceConnectと回答するが、「アクセス権限を絞りたい要件がある場合は?」となったら、LWC+Apexでデータを限定する、というのが回答の1つ。
LWC+ApexCalloutで対向システムから条件を指定してデータを取得し表示することも理論上できるが、エンタープライズ向けだと制限に抵触したりいろいろ大変なので、LWC+Apexで外部データソースにクエリかけて絞り込んで表示がよさそ