こんにちは!エンジニアの岩間です。
Salesforce × AWS Partner CRM Connector の連載、第4回です。
| 回 | テーマ |
|---|---|
| 第1回 | 導入編 — なぜ AWS Partner CRM Connector を入れたのか |
| 第2回 | セットアップ編 — Guided Setup と指定ログイン情報のハマりどころ |
| 第3回 | フィールド設計編 — フィールド追加から日本語化・仕様突き合わせまで |
| 第4回(本記事) | ハマりどころ編 — パッケージのバグから仕様の罠まで |
| 第5回 | 運用編 — 同期機能の使い分けと提出フロー |
| 第6回 | Backfill / Refresh 編 — 受信エラーとの戦い |
前回まででフィールド設計と日本語化が完了し、あとは Share With AWS で送信するだけ…と思っていたら、ここからが本番でした。今回は、実際に送信・受信を試していく中で踏んだ地雷をまとめます。
目次
em dash とハイフンの文字コード不一致
最初に踏んだのがこれです。Share With AWS を実行すると、ピックリスト値のバリデーションエラーが返ってきました。
|
1 2 |
Value 'Lost to Competitor – VMWare' at 'lifeCycle.closedLostReason' failed to satisfy constraint: Member must satisfy enum value set |
原因は、AWS Partner CRM Connector パッケージが Field Mapping Detail の awsapn__Target_Value__c に em dash(– U+2013)を初期データとして登録しているのに対して、AWS API は半角ハイフン(- U+002D)しか受け付けないことでした。見た目はほぼ同じなので、目視では気づけません。
影響を受けたのは closedLostReason(失注理由)の5件と subUseCase(サブユースケース)の3件、合計8件です。
|
1 2 3 |
Lost to Competitor – Google → Lost to Competitor - Google Lost to Competitor – Microsoft → Lost to Competitor - Microsoft Production – Automation → Production - Automation |
修正は Apex で一括置換しました。
|
1 2 3 4 5 6 7 8 9 10 11 |
List<awsapn__Field_Mapping_Detail__c> recs = [ SELECT Id, awsapn__Target_Value__c FROM awsapn__Field_Mapping_Detail__c WHERE awsapn__Target_Value__c LIKE '%–%' ]; String emDash = '\u2013'; for (awsapn__Field_Mapping_Detail__c rec : recs) { rec.awsapn__Target_Value__c = rec.awsapn__Target_Value__c.replace(emDash, '-'); } update recs; |
sf data update record コマンドでも試しましたが、シェルのエンコーディングの問題で em dash をうまく扱えないことがあるので、Apex が確実です。
電話番号の国際形式
|
1 2 |
Value at 'customer.contacts.1.member.phone' failed to satisfy constraint: Member must satisfy regular expression pattern: \+[1-9]\d |
AWS Partner Central API は電話番号を国際形式で要求します。0312345678 ではなく +81312345678 と入力する必要があります。
これ自体はエラーメッセージを読めばすぐわかりますが、日本の電話番号を扱う場合は +81 のバリデーションルールを追加しておくと、送信前にミスを防げます。
ビジネスバリデーションエラー
AWS API 側にはフィールド間の依存関係に基づくバリデーションがあります。
|
1 |
marketing.awsFundingUsed cannot have values if marketing.source is set to No |
|
1 |
Closed Lost Reason can only be set if the stage is Closed Lost |
たとえば、マーケティングソースが「No」なのに AWS Funding Used に値が入っていたり、ステージが Closed Lost ではないのに失注理由が入っていたりするとエラーになります。
これらはデータの整合性の問題なので、条件に合わない値をクリアすれば解決します。ただ、どのフィールドとどのフィールドに依存関係があるかはドキュメントに網羅的には書かれていないので、エラーが出たら都度対応する形になります。
Field Mapping のラベルと API 名の混同
これは地味ですがハマりやすいポイントです。awsapn__Salesforce_API_Field_Name__c にはフィールドの API 名(ACE_Stage__c)を入れるのですが、ラベル(ACE Stage)が入ってしまっていることがありました。
ラベルが入っているとマッピングが正しく動作しません。__c が付いているかどうかで判別できますが、手動でマッピングレコードを作成・修正するときは注意が必要です。
標準 Opportunity で Null Reference エラー
標準の Opportunity オブジェクトから Share With AWS を実行すると、以下のエラーが出ました。
|
1 2 |
Attempt to de-reference a null object Class: awsapn.OutboundBatchCallout |
Managed Package 内部のエラーなのでソースコードは確認できず、Sync Log にも詳細が記録されません。試しに ACE Opportunity(カスタムオブジェクト)にマッピングを切り替えると正常に送信できたため、標準 Opportunity 固有の問題だとわかりました。
原因は、標準 Opportunity に必要なフィールドとマッピングが完全には揃っていなかったことです。ACE Opportunity には最初からすべてのフィールドが定義されていますが、標準 Opportunity では自分で追加したフィールドとマッピングを漏れなく設定する必要があります。GitHub で公開されている Fields and Standard Values の仕様書と突き合わせて、マッピングの不備を修正したところ解消しました。
標準 Opportunity を使う場合は、ACE Opportunity のフィールド定義を参考に、フィールドとマッピングを1件ずつ確認することをおすすめします。
おわりに
今回は、AWS Partner CRM Connector で実際に送信・受信を試す中で踏んだハマりどころをまとめました。
em dash の文字コード不一致はパッケージ側のバグですし、ビジネスバリデーションの依存関係はドキュメントに網羅されていません。個人的に一番つらかったのは、1つのエラーを直すと別のエラーが出てくるモグラ叩き状態が続いたことです。ただ、ここで踏んだ地雷は一度潰してしまえば再発しないので、最初の1回を乗り越えれば運用は安定します。
次回は運用編として、同期機能の使い分けと商談の提出フローについて書いていきます。
岩間(@iwm_gnbr)でした。
- Salesforce × AWS Partner Central を AWS Partner CRM Connector でつないでオポチュニティ登録を自動化した話【ハマりどころ編】 - 2026-03-20
- Salesforce × AWS Partner Central を AWS Partner CRM Connector でつないでオポチュニティ登録を自動化した話【フィールド設計編】 - 2026-03-20
- Salesforce × AWS Partner Central を AWS Partner CRM Connector でつないでオポチュニティ登録を自動化した話【セットアップ編】 - 2026-03-20
- Salesforce × AWS Partner Central を AWS Partner CRM Connector でつないでオポチュニティ登録を自動化した話【導入編】 - 2026-03-20
- Amazon Connect の MESSAGE_STREAMING でAmazon Lex ボット統合のタイムアウト問題が解決した話 - 2026-01-27
【採用情報】一緒に働く仲間を募集しています



