シートから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://dawn-id.heteml.net/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://dawn-id.heteml.net/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://dawn-id.heteml.net/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
















