Salesforceコネクタ

概要

Salesforceコネクタは、Salesforceのオブジェクト(標準オブジェクト、カスタムオブジェクト)からデータを取得して Fess のインデックスに登録する機能を提供します。

この機能には fess-ds-salesforce プラグインが必要です。

対応オブジェクト

  • 標準オブジェクト: あらかじめ定義された標準オブジェクト(取引先、取引先責任者、リード、商談、ケース、ソリューションなど)。対象となる標準オブジェクトは固定されており、クロール実行時にすべて取得されます。

  • カスタムオブジェクト: custom パラメーターで指定した独自オブジェクト(API参照名が __c で終わるもの)。

注釈

標準オブジェクトは常にすべてクロールされます(クロール対象とする標準オブジェクトを個別に選択することはできません)。 不要なオブジェクトを除外したい場合は、include_pattern / exclude_pattern によるURLフィルターを使用してください。

標準オブジェクト一覧

クロール対象となる標準オブジェクトは以下のとおりです。 「オブジェクト名」はフィールドマッピング(<オブジェクト名>.title など)で使用する識別子、 object.type はスクリプト内で参照できるオブジェクト種別の値です。

オブジェクト名 object.type 説明
ACCOUNT Account 取引先
CONTACT Contact 取引先責任者
LEAD Lead リード
OPPORTUNITY Opportunity 商談
CASE Case ケース
SOLUTION Solution ソリューション
CONTRACT Contract 契約
ORDER Order 注文
CAMPAIGN Campaign キャンペーン
PRODUCT2 Product2 商品
PRICEBOOK2 Pricebook2 価格表
ASSET Asset 納入商品
ASSET_RELATIONSHIP AssetRelationship 納入商品リレーション
TASK Task ToDo
USER User ユーザ
COLLABORATION_GROUP CollaborationGroup グループ
IDEA Idea アイデア
RECOMMENDATION Recommendation おすすめ
QUICK_TEXT QuickText クイックテキスト
MACRO Macro マクロ
LIST_EMAIL ListEmail リストメール
IMAGE Image 画像
DAND_B_COMPANY DandBCompany D&B 企業

前提条件

  1. プラグインのインストールが必要です

  2. Salesforce接続アプリケーション(Connected App)の作成が必要です

  3. OAuth認証の設定が必要です

  4. オブジェクトへの読み取りアクセス権が必要です

プラグインのインストール

管理画面の「システム」→「プラグイン」からインストールします。

または、詳細は プラグイン を参照してください。

設定方法

管理画面から「クローラー」→「データストア」→「新規作成」で設定します。

基本設定

項目 設定例
名前 Salesforce CRM
ハンドラ名 SalesforceDataStore
有効 オン

パラメーター設定

OAuth Token認証(推奨):

base_url=https://login.salesforce.com
auth_type=oauth_token
username=admin@example.com
client_id=3MVG9...
private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQE...\n-----END PRIVATE KEY-----\n
number_of_threads=1
ignore_error=true
custom=FessObj,CustomProduct
FessObj.title=Name
FessObj.contents=Name,Description__c
CustomProduct.title=Product_Name__c
CustomProduct.contents=Product_Name__c,Product_Description__c

OAuth Password認証:

base_url=https://login.salesforce.com
auth_type=oauth_password
username=admin@example.com
password=YourPassword
client_id=3MVG9...
client_secret=1234567890ABCDEF
security_token=AbCdEfGhIjKlMnOpQrSt
number_of_threads=1
ignore_error=true

パラメーター一覧

パラメーター 必須 説明
base_url いいえ SalesforceのURL(デフォルト: https://login.salesforce.com、Sandbox: https://test.salesforce.com
auth_type はい 認証タイプ(oauth_token または oauth_password
username はい Salesforceユーザー名
password oauth_passwordの場合 Salesforceパスワード
client_id はい 接続アプリケーションのConsumer Key
private_key oauth_tokenの場合 秘密鍵(PEM形式、改行は \n
client_secret oauth_passwordの場合 接続アプリケーションのConsumer Secret
security_token oauth_passwordの場合 ユーザーのセキュリティトークン
number_of_threads いいえ 並列処理スレッド数(デフォルト: 1)
ignore_error いいえ エラー時も処理を継続(デフォルト: true)
custom いいえ カスタムオブジェクト名(カンマ区切り)
include_pattern いいえ URLフィルターの包含パターン(正規表現)
exclude_pattern いいえ URLフィルターの除外パターン(正規表現)
refresh_token_interval いいえ トークン更新間隔(秒、デフォルト: 3540)
proxy_host いいえ HTTPプロキシホスト名
proxy_port proxy_hostが設定されている場合 HTTPプロキシポート番号
<オブジェクト>.title いいえ タイトルに使用するフィールド名
<オブジェクト>.contents いいえ コンテンツに使用するフィールド名(カンマ区切り)
<オブジェクト>.descriptions いいえ 説明に使用するフィールド名(カンマ区切り)
<オブジェクト>.thumbnail いいえ サムネイルに使用するフィールド名

スクリプト設定

title="[" + object.type + "] " + object.title
digest=object.description
content=object.content
created=object.created
timestamp=object.last_modified
url=object.url

利用可能なフィールド

フィールド 説明
object.type オブジェクトのタイプ(例: Case、User、Solution)
object.title オブジェクトの名前
object.description オブジェクトの説明
object.content オブジェクトのテキストコンテンツ
object.id オブジェクトのID
object.content_length コンテンツの長さ
object.created 作成日時
object.last_modified 最終更新日時
object.url オブジェクトのURL
object.thumbnail サムネイルURL

Salesforce接続アプリケーションの設定

1. 接続アプリケーションの作成

Salesforce Setupで:

  1. 「アプリケーションマネージャ」を開く

  2. 「新規接続アプリケーション」をクリック

  3. 基本情報を入力:

    • 接続アプリケーション名: Fess Crawler

    • API参照名: Fess_Crawler

    • 連絡先メール: your-email@example.com

  4. 「APIの有効化(OAuth設定の有効化)」にチェック

2. OAuth Token認証の設定(推奨)

OAuth設定で:

  1. 「デジタル署名を使用」にチェック

  2. 証明書をアップロード(後述の手順で作成)

  3. 選択したOAuthスコープ:

    • Full access (full)

    • Perform requests on your behalf at any time (refresh_token, offline_access)

  4. 「保存」をクリック

  5. Consumer Keyをコピー

証明書の作成:

# 秘密鍵の生成
openssl genrsa -out private_key.pem 2048

# 証明書の生成
openssl req -new -x509 -key private_key.pem -out certificate.crt -days 365

# 秘密鍵の確認
cat private_key.pem

証明書(certificate.crt)をSalesforceにアップロードし、 秘密鍵(private_key.pem)の内容をパラメーターに設定します。

3. OAuth Password認証の設定

OAuth設定で:

  1. コールバックURL: https://localhost (使用しませんが必須)

  2. 選択したOAuthスコープ:

    • Full access (full)

    • Perform requests on your behalf at any time (refresh_token, offline_access)

  3. 「保存」をクリック

  4. Consumer KeyとConsumer Secretをコピー

セキュリティトークンの取得:

  1. Salesforceで個人設定を開く

  2. 「私のセキュリティトークンのリセット」をクリック

  3. メールで送信されるトークンをコピー

4. 接続アプリケーションの承認

「管理」→「接続アプリケーションを管理する」で:

  1. 作成した接続アプリケーションを選択

  2. 「編集」をクリック

  3. 「許可されるユーザー」を「管理者が承認したユーザーは事前承認済み」に変更

  4. プロファイルまたは権限セットを割り当て

カスタムオブジェクトの設定

カスタムオブジェクトのクロール

パラメーターで custom にカスタムオブジェクト名を指定:

custom=FessObj,CustomProduct,ProjectTask

各オブジェクトのフィールドマッピング:

FessObj.title=Name
FessObj.contents=Name,Description__c,Notes__c

CustomProduct.title=Product_Name__c
CustomProduct.contents=Product_Name__c,Product_Description__c,Specifications__c

ProjectTask.title=Task_Name__c
ProjectTask.contents=Task_Name__c,Task_Description__c

フィールドマッピングのルール

  • <オブジェクト名>.title - タイトルに使用するフィールド(単一フィールド)

  • <オブジェクト名>.contents - コンテンツに使用するフィールド(カンマ区切りで複数指定可)

  • <オブジェクト名>.descriptions - 説明に使用するフィールド(カンマ区切りで複数指定可)

  • <オブジェクト名>.thumbnail - サムネイルに使用するフィールド

注釈

標準オブジェクトのフィールドマッピングでは、オブジェクト名に大文字のスネークケース (標準オブジェクト一覧 の「オブジェクト名」列の値)を使用します (例: ACCOUNT.title=NameDAND_B_COMPANY.title=Name)。 カスタムオブジェクトの場合は、API参照名をそのまま使用します(例: Product__c.title=Name)。

使用例

標準オブジェクトのクロール

パラメーター:

base_url=https://login.salesforce.com
auth_type=oauth_token
username=admin@example.com
client_id=3MVG9A2kN3Bn17hvOLkjEo7GFdC...
private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQE...\n-----END PRIVATE KEY-----\n
number_of_threads=1
ignore_error=true

スクリプト:

title="[" + object.type + "] " + object.title
content=object.content
digest=object.description
created=object.created
timestamp=object.last_modified
url=object.url

カスタムオブジェクトのクロール

パラメーター:

base_url=https://login.salesforce.com
auth_type=oauth_token
username=admin@example.com
client_id=3MVG9A2kN3Bn17hvOLkjEo7GFdC...
private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQE...\n-----END PRIVATE KEY-----\n
number_of_threads=2
ignore_error=true
custom=Product__c,Contract__c
Product__c.title=Name
Product__c.contents=Name,Description__c,Category__c
Contract__c.title=Contract_Name__c
Contract__c.contents=Contract_Name__c,Terms__c,Notes__c

スクリプト:

title="[" + object.type + "] " + object.title
content=object.content
created=object.created
timestamp=object.last_modified
url=object.url

Sandbox環境のクロール

パラメーター:

base_url=https://test.salesforce.com
auth_type=oauth_password
username=admin@example.com.sandbox
password=YourPassword
client_id=3MVG9A2kN3Bn17hvOLkjEo7GFdC...
client_secret=1234567890ABCDEF1234567890ABCDEF
security_token=AbCdEfGhIjKlMnOpQrStUvWxYz
number_of_threads=1
ignore_error=true

スクリプト:

title="[SANDBOX] [" + object.type + "] " + object.title
content=object.content
timestamp=object.last_modified
url=object.url

トラブルシューティング

認証エラー

症状: Authentication failed または invalid_grant

確認事項:

  1. OAuth Token認証の場合:

    • Consumer Keyが正しいか確認

    • 秘密鍵が正しくコピーされているか確認(改行が \n になっているか)

    • 証明書がSalesforceにアップロードされているか確認

    • ユーザー名が正しいか確認

  2. OAuth Password認証の場合:

    • Consumer KeyとConsumer Secretが正しいか確認

    • セキュリティトークンが正しいか確認

    • パスワードとセキュリティトークンを連結していないか確認(別々に設定)

  3. 共通:

    • base_urlが正しいか確認(本番環境かSandbox環境か)

    • 接続アプリケーションが承認されているか確認

オブジェクトが取得できない

症状: クロールは成功するがオブジェクトが0件

確認事項:

  1. ユーザーにオブジェクトへの読み取り権限があるか確認

  2. カスタムオブジェクトの場合、オブジェクト名が正しいか確認(API参照名)

  3. フィールドマッピングが正しいか確認

  4. ログでエラーメッセージを確認

カスタムオブジェクトの名前

カスタムオブジェクトのAPI参照名を確認:

  1. Salesforce Setupで「オブジェクトマネージャ」を開く

  2. カスタムオブジェクトを選択

  3. 「API参照名」をコピー(通常は __c で終わる)

例:

  • 表示ラベル: Product

  • API参照名: Product__c (これを使用)

フィールド名の確認

カスタムフィールドのAPI参照名を確認:

  1. オブジェクトの「項目とリレーション」を開く

  2. カスタム項目を選択

  3. 「項目名」をコピー(通常は __c で終わる)

例:

  • 項目の表示ラベル: Product Description

  • 項目名: Product_Description__c (これを使用)

APIレート制限

症状: REQUEST_LIMIT_EXCEEDED

解決方法:

  1. number_of_threads を減らす(1に設定)

  2. クロール間隔を長くする

  3. Salesforce APIの使用状況を確認

  4. 必要に応じてAPI制限の追加を購入

大量のデータがある場合

症状: クロールに時間がかかる、またはタイムアウトする

解決方法:

  1. オブジェクトを複数のデータストアに分割

  2. number_of_threads を調整(2〜4程度)

  3. クロールスケジュールを分散

  4. 必要なフィールドのみをマッピング

秘密鍵のフォーマットエラー

症状: Invalid private key format

解決方法:

秘密鍵の改行が正しく \n になっているか確認:

# 正しい形式
private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQE...\n-----END PRIVATE KEY-----\n

# 間違った形式(実際の改行が含まれている)
private_key=-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQE...
-----END PRIVATE KEY-----

参考情報