プログラマ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をコールするマクロを作成しています。
マクロは、ロール作成と、カスタム項目作成(対応していないデータ型があります)、オブジェクト一覧と項目一覧の取得になります。 

crmprogrammer38.hatenablog.com

crmprogrammer38.hatenablog.com

crmprogrammer38.hatenablog.com