SalesforceとはTLS1.0では通信できない
脆弱性のため、TLS1.0は無効となり、ブラウザの設定変更、APIを使ったアプリケーションの対応が必要となりました。
javaなどバージョンアップすることで対応できるものはいいのですが、VBAは対応が難しいなと思っています。というのも、VBAの通信はOSのバージョンで決められているからです。
ExcelからSalesforceのデータの取得・更新、もしくはメタデータの操作などができるととても便利なんですが、Windows7でTSL1.0の通信となってしまうことが難点になります。
VBAからSalesforceのAPIを利用する
SalesforceのAPIをVBAでコールします。次がログインする時のサンプルコードです。
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以上にする指定はVBAのObjectごとに次の通りです。
WinHttp.WinHttpRequest.5.1:パッチをあて、レジストリを修正することで対応可能
MSXML2.XMLHTTP:対応方法無し
一括登録ツールとか、数式を駆使した入力フォームなんかVisualforceよりExcelの方が向いてるときが多いんですよね。でも、Windows7の壁が立ちはだかります。
2020年にWindows7のサポートが切れるのを気長に待ちますかね。。
でも、ここ最近Windows10を使うことが多くなってきたので気にせずにExcel VBAからSalesforce APIをコールするマクロを作成しています。
作成したのは次のExcelマクロになります。
- ロール作成
- カスタム項目作成(対応していないデータ型があります)
- オブジェクト一覧と項目一覧の取得
- カスタム表示ラベルの作成と一覧取得
- explainの実行
- AnonymousApexの実行
- ナレッジのカテゴリ一覧の取得
- レイアウト一覧とレイアウト項目の取得
- プロファイルのIPアドレス制限一覧の取得
- アプリケーション毎のタブ一覧の取得
[ロールの作成]
[カスタム項目の作成]
crmprogrammer38.hatenablog.com
[オブジェクト・項目の一覧取得]
crmprogrammer38.hatenablog.com
[カスタム表示ラベルの作成・一覧の取得]
crmprogrammer38.hatenablog.com
[explainの実行]
crmprogrammer38.hatenablog.com
[AnonymousApexの実行]
crmprogrammer38.hatenablog.com
[ナレッジのカテゴリ一覧の取得]
crmprogrammer38.hatenablog.com
[レイアウト一覧とレイアウト項目一覧の取得]
crmprogrammer38.hatenablog.com
[プロファイルのIPアドレス制限一覧の取得]
crmprogrammer38.hatenablog.com
crmprogrammer38.hatenablog.com