FAQ・トラブルシュート

機能・仕様について

Q. アプリケーションをインストールする SFDC 組織のエディションに制限はありますか。
本アプリケーションは SFDC のワークフローやトリガー等の機能を利用するため、 Enterprise エディション以上でのみご利用可能です。

Q. SFDC上でSMPのリード、キャンペーンに相当するオブジェクトをカスタムオブジェクトで設定することはできますか。
はい、任意のカスタムオブジェクトを連携対象とすることが可能です。ただし、キャンペーンメンバーのようなリレーションを実現するためには、同様の参照関係を設定する必要があります。また、キャンペーンメンバーを利用する場合と同様、一時オブジェクトおよび SFDC → SFDC 連携を利用して、参照関係を更新するよう設定を工夫する必要があります。

Q. 連携ジョブが重複実行されることはありますか。
スケジュールされたタイミングでの自動実行の場合、基本的に同時並列実行されません。連携ジョブの間で実行順の指定はユニーク制約がかかります。また、同一連携ジョブの実行中は「実行中フラグ」が立ち、同時実行しないようになっています。
ただし、手動実行した場合は他の連携ジョブと同時実行される可能性があります。手動実行する場合、実行中の連携ジョブにご注意ください。

Q. 一度失敗した連携ジョブを途中から実行することはできますか。
途中で止まった連携ジョブを再開することはできません。また、ジョブが実行中のまま停止してしまった場合などは、トラブルシュートの 連携ジョブが実行中のまま停止してしまった場合 を参照ください。

Q. 連携ジョブのコピーはできますか。
SFDC標準機能によるオブジェクト単位のコピーが可能です。別環境への移行等については、SFDC 提供のデータローダで可能です。詳しくは、データの エクスポート・インポート の項を参照ください。

Q. アプリケーションのインストールに伴い、顧客SFDC環境のカスタムタブを消費しますか。
いいえ、消費しません。アプリケーション用のカスタムタブは実際に追加されますが、これらはインストールした組織のカスタムタブ数にはカウントされません

Q. SMPに接続できない場合、リトライする機能はありますか。
SMP に対する API コールは、3回までリトライされます。3回実行して SMP に接続できない場合は、異常終了します。

Q. 連携用 SFDC ユーザーを変更することは可能ですか。
可能です。

SMP for Salesforce をインストールした後、連携ジョブを最初に作成・保存すると、[設定] の [スケジュール済みジョブ] に「SMP_SFDC_API_JOB」という名前のジョブが作成されます。このスケジュール済みジョブが保存されていることで、連携処理を定期実行するようになっています。このジョブの「登録実行者」には連携ジョブを作成した管理者が設定されており、連携処理の定期実行はこの管理者による操作として処理されます。

schedule job list.png
図 1. スケジュール済みジョブの例

連携処理を実行する管理者を変更するためには、このスケジュール済みジョブの「登録実行者」を変更する必要があります。連携ジョブを新規作成したタイミングでこのスケジュール済みジョブが存在しなければ自動作成されます。スケジュール済みジョブは1件だけ必要で、既に同名のジョブが存在する場合は何もしません。既存のスケジュール済みジョブを削除し、新しい管理者で連携ジョブを一度新規作成することで、新たな管理者を登録実行者としたスケジュール済みジョブを作成し直すことができます。

変更手順は以下を参考ください。

  1. 実行中の連携ジョブがないことを確認し、作成済みのすべての連携ジョブの有効フラグを外します

  2. [設定]→[ジョブ]→[スケジュール済みのジョブ] からジョブ名「SMP_SFDC_API_JOB」のジョブを削除します

    • スケジュールが削除されている間は、連携ジョブの定期実行が停止します

  3. 新たに登録実行者とする管理者で、 [連携ジョブ] の「新規」ボタンから連携ジョブを作成、必須項目に適当な値を入力してダミーの連携ジョブを保存します

    • この連携ジョブは有効である(有効フラグにチェックを入れる)必要はありません。配下にオブジェクトマッピングなどを追加する必要もありません

    • 新たな管理者は、SMP for Salesforce に対する全権限と、連携対象データの操作権限がある標準ライセンスユーザーである必要があります

      • Chatterユーザーなど、機能制限のある無料アカウントは利用できません

  4. スケジュール済みのジョブに「SMP_SFDC_API_JOB」のジョブが再作成されていることを確認します

    • 上で作成した連携ジョブは、スケジュール済みジョブが作成された後に削除してもかまいません

  5. 上の手順1 で有効フラグを外した連携ジョブの有効フラグを元に戻します

Q. 連携の定期実行を停止することはできますか。
上記回答にある [スケジュール済みジョブ] の「SMP_SFDC_API_JOB」という名前のジョブを削除すると、定期的な自動実行は停止します。自動実行を再開する場合は、上記手順にあるように、連携実行者とする管理者ユーザーによって何らかの連携ジョブを新規登録してください。

Q. SFDC の APIコールはどの程度消費しますか。その他、 SFDC のガバナ制限に関連して注意すべき点はありますか。
SMP for Salesforce では、連携処理時の SFDCに対するデータ取得・更新は Apex コードを通じて SFDC 内で実行されるため、 SFDC 側の API コールは原則、消費しません。

ちなみに SMP に対しては、SMPからのデータ取得時は 100件ごとに 1API コール(単純なリード情報のみの場合。複数のオブジェクトを参照するリソースの場合、その数分コールします。たとえば、「キャンペーン申込」であればリード+キャンペーン+申込+申込フローなどの参照先それぞれのAPIメソッドが実行されます)、 SMP へのデータ登録・更新時は1件ごとに存在チェックと登録・更新処理でそれぞれ1API コール(1件あたり最低2コール)が、最低限発生する API コール数の目安となります。

また、API コール以外の Apex ガバナ制限についても、処理を分割するなど、原則として制限にかからないような作りになっております。処理件数が多い場合、トータルの実行時間は長くなりますが、単位時間あたりのリソース消費量は一定量に抑えているイメージです。処理性能については、 パフォーマンスについて を参照ください。

さらにまた、 SFDC で保持できるデータ量は契約によって異なります。連携するデータはもちろん、連携ログデータによっても容量を消費しますので、ログの保存期間の設定などにご注意ください。

連携実行時のトラブルシュート

SMPへの API 接続に失敗する

ケース1: SMP 接続設定の URL のフォーマットが間違っている (プロトコル部( https:// )が入力されていない等)

SMP接続設定で指定する URL は https:// から始まるフォーマットで記述する必要があります。( 例: https://demo-example.smktg.jp)

エラー例:

[2015-10-13T17:30:43.444 JST] ERROR [JOB-ID:a0928000004dCimAAE] 0300 設定情報の取得に失敗しました。トークン
ケース2: リモートサイト設定を追加していない

接続対象となる SMP のドメインは、 SFDC の設定「セキュリティコントロール」にある「リモートサイト設定」に登録されている必要があります。

エラー例:

[2015-10-20T16:26:46.250 JST] FATAL [JOB-ID:a09280000045bqKAAQ] 0300 設定情報の取得に失敗しました。トークン
[SMPAbRequest]Line:1102【System.CalloutException】Unauthorized endpoint, please check Setup->Security->Remote site settings. endpoint = https://demo-example.smktg.jp/services/rest/authentication?api_key=aaaaaaaaaaaa&api_sig=ssssssssssss&password=xxxxxxxxxxxx
(SMPCOOP)
[2015-10-20T16:26:46.252 JST] FATAL [JOB-ID:a09280000045bqKAAQ] 0003
ケース3: API リクエストが IP 制限にひっかかっている

連携に使用する SMP の API キーは SFDC 環境の IP アドレスからのリクエストを許可されている必要があるため、 SMP for Salesforce 専用に発行された API キーを利用してください。
SMP for Salesforce のために発行された API キーを接続設定に指定しても下記のようなエラーが連携ログに出力される場合、サポートまでお問い合わせください。

また、SMP のシステム設定で IP 制限をドメイン全体に適用している場合は、 SFDC 環境の IP アドレスをその許可対象にも含める必要があります。 ホワイトリスト登録が必要な Salesforce の IP アドレスとドメイン(Salesforce ヘルプサイト) を参照し、「Salesforce の IP 範囲」に記載された IP アドレス範囲を「IP制限」の設定値に含めてください。(IP制限の設定を誤ると、管理画面も含め対象 SMP にどこからもアクセスできなくなる可能性もあるため、設定変更は慎重に行ってください)

エラー例:

ERROR [JOB-ID:a026F00000tZ0fZQAS] 1012 GET:/services/rest/visitorに1件失敗しました。403 Forbidden
ケース4: SMP がメンテナンス停止中

SMP 環境が停止メンテナンスを実施中の場合、連携実行できません。サービス再開後に再度お試しください。

エラー例:

[2015-12-26T02:00:52.998 JST] ERROR [JOB-ID:a0828000007EEUEAA4] 1012 GET:/services/rest/visitorに1件失敗しました。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>システムメンテナンスのお知らせ</title>

連携設定に起因するエラーや問題

存在しない SFDC オブジェクトまたは項目をマッピングに指定している

連携ジョブ実行時、項目マッピングに指定されているオブジェクトおよび項目が、実際に設定が存在するかチェックがかかります。存在しない場合は、エラーとなります。
指定した項目の API 参照名を確認し、実際の項目名に修正するか、カスタム項目を設定してください。

エラー例:

[2015-10-20T16:23:47.332 JST] FATAL [JOB-ID:a09280000045bqKAAQ] 0003
[SMPAbRequest]Line:220【SMPCOOP.SMPCheckObject.ExistObjectException】オブジェクトまたは項目が存在しません。オブジェクト[Lead]フィールド[SMP_ID__c]
オブジェクトまたは項目が存在しません。オブジェクト[Lead]フィールド[SMP_ID__c]
(SMPCOOP)
存在しない SMP の項目を API パラメータや項目マッピングに指定している

SMP に対して存在しない項目を条件に指定した API リクエストを実行すると、 API エラーが発生します。特に、追加項目の ID がその環境に存在するものかなど、API パラメータや項目マッピングの指定に間違いがないかご確認ください。

エラー例:

ERROR [JOB-ID:a026F00000tZ0fYQAS] 1012 GET:/services/rest/seminarに1件失敗しました。<?xml version="1.0" encoding="UTF-8"?>
<Fault xmlns="http://smartseminar.jp/" version="1.52"><Code><SubCode>3000</SubCode><Value>Receiver</Value></Code><Reason><Text>Server Error</Text></Reason></Fault>
読み取り専用の SFDC 項目を連携先の更新対象に指定している

項目が存在していても、読み取り専用に設定されている項目は連携時に更新できません。
書き込み可能な項目を指定してください。

必須入力の項目に空白値で登録しようとしている

入力が必須の項目は、連携時に必ず値が入力されるようにします。

エラー例:

[2015-10-20T16:42:38.592 JST] ERROR [JOB-ID:a09280000045bqKAAQ] 1102 SFDC:leadのINSERTに失敗しました。
Database.SaveResult[getErrors=(Database.Error[getFields=(Company);getMessage=値を入力してください: [Company];getStatusCode=REQUIRED_FIELD_MISSING;]);getId=null;isSuccess=false;]
[2015-10-20T16:42:38.596 JST] INFO [JOB-ID:a09280000045bqKAAQ] 1101 SFDC:leadのINSERTに0件成功、1件失敗しました。
SFDC からのデータ取得に SOQL を記述していて、select 対象に含めていない項目をマッピング設定してしまった

SOQL を記述する場合、項目マッピングに指定する項目はすべて select 句の対象に含める必要があります。

エラー例(1):

[2015-10-24T04:52:01.507 JST] ERROR [JOB-ID:a09280000057015AAA] 2100 フィルター処理エラー。
レコード=Lead:{Id=00Q28000002kL0EEAU, LastName=鈴木, Company=シャノンテスト社, SMP_ID__c=5}

[SMP]Line:75【SMPCOOP.Filter.FilterException】SObject row was retrieved via SOQL without querying the requested field: Lead.FirstName
(SMPCOOP)
[2015-10-24T04:52:01.508 JST] FATAL [JOB-ID:a09280000057015AAA] 0003
[SMPAbRequest]Line:1664【SMPCOOP.SMP.SMPException】SObject row was retrieved via SOQL without querying the requested field: Lead.FirstName
(SMPCOOP)

エラー例(2):

[2016-05-02T01:05:00.371 JST] INFO [JOB-ID:a0828000007EEUBAA4] 0000 SOQL.query:SELECT Id, SessionTitle__c, Lead__c, Campaign__c, SMP_ID__c, SMP_VS_ID__c FROM SubCampaignApplicationEnquete__c WHERE Lead__c != null AND Campaign__c != null AND VisitorId__c =:var1 AND SessionId__c = :var3 ORDER BY id LIMIT 1
[2016-05-02T01:05:00.443 JST] FATAL [JOB-ID:a0828000007EEUBAA4] 0003
[SMPAbRequest]Line:811【System.NullPointerException】Attempt to de-reference a null object
(SMPCOOP)
SMP 項目の指定にプレフィックスが付いていないか、間違っている

項目マッピングや、更新キーに SMP の項目を指定する場合、API メソッド名をプレフィックスに含めた形式(Visitor.Name1 など)で正確に指定する必要があります。(参考: 項目表記フォーマット)

エラー例:

[2015-11-19T17:22:02.424 JST] INFO [JOB-ID:a09280000057HXEAA2] 1000 ジョブ:L1: リード新規 (SFDC→SMP)を開始します。
[2015-11-19T17:22:07.538 JST] INFO [JOB-ID:a09280000057HXEAA2] 0000 SOQL.query:SELECT Id, SMP_ID__c, Email, FirstName, LastName, Company FROM Lead WHERE LastModifiedById != '005280000018AFK' AND IsConverted = FALSE ORDER BY id LIMIT 1
[2015-11-19T17:22:07.565 JST] FATAL [JOB-ID:a09280000057HXEAA2] 0003
[SMPAbRequest]Line:784【System.NullPointerException】Argument cannot be null.
(SMPCOOP)
変数の格納対象に、連携元ではなく連携先の項目を指定している

変数に格納可能な項目は、連携元で、かつ、項目マッピングに指定されているものです。

エラー例:

[2015-11-19T18:38:32.636 JST] ERROR [JOB-ID:a09280000057HXEAA2] 2000 変数処理中にエラーが発生しました。オブジェクトID=a0D280000016qX8EAI

[SettingUtils]Line:669【System.SObjectException】Invalid field Visitor.Id for Lead
(SMPCOOP)
更新キーに一致するレコードがあるにも関わらず、新規レコードとして連携してしまう
原因(1)

項目名の記述が間違っているか、項目マッピングが設定されていない可能性があります。
更新キーに対して検索する連携元の項目は項目マッピングから参照するので、更新キーに指定する項目は、必ず項目マッピングもあわせて設定してください。

原因(2)

SFDC には、入力値の先頭末尾の空白を自動的に削除して登録する仕様があります。
そのため、たとえば SMP リードと SFDC 取引先の間で、会社名・取引先名を更新キーに指定しているような場合、 SMP で先頭または末尾に空白を含む会社名でデータを登録すると、更新キーによる存在チェック時は空白を含む値でチェックしますが、実際に連携によって SFDC に登録される会社名からは空白が自動削除されるので、更新キーに一致することなく連携のたびに SFDC に新規レコードが作成されます。
一部の SMP データのみが、更新のたびに SFDC で新規作成されるような場合は、こちらの可能性についても(SMP のデータに空白が含まれていないか)ご確認ください。

連携処理に時間がかかる

ケース1: SOQL 変数を利用して取得条件を指定している場合

たとえば、 SMP から取得したデータ項目を変数に格納し、続くオブジェクトマッピングで SFDC からの取得条件の SOQL にその変数を利用しているような場合があるとします。たとえば、以下のような SOQLを設定しているとします。

SELECT Id,Email,dup_key__c  FROM Lead WHERE Email = :var1 AND IsConverted = FALSE

ここで、変数 :var1 には、直前のオブジェクトマッピングで取得した SMP リードのメールアドレスがされているものとします。実際に取得した SMP リードが存在した場合はその件数で該当する Lead だけを取得します。

しかし、取得した件数がゼロ件だった場合、 :var1 の中身は空になるので、 Email が空欄のリードをすべて取得することになり、存在するデータ量によっては大幅に時間がかかる可能性があります。

これを防ぐために、SOQL の条件に変数を利用する場合は、以下のように空欄でないデータを対象とするように条件を指定します。

SELECT Id,Email,dup_key__c  FROM Lead WHERE Email = :var1 AND Email != null AND IsConverted = FALSE

これにより、実際に該当するデータ量に応じた処理時間になることが期待できます。当然、実際に該当件数が多い場合は、相応の実行時間となります。

環境に起因する問題

エラー通知メールが送信されない

メール送信のアクセス制御によって、メール送信ができない場合があります。特に、Sandbox 環境の場合、デフォルトでメール送信は「システムメールのみ」に制限されているので、 SFDC のメール管理設定をご確認ください。

連携ジョブが実行中のまま停止してしまった場合

連携実行中に予期しないエラー(SFDC自体の障害や負荷、SMPからの想定外のレスポンス等)によって、連携ジョブが実行中のまま停止してしまう場合があります。具体的には、連携ジョブの「実行中」フラグにチェックがついたまま、(連携対象のデータ量に比較して)長時間処理状況が進捗しない状態を指します。

以下の観点で、連携ジョブが実際停止してしまっていることを確認し、調査に必要なデータを収集します。

  • 「実行中」のままになっている連携ジョブを確認する

    • 連携処理が完了すると「実行中」フラグは OFF になり、次回実行日時が更新されます。もし、実行中のチェックがついたまま、実行日時を大きく超過している場合

  • 「SMP_ログ」タブのレコードを確認し、保存する

    • 連携ジョブが実際に実行されている場合、処理が進捗するにつれて「SMP_ログ」のデータが増えていきます。連携処理が完了すれば、このデータは連携ジョブごとのログ・ファイルに保存され、SMP_ログからはデータが自動的に削除されます

    • 連携ジョブが中断してしまった場合、「SMP_ログ」にデータが残ったままになっている場合があります。このデータはログ保存期間の設定によって、指定日数を超えると自動的に削除されてしまうため、もしここにデータが残っている場合は、画面キャプチャやデータローダー等を利用して内容を保存します。あるいは、SMP接続設定タブからログ保存期間の日数をより大きい値に変更し、自動削除されるまでの期間を延ばします。

    • ここのデータが増え続けている場合、連携処理は継続しています。単純に連携対象が多い場合、この状態は正常ですが、連携対象が多くないにも関わらずこの状態が長時間継続する場合は、想定外のエラー等により処理がループしている可能性があります。(以下の Apex ジョブから停止させる必要がある可能性があります)

  • SFDC の [設定] にて、[Apex ジョブ] および [Apex Flex キュー] の状態を確認する

    • SFDC のジョブ実行機構そのものに問題があった場合、Apex ジョブのキュー状況が正常でない可能性があります。

    • Apex ジョブに処理中のままのものが残っていたり、同じ内容のキューが繰り返し登録され続けているような場合、対象の Apex ジョブを「中止」させる必要があります。

    • ジョブを中止させる場合、以下の手順を参考ください。

      1. [設定]→[ジョブ]→[スケジュール済みジョブ] から、ジョブ名が「SMP_SFDC_API_JOB」のジョブを削除します

      2. 連携設定用管理者で、ダミーの連携ジョブをひとつ新規作成します(これにより、スケジュール済みジョブが再設定されます)

      3. 「Apex ジョブ」にスタックしている SMP for Salesforce のジョブを上から順にすべて「中止」します

      4. 「Apex Flex キュー」が、ジョブの中止によってクリアされていることを確認

これらの情報から問題の原因が判明する場合は、その対応を行い、下記の復旧手順を実施します。原因が分からない場合、上で収集した情報を含め、サポートまでお問い合わせください。

停止した連携の復旧手順

連携ジョブが停止してしまった場合、以下の手順で復旧します。

  1. 再実行してよい連携ジョブのみ「有効」フラグにチェックがついた状態にする (=再実行させない連携ジョブの有効フラグを外す)

    • 基本的には、途中停止してしまったジョブとそれ以降に実行されるはずだった連携ジョブのみ、有効な状態にします

  2. すべてのジョブの「実行中」フラグのチェックを外す。

  3. 「SMP接続設定一覧」タブから連携ジョブバッチ実行を押下し手動実行する。

  4. ジョブが完了したら「有効」フラグを元に戻す。

  5. すべてのジョブの「前回実行日時」を「次回実行日時」と同じにする。

  6. すべてのジョブの「次回実行時間」を、次回自動実行されるべき未来の日時(時刻は00分)に変更する。

検索結果 ""

    検索結果がありません ""