Docly Child

シートからSalesforceに情報を登録する

144 views
Salesforceとの連携

※事前にAUTOROとSalesforceを連携(コネクション登録)しておく必要があります。
方法は以下ページをご参照ください。

参考:Salesforceと連携

 CSV,スプレッドシート,ExcelからSalesforceに情報を作成/更新

本記事では、下記のサンプルスプレッドシートのコピーを使用して、以下4ケースのワークフロー作成例を紹介します。

https://docs.google.com/spreadsheets/d/1yjxgHc9_jQnJry0qoWBD1O35z6YKa0AOgcLfvTPzTpY/copy

  1. シートに書き込まれた取引先、電話番号などのシンプルな情報から、新規に取引先レコードを作成
  2. シートに書き込まれた参照関係の項目の値(取引先等)を使用して、新規に商談レコードを作成
  3. シートに書き込まれた情報から既存のレコードを更新(シートにレコードIDの記載が有る場合)
  4. シートに書き込まれた情報から既存のレコードを更新(シートにレコード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
  • SelectSheet(ワークシートを選択)
    • 各サンプルの
    • 「1.シートを準備」
    • に記載した範囲のシート名部位を入力(新規作成_シンプルなど)
  • ReadRangeで範囲を指定
    • 各サンプルの1に記載したセルラベルを入力(A2:Cなど)

 1 シンプルな情報で新規作成

以下のように、シートに記載した取引先名、説明を持つレコードをsalesforceに新規作成する例を紹介します

以下のスプレッドシートをAUTORO上で取得します

  • GetSpreadsheet(既存のスプレッドシートを取得)を設定します
  • 以下のURLを入力します
  • GetCellsアクションを設定します
  • 範囲に以下を入力します
    新規作成_シンプル!A2:C

※CSVの場合は以下URLをDownloadFileアクションに指定してください

https://support.autoro.io/wp-content/uploads/2024/09/新規作成_シンプル.csv

上から1行ずつ順に登録するために、繰り返しを設定します
  • 各要素について繰り返す(ForEach)を設定します
  • 繰り返すリストに、1のGetCellsまたはReadCSVのアウトプットを指定します
  • 要素を格納する変数名にrowと入力します

salesforceに登録する情報を作成します。

  • SalesforceCreateRecord(Salesforceにレコードを作成)を設定します
    • プロバイダIDにコネクションを設定します 
    • オブジェクト名をAccountとします
    • 作成データには以下を入力します。NameにシートのB列、DescriptionにシートのC列を入れています。
{
  "Name": "${row[1]}",
  "Description": "${row[2]}"
}

※新規作成の詳細な方法や上記の{}の記法の詳細については、以下ページをご参照ください。

参考:Salesforceに新規レコードを作成

ここで作成したレコードを更新する予定がある場合、作成されたレコードの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 参照関係にあるオブジェクトの情報を使ってレコードを作成

salesforceの商談オブジェクトなどには、取引先などの他のオブジェクトの情報が紐づいています。

このような他のオブジェクト(項目の型が参照関係)の情報を使う場合は、表示された情報そのものではなく、他のオブジェクトのレコードIDを使う必要があります。

このセクションでは、外部参照のオブジェクトのIDを取得する例として以下を紹介します

シートに記載された「商談名」「既存の取引先名」を元に新規レコードを作成する

以下のスプレッドシートをAUTORO上で取得します

  • GetSpreadsheet(既存のスプレッドシートを取得)を設定します
  • 以下のURLを入力します
  • GetCellsアクションを設定します
  • 範囲に以下を入力します
    新規作成_参照関係!A2:D

※CSVの場合は以下URLをDownloadFileアクションに指定してください

https://support.autoro.io/wp-content/uploads/2024/09/新規作成_参照関係.csv

上から1行ずつ順に登録するために、繰り返しを設定します

  • 各要素について繰り返す(ForEach)を設定します
  • 繰り返すリストに、1のGetCellsまたはReadCSVのアウトプットを指定します
  • 要素を格納する変数名にrowと入力します

 

取引先オブジェクトから、取引先名がシートのD列と一致するレコードの、salesforce上のIDを取得します。

  • SalesforceQuery(クエリを実行)を設定します
  • 以下を入力します。
SELECT Id, Name
FROM Account
WHERE Name = '${row[4]}'
  • 変数に保存を追加します
  • 変数名は以下とします
  • 値はクエリの結果とします

参考:Salesforceのデータを取得

クエリの結果から取引先IDをピンポイントで抜き出していきます。同時に、クエリの結果があった場合という条件を付けておきます。

  • IF(条件分岐)を追加します。条件式を以下とします
    ${sfAccountRecord.length > 0}
  • IFの範囲内に、テキストを作成アクションを設定します
  • テキストを作成アクションに以下を入力します(IDを表示します)
    ${sfAccountRecord[0].Id}

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である必要があります

※日付の書式、上記の{}の記法の詳細については、以下ページをご参照ください。

参考:Salesforceに新規レコードを作成

# 既存のスプレッドシートを取得
+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が記載されている場合)

シートの情報でsalesforceを更新していきます。

ここでは最も楽なケースである、更新先IDが既にシートに記入済みの例を紹介します。

「1 シンプルな情報で新規作成」で作成されたようなシートが理想的な形式になります。
1のワークフローの設定例を実行するか、お手元で更新先のIDが掲載されたシート,CSV等を用意して下さい。

なお、ここでは以下のシートを例に取って実行します。

  • GetSpreadsheet(既存のスプレッドシートを取得)を設定します
  • 以下のURLを入力します
  • GetCellsアクションを設定します
  • 範囲に以下を入力します
    更新_IDあり!A2:E

※スプレッドシートで「1 シンプルな情報で新規作成」を実行済であれば、更新_IDありシートには既に更新先のIDが書き込まれています。

※CSVの場合

以下いずれかの方法で、更新するレコードのIDが記載されたCSVを取得してください。

方法①

以下CSVをダウンロード後、更新するレコードのIDを入力して手元で保存してください

方法②

「1 シンプルな情報で新規作成」のワークフロー設定例(CSV)を実行してAUTOROローカルストレージに保存されたものをそのまま使用してください

  • GetFileアクションを設定します
    •  方法①の場合:ピッカーから更新先IDが書き込まれたCSVをAUTOROローカルストレージにアップロード後、アップロードされたCSVを選択してください。
    • 方法②の場合:保存されているCSVを選択してください
  • ReadCSVアクションを設定します。詳細設定から文字コードを適宜調整してください(デフォルトはShift_JISで読み込まれます)
上から1行ずつ順に登録するために、繰り返しを設定します
  • 各要素について繰り返す(ForEach)を設定します
  • 繰り返すリストに、1のGetCellsまたはReadCSVのアウトプットを指定します
  • 要素を格納する変数名にrowと入力します

salesforceを更新するためのレコードを作成していきます

  • SalesforceUpdateRecord(Salesforceにレコードを作成)を設定します
  • オブジェクト名欄を設定します。入力欄右のsalesforceアイコンから「取引先」を選択するか、Accountと直接入力してください
  • オブジェクトIDにシートの更新先IDを入力します
    ${row[3]}
  • 更新データに以下を入力します。
{
"Phone": "${row[4]}"
}

※日付の書式、上記の{}の記法の詳細については、以下ページをご参照ください。

参考:Salesforceのレコードを更新

# 既存のスプレッドシートを取得
+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が記載されていない場合)

シート内に更新したいレコードのIDが含まれていない場合のレコード更新方法です。

「2 参照関係にあるオブジェクトの情報を使ってレコードを作成」と同じように、シートに記載された情報からクエリで更新先IDを特定していきます。

ここでは企業名から更新先のレコードIDを特定後、シートに書き込まれた電話番号を書き込んで更新する例を紹介します

 

以下のスプレッドシートをAUTORO上で取得します

  • GetSpreadsheet(既存のスプレッドシートを取得)を設定します
  • 以下のURLを入力します
  • GetCellsアクションを設定します
  • 範囲に以下を入力します
    更新_IDなし!A2:D
※CSVの場合

以下のURLをDownloadFileアクションに指定してください

https://support.autoro.io/wp-content/uploads/2024/09/更新_IDなし.csv

上から1行ずつ順に登録するために、繰り返しを設定します
  • 各要素について繰り返す(ForEach)を設定します
  • 繰り返すリストに、1のGetCellsまたはReadCSVのアウトプットを指定します
  • 要素を格納する変数名にrowと入力します

取引先オブジェクトから、取引先名がシートのD列と一致するレコードの、salesforce上のIDを取得します。

  • SalesforceQuery(クエリを実行)を設定します
  • 以下を入力します。
SELECT Id, Name, Phone
FROM Account
WHERE Name = '${row[1]}'
  • 変数に保存を追加します
  • 変数名は以下とします
    sfAccountRecord
  • 値はクエリの結果とします

 

参考:Salesforceのデータを取得

クエリの結果から取引先IDをピンポイントで抜き出していきます。同時に、クエリの結果があった場合という条件を付けておきます。

  • IF(条件分岐)を追加します。条件式を以下とします
    ${sfAccountRecord.length > 0}
  • IFの範囲内に、テキストを作成アクションを設定します
  • テキストを作成アクションに以下を入力します(IDを表示します)
    ${sfAccountRecord[0].Id}

更新用のデータを作成します。

  • SalesforceUpdateRecord(レコードを更新する)を設定します
  • オブジェクト欄にAccountと直入力するか、右のsalesforceアイコンから「取引先」を選択します
  • オブジェクトID欄に3,4で取得した更新先レコードIDを入力します
    ${sfAccountRecord[0].Id}
  • 以下を入力します。
{
 "Phone": "${row[3]}"
}

※上記の{}の記法の詳細については、以下ページをご参照ください。

参考:Salesforceのレコードを更新

「3 更新するレコードのID」を特定では、IDが1つだけ取れる状態を例としています。

もしクエリの結果が複数になってしまう場合は、以下の方法で正しいレコードIDを特定できる可能性があります

  • クエリのWHEREに条件を追加する
  • レコードの更新日時(LastModifiedDate)の降順で並び替えて、最も新しいレコードを対象にする

これらの条件式については、以下のページもご参考ください。
生成系AIにSOQLの出力を命令することも便利です。

参考:SOQL(salesforceのクエリ)

# 既存のスプレッドシートを取得
+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
登録

このページは役に立ちましたか?