Pentahoでは、Salesforceのデータを挿入したり、更新したりするときに、「Salesforce Insert」「Salesforce Update」「Salesforce Upsert」という箱を使います。
どんなときにどの箱を使えばいいのか、戸惑うときがあるので、ちょっとまとめてみました。

「Salesforce Insert」の使いどころ

すべて新規のレコードとして作成されますので、SalesforceIdはフィールドにマッピングしません。
作成時にレコードにセットしておきたい項目のみマッピングします。
なので、入力データにIdがあったとしても、SalesforceIdにマッピングされていないので、すべて新規レコードとなります。
「Salesforce Update」

SalesforceIdをキーとして更新しますので、フィールドにIdをマッピングします。
そのため、入力データのId項目の値が不正だったり、空だと、更新時にエラーになります。
なお、csvファイルからIdを読み込んで更新する場合は、下記の項目「データ型を自動変換」にチェックが入っていると、勝手にId型が変わってしまい、エラー「MALFORMED_ID Error message: カスタムオブジェクト ID: 不正な種別の ID 値: xxx」が出てUpdateできない場合があるので、ハマりどころです。

「Salesforce Upsert」

上記のダイアログのように、「比較フィールド更新」の項目に指定した項目をキーにレコードを更新します。
ここには、ユニークな「外部キー」を指定します。
SalesforceIdも指定できますが、Upsertの場合、Idがnullの場合、Insertしてくれず、INVALID_ID_FIELDになってしまいます。
つまり、IdをキーによろしくUpsertしてくれないということです。
そのため、SalesforceIdでレコードの挿入/更新を行う場合は、下記のように前段でId項目のフィルターを行い、Idがnullの場合はSalesforce Insert、Idが存在している場合はSalesforce Updateを呼ぶように分岐した方が良いと思います。
