最近はAccessツールからのメール送信にスパイラルを利用しています。
メールの到達率・セキュリティも高く、かつ送信ログが確認できるので非常に重宝しています。
Access VBAからスパイラルのメール送信をする方法については以前にご紹介していましたが、その準備段階として、スパイラル内のテーブルにデータを追加(Insert)、削除(Delete)する手順をご紹介します。
今回は後処理としてメールを送信する前提でご紹介しますが、スパイラルデータの追加と削除は他のスパイラル機能を使う際にも活用できると思います。
スパイラルに作成したテーブルにACCESS VBAからデータを追加・削除する方法
メールを一斉送信するために、以下の手順でデータを生成します。
- スパイラルにテーブルを作成する
- スパイラルのテーブルからデータを全削除する
- スパイラルのテーブルにデータを追加する
尚、①のテーブル作成については一度作ってしまえばあとは使い回すだけです。
スパイラルにテーブルを作成する
メール送信に必要な最低限の項目はメールアドレスです。
ですが、配信エラーなどを後に確認するためには、【配信エラーカウント】フィールドと【配信エラーフィールド】はあった方が良いでしょう。
また、後で確認するために【登録日時】も欲しいですね!
メール本文に差し込みしたい場合は差し込み置換用のフィールドも用意しておきます。
作成したテーブルは後ほどAPIにて、テーブル名(タイトル)と差替キーワードを使用します。
[jin-img-waku]
[/jin-img-waku]
スパイラルのテーブルからデータを全削除する
先に作成したテーブルからデータを全削除するには、データ削除API(database/delete/request)を使います。
データ削除の手順は以下の通りです。
- 削除用のJSONデータを作成する
- 削除APIをコールして削除する
削除用のJSONデータを作成する
※1) spiral_api_token | APIトークン |
---|---|
※2) passkey | epoch秒。 |
※3) signature | 署名 |
db_title | DBテーブル名 |
id | idを指定する場合セット |
select_name | 定義済みの検索条件がある場合セット |
search_condition | 具体的な検索条件 |
※1 APIトークンはスパイラルにログイン後、開発タブ→APIトークン→【トークン発行】で取得した文字列です。
※2 epock(エポック)秒(UNIX時間)とは、1970年1月1日0時0分0秒からの経過秒数です。署名の有効期限チェックに使用されます。
※3 signatureはトークンとepock秒、シークレットコードをハッシュ化したものです。
今回は全データ削除しますので、id~search_conditionまでの設定は不要です。
以下、JSONデータ作成のサンプルプログラムです。
' *==============================================================
' * Databaseデータ削除用のJsonテキスト作成処理
' *
' * @param strjson 作成したJsonテキスト
' * @return True/False
' *==============================================================
Public Function MakeDelJson(ByRef strjson As String) As Boolean
Dim param As New Dictionary
Dim strsignature As String
Dim intPass As Long
On Error GoTo Err_Exit
'戻り値の初期化
MakeDelJson = False
intPass = DateDiff("s", #1/1/1970 9:00:00 AM#, Now)
strsignature = HmacSha1(csToken & "&" & CStr(intPass), csSecret)
'dbタイトルを連想配列にセット
param.Add "spiral_api_token", csToken
param.Add "passkey", intPass
param.Add "signature", strsignature
param.Add "db_title", csMailTable
'連想配列からJSONフォーマットに変換
strjson = ConvertToJson(param)
Debug.Print strjson
MakeDelJson = True
Exit Function
Err_Exit:
MsgBox Err.Number & ":" & Err.Description, vbOKOnly + vbCritical
End Function
ConvertToJson()関数については以下の記事でご紹介していますので参考にしてください。

削除APIを実行する
以下、サンプルではまず先のJSONデータ作成を行ったのち、ChallSpiralApi()関数でDeleteAPIを実行しています。
※Delete処理のあと、Insert処理→メール送信処理と進みますがPGは割愛しています。
'------------------------------------------------------------
' 処理内容:SPIRAL APIを利用してメール送信
' 引数:
' 戻り値:なし
'------------------------------------------------------------
Private Sub funcApiMailSend()
Dim ret As String
Dim strjson As String
Dim parse As Object
Dim wkTitle As String
DoCmd.Hourglass True
'スパイラルへのデータセット(delete)
If MakeDelJson(strjson) = False Then
MsgBox "Json文字列作成に失敗しました。再度手続きをお願いします。"
Exit Sub
Else
Dim ret As String
'APIコール
ret = CallSpiralApi(strjson, "database/delete/request")
'APIからの戻りテキスト(JSON)を扱いやすいobjectに変換
Set parse = JsonConverter.ParseJson(ret)
If parse("code") = 0 Then
'MsgBox "削除しました", vbOKOnly + vbInformation
Else
MsgBox ret, vbOKOnly + vbCritical
End If
End If
'スパイラルへのデータセット(insert)
'***コード省略***
'スパイラルからのメール送信
'***コード省略***
DoCmd.Hourglass False
End Sub
スパイラルAPIをCALLするサンプルPG(CallSpiralApi)
' *==============================================================
' * SPIRALのAPI関数コール
' *
' * @param request POST/GET
' * @param url
' * @param accesstken(Encodeが必要であればEncode済みの文字列)
' * @param param(jsonオブジェクト)
' * @return responseテキストデータ
' *==============================================================
Public Function CallSpiralApi(ByVal param As String, ByVal request_kind As String) As String
On Error GoTo Err_Exit
With CreateObject("MSXML2.XMLHTTP")
.Open "POST", "https://reg18.smp.ne.jp/api/service", False
'Basic認証
.setRequestHeader "X-SPIRAL-API", request_kind
.setRequestHeader "Content-Type", "application/json; charset=UTF-8"
.send param
'結果が戻るまで待機
Do While .readyState < 4
DoEvents
Loop
'デバッグは↓をアンコメントしてレスポンスを確認
Debug.Print .responseText
'.responseTextを戻り値とする
CallSpiralApi = .responseText
End With
Exit Function
Err_Exit:
MsgBox Err.Number & ":" & Err.Description, vbOKOnly + vbCritical
End Function
スパイラルのテーブルにデータを追加する
先に作成したテーブルにデータを追加するには、データ追加API(database/insert/request)を使います。
流れはデータ削除と同じで、手順は以下の通りです。
- 追加用のJSONデータを作成する
- 追加APIをコールして追加する
追加用のJSONデータを作成する
※1) spiral_api_token | APIトークン |
---|---|
※2) passkey | epoch秒。 |
※3) signature | 署名 |
db_title | DBテーブル名 |
columns | フィールド定義 |
data | データ |
以下、JSONデータ作成のサンプルテキストです。
' *==============================================================
' * Databaseレコード追加用のJsonテキスト作成処理
' *
' * @param strjson 作成したJsonテキスト, testflag
' * @return True/False
' *==============================================================
Public Function MakeInsJson(ByRef strjson As String, testflag As Boolean) As Boolean
Dim param As New Dictionary
Dim strsignature As String
Dim newObj As New Dictionary
Dim dataObj As New Dictionary
Dim intPass As Long
On Error GoTo Err_Exit
'戻り値の初期化
MakeInsJson = False
intPass = DateDiff("s", #1/1/1970 9:00:00 AM#, Now)
strsignature = HmacSha1(csToken & "&" & CStr(intPass), csSecret)
'追加したいデータを連想配列にセット
param.Add "spiral_api_token", csToken
param.Add "passkey", intPass
param.Add "signature", strsignature
param.Add "db_title", csMailTable
param.Add "columns", Array("f002546638", "f002546639", "f002546640", "f002546641", "f002546642")
param.Add "data", New Collection
param("data").Add Array("hoge1@xxxxx.jp", "サンプル1", "2020/09/30", "備考1", "124", "12300")
param("data").Add Array("hokge2@xxxxx.jp", "サンプル2", "2020/09/30", "備考2", "125", "11500")
'連想配列からJSONフォーマットに変換
strjson = ConvertToJson(param)
Call makeText(strjson)
MakeInsJson = True
Exit Function
Err_Exit:
MsgBox Err.Number & ":" & Err.Description, vbOKOnly + vbCritical
End Function
今回のサンプルでは実データの配列を作成する際に直値を入れていますが、この部分は普通データベース内から必要な情報をselectして作成するかと思います。
追加APIを実行する
削除APIを実行するプログラムと同様です。
削除と同様のコードを「スパイラルへのデータセット(insert)」のコメント下に追記してください。
まとめ
スパイラルのテーブル作成から、データ削除、データ追加までをAccess VBAを使って処理する方法をご紹介しました。
この処理ができると、スパイラルからのメール送信もできますし、その他色々応用が利きますよね。
スパイラルが提供しているAPIは他にもSELECTなどもありますし、同じようなやり方でデータの取得ができると使える機能が広がります。
ぜひお試しくださいね!
コメント