connect戦記(株)オルテナジーの社内情報共有と動作確認のついでのブログです。connectを入れれば、何せポスグレ、こちらの思い通りになる、と思って導入したところ、たびたび遭遇するエラーに気が狂いそうになっています。NowSalesforce上のNantoka__cオブジェクトと同期するマッピングを設定したところ、エラーが。moreうんうん、SF側に積み上げ項目や数式の項目は同期できないってことだね、そりゃそうだよね、危ないもんね。どこの項目が引っかかったのかな。Connect.だから、どの項目のことなのかな......?マッピング画面にはどれが積み上げとか全く書いていないので、SFのオブジェクトの設定画面と見比べて、フィールド名で、数式や積み上げのフィールドを虱潰しに確認しました。同期できないフィールドは、マッピング画面でチェックできないようにしてほしかった。追記テーブル内にある数値の計算合計など、テーブル内で完結している数式は、同期されるのではないかというコメントをTwitterでいただきました。更新前と更新後の内容が同じだと更新日時が更新されてもSalesforceに反映されないだったら反映しなくていいじゃないかと思われるかもしれませんが、何故こんなことをする必要があったかを含めて経緯を説明します。Salesforceに複数選択項目があったのですが、それを、一つしか選べない選択項目に変えることになりました。ルックアップ検索の対象にしたかったのですが、複数選択のままではできなかったので。ほとんど複数を選択することがなかったので、項目を変えても、更新前後の内容は同じテキストが入ります。今回いじりたいフィールドです。バックアップをとります。addfield__c=’プラム;ケルシー’複数選択されていたデータが少しだけあったので、強制的に一つに。3Salesforceでaddfield__c項目を単独選択形式に変更。既存データはすべて削除されてしまいました。salesforce.account.sfid=public.tmpaccount.sfidバックアップから戻しました。(余談だけど、最初うっかりmySQLと同じ書き方をしたらエラーになった。)しかし、Salesforceのaddfield__cは、いつまでも空白のまま。connectには、ちゃんとデータが戻っているのに......。connectでも同期されてクリアされていることを確認してからじゃないと、4を実行してはいけなかった。connect上では、2と4のデータの状態が同じなので、更新したとみなされず、Salesforce側に反映してくれない。connectはリアルタイムではないということを忘れてはいけません。connect側のaddfield__cを全てクリアして、時間を置いて同期を確認してから、また4を実行しました。connectに限ってそんなことがあるはずないじゃないですかー、データローダじゃあるまいしー、と思ったんですけど。connectに反映されていないため、SFには入れられないデータを入れたため、こういうことが起こりました。Salesforceも、制約をつける前に作ったデータは適用外で、閲覧はできるけれど更新はできなかったりします。connectではSalesforceと違い、SQLを使ってまとめて更新するのが主なので、前に作ったデータも対象に入れてしまうことが多々あります。更新されれば、同期を試みて、エラーになります。connectをマッピングをし直しましょう。それが難しいなら、古いデータに触れないよう、update文の条件に、年月日を入れましょう。101そんなエラーメッセージが表示された行が......。connectでまで見たくなかったガバナ制限。Salesforceにapexトリガーを入れてて、そこにSOQLのSelect文があったのを忘れていました。Nantoka__cは、データローダも使いませんし、他のところでは100件以上まとめて更新されることはないオブジェクトです。connectはデータローダのように任意の行数ずつ同期するようなことはできない。更新しないようにするしかない。幸いにも、connectを使って同期するレコードタイプのデータは、Select文の結果に基づいて行われる、コールアウトとか含まれていてまたガバナ制限にかかりそうなapexの処理は対象外。ApexトリガのSelect文を、Salesforceのフローで判断するように移行すれば解決するような気がする。