概要
Salesforceコネクタは、Salesforceのオブジェクト(標準オブジェクト、カスタムオブジェクト)からデータを取得して Fess のインデックスに登録する機能を提供します。
この機能には fess-ds-salesforce プラグインが必要です。
対応オブジェクト
標準オブジェクト: Account、Contact、Lead、Opportunity、Case、Solution等
カスタムオブジェクト: 独自に作成したオブジェクト
Knowledge記事: Salesforce Knowledge
前提条件
プラグインのインストールが必要です
Salesforce接続アプリケーション(Connected App)の作成が必要です
OAuth認証の設定が必要です
オブジェクトへの読み取りアクセス権が必要です
プラグインのインストール
管理画面の「システム」→「プラグイン」からインストールします。
または、詳細は プラグイン を参照してください。
設定方法
管理画面から「クローラー」→「データストア」→「新規作成」で設定します。
基本設定
| 項目 | 設定例 |
|---|---|
| 名前 | 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
ignoreError=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
client_id=3MVG9...
client_secret=1234567890ABCDEF
security_token=AbCdEfGhIjKlMnOpQrSt
number_of_threads=1
ignoreError=true
パラメーター一覧
| パラメーター | 必須 | 説明 |
|---|---|---|
base_url | はい | SalesforceのURL(本番: https://login.salesforce.com、Sandbox: https://test.salesforce.com) |
auth_type | はい | 認証タイプ(oauth_token または oauth_password) |
username | はい | 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) |
ignoreError | いいえ | エラー時も処理を継続(デフォルト: true) |
custom | いいえ | カスタムオブジェクト名(カンマ区切り) |
<オブジェクト>.title | いいえ | タイトルに使用するフィールド名 |
<オブジェクト>.contents | いいえ | コンテンツに使用するフィールド名(カンマ区切り) |
スクリプト設定
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で:
「アプリケーションマネージャ」を開く
「新規接続アプリケーション」をクリック
基本情報を入力:
接続アプリケーション名: Fess Crawler
API参照名: Fess_Crawler
連絡先メール: your-email@example.com
「APIの有効化(OAuth設定の有効化)」にチェック
2. OAuth Token認証の設定(推奨)
OAuth設定で:
「デジタル署名を使用」にチェック
証明書をアップロード(後述の手順で作成)
選択したOAuthスコープ:
Full access (full)
Perform requests on your behalf at any time (refresh_token, offline_access)
「保存」をクリック
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設定で:
コールバックURL:
https://localhost(使用しませんが必須)選択したOAuthスコープ:
Full access (full)
Perform requests on your behalf at any time (refresh_token, offline_access)
「保存」をクリック
Consumer KeyとConsumer Secretをコピー
セキュリティトークンの取得:
Salesforceで個人設定を開く
「私のセキュリティトークンのリセット」をクリック
メールで送信されるトークンをコピー
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- コンテンツに使用するフィールド(カンマ区切りで複数指定可)
使用例
標準オブジェクトのクロール
パラメーター:
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
ignoreError=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
ignoreError=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
client_id=3MVG9A2kN3Bn17hvOLkjEo7GFdC...
client_secret=1234567890ABCDEF1234567890ABCDEF
security_token=AbCdEfGhIjKlMnOpQrStUvWxYz
number_of_threads=1
ignoreError=true
スクリプト:
title="[SANDBOX] [" + object.type + "] " + object.title
content=object.content
timestamp=object.last_modified
url=object.url
トラブルシューティング
認証エラー
症状: Authentication failed または invalid_grant
確認事項:
OAuth Token認証の場合:
Consumer Keyが正しいか確認
秘密鍵が正しくコピーされているか確認(改行が
\nになっているか)証明書がSalesforceにアップロードされているか確認
ユーザー名が正しいか確認
OAuth Password認証の場合:
Consumer KeyとConsumer Secretが正しいか確認
セキュリティトークンが正しいか確認
パスワードとセキュリティトークンを連結していないか確認(別々に設定)
共通:
base_urlが正しいか確認(本番環境かSandbox環境か)
接続アプリケーションが承認されているか確認
オブジェクトが取得できない
症状: クロールは成功するがオブジェクトが0件
確認事項:
ユーザーにオブジェクトへの読み取り権限があるか確認
カスタムオブジェクトの場合、オブジェクト名が正しいか確認(API参照名)
フィールドマッピングが正しいか確認
ログでエラーメッセージを確認
カスタムオブジェクトの名前
カスタムオブジェクトのAPI参照名を確認:
Salesforce Setupで「オブジェクトマネージャ」を開く
カスタムオブジェクトを選択
「API参照名」をコピー(通常は
__cで終わる)
例:
表示ラベル: Product
API参照名: Product__c (これを使用)
フィールド名の確認
カスタムフィールドのAPI参照名を確認:
オブジェクトの「項目とリレーション」を開く
カスタム項目を選択
「項目名」をコピー(通常は
__cで終わる)
例:
項目の表示ラベル: Product Description
項目名: Product_Description__c (これを使用)
APIレート制限
症状: REQUEST_LIMIT_EXCEEDED
解決方法:
number_of_threadsを減らす(1に設定)クロール間隔を長くする
Salesforce APIの使用状況を確認
必要に応じてAPI制限の追加を購入
大量のデータがある場合
症状: クロールに時間がかかる、またはタイムアウトする
解決方法:
オブジェクトを複数のデータストアに分割
number_of_threadsを調整(2〜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-----
参考情報
データストアコネクタの概要 - データストアコネクタ概要
データベースコネクタ - データベースコネクタ
データストアクロール - データストア設定ガイド