スパイラル

スパイラルに作成したテーブルにACCESS VBAからデータを追加・削除する方法

記事内に商品プロモーションを含む場合があります

最近はAccessツールからのメール送信にスパイラルを利用しています。

メールの到達率・セキュリティも高く、かつ送信ログが確認できるので非常に重宝しています。

Access VBAからスパイラルのメール送信をする方法については以前にご紹介していましたが、その準備段階として、スパイラル内のテーブルにデータを追加(Insert)、削除(Delete)する手順をご紹介します。

今回は後処理としてメールを送信する前提でご紹介しますが、スパイラルデータの追加と削除は他のスパイラル機能を使う際にも活用できると思います。

スパイラルに作成したテーブルにACCESS VBAからデータを追加・削除する方法

メールを一斉送信するために、以下の手順でデータを生成します。

データ作成の手順
  1. スパイラルにテーブルを作成する
  2. スパイラルのテーブルからデータを全削除する
  3. スパイラルのテーブルにデータを追加する

尚、①のテーブル作成については一度作ってしまえばあとは使い回すだけです。

スパイラルにテーブルを作成する

メール送信に必要な最低限の項目はメールアドレスです。

ですが、配信エラーなどを後に確認するためには、【配信エラーカウント】フィールドと【配信エラーフィールド】はあった方が良いでしょう。

また、後で確認するために【登録日時】も欲しいですね!

メール本文に差し込みしたい場合は差し込み置換用のフィールドも用意しておきます。

作成したテーブルは後ほどAPIにて、テーブル名(タイトル)と差替キーワードを使用します。

スポンサーリンク

スパイラルのテーブルからデータを全削除する

先に作成したテーブルからデータを全削除するには、データ削除API(database/delete/request)を使います。

データ削除の手順は以下の通りです。

  1. 削除用のJSONデータを作成する
  2. 削除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を使ってACCESSからメールを送る方法以前Accessからメールを送る方法としてoutlookを使う方法、CDOを使う方法をご紹介しました。 これらの方法は無料で手軽に...

削除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)を使います。

流れはデータ削除と同じで、手順は以下の通りです。

  1. 追加用のJSONデータを作成する
  2. 追加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などもありますし、同じようなやり方でデータの取得ができると使える機能が広がります。

ぜひお試しくださいね!

 

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。