crmprogrammer38の日記

主にDWHやSalesforceのプログラムメモです。

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

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

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

 

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

 

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

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

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

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

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

MSXML2.XMLHTTP:対応方法無し

 

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

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