プログラマ38の日記

主にプログラムメモです。

Salesforce: Excel VBAからSalesforce API呼び出しと、TLS1.0無効化の件

SalesforceとはTLS1.0では通信できない

脆弱性のため、TLS1.0は無効となり、ブラウザの設定変更、APIを使ったアプリケーションの対応が必要となりました。

 

バージョンアップで対応できるものはいいのですが、VBAは対応が難しいなと思っています。ExcelからSalesforceのデータの取得・更新、もしくはメタデータの操作などができるととても便利なんですが、Windows7では通信にネックがあります。

 

VBAからSalesforceAPIを利用する

SalesforceAPIVBAでコールします。次がログインする時のサンプルコードです。

 

Option Explicit

Sub sampleSF()
  Dim loginxml As String
  '接続用のxml
  loginxml = _
"<?xml version=""1.0"" encoding=""UTF-8""?><env:Envelope  " & _
"  xmlns:env=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" " & _
"  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">  " & _
" <env:Body>  " & _
" <m:login xmlns:m=""urn:partner.soap.sforce.com"" xmlns:sobj=""urn:sobject.partner.soap.sforce.com"">   " & _
"  <m:username>sample@sample.user</m:username>   " & _
"  <m:password>samplepassword</m:password>  " & _
" </m:login> " & _
" </env:Body>  " & _
"</env:Envelope> "

Dim http As Object
'WinHttp.WinHttpRequest か MSXML2.XMLHTTP を使う
'Set http = CreateObject("WinHttp.WinHttpRequest.5.1")   
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "POST", "https://login.salesforce.com/services/Soap/u/38.0", False
http.SetRequestHeader "Content-Type", "text/xml; charset=utf-8"
http.SetRequestHeader "SOAPAction", "login"
http.Send loginxml

' 結果出力
MsgBox http.responseText

'XMLをパースする処理を作成する。
・・・・・
End Sub

Windows7だと、標準だとTLS1.0が指定されるのが問題

 上のサンプルは、Windows10では問題なく動作しますが、Windows7だと動作しません。

というのも、Windows7の通信がTLS1.0だからです。Windows7でTLS1.1以上にする指定は次です。

WinHttp.WinHttpRequest.5.1:パッチをあて、レジストリを修正することで対応可能

MSXML2.XMLHTTP:対応方法無し

 

一括登録ツールとか、数式を駆使した入力フォームなんかVisualforceよりExcelの方が向いてるときが多いんですよね。でも、Windows7の壁が立ちはだかります。

2020年にWindows7のサポートが切れるのを気長に待ちますかね。。

 

でも、ここ最近Windows10を使うことが多くなってきたので気にせずにExcel VBAからSalesforce APIをコールするマクロを作成しています。

作成したのは次のExcelマクロになります。

  • ロール作成
  • カスタム項目作成(対応していないデータ型があります)
  • オブジェクト一覧と項目一覧の取得
  • カスタム表示ラベルの作成と一覧取得
  • explainの実行
  • AnonymousApexの実行

[ロールの作成]

crmprogrammer38.hatenablog.com

[カスタム項目の作成]

crmprogrammer38.hatenablog.com

[オブジェクト・項目の一覧取得]

crmprogrammer38.hatenablog.com

[カスタム表示ラベルの作成・一覧の取得]

crmprogrammer38.hatenablog.com

[explainの実行]

crmprogrammer38.hatenablog.com

[AnonymousApexの実行]

crmprogrammer38.hatenablog.com