SalesforceにおけるBig Objectで できること・できないこと

Salesforce
Salesforce

はじめに

前回のブログでは「SalesforceにおけるBig ObjectをApex上で操作する方法」をご紹介いたしました。

本記事では、Salesforce の各機能において、Big Object がどのようにサポートされているかについて紹介します。

本記事で扱う機能

  • 入力規則
  • 項目変更履歴
  • リストビューでの表示
  • Visualforce、Lightning Component
  • Apex トリガ
  • Apex バッチ
  • プロセスビルダー、ワークフロー
  • フロー
  • レポート
  • 権限設定
  • API

各機能における Big Object のサポート状況

入力規則

カスタムオブジェクトと違い、Big Object では入力規則がサポートされていません。
データの品質は、Apexクラスなどを用いて確保する必要があります。

項目変更履歴

項目変更履歴はサポートされていません。

リストビューでの表示

Big Object はリストビューで表示することができません。

Visualforce、Lightning Component

Visualforce、Lightning Component で Big Object のレコードを表示することは可能です。
前述の通りリストビューが使えないため、Salesforce の UI 上に Big Object のレコードを表示したい場合はこれらを使うことになります。

public with sharing class SampleController {

    public List<Purchase_History__b> objList {get; set;}

    public SampleController() {
        objList = [SELECT Id, Product_Code__c, Product_Name__c, Quantity__c, Unit_Price__c,Contact__c
        FROM Purchase_History__b];
    }

}
<apex:page id="SampleVF" controller="SampleController">
    <apex:pageblock id="ObjList">

            <br/>
            <apex:pageBlockTable value="{!objList}" var="obj" >
                <apex:column value="{!obj.Product_Code__c}"/>
                <apex:column value="{!obj.Product_Name__c}"/>
                <apex:column value="{!obj.Unit_Price__c}"/>
                <apex:column value="{!obj.Quantity__c}"/>
            </apex:pageBlockTable>

        </apex:pageblock>

</apex:page>

Apex トリガ

Apex トリガは Big Object をサポートしておらず、 Big Object の作成/更新/削除を起点としたトリガを実装することはできません。

trigger SampleTrigger on Opportunity (before insert) {

    // トリガ内でBig Object のレコード挿入を試みる
    Purchase_History__b obj = new Purchase_History__b();
    obj.Product_Name__c = '新商品001';
    obj.Product_Code__c = '000001';
    Database.insertImmediate(obj);

}

たとえば、商談の登録時にトリガで Big Object のレコード作成を試みた場合、以下のエラーメッセージが表示され、レコードの作成が失敗します。

Apex トリガであるSampleTriggerで予期せぬ例外が発生しました。システム管理者にお問い合わせください。SampleTrigger: execution of BeforeInsert caused by: System.UnexpectedException: BigObjects と sObjects を組み合わせた DML 操作を Apex トリガに含めることはできません。: Trigger.SampleTrigger: line 7, column 1

カスタムオブジェクトを起点とするトリガの中で、非同期Apexを利用して Big Object に対するDML操作を行うことは可能です。

public with sharing class SampleController {
    
    @Future
    public static void createBigObjectRecord() {

        // 非同期ApexでBig Object のレコード挿入を試みる
        Purchase_History__b obj = new Purchase_History__b();
        obj.Product_Name__c = '新商品001';
        obj.Product_Code__c = '000001';
        obj.Contact__c = '0035h00000JPR5UAAX';
        obj.Purchase_DateTime__c = Datetime.now();
        Database.insertImmediate(obj);
    }


}
trigger SampleTrigger on Opportunity (before insert) {

    SampleController.createBigObjectRecord();

}

商談を作成して、商談の bofore insertトリガを実行します。

トリガから呼び出された非同期Apexにより、Big Objectのレコードが作成されたことが確認できました。

Apex バッチ

Apex バッチ内の処理で Big Object に対してCRUDを実行することが可能です。

プロセスビルダー、ワークフロー

プロセスビルダー、ワークフローでは Big Object を扱うことはできません。
具体的には、プロセスを実行するタイミングで Big Object の作成または編集を選択することができません。


また、プロセスビルダーのルール適用時のアクションで Big Object のレコード作成・更新を設定することは可能ですが、実行時に「UNKNOWN_EXCEPTION」が発生し、レコードの作成・更新に失敗します。

フロー

フローは Big Object をサポートしておらず、レコードの取得および作成等はできません。

レポート

レポート、ダッシュボードでは Big Object のデータを表示することはできません。
他方、Einstein Analytics は Big Object をサポートしており、データの表示が可能です。

権限設定

Big Object ではオブジェクト権限、項目レベルセキュリティによる権限を設定できます。

プロファイル設定画面のオブジェクト権限設定
項目レベルセキュリティの設定画面


共有設定によるレコードレベルの権限設定は使用できません。

API

Big Object は SOAP API および Bulk API をサポートしているため、データローダをはじめとした外部ツールでレコードの作成等が可能です。
また、REST API を介してBig Objectレコードの取得、作成、更新、削除ができます。

REST API で Big Object のレコード作成要求を送信
Big Object のレコードが作成される

まとめ

Big Object は大量データを扱うにあたって利点が大きい反面、Salesforce 標準の自動化処理にほとんど対応していないなど、制限も多い印象です。導入にあたっては、各機能における制限事項を抑えたうえで、要件を実現できるかを慎重に検討する必要がありそうです。

セールスフォースのご相談・お問い合わせ

タイトルとURLをコピーしました