VMobile オブジェクト設定を使用する

VMobile オブジェクト設定 (VMOC) は、オフラインプラットフォームに同期されるオブジェクトとレコードの種類を制御します。VMOC は以下のメインレコードで構成されます:

  • オブジェクト
  • デバイス
  • タイプ
  • WHERE 句

管理者は、CRM の VMobile オブジェクト設定タブから VMOC を有効化または作成することができます。

デバイス

各 VMOC はオフラインのデバイスに固有です。モバイルプラットフォームに同期されるオブジェクトごとに、関連する Device_vod フィールドに有効な VMOC が存在する必要があります。

  • iPad_vod
  • iPhone_vod
  • WinModern_vod

VMOC のタイプ

完全オブジェクト同期

完全オブジェクト同期は、オブジェクト内に含まれるすべてのデータを Veeva CRM Mobile プラットフォームに同期します。このタイプの同期入力は、製品カタログをはじめとするルックアップオブジェクトなどの参照オブジェクトのためのものです。

トップレベル同期

トップレベルオブジェクト同期は、アカウント、メディカルイベント、ユーザなどの Veeva CRM のマスターオブジェクトに予約されています。関連オブジェクトを含むチェックボックスを有効にすると、同期処理でユーザのページレイアウトのオブジェクトを調べ、関連リストにあるすべてのオブジェクトが特定されます。VMOC 入力がないオブジェクトはクエリーに追加され、トップレベルオブジェクトとして処理されます。

この場合、親レコードの標準表示以外に、これらの関連オブジェクトに WHERE 句フィルタリングが存在しないことを意味します。親の WHERE 句によってこれらのオブジェクトはフィルタリングされません。これは、特にプライベート共有や同様の組み込み表示制限が設定された親オブジェクトに適しています。

以下のオブジェクトは、トップレベルオブジェクト同期設定を使用して同期される典型的なオブジェクトです:

  • Call2_vod
  • ユーザ
  • Product_Metrics_vod
  • Account_Plan_vod
  • Address_vod
  • TSF_vod
  • AccountShare
  • Medical_Event_vod
  • コンタクト

関連先トップレベル同期

このタイプの VMOC は、指定された親トップレベルオブジェクトのサブクエリとしてクエリされます。このオブジェクトのレコードは、同じく同期される親レコードと関連付けられている場合にのみ同期されます。このタイプの VMOC は、将来同期されたレコードをフィルタリングするために独自の Where 句も持つことができます。

親子行同期

子オブジェクトが親の表示を制御する場合に使用されます。例えば、Campaign_vod オブジェクトの行の表示が Campaign_Target_vod オブジェクトの表示に基づく場合などがあります。

対応する親オブジェクトの VMOC には、メタデータのみが True に設定されているトップレベルのタイプを持つ必要があります。

VMOC Where 句

VMOC の Where 句は、オンラインデータベースで実行された SOQL クエリで使用されます。これは、定義済みデバイスに同期される対応するオブジェクトの特定のレコードを決定します。Where 句が定義する条件を満たすレコードであれば同期されます。例えば、同期されるコール件数に過去 90 日間に行われたコールのみを含むよう制限する場合、VMOC の Where 句は次のようになります:

WHERE (Account_vod__r.Name !=null OR User_vod__r.Name !=null OR Medical_Event_vod__r.Name !=null OR Contact_vod__r.Name!=null) AND (Status_vod__c = 'Planned_vod' OR (Call_Date_vod__c ›= LAST_N_DAYS:90 AND Call_Date_vod__c ‹= NEXT_N_DAYS:30))

VMobile オブジェクト設定の WHERE 句には、適切なレコードの取得を支援するいくつかの特殊 META-SOQL 変数を含むオプションがあります。これらの変数とその定義のリストを以下に示します。

  • VOD_SF_USER_ID - サインインしているユーザの Salesforce.com ユーザ ID
  • VOD_SF_PROFILEID - サインインしているユーザのプロファイルの Salesforce.com プロファイル ID
  • VOD_USERS_IN_MY_TERRITORY - 現在サインインしているユーザのテリトリーに割り当てられているすべてのユーザ
  • VOD_RECORDTYPE_ID - 目的のオブジェクトのレコードタイプ ID
  • VOD_USER_LANG_CD - サインインしているユーザの言語コード
  • VOD_MY_TERRITORY - モバイルユーザのテリトリー名 (ID ではなく) のコンマで区切られたリストを返します。テリトリー階層のユーザテリトリーが高い場合、すべてのサブテリトリーも返されます。結果の合計数が 200 以上の場合、引用符で囲まれた空白の文字列 (' ') が返されます。
  • VOD_MY_ORGID - 現在の組織の Salesforce.com 組織 ID

Call2_vod オブジェクトのクエリロジック

コールは大量のレコードが様々な方法で記録されるため、コールクエリは特別に扱われます。

グループコールでオフラインとオンラインで同じアカウントが表示されるように、iPad_vod と iPhone_vod プラットフォームは次にクエリロジックを使用します。

iPad_vod および iPhone_vod プラットフォームの Call2_vod に使用される 4 つの内蔵 WHERE 句があります:

  • WHERE Parent_Call_vod__c = null AND Account_vod__c IN (SELECT Id FROM Account)
  • WHERE Parent_Call_vod__c = null AND Medical_Event_vod__c IN (SELECT Id FROM Medical_Event_vod__c)
  • WHERE Parent_Call_vod__r.Account_vod__r.CreatedById != null OR Parent_Call_vod__r.Medical_Event_vod__r.CreatedById != null
  • WHERE (((OwnerId ='<userId>' AND Account_ vod__r.CreatedById = null AND Contact_vod__r.CreatedById = null AND Medical_Event_vod__r.CreatedById = null AND User_vod__c = null ) OR User_vod__c = '<userId>' ))AND Call_Date_vod__c >= LAST N DAYS: 60)

VMOC には独自の WHERE 句はありません。コールを検索するには、上記の 4 種類のクエリをそれぞれ実行します。VMOCに入力されている WHERE 句がある場合、上記のクエリは入力済み句に追加されます。

例えば、コールの WHERE 句が「WHERE Call_Date_vod__c >= LAST_N_DAYS:90」だった場合、実際に実行されるクエリーは以下のようになります。

  • WHERE Call_Date_vod__c >= LAST_N_DAYS:90 AND Parent_Call_vod__c = null AND Account_vod__c in (Select Id from Account) WHERE Call_Date_vod__c >= LAST_N_DAYS:90 AND Parent_Call_vod__c = null AND Medical_Event_vod__c in (Select Id from Medical_Event_vod__c)
  • WHERE Call_Date_vod__c >= LAST_N_DAYS:90 AND Parent_Call_vod__r.Account_vod__r.CreatedById != null OR Parent_Call_vod__r.Medical_Event_vod__r.CreatedById != null
  • WHERE Call_Date_vod__c >= LAST_N_DAYS:90 AND ((( OwnerId = '<userId>' AND Account_vod__r.CreatedById = null AND Contact_vod__r.CreatedById = null AND Medical_Event_vod__r.CreatedById = null AND User_vod__c = null ) OR User_vod__c = '<userId>' )) AND Call_Date_vod__c >= LAST_N_DAYS:60)

実行される WHERE 句の構文の制御性を高めるには、&&CALLWHERE&& タグを使用してクエリーのどこに組み込み句を入れるかを指定することができます。例えば、「WHERE (&&CALLWHERE&&) AND (Call_Date_vod__c >= LAST_N_DAYS:30)」を VMOC として入力すると、実行されるクエリーは以下のようになります。

  • WHERE Parent_Call_vod__c = null AND Account_vod__c in (Select Id from Account) AND (Call_Date_vod__c >= LAST_N_DAYS:30)
  • WHERE Parent_Call_vod__c = null AND Medical_Event_vod__c in (Select Id from Medical_Event_vod__c) AND (Call_Date_vod__c >= LAST_N_DAYS:30)
  • WHERE Parent_Call_vod__r.Account_vod__r.CreatedById != null OR Parent_Call_vod__r.Medical_Event_vod__r.CreatedById != null AND (Call_Date_vod__c >= LAST_N_DAYS:30)
  • WHERE ((( OwnerId = '<userId>' AND Account_vod__r.CreatedById = null AND Contact_vod__r.CreatedById = null AND Medical_Event_vod__r.CreatedById = null AND User_vod__c = null ) OR User_vod__c = '<userId>' ))AND Call_Date_vod__c >= LAST_N_DAYS:60)

同期するアカウント数が ANALYTIC_ACCOUNT_CAP_vod Veeva 設定によって設定された制限 (デフォルトは 50,000) を超えた場合、設定 CAPPED_CALL_HISTORY_IN_DAYS_vod Veeva 設定に基づきコールを同期する日数に設定されます (デフォルトは 60)。

この場合、VMOC の WHERE 句は無視され、実行されるクエリーは以下のようになります。

  • WHERE Parent_Call_vod__c = null AND Account_vod__c IN (SELECT Id FROM Account) AND Call_Date_vod__c >= LAST_N_DAYS:{callCap}
  • WHERE Parent_Call_vod__c = null AND Medical_Event_vod__c IN (SELECT Id FROM Medical_Event_vod__c) AND Call_Date_vod__c >= LAST_N_DAYS:{callCap}
  • WHERE Parent_Call_vod__r.Account_vod__r.CreatedById != null OR Parent_Call_vod__r.Medical_Event_vod__r.CreatedById != null AND Call_Date_vod__c >= LAST_N_DAYS:{callCap}
  • WHERE ((( OwnerId = '<userId>' AND Account_vod__r.CreatedById = null AND Contact_vod__r.CreatedById = null AND Medical_Event_vod__r.CreatedById = null AND User_vod__c = null ) OR User_vod__c = '<userId>' ))AND Call_Date_vod__c >= LAST_N_DAYS:60) AND Call_Date_vod__c >= LAST_N_DAYS:{callCap}

コールの子オブジェクトの WHERE 句は認識されます。

4 種類の WHERE 句に加えて、次のクエリーは Call2_vod オブジェクト用に実行されます:

  • SELECT Id, Name, ..., Parent_Call_vod__r.Id, Parent_Call_vod__r.Name...WHERE Parent_Call_vod__c != null AND Parent_Call_vod__r.Account_vod__r.CreatedById = null AND Parent_Call_vod__r.Medical_Event_vod__r.CreatedById = null AND Account_vod__c IN (SELECT Id FROM Account)
  • SELECT Id, Name, ..., Parent_Call_vod__r.Id, Parent_Call_vod__r.Name...WHERE Parent_Call_vod__c != null AND Parent_Call_vod__r.Account_vod__r.CreatedById = null AND Parent_Call_vod__r.Medical_Event_vod__r.CreatedById = null AND Medical_Event_vod__c IN (SELECT Id FROM Medical_Event_vod__c)
  • SELECT Id, Name, ..., Parent_Call_vod__r.Id, Parent_Call_vod__r.Name...WHERE Parent_Call_vod__c != null AND Parent_Call_vod__r.Account_vod__r.CreatedById = null AND Parent_Call_vod__r.Medical_Event_vod__r.CreatedById = null AND Contact_vod__c IN (SELECT Id FROM Contact)

Child_Account_vod オブジェクトのクエリロジック

ユーザの領域外のアカウントを指す子アカウントの同期をサポートするために、ユーザは Child_Account_vod オブジェクトの Parent_Account_vod__r リレーションシップを更新して、master-detail ではなくルックアップフィールドにすることができます。

Parent_Account_vod が通常のルックアップフィールドの場合:

  • Child_Account_vod VMOC WHERE 句を無視する
  • 以下の 2 つの WHERE 句を使用する:
  • WHERE Parent_Account_vod__c IN (アカウントから ID を選択)
  • WHERE Child_Account_vod__c IN (アカウントから ID を選択)

Parent_Account_vod フィールドが master-detail フィールドの場合、Child_Account_vodレ コードは Child_Account_vod VMOC に従って同期します。

TSF_vod、グループ、AccountShare オブジェクトのクエリーロジック

ENABLE_GROUP_FILTERING_vod Veeva 設定が有効な場合、TSF_vod、グループおよび AccountShare レコードは定義された WHERE 句を無視し、グループまたはテリトリーメンバーシップのみによってフィルタリングされます。

ユーザのテリトリーは、最初に降順でクエリされます。その後、以下のオブジェクト固有クエリーが実行されます:

  • グループ – WHERE RelatedId IN ( ids_of_my_territories )
  • AccountShare – WHERE UserOrGroupId IN ( ids_of_groups )
  • TSF_vod – WHERE Territory_vod__c IN ( ids_of_my_territories )

Affiliation_vod オブジェクトのクエリーロジック

Affiliation_vod オブジェクトの VMOC WHERE 句は常に無視されます。その代わりに以下のクエリーを実行します。

  • WHERE From_Account_vod__c IN ( Select Id From Account ) AND To_Account_vod__c IN ( Select Id From Account )
  • WHERE From_Contact_vod__c IN ( Select Id From Contact ) AND To_Contact_vod__c IN ( Select Id From Contact )
  • WHERE From_Account_vod__c IN ( Select Id From Account ) AND To_Contact_vod__c IN ( Select Id From Contact )
  • WHERE From_Contact_vod__c IN ( Select Id From Contact ) AND To_Account_vod__c IN ( Select Id From Account )

Sample_Limit_vod オブジェクトのクエリーロジック

以下のクエリーは Sample_ Limit_vod レコードに対して実行されます。

  • WHERE User_vod__c = '{userId}'
  • WHERE Account_vod__r.Name != null AND User_vod__c = null

特定の WHERE 句が定義されている場合、AND 演算子とともに上記クエリーに組み込まれます。例えば、VMOC WHERE 句が「WHERE End_Date_vod__c >= TODAY」の場合、クエリーは以下のようになります。

  • WHERE End_Date_vod__c >= TODAY AND (User_vod__c = '{userId}')
  • WHERE End_Date_vod__c >= TODAY AND (Account_vod__r.Name != null AND User_vod__c = null)

履歴データのチャンク

ユーザは、WHERE 句に &&LAST_N_DAYS&& メソッドを使用することで履歴データに対するクエリーをチャンクし、同期のパフォーマンスを向上させることができます。Veeva &&LAST_N_DAYS&&メソッドではコロンで区切られた 3 個以上の品目が必要です。

日付の API 名または使用する dateTime フィールド

クエリーされる日数の合計

単一チャンク内の日数

(オプション) 将来にチャンクする日数

WHERE 句 WHERE &&LAST_N_DAYS:Call_Date_vod__c:60:10&& は、履歴クエリー 6 個と、今日と未来のすべてのコールのクエリー 1 個を作成します。

4 つ目のパラメータを &&LAST_N_DAYS&& メソッドに追加することで未来のクエリーをチャンクすることもできます。

WHERE 句 WHERE&&LAST_N_DAYS:Call_Date_vod__c:60:10:30&& は、履歴クエリー 6 個、これから 30 日をカバーするクエリー 1 個、30 日を超える未来のすべてのコールのクエリー 1 個を作成します。

オブジェクトに複数の VMOC を使用する

同じオブジェクトに対して複数のトップレベルまたは完全同期 VMOC がサポートされます。有効化すると、指定されたオブジェクトおよびプロファイルに対する各 VMOC は、オフラインのデータセットを構築するために使用されます。オフラインデータセットは、各 VMOC が返すデータセットを結合して、結果の重複を排除する OR 演算子から作成されます。

複数 VMOC の設定

この機能を使用するには、SYNC_CONFIGURATION_MODE_VOD Veeva 設定に値「1」を入力します。

特記事項

  • この機能では、トップレベルまたは完全同期の VMOC タイプのみがサポートされます。
  • 特定のオブジェクトに複数の VMOC を有効化すると、さらに追加でクエリが実行する原因となり、同期時間に影響を与えます。時間はさまざまで、実行される同期の種類、オブジェクトのサイズ、クエリの複雑さにより異なります。
  • この機能を有効化する前に、現在のすべての VMOC が正しく機能していることを確認します。有効化されると、すべての有効な VMOC が同期に使用され、デバイスに不要なデータが追加される恐れがあります。
  • Affiliation_vod および Child_Account_vod オブジェクトは、この機能ではサポートされません

拡張同期を使用する

拡張同期は、VMOC に有効化できるチェックボックスです。拡張同期 VMOC は、最終変更者の日付に関わらず、新たに共有されたすべてのレコードを転送します。ユーザがアクセス権限を失ったすべてのレコードと対応するコンテンツ、添付ファイルが同期で削除されます。対して従来の同期では、レコードの最終変更者の日付が最終同期日よりも後の場合のみ、デバイスのオブジェクトレコードが更新されます。

この機能を有効化することで、同期回数を拡張することができます。この機能を必要とするオブジェクトにのみ有効化します。

特記事項

  • 拡張同期は、共有ルールが設定されているオブジェクトにのみ有効化する必要があります
  • オブジェクトの VMOC の Where 句が更新された場合、またはオブジェクトの共有モデルが更新された場合に拡張同期を有効化します。変更がすべてのユーザに同期された後、無効化します。
  • 関連先トップレベルの VMOC で拡張同期を有効化しないでください。同期時間が延長します。
  • マスター子関係では、管理者は子オブジェクトごとに拡張同期を有効化する必要があります。
  • 特定のアカウントプラン共有オブジェクトを除き、VMOC をオブジェクト共有表に作成する必要はありません。

CRM for iPad ユーザが別のレコードを介して参照されているレコードのアクセス権限を失った場合、同期エラーが発生します。この動作は拡張同期が有効化されているかどうかに関わらず生じます。

拡張同期を設定する

この機能を有効にするには:

  1. VMobile_Object_Configuration_vod オブジェクトの Enable_Enhanced_Sync_vod フィールドに進みます。
  2. 編集を選択します。
  3. フィールド使用選択リストから有効を選択します。
  4. 保存を選択します。
  5. すべてのユーザに、VMobile_Object_Configuration_vod オブジェクトの Enable_Enhanced_Sync_vod フィールドに対する FLS 編集権限を付与します。
  6. VMobile_Object_Configuration_vod ページレイアウトに Enable_Enhanced_Sync_vod フィールドを追加します。
  7. 該当するすべての VMOC の Enable_Enhanced_Sync_vod チェックボックスを選択します。