最近はAccessツールからのメール送信にスパイラルを利用しています。
メールの到達率・セキュリティも高く、かつ送信ログが確認できるので非常に重宝しています。
Access VBAからスパイラルのメール送信をする方法については以前にご紹介していましたが、その準備段階として、スパイラル内のテーブルにデータを追加(Insert)、削除(Delete)する手順をご紹介します。
今回は後処理としてメールを送信する前提でご紹介しますが、スパイラルデータの追加と削除は他のスパイラル機能を使う際にも活用できると思います。
スパイラルに作成したテーブルにACCESS VBAからデータを追加・削除する方法
メールを一斉送信するために、以下の手順でデータを生成します。
- スパイラルにテーブルを作成する
- スパイラルのテーブルからデータを全削除する
- スパイラルのテーブルにデータを追加する
尚、①のテーブル作成については一度作ってしまえばあとは使い回すだけです。
スパイラルにテーブルを作成する
メール送信に必要な最低限の項目はメールアドレスです。
ですが、配信エラーなどを後に確認するためには、【配信エラーカウント】フィールドと【配信エラーフィールド】はあった方が良いでしょう。
また、後で確認するために【登録日時】も欲しいですね!
メール本文に差し込みしたい場合は差し込み置換用のフィールドも用意しておきます。
作成したテーブルは後ほどAPIにて、テーブル名(タイトル)と差替キーワードを使用します。
スパイラルのテーブルからデータを全削除する
先に作成したテーブルからデータを全削除するには、データ削除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などもありますし、同じようなやり方でデータの取得ができると使える機能が広がります。
ぜひお試しくださいね!