シートからSalesforceに情報を登録する
※事前にAUTOROとSalesforceを連携(コネクション登録)しておく必要があります。
方法は以下ページをご参照ください。
参考:Salesforceと連携
CSV,スプレッドシート,ExcelからSalesforceに情報を作成/更新
本記事では、下記のサンプルスプレッドシートのコピーを使用して、以下4ケースのワークフロー作成例を紹介します。
https://docs.google.com/spreadsheets/d/1yjxgHc9_jQnJry0qoWBD1O35z6YKa0AOgcLfvTPzTpY/copy
- シートに書き込まれた取引先、電話番号などのシンプルな情報から、新規に取引先レコードを作成
- シートに書き込まれた参照関係の項目の値(取引先等)を使用して、新規に商談レコードを作成
- シートに書き込まれた情報から既存のレコードを更新(シートにレコードIDの記載が有る場合)
- シートに書き込まれた情報から既存のレコードを更新(シートにレコードIDの記載が無い場合)
※GoogleSpreadsheetが利用できない方向けの記述です。
これより下部の各サンプルは、それぞれ「スプレッドシートから情報を取得する」ものとして扱っています。
ExcelやCSVを利用する場合は以下のアクションで代替してください。
CSV
- DownloadFile(URL上のファイルを取得)アクションを設定
- 各サンプルの「1.シートを準備」に記載したURLを入力
- ReadCSV(CSVを読み込む)を設定
ExcelOnline(OneDrive上のExcelワークブック)
※事前に以下ExcelをダウンロードしてOneDriveに保存してください。
- GetWorkbook(ワークブックを取得する)
- GetWorksheetCells(セルの値を取得する)
- 各サンプルの
- 「1.シートを準備」
- に記載した範囲を入力
Excel
- DownloadFile(URL上のファイルを取得)アクションを設定
- 以下URL(Excelワークブック)を入力
https://support.autoro.io/wp-content/uploads/2024/09/spreadsheet→salesforce_sample.xlsx
- 以下URL(Excelワークブック)を入力
- SelectSheet(ワークシートを選択)
- 各サンプルの
- 「1.シートを準備」
- に記載した範囲のシート名部位を入力(新規作成_シンプルなど)
- ReadRangeで範囲を指定
- 各サンプルの1に記載したセルラベルを入力(A2:Cなど)
1 シンプルな情報で新規作成
salesforceに登録する情報を作成します。
- SalesforceCreateRecord(Salesforceにレコードを作成)を設定します
- プロバイダIDにコネクションを設定します
- オブジェクト名をAccountとします
- 作成データには以下を入力します。NameにシートのB列、DescriptionにシートのC列を入れています。
{ "Name": "${row[1]}", "Description": "${row[2]}" }
※新規作成の詳細な方法や上記の{}の記法の詳細については、以下ページをご参照ください。
ここで作成したレコードを更新する予定がある場合、作成されたレコードのIDをシートに記入することを強く推奨します。
作成されたレコードは、サンプルのスプレッドシートの形式であれば以下の方法でシートの同じ行に書き込めます。
- GetValueWitheKey(オブジェクトのキーの値を取得)そ設定します
- オブジェクト欄にSalesforceCreateRecordのアウトプットを指定します
- キー欄に小文字でidと入力します
- UpdateCells(セルの値を更新)を追加します
- スプレッドシート欄に、1で取得したスプレッドシートを指定します
- 範囲に以下を入力します
新規作成_シンプル!D${parseInt(row[0]) + 1}
- 値にGetValuewWitheKeyのアウトプットを指定します
ExcelOnlineの場合
UpdateCellsアクションの代わりに、GetWorksheetCellsをご使用ください。
Excelの場合
UpdateCellsアクションの代わりに、WriteCellアクションをご使用ください。セルラベルのシート名部位は不要となります。
CSVの場合
JavaScriptによる操作と新規CSVの作成が必要です。詳細はワークフロー設定内容(CSV)をご参照ください。
# 既存のスプレッドシートを取得 +get_spreadsheet_1: action>: GetSpreadsheet provider: '' spreadsheet_id: 'コピーしたスプレッドシートのURL' private: false meta: display: # セルの値を取得 +get_cells_1: action>: GetCells spreadsheet: +get_spreadsheet_1 range: '新規作成_シンプル!A2:C' findAll: false private: false # 各要素について繰り返す +for_each_1: for_each>: row: +get_cells_1 _do: # レコードを作成する +salesforce_create_record_1: action>: SalesforceCreateRecord provider: '' object: Account data: "{\n \"Name\": \"${row[1]}\",\n \"Description\": \"${row[2]}\"\n}" private: false meta: display: # オブジェクトのキーの値を取得 +get_value_with_key_1: action>: GetValueWithKey object: +salesforce_create_record_1 key: id private: false # セルの値を更新_A列の番号+1の行のD列に書き込み +update_cells_1: action>: UpdateCells spreadsheet: +get_spreadsheet_1 range: '新規作成_シンプル!D${parseInt(row[0]) + 1}' values: +get_value_with_key_1 private: false
# ワークブックを取得する +get_workbook_1: action>: GetWorkbook provider: '' workbook_id: '' private: false # セルの値を取得する +get_worksheet_cells_1: action>: GetWorksheetCells workbook: '' range: '新規作成_シンプル!A2:C' findAll: false private: false # 各要素について繰り返す +for_each_1: for_each>: row: +get_worksheet_cells_1 _do: # レコードを作成する +salesforce_create_record_1: action>: SalesforceCreateRecord provider: '' object: Account data: "{\n \"Name\": \"${row[1]}\",\n \"Description\": \"${row[2]}\"\n}" private: false meta: display: null # オブジェクトのキーの値を取得 +get_value_with_key_1: action>: GetValueWithKey object: +salesforce_create_record_1 key: id private: false # セルの値を更新する +update_worksheet_cells_1: action>: UpdateWorksheetCells workbook: +get_workbook_1 range: '新規作成_シンプル!D${parseInt(row[0]) + 1}' values: +get_value_with_key_1 private: false
# URL上のファイルを取得 +download_file_1: action>: DownloadFile url: 'https://support.autoro.io/wp-content/uploads/2024/09/spreadsheet→salesforce_sample.xlsx' private: false # ワークシートを選択 +select_sheet_1: action>: SelectSheet filename: +download_file_1 sheetname: '新規作成_シンプル' private: false # 範囲を読み込む +read_range_1: action>: ReadRange worksheet: +select_sheet_1 range: 'A2:C' private: false # 各要素について繰り返す +for_each_1: for_each>: row: +read_range_1 _do: # レコードを作成する +salesforce_create_record_1: action>: SalesforceCreateRecord provider: '' object: Account data: "{\n \"Name\": \"${row[1]}\",\n \"Description\": \"${row[2]}\"\n}" private: false meta: display: # オブジェクトのキーの値を取得 +get_value_with_key_1: action>: GetValueWithKey object: +salesforce_create_record_1 key: id private: false # セルに書き込む +write_cell_1: action>: WriteCell worksheet: +select_sheet_1 celllabel: 'D${parseInt(row[0]) + 1}' value: +get_value_with_key_1 middleware: xlsx private: false # ファイルを保存_上書きして保存 +save_file_1: action>: SaveFile provider: local filename: +download_file_1 createPath: false private: false
# URL上のファイルを取得 +download_file_1: action>: DownloadFile url: 'https://support.autoro.io/wp-content/uploads/2024/09/新規作成_シンプル.csv' private: false # CSVを読み込む +read_c_s_v_1: action>: ReadCSV filename: +download_file_1 headers: true private: false # 変数に保存_作成されたIDを含むCSV +store_value_2: action>: StoreValue key: newCSV value: [] setIfNotDefined: false private: false # 各要素について繰り返す +for_each_1: for_each>: row: +read_c_s_v_1 _do: # レコードを作成する +salesforce_create_record_1: action>: SalesforceCreateRecord provider: '' object: Account data: "{\n \"Name\": \"${row[1]}\",\n \"Description\": \"${row[2]}\"\n}" private: false meta: display: null # オブジェクトのキーの値を取得 +get_value_with_key_1: action>: GetValueWithKey object: +salesforce_create_record_1 key: id private: false # 変数に保存_レコードのID +store_value_1: action>: StoreValue key: newRecordId value: +get_value_with_key_1 setIfNotDefined: false private: false # 変数に保存_CSVに1行を追加 +store_value_3: action>: StoreValue key: newCSV value: ${newCSV.concat([[...row, newRecordId]])} setIfNotDefined: false private: false # CSVを作成 +write_c_s_v_1: action>: WriteCSV filename: 'hoge.csv' table: ${newCSV} bom: true private: false # ファイルの文字コードを変換 +change_file_encoding_1: action>: ChangeFileEncoding filename: +write_c_s_v_1 save_as: '新規レコードID書き込み済み.csv' target_encoding: Shift_JIS original_encoding: 'auto-detect' private: false # ファイルを保存 +save_file_1: action>: SaveFile provider: local filename: +change_file_encoding_1 createPath: false private: false
2 参照関係にあるオブジェクトの情報を使ってレコードを作成
取引先オブジェクトから、取引先名がシートのD列と一致するレコードの、salesforce上のIDを取得します。
- SalesforceQuery(クエリを実行)を設定します
- 以下を入力します。
SELECT Id, Name
FROM Account
WHERE Name = '${row[4]}'
- 変数に保存を追加します
- 変数名は以下とします
あ - 値はクエリの結果とします
salesforceに登録する情報を作成します。
- SalesforceCreateRecord(Salesforceにレコードを作成)を設定します
- 以下を入力します。NameにシートのB列、CloseDate(完了予定日)にシートのC列、AccountId(外部参照の取引先ID)を入れています。
{ "Name": "${row[1]}", "CloseDate" : "${row[2]}", "StageName" : "${row[3]}", "AccountId": "${sfAccountRecord[0].Id}" }
※CloseDateは日付型のためYYYY-MM-DDである必要があります
※日付の書式、上記の{}の記法の詳細については、以下ページをご参照ください。
# 既存のスプレッドシートを取得 +get_spreadsheet_1: action>: GetSpreadsheet provider: '' spreadsheet_id: 'コピーしたスプレッドシートのURL' private: false meta: display: # セルの値を取得 +get_cells_1: action>: GetCells spreadsheet: +get_spreadsheet_1 range: '新規作成_参照関係!A2:E' findAll: false private: false # 各要素について繰り返す +for_each_1: for_each>: row: +get_cells_1 _do: # クエリを実行する_取引先名で取引先IDを取得 +salesforce_query_1: action>: SalesforceQuery provider: '' query: "SELECT Id, Name\nFROM Account\nWHERE Name = '${row[4]}'" private: false meta: display: # 変数に保存 +store_value_1: action>: StoreValue key: sfAccountRecord value: +salesforce_query_1 setIfNotDefined: false private: false # 真のとき_取引先IDが取れた +if_1: if>: ${sfAccountRecord.length > 0} _do: # テキストを作成 +text_1: action>: Text text: ${sfAccountRecord[0].Id} private: false # レコードを作成する +salesforce_create_record_1: action>: SalesforceCreateRecord provider: '' object: Opportunity data: "{\n \"Name\": \"${row[1]}\",\n \"CloseDate\" : \"${row[2]}\",\n \"StageName\" : \"${row[3]}\",\n \"AccountId\": \"${sfAccountRecord[0].Id}\"\n}" private: false meta: display: object: label: '商談' icon: salesforce type: chip # オブジェクトのキーの値を取得 +get_value_with_key_1: action>: GetValueWithKey object: +salesforce_create_record_1 key: id private: false # セルの値を更新_A列の番号+1の行のF列に書き込み +update_cells_1: action>: UpdateCells spreadsheet: +get_spreadsheet_1 range: '新規作成_参照関係!F${parseInt(row[0]) + 1}' values: +get_value_with_key_1 private: false
3 既存のレコードを更新(シートにレコードIDが記載されている場合)
「1 シンプルな情報で新規作成」で作成されたようなシートが理想的な形式になります。
1のワークフローの設定例を実行するか、お手元で更新先のIDが掲載されたシート,CSV等を用意して下さい。
なお、ここでは以下のシートを例に取って実行します。
- GetSpreadsheet(既存のスプレッドシートを取得)を設定します
- 以下のURLを入力します
- GetCellsアクションを設定します
- 範囲に以下を入力します
更新_IDあり!A2:E
※スプレッドシートで「1 シンプルな情報で新規作成」を実行済であれば、更新_IDありシートには既に更新先のIDが書き込まれています。
※CSVの場合
以下いずれかの方法で、更新するレコードのIDが記載されたCSVを取得してください。
方法①
以下CSVをダウンロード後、更新するレコードのIDを入力して手元で保存してください
方法②
「1 シンプルな情報で新規作成」のワークフロー設定例(CSV)を実行してAUTOROローカルストレージに保存されたものをそのまま使用してください
salesforceを更新するためのレコードを作成していきます
- SalesforceUpdateRecord(Salesforceにレコードを作成)を設定します
- オブジェクト名欄を設定します。入力欄右のsalesforceアイコンから「取引先」を選択するか、Accountと直接入力してください
- オブジェクトIDにシートの更新先IDを入力します
${row[3]}
- 更新データに以下を入力します。
{
"Phone": "${row[4]}"
}
※日付の書式、上記の{}の記法の詳細については、以下ページをご参照ください。
# 既存のスプレッドシートを取得 +get_spreadsheet_1: action>: GetSpreadsheet provider: '' spreadsheet_id: 'コピーしたスプレッドシート' private: false meta: display: # セルの値を取得 +get_cells_1: action>: GetCells spreadsheet: +get_spreadsheet_1 range: '更新_IDあり!A2:E' findAll: false private: false # 各要素について繰り返す +for_each_1: for_each>: row: +get_cells_1 _do: # レコードを更新する +salesforce_update_record_1: action>: SalesforceUpdateRecord provider: '' object: Account id: ${row[3]} data: "{\n \"Phone\": \"${row[4]}\"\n}" private: false meta: display:
4 既存のレコードを更新(シートにレコードIDが記載されていない場合)
取引先オブジェクトから、取引先名がシートのD列と一致するレコードの、salesforce上のIDを取得します。
- SalesforceQuery(クエリを実行)を設定します
- 以下を入力します。
SELECT Id, Name, Phone FROM Account WHERE Name = '${row[1]}'
- 変数に保存を追加します
- 変数名は以下とします
sfAccountRecord
- 値はクエリの結果とします
更新用のデータを作成します。
- SalesforceUpdateRecord(レコードを更新する)を設定します
- オブジェクト欄にAccountと直入力するか、右のsalesforceアイコンから「取引先」を選択します
- オブジェクトID欄に3,4で取得した更新先レコードIDを入力します
${sfAccountRecord[0].Id}
- 以下を入力します。
{ "Phone": "${row[3]}" }
※上記の{}の記法の詳細については、以下ページをご参照ください。
「3 更新するレコードのID」を特定では、IDが1つだけ取れる状態を例としています。
もしクエリの結果が複数になってしまう場合は、以下の方法で正しいレコードIDを特定できる可能性があります
- クエリのWHEREに条件を追加する
- レコードの更新日時(LastModifiedDate)の降順で並び替えて、最も新しいレコードを対象にする
これらの条件式については、以下のページもご参考ください。
生成系AIにSOQLの出力を命令することも便利です。
# 既存のスプレッドシートを取得 +get_spreadsheet_1: action>: GetSpreadsheet provider: '' spreadsheet_id: 'コピーしたスプレッドシート' private: false meta: display: null # セルの値を取得 +get_cells_1: action>: GetCells spreadsheet: +get_spreadsheet_1 range: '更新_IDなし!A2:D' findAll: false private: false # 各要素について繰り返す +for_each_1: for_each>: row: +get_cells_1 _do: # クエリを実行する +salesforce_query_1: action>: SalesforceQuery provider: '' query: "SELECT Id, Name, Phone\nFROM Account\nWHERE Name = '${row[1]}'" private: false meta: display: null # 変数に保存 +store_value_1: action>: StoreValue key: sfAccountRecord value: +salesforce_query_1 setIfNotDefined: false private: false # 真のとき_取引先IDが取れた +if_1: if>: ${sfAccountRecord.length > 0} _do: # テキストを作成 +text_1: action>: Text text: ${sfAccountRecord[0].Id} private: false # レコードを更新する +salesforce_update_record_1: action>: SalesforceUpdateRecord provider: '' object: Account id: ${sfAccountRecord[0].Id} data: "{\n \"Phone\": \"${row[3]}\"\n}" private: false meta: display: object: label: '取引先' icon: salesforce type: chip