Salesforce Leadオブジェクトのデータを取得するサンプルシナリオ

はじめに

WinActorのOAuth関連ライブラリを使用して、Salesforce Lightning Platform (以降、Salesforceと記載します。) の Leadオブジェクトから、データを取得するサンプルシナリオについて説明します。

本サンプルシナリオの概要

本サンプルシナリオは、以下の処理を行います。

使用するWinActorモジュール

本サンプルシナリオでは、以下のWinActorモジュールを使用します。

本サンプルシナリオの入力ファイル

Excelファイルを入力ファイルとします。
シナリオ内でExcelファイルをオープンし、処理を実施するのに必要な情報を取得します。
入力ファイルの詳細は入力ファイルの形式を参照してください。

本サンプルシナリオの出力ファイル

Salesforceから取得したJSONファイルを、「入力ファイル名.json」として保存します。
取得したJSONファイルから抽出したデータを、Excelファイルの最後尾に追記します。

本サンプルシナリオの想定レベル

本ドキュメントは、以下の技術レベルのユーザを対象としています。

動作確認環境

本サンプルシナリオは以下の環境で確認しています。

制約事項

本サンプルシナリオの使い方

本サンプルシナリオの実施方法は以下の通りです。

Step 1. Salesforceの接続アプリケーション設定

本サンプルシナリオでSalesforce にアクセスする場合、Salesforce 側にも接続用のアプリケーションが必要です。まだ 接続アプリケーションを作成していない場合は、 Salesforce.com日本語公開ヘルプサイトの「接続アプリケーションの作成」 を参照して、以下の接続アプリケーションを作成してください。

Step 2. 入力ファイルをディレクトリに配置

本サンプルシナリオ(SS1903_5448_AccessSalesforceLead_Read.ums5)が格納されているディレクトリに移動します。
このディレクトリに入力ファイルを配置します。
本サンプルシナリオには、サンプルのExcelファイル(sample_read_alldata.xlsx)が添付されています。
このファイルを使用して、取得を行うことができます。
他の入力ファイルを使用する場合は、その入力ファイルを、本サンプルシナリオと同じディレクトリに配置します。

Step 3. WinActorで本サンプルシナリオを読み込み

WinActorを起動し、本サンプルシナリオを読み込みます。

Step 4. Salesforceアクセス用情報を設定

Salesforceの接続アプリケーションにアクセスするための値を、変数一覧で設定します。
アクセス用情報の設定 を参照してください。

Step 5. 入力ファイル名を設定

本サンプルシナリオを実行するために必要な値を、変数一覧で更新します。
本サンプルシナリオの実行にあたり、事前に設定が必要な変数は下記の通りです。

本サンプルシナリオ変数一覧の入力ファイル設定
本サンプルシナリオ変数一覧の入力ファイル設定

Step 6. WinActorで本サンプルシナリオを実行

本サンプルシナリオを実行開始します。
SalesforceのLeadオブジェクトに登録されている全データを取得します。

Step 7. サンプルシナリオ実行終了後の確認

Salesforceのサイトにアクセスし、登録されているデータがすべて入力ファイル(Excel)に格納されていることを確認してください。

トラブルシューティング

本サンプルシナリオでは、シナリオ固有のエラーメッセージ、および使用しているライブラリ由来のエラーメッセージを表示することがあります。

以下に、シナリオ固有のエラーメッセージについて記載します。

エラーメッセージ エラー内容
ヘッダに情報が入っていません。
処理を中断します。
入力ファイルのヘッダ(1行目)に項目名がありません。
入力ファイルが存在しません。
処理を中断します。
指定された入力ファイルがシナリオと同じディレクトリに存在しません。
SalesForceへのログインに失敗しました。
処理を終了します。
【エラーメッセージ】
xxxx(エラーメッセージ)
アクセストークン取得処理でエラーが発生しました。
詳細はライブラリのエラーメッセージを参照してください。

ライブラリ由来のエラーメッセージについては、ライブラリのエラーメッセージ一覧を参照してください。

サンプルシナリオ解説

本サンプルシナリオで使用している実装テクニックについて説明します。

入力ファイルの形式

入力ファイル(Excel)は以下の形式をとります。

行番号 指定内容 詳細
1行目 ヘッダ 取得対象のデータの項目名を登録。1列1項目名 1 2
2行目以降 取得データ格納領域 2行目以降が空の場合、2行目から取得データを格納する。空でない場合、最後のデータの次の行から取得データを格納する。

何の項目を取得するかを、入力ファイルの1行目にヘッダとして指定します。
必須項目、および任意の項目を指定可能です。

本サンプルシナリオで確認している項目については、Salesforce Leadのデータ項目 を参照してください。

Salesforceでは、Lead等の各オブジェクトに新しいデータを追加したり、データ形式を変更することができます。
Leadの初期値に無い項目を指定して取得することも可能ですが、本サンプルシナリオでは、Leadの初期状態でのみ動作確認を行っています。

入力ファイルサンプル
入力ファイルサンプル

Salesforceに送る情報(RESTful API URLパス名)

本サンプルシナリオでは、RESTful API実行.ums5ライブラリ呼び出し時、「RESTful API URLパス名」にLeadからのデータ取得用SQL文を指定して、全データを取得しています。
取得データの条件を変更したい場合、この「RESTful API URLパス名」に渡す内容「header_tail」(「RESTful API URLパス名」の後半部として使用) を変更すると、参照するオブジェクトを変更したり、出力順番を変更することができます。

Salesforceから送られる情報(受信用データファイル)

RESTful API実行.ums5 ライブラリ呼び出し時、受信したデータはJSON形式で保存されます。
この受信データは、入力ファイルと同じディレクトリに「入力ファイル名.json」の名称で出力されます。 「JSONファイルの解析に失敗しました。」などのエラーが発生した場合、この出力ファイルを参照してください。

JSONファイルの解析とExcelへの保存

本サンプルシナリオは「SalesForce_Leadデータ取得用_JSON→EXCEL出力」処理で、JSONファイルの中身を解析してデータを取得し、Excelに格納する処理を行っています。 内部では、以下の処理を実施しています。

  1. Excelファイルを開く。
  2. JSONファイルをUTF8として読み込む。
  3. 読み出したデータをJSONとして解析(具体的には、HtmlFile オブジェクトを使用して、JSONParse します)。
  4. パースされたJSONのオブジェクトから、Excelで指定されたデータ名のデータを取得。
  5. 取得したデータをExcelのセルに設定。

SalesForceの取得データ JSON出力例

{  
  "totalSize" : 2,                        取得データ数  
  "done" : true,                      実施結果  
  "records" : [ {                     取得したレコードの情報(配列)  
    "attributes" : {                      1レコード目の取得データの属性  
      "type" : "Lead",                    取得データの所属  
       "url" : "/services/data/v44.0/sobjects/Lead/AAAAAAAAAAAAAAAAAA"  取得データのURL(直接参照する場合のURL)  
    },  
    "Id" : "AAAAAAAAAAAAAAAAAA",          取得データ1項目  
    :  
    "Status" : "Closed - Converted"       取得データ最終項目  
  }, {                                    2レコード目  
    :  
  } ]  
}  

ここで扱うJSONファイルの形式は、Salesforce固有のものを想定しています。
JSONファイルの形式が変わる場合、JSONファイルの形式に合わせて、処理を作成してください。

Excelへの受信データ格納

本サンプルシナリオでは、取得した文字列が数値、日付とみなされる文字列だった場合、また、文字列先頭に「=」が格納されていた場合は、Excelによって変換が行われるのを防ぐため、セルのフォーマットを文字列としてExcelファイルに格納しています。

以下は、数値、日付、先頭が=のデータの場合、セルの書式を文字列にする処理に該当する部分です。

  if IsNumeric(detail) or IsDate(detail) or InStr(detail, "=") = 1  Then  
     worksheet.Cells(xlsx_lineNo + i,1 + j).NumberFormatLocal  = "@"  
  End If  
  worksheet.Cells(xlsx_lineNo + i,1 + j).value = detail

他の文字列の書式を変更したい場合、また、項目ごとに設定を変更したい場合は、条件文、設定書式を見直す必要があります。

変更履歴

版数 日付 修正内容
1.0版 2019/03/25 初版
1.1版 2023/06/12 注意事項を削除

  1. ヘッダに一つも項目名がない場合、エラーを出力し処理を中断します。

  2. ヘッダにSalesforceのLeadに存在しない項目名を指定すると、取得時にエラーが発生します。