https://smpdoc.shanon.co.jp/ja/cooperation/apex2/chapter008/
FAQ
FAQFAQ・トラブルシュート機能・仕様について連携実行時のトラブルシュート機能・仕様についてアプリケーションをインストールするSFDC組織のエディションに制限はありますか?本アプリケーションはSFDCのワークフローやトリガー等の機能を利用するため、Enterpriseエディション以上でのみご利用可能です。SFDC上でSMPのリード、キャンペーンに相当するオブジェクトをカスタムオブジェクトで設定することはできますか?はい、任意のカスタムオブジェクトを連携対象とすることが可能です。ただし、キャンペーンメンバーのようなリレーションを実現するためには、同様の参照関係を設定する必要があります。また、キャンペーンメンバーを利用する場合と同様、一時オブジェクトおよびSFDC→SFDC連携を利用して、参照関係を更新するよう設定を工夫する必要があります。連携ジョブが重複実行されることはありますか?スケジュールされたタイミングでの自動実行の場合、基本的に同時並列実行されません。連携ジョブの間で実行順の指定はユニーク制約がかかります。また、同一連携ジョブの実行中は「実行中フラグ」が立ち、同時実行しないようになっています。ただし、手動実行した場合は他の連携ジョブと同時実行される可能性があります。手動実行する場合、実行中の連携ジョブにご注意ください。一度失敗した連携ジョブを途中から実行することはできますか?途中で止まった連携ジョブを再開することはできません。また、ジョブが実行中のまま停止してしまった場合などは、トラブルシュートの連携ジョブが実行中のまま停止してしまった場合をご参照ください。連携ジョブのコピーはできますか?SFDC標準機能によるオブジェクト単位のコピーが可能です。別環境への移行等については、SFDC提供のデータローダで可能です。詳しくは、データのエクスポート・インポートの項をご参照ください。アプリケーションのインストールに伴い、顧客SFDC環境のカスタムタブを消費しますか?いいえ、消費しません。アプリケーション用のカスタムタブは実際に追加されますが、これらはインストールした組織のカスタムタブ数にはカウントされませんSMPに接続できない場合、リトライする機能はありますか?SMPに対するAPIコールは、3回までリトライされます。3回実行してSMPに接続できない場合は、異常終了します。連携用SFDCユーザーを変更することは可能ですか?可能です。SMPforSalesforceをインストールした後、連携ジョブを最初に作成・保存すると、[設定]の[スケジュール済みジョブ]に「SMP_SFDC_API_JOB」という名前のジョブが作成されます。このスケジュール済みジョブが保存されていることで、連携処理を定期実行するようになっています。このジョブの「登録実行者」には連携ジョブを作成した管理者が設定されており、連携処理の定期実行はこの管理者による操作として処理されます。連携処理を実行する管理者を変更するためには、このスケジュール済みジョブの「登録実行者」を変更する必要があります。連携ジョブを新規作成したタイミングでこのスケジュール済みジョブが存在しなければ自動作成されます。スケジュール済みジョブは1件だけ必要で、既に同名のジョブが存在する場合は何もしません。既存のスケジュール済みジョブを削除し、新しい管理者で連携ジョブを一度新規作成することで、新たな管理者を登録実行者としたスケジュール済みジョブを作成し直すことができます。変更手順は以下を参考ください。実行中の連携ジョブがないことを確認し、作成済みのすべての連携ジョブの有効フラグを外します[設定]→[ジョブ]→[スケジュール済みのジョブ]からジョブ名「SMP_SFDC_API_JOB」のジョブを削除しますスケジュールが削除されている間は、連携ジョブの定期実行が停止します新たに登録実行者とする管理者で、[連携ジョブ]の「新規」ボタンから連携ジョブを作成、必須項目に適当な値を入力してダミーの連携ジョブを保存しますこの連携ジョブは有効である(有効フラグにチェックを入れる)必要はありません。配下にオブジェクトマッピングなどを追加する必要もありません新たな管理者は、SMPforSalesforceに対する全権限と、連携対象データの操作権限がある標準ライセンスユーザーである必要がありますChatterユーザーなど、機能制限のある無料アカウントは利用できませんスケジュール済みのジョブに「SMP_SFDC_API_JOB」のジョブが再作成されていることを確認します上で作成した連携ジョブは、スケジュール済みジョブが作成された後に削除してもかまいません上の手順1で有効フラグを外した連携ジョブの有効フラグを元に戻します連携の定期実行を停止することはできますか?上記回答にある[スケジュール済みジョブ]の「SMP_SFDC_API_JOB」という名前のジョブを削除すると、定期的な自動実行は停止します。自動実行を再開する場合は、上記手順にあるように、連携実行者とする管理者ユーザーによって何らかの連携ジョブを新規登録してください。SFDCのAPIコールはどの程度消費しますか。その他、SFDCのガバナ制限に関連して注意すべき点はありますか?SMPforSalesforceでは、連携処理時のSFDCに対するデータ取得・更新はApexコードを通じてSFDC内で実行されるため、SFDC側のAPIコールは原則、消費しません。ちなみにSMPに対しては、SMPからのデータ取得時は100件ごとに1APIコール(単純なリード情報のみの場合。複数のオブジェクトを参照するリソースの場合、その数分コールします。たとえば、「キャンペーン申込」であればリード+キャンペーン+申込+申込フローなどの参照先それぞれのAPIメソッドが実行されます)、SMPへのデータ登録・更新時は1件ごとに存在チェックと登録・更新処理でそれぞれ1APIコール(1件あたり最低2コール)が、最低限発生するAPIコール数の目安となります。また、APIコール以外のApexガバナ制限についても、処理を分割するなど、原則として制限にかからないような作りになっております。処理件数が多い場合、トータルの実行時間は長くなりますが、単位時間あたりのリソース消費量は一定量に抑えているイメージです。処理性能については、パフォーマンスについてをご参照ください。さらにまた、SFDCで保持できるデータ量は契約によって異なります。連携するデータはもちろん、連携ログデータによっても容量を消費しますので、ログの保存期間の設定などにご注意ください。SMPforSalesforceを利用しているSFDC環境のSandboxを作成した場合、どのような影響がありますか?SMPforSalesforceでは、SMP接続設定というカスタム設定で接続先のSMP情報を保持しています。また、スケジュール済みジョブに設定があることで連携処理が定期実行されます。つまり、これらの情報も含めてSandboxを作成した場合、Sandbox環境から連携先に設定しているSMPへの連携が実行される可能性があります。Sandbox環境から意図しない連携が実行されてしまうのを確実に防ぐためには、Sandbox作成時はこれらの情報をコピーしないようにするか、Sandbox作成後にSMP接続設定を削除、または編集して有効チェックを外すか別の接続先に変更してください。また、作成した環境で連携を利用しない場合は、保存されている連携ジョブの有効フラグを外すか、または連携ジョブを削除ください。自動実行を停止する場合は、「スケジュール済みジョブ」の「SMP_SFDC_API_JOB」を削除してください。なお、SalesforceにおけるSandbox作成時の挙動や、コピー対象となるデータ等の正確な情報につきましては、恐れ入りますがSalesforceへご確認ください。ジョブの実行時間の長さによって、次回のジョブ実行の時間が遅くなることはありますか?ジョブの実行時間が繰り返しタイミングの時間内に収まっている場合、実行時間が遅くなる(後ろにずれる)ことはありません。たとえば、繰り返しタイミングを6時間と設定していてジョブ実行に平均3時間かかる場合、以下のようになります。(1回目)00:00開始→03:00終了(2回目)06:00開始→09:00終了(3回目)12:00開始→18:00終了一方、ジョブ実行が繰り返しタイミングに設定している時間よりも長くなってしまった場合は、次回の実行をスキップします。たとえば、繰り返しタイミングを3時間と設定していてジョブ実行に4時間かかる場合、以下のようになります。(1回目)00:00開始→04:00終了(2回目)03:00開始→(1回目が終わっていない=実行中のためスキップ)(3回目)06:00開始→10:00終了「キャンペーン申込」と「サブキャンペーン申込」、「キャンペーン申込」と「キャンペーン申込アンケート」、あるいは、「キャンペーン申込アンケート」と「アンケート履歴」の違いは?「キャンペーン申込」は、キャンペーン型のキャンペーンに対する申込情報を取得するためのオブジェクトです。一方、「サブキャンペーン申込」は、サブキャンペーン型のキャンペーンに対する申込情報を取得します。よって、取得したい申込情報のキャンペーンの型に応じてどちらを利用するか決めます。そもそもサブキャンペーン型キャンペーンを利用していない場合、「サブキャンペーン申込(アンケート)」は不要です。「(サブ)キャンペーン申込アンケート」は、「(サブ)キャンペーン申込」の内容に申込時のアンケート回答内容が追加されたものです。つまり、「(サブ)キャンペーン申込」の上位互換なので、「(サブ)キャンペーン申込」が取得可能な情報はすべて取得可能ですが、申込時のアンケート回答情報を取得する必要がない場合は、「(サブ)キャンペーン申込」を利用するとよいでしょう。「アンケート履歴」は、キャンペーンへの申込情報は取得せず、アンケート回答履歴を取得します。事後アンケート(キャンペーン申込者が回答可能なアンケート)の回答も取得できます。申込に関係なく、アンケート回答情報のみを取得したい場合は、こちらを利用します。連携実行時のトラブルシュートSMPへのAPI接続に失敗するケース1:SMP接続設定のURLのフォーマットが間違っている(プロトコル部(が入力されていない等)SMP接続設定で指定するURLはhttps://から始まるフォーマットで記述する必要があります。例:エラー例[2015-10-13T17:30:43.444JST]ERROR[JOB-ID:a0928000004dCimAAE]0300設定情報の取得に失敗しました。トークンケース2:リモートサイト設定を追加していない接続対象となるSMPのドメインは、SFDCの設定「セキュリティコントロール」にある「リモートサイト設定」に登録されている必要があります。エラー例[2015-10-20T16:26:46.250JST]FATAL[JOB-ID:a09280000045bqKAAQ]0300設定情報の取得に失敗しました。トークン[SMPAbRequest]Line:1102【System.CalloutException】Unauthorizedendpoint,pleasecheckSetup-Security-Remotesitesettings.endpoint=[2015-10-20T16:26:46.252JST]FATAL[JOB-ID:a09280000045bqKAAQ]0003ケース3:APIリクエストがIP制限にひっかかっている連携に使用するSMPのAPIキーはSFDC環境のIPアドレスからのリクエストを許可されている必要があるため、SMPforSalesforce専用に発行されたAPIキーを利用してください。SMPforSalesforceのために発行されたAPIキーを接続設定に指定しても下記のようなエラーが連携ログに出力される場合、サポートまでお問い合わせください。また、SMPのシステム設定でIP制限をドメイン全体に適用している場合は、SFDC環境のIPアドレスをその許可対象にも含める必要があります。ホワイトリスト登録が必要なSalesforceのIPアドレスとドメイン(Salesforceヘルプサイト)を参照し、「SalesforceのIP範囲」に記載されたIPアドレス範囲を「IP制限」の設定値に含めてください。(IP制限の設定を誤ると、管理画面も含め対象SMPにどこからもアクセスできなくなる可能性もあるため、設定変更は慎重に行ってください)エラー例ERROR[JOB-ID:a026F00000tZ0fZQAS]1012GET:/services/rest/visitorに1件失敗しました。403Forbiddenケース4:SMPがメンテナンス停止中SMP環境が停止メンテナンスを実施中の場合、連携実行できません。サービス再開後に再度お試しください。エラー例[2015-12-26T02:00:52.998JST]ERROR[JOB-ID:a0828000007EEUEAA4]1012GET:/services/rest/visitorに1件失敗しました。システムメンテナンスのお知らせ連携設定に起因するエラーや問題存在しないSFDCオブジェクトまたは項目をマッピングに指定している連携ジョブ実行時、項目マッピングに指定されているオブジェクトおよび項目が、実際に設定が存在するかチェックがかかります。存在しない場合は、エラーとなります。指定した項目のAPI参照名を確認し、実際の項目名に修正するか、カスタム項目を設定してください。エラー例[2015-10-20T16:23:47.332JST]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]1012GET:/services/rest/seminarに1件失敗しました。3000ReceiverServerError読み取り専用のSFDC項目を連携先の更新対象に指定している項目が存在していても、読み取り専用に設定されている項目は連携時に更新できません。書き込み可能な項目を指定してください。たとえば、各オブジェクトのid項目はシステムによる自動採番でユーザーによる書き込みができないため、項目マッピングによって書き込み先に指定することはできません。エラー例FATAL[JOB-ID:a2w5F000004VQnAQAW]0003[SMPAbRequest]Line:152【SMPCOOP.SMPCheckObject.AccessException】編集権限が無いオブジェクトまたは項目が存在します。オブジェクト[contact]フィールド[id]権限チェック中にエラーが発生しました。オブジェクト[contact]フィールド[id](SMPCOOP)必須入力の項目に空白値で登録しようとしている入力が必須の項目は、連携時に必ず値が入力されるようにします。エラー例[2015-10-20T16:42:38.592JST]ERROR[JOB-ID:a09280000045bqKAAQ]1102SFDC:leadのINSERTに失敗しました。Database.SaveResult[getErrors=(Database.Error[getFields=(Company);getMessage=値を入力してください:[Company];getStatusCode=REQUIRED_FIELD_MISSING;]);getId=null;isSuccess=false;][2015-10-20T16:42:38.596JST]INFO[JOB-ID:a09280000045bqKAAQ]1101SFDC:leadのINSERTに0件成功、1件失敗しました。SFDCからのデータ取得にSOQLを記述していて、select対象に含めていない項目をマッピング設定してしまったSOQLを記述する場合、項目マッピングに指定する項目はすべてselect句の対象に含める必要があります。エラー例(1)[2015-10-24T04:52:01.507JST]ERROR[JOB-ID:a09280000057015AAA]2100フィルター処理エラー。レコード=Lead:{Id=00Q28000002kL0EEAU,LastName=鈴木,Company=シャノンテスト社,SMP_ID__c=5}[SMP]Line:75【SMPCOOP.Filter.FilterException】SObjectrowwasretrievedviaSOQLwithoutqueryingtherequestedfield:Lead.FirstName(SMPCOOP)[2015-10-24T04:52:01.508JST]FATAL[JOB-ID:a09280000057015AAA]0003[SMPAbRequest]Line:1664【SMPCOOP.SMP.SMPException】SObjectrowwasretrievedviaSOQLwithoutqueryingtherequestedfield:Lead.FirstName(SMPCOOP)エラー例(2)[2016-05-02T01:05:00.371JST]INFO[JOB-ID:a0828000007EEUBAA4]0000SOQL.query:SELECTId,SessionTitle__c,Lead__c,Campaign__c,SMP_ID__c,SMP_VS_ID__cFROMSubCampaignApplicationEnquete__cWHERELead__c!=nullANDCampaign__c!=nullANDVisitorId__c=:var1ANDSessionId__c=:var3ORDERBYidLIMIT1[2016-05-02T01:05:00.443JST]FATAL[JOB-ID:a0828000007EEUBAA4]0003[SMPAbRequest]Line:811【System.NullPointerException】Attempttode-referenceanullobject(SMPCOOP)SMP項目の指定にプレフィックスが付いていないか、間違っている項目マッピングや、更新キーにSMPの項目を指定する場合、APIメソッド名をプレフィックスに含めた形式(Visitor.Name1など)で正確に指定する必要があります。(参考:項目表記フォーマット)エラー例[2015-11-19T17:22:02.424JST]INFO[JOB-ID:a09280000057HXEAA2]1000ジョブ:L1:リード新規(SFDC→SMP)を開始します。[2015-11-19T17:22:07.538JST]INFO[JOB-ID:a09280000057HXEAA2]0000SOQL.query:SELECTId,SMP_ID__c,Email,FirstName,LastName,CompanyFROMLeadWHERELastModifiedById!='005280000018AFK'ANDIsConverted=FALSEORDERBYidLIMIT1[2015-11-19T17:22:07.565JST]FATAL[JOB-ID:a09280000057HXEAA2]0003[SMPAbRequest]Line:784【System.NullPointerException】Argumentcannotbenull.(SMPCOOP)変数の格納対象に、連携元ではなく連携先の項目を指定している変数に格納可能な項目は、連携元で、かつ、項目マッピングに指定されているものです。エラー例[2015-11-19T18:38:32.636JST]ERROR[JOB-ID:a09280000057HXEAA2]2000変数処理中にエラーが発生しました。オブジェクトID=a0D280000016qX8EAI[SettingUtils]Line:669【System.SObjectException】InvalidfieldVisitor.IdforLead(SMPCOOP)更新キーに一致するレコードがあるにも関わらず、新規レコードとして連携してしまう原因(1)項目名の記述が間違っているか、項目マッピングが設定されていない可能性があります。更新キーに対して検索する連携元の項目は項目マッピングから参照するので、更新キーに指定する項目は、必ず項目マッピングもあわせて設定してください。原因(2)SFDCには、入力値の先頭末尾の空白を自動的に削除して登録する仕様があります。そのため、たとえばSMPリードとSFDC取引先の間で、会社名・取引先名を更新キーに指定しているような場合、SMPで先頭または末尾に空白を含む会社名でデータを登録すると、更新キーによる存在チェック時は空白を含む値でチェックしますが、実際に連携によってSFDCに登録される会社名からは空白が自動削除されるので、更新キーに一致することなく連携のたびにSFDCに新規レコードが作成されます。一部のSMPデータのみが、更新のたびにSFDCで新規作成されるような場合は、こちらの可能性についても(SMPのデータに空白が含まれていないか)ご確認ください。連携処理に時間がかかるケース1:SOQL変数を利用して取得条件を指定している場合たとえば、SMPから取得したデータ項目を変数に格納し、続くオブジェクトマッピングでSFDCからの取得条件のSOQLにその変数を利用しているような場合があるとします。たとえば、以下のようなSOQLを設定しているとします。SELECTId,Email,dup_key__cFROMLeadWHEREEmail=:var1ANDIsConverted=FALSEここで、変数:var1には、直前のオブジェクトマッピングで取得したSMPリードのメールアドレスがされているものとします。実際に取得したSMPリードが存在した場合はその件数で該当するLeadだけを取得します。しかし、取得した件数がゼロ件だった場合、:var1の中身は空になるので、Emailが空欄のリードをすべて取得することになり、存在するデータ量によっては大幅に時間がかかる可能性があります。これを防ぐために、SOQLの条件に変数を利用する場合は、以下のように空欄でないデータを対象とするように条件を指定します。SELECTId,Email,dup_key__cFROMLeadWHEREEmail=:var1ANDEmail!=nullANDIsConverted=FALSEこれにより、実際に該当するデータ量に応じた処理時間になることが期待できます。当然、実際に該当件数が多い場合は、相応の実行時間となります。環境に起因する問題エラー通知メールが送信されないメール送信のアクセス制御によって、メール送信ができない場合があります。特に、Sandbox環境の場合、デフォルトでメール送信は「システムメールのみ」に制限されているので、SFDCのメール管理設定をご確認ください。参考ヘルプサイト)連携ジョブが実行中のまま停止してしまった場合連携実行中に予期しないエラー(SFDC自体の障害や負荷、SMPからの想定外のレスポンス等)によって、連携ジョブが実行中のまま停止してしまう場合があります。具体的には、連携ジョブの「実行中」フラグにチェックがついたまま、(連携対象のデータ量に比較して)長時間処理状況が進捗しない状態を指します。以下の観点で、連携ジョブが実際停止してしまっていることを確認し、調査に必要なデータを収集します。「実行中」のままになっている連携ジョブを確認する連携処理が完了すると「実行中」フラグはOFFになり、次回実行日時が更新されます。もし、実行中のチェックがついたまま、実行日時を大きく超過している場合「SMP_ログ」タブのレコードを確認し、保存します・連携ジョブが実際に実行されている場合、処理が進捗するにつれて「SMP_ログ」のデータが増えていきます。連携処理が完了すれば、このデータは連携ジョブごとのログ・ファイルに保存され、SMP_ログからはデータが自動的に削除されます。・連携ジョブが中断してしまった場合、「SMP_ログ」にデータが残ったままになっている場合があります。このデータはログ保存期間の設定によって、指定日数を超えると自動的に削除されてしまうため、もしここにデータが残っている場合は、画面キャプチャやデータローダー等を利用して内容を保存します。あるいは、SMP接続設定タブからログ保存期間の日数をより大きい値に変更し、自動削除されるまでの期間を延ばします。・ここのデータが増え続けている場合、連携処理は継続しています。単純に連携対象が多い場合、この状態は正常ですが、連携対象が多くないにも関わらずこの状態が長時間継続する場合は、想定外のエラー等により処理がループしている可能性があります。(以下のApexジョブから停止させる必要がある可能性があります)SFDCの[設定]にて、[Apexジョブ]および[ApexFlexキュー]の状態を確認します・SFDCのジョブ実行機構そのものに問題があった場合、Apexジョブのキュー状況が正常でない可能性があります。・Apexジョブに処理中のままのものが残っていたり、同じ内容のキューが繰り返し登録され続けているような場合、対象のApexジョブを「中止」させる必要があります。・ジョブを中止させる場合、以下の手順を参考ください。[設定][ジョブ][スケジュール済みジョブ]から、ジョブ名が「SMP_SFDC_API_JOB」のジョブを削除します連携設定用管理者で、ダミーの連携ジョブをひとつ新規作成します(これにより、スケジュール済みジョブが再設定されます)「Apexジョブ」にスタックしているSMPforSalesforceのジョブを上から順にすべて「中止」します「ApexFlexキュー」が、ジョブの中止によってクリアされていることを確認しますこれらの情報から問題の原因が判明する場合は、その対応を行い、下記の復旧手順を実施します。原因が分からない場合、上で収集した情報を含め、サポートまでお問い合わせください。停止した連携の復旧手順連携ジョブが停止してしまった場合、以下の手順で復旧します。再実行してよい連携ジョブのみ「有効」フラグにチェックがついた状態にします(=再実行させない連携ジョブの有効フラグを外す)基本的には、途中停止してしまったジョブとそれ以降に実行されるはずだった連携ジョブのみ、有効な状態にします。すべてのジョブの「実行中」フラグのチェックを外します「SMP接続設定一覧」タブから連携ジョブバッチ実行を押下し手動実行しますジョブが完了したら「有効」フラグを元に戻しますすべてのジョブの「前回実行日時」を「次回実行日時」と同じにしますすべてのジョブの「次回実行時間」を、次回自動実行されるべき未来の日時(時刻は00分)に変更します