各製品の資料を入手。
詳細はこちら →Azure App サービスでAccess IFTTT フローをトリガー
この記事では、Logic Apps の標準ウィザードを使用してIFTTT (if-this-then-that) ワークフローを自動化する方法を説明します。
最終更新日:2022-12-02
この記事で実現できるAccess 連携のシナリオ
こんにちは!ドライバー周りのヘルプドキュメントを担当している古川です。
OData やSwagger などの標準ベースのインターフェースを介してCData API Server をADO.NET Provider for Access(もしくは250+ の他のADO.NET Providers)と組み合わせることで、Access を使用してLogic Apps と Power Automate のネイティブエクスペリエンスを提供します。OData は、データへのリアルタイム接続を可能にします。Swagger を使用すると、Logic Apps とPower Automateのウィザードのスキャフォールディング(コード生成) および、Power Apps のスキャフォールディングが可能になります。この記事では、Logic App のIFTTT (if-this-then-that) ワークフローにAccess を追加する方法を説明します。
API サーバーをセットアップ
以下のステップに従って、安全でSwaggerに対応するAccess API の作成を開始します。
デプロイ
API サーバーは独自のサーバーで実行されます。Windows では、スタンドアロンサーバーまたはIIS を使用して展開できます。Java サーブレットコンテナで、API Server WAR ファイルをドロップします。詳細とハウツーについては、ヘルプドキュメントを参照してください。
API サーバーは、Microsoft Azure、Amazon EC2、Heroku にも簡単にデプロイできます。
Access に接続
API サーバーとADO.NET Provider for Access を展開した後、[Settings]->[Connections]をクリックし、API サーバー管理コンソールで新しい接続を追加して認証値とその他の接続プロパティを指定します。 次に、[Settings]->[Resources]をクリックして、API サーバーへのアクセスを許可する エンティティを選択できます。
Access接続の設定方法
ローカルファイルへの接続設定
ローカル環境からAccess への接続は非常にシンプルです。ConnectionType をLocal に設定することで、CRUD 操作(SELECT、INSERT、UPDATE、DELETE)をすべて実行できます。接続にはDataSource プロパティに以下のようなAcces sデータベースファイルのフルパスを指定します。
C:\Users\Public\Documents\MyDatabase.accdb
詳細な接続手順については、ヘルプドキュメントの「はじめに」セクションをご参照ください。
クラウドストレージ上のAccess ファイルへの接続設定
各種クラウドストレージに保存されているAccess ファイルへのアクセスにも対応しています。ただし、クラウド上のファイルに対するデータ操作は、INSERT、UPDATE、DELETE に制限されますのでご注意ください。
S3、Google Driver、OneDrive など、各種クラウドストレージ内のAccess ファイルへの接続方法はこちらの記事をご確認ください。
クラウド上のファイルを更新したい場合は、以下の手順で実施いただけます。
- 対応するCData ドライバーを利用し、クラウドサービスからAccess ファイルをダウンロード
- Access ドライバーを使用して、ローカル環境でファイルを編集
- クラウドサービス用ドライバーのストアドプロシージャを使用して、更新ファイルをアップロード
具体例として、SharePoint 上のファイルを更新する場合の手順をご紹介します。
- CData SharePoint ドライバーのDownloadDocument プロシージャを使用してファイルを取得
- CData Access ドライバーでファイルの更新を実施
- SharePoint ドライバーのUploadDocument プロシージャで更新内容を反映
DataSource 接続プロパティの設定について補足いたします。接続先のクラウドストレージを識別するための一意の接頭辞を指定し、続けて目的のファイルパスまたはフォルダパスを記述します。フォルダを指定した場合は1ファイルが1テーブルとして、単一ファイルの場合は単一テーブルとして扱われます。
また、CORS を有効にし、[Settings]->[Server]ページで次のセクションを定義する必要があります。[*]なしですべてのドメインを許可するオプションを選択することもできます。
- Access-Control-Allow-Origin:値を[*]に設定します。Logic Apps Designer でAPI サーバーを使用するには、Access-Control-Allow-Origin ヘッダー値[*]が必要です。
- Access-Control-Allow-Methods:値を[GET,PUT,POST,OPTIONS]に設定します。
- Access-Control-Allow-Headers:[x-ms-client-request-id, authorization, content-type]に設定します。
API サーバーユーザーを承認
作成するOData サービスを決定したら、[Settings]->[Users]をクリックしてユーザーを承認します。API サーバーは、認証トークンベースの認証を使用して主要な認証スキームをサポートします。SSL を使用して、接続を認証及び暗号化することができます。アクセスはIP アドレスによって制限することもできます。デフォルトでは、ローカルマシンのみに制限されています。
簡単にするために、API ユーザーの認証トークンをURL で渡すことができます。データディレクトリにあるsettings.cfg ファイルの[Application]セクションに設定を追加する必要があります。Windows でこれは、アプリケーションルートのapp_data サブフォルダにあたります。Java エディションでは、データディレクトリの場所はオペレーティングシステムによって異なります。
- Windows:C:\ProgramData\CData
- Unix or Mac OS X: ~/cdata
[Application]
AllowAuthtokenInURL = true
Logic App でAccess にアクセス
Logic App でAPI サーバーを使用し、Access の周りにプロセスフローを作成できます。HTTP + Swagger アクションは、Access に対して実行する操作を定義するためのウィザードを提供します。以下のステップでは、Logic App でAccess を取得する方法を説明しています。
テーブルにレコードの作成日を含むカラムがある場合は、以下のステップに従って新しいレコードのカラム値をチェックする関数を作成できます。それ以外の場合は、[Create a Logic App]セクションにスキップし、フィルタに一致するエンティティにメールを送信します。
新しいAccess エンティティを確認
特定の新しいAccess エンティティを見つけるために、インターバルの開始日時の値を取得する関数を作成できます。
- [Azure Portal]で、[New]->[Function App]->[Create]と進みます。
- 名前を入力し、サブスクリプション、リソースグループ、App Service プラン、そしてストレージアカウントを選択します。
- Function App を選択し、Webhook + API シナリオを選択します。
- 言語を選択します。この記事では、JavaScript を使用します。
- 以下のコードを追加し、JSON オブジェクトで前の時間を返します。
module.exports = function (context, data) { var d = new Date(); d.setHours(d.getHours()-1); // Response of the function to be used later. context.res = { body: { start: d } }; context.done(); };
トリガーにAccess を追加
以下のステップに従って、フィルタに一致する結果をAccess で検索するトリガーを作成します。上記の関数を作成した場合は、返されたインターバルの開始後に作成されたオブジェクトを検索できます。
- Azure Portal で[New]をクリックし、[Web + Mobile]セクションで[Logic App]を選択してリソースグループとApp Service プランを選択します。
- これで、Logic App Designer で使用可能なウィザードが使用できます。このウィザードには、Logic App の設定ブレードからアクセスできます。Blank Logic App templateを選択します。
- Access オブジェクトをポーリングするRecurrence アクションを追加します。この記事では、一時間ごとにポーリングします。タイムゾーンを選択します。デフォルトはUTC です。
- 関数アクションを追加します。[Add Action]ダイアログのメニューを展開し、リジョンにAzure 関数を表示するオプションを選択します。先に作成したFunction App を選択し、インターバル開始を返す関数を選択します。
- からの中括弧のペア({})を入力し、からのペイロードオブジェクトを関数に渡します。
- HTTP + Swagger アクションを追加し、API サーバーのSwagger URL を入力します。
http://MySite:MyPort/api.rsc/@MyAuthtoken/$oas
- [Return Orders]操作を選択します。
各プロパティの説明を使用して、取得する列やフィルターなどの追加パラメータを指定します。以下はフィルタの一例です。
ShipCity eq 'New York'
API サーバーは、Swagger ドキュメントにて説明とその他のドキュメントを返します。OData API とサポートされているOData の使用方法についての詳細は、API サーバーのヘルプドキュメントを参照してください。
getInterval 関数から返された日時値を使用するには、Orders テーブルの日時列で[ge]演算子を使用し、ダイアログでBody パラメータを選択します。日時値を囲むには、クォーテーションを使用する必要があることに注意して下さい。
[Code View]に切り替え、$filter 式を変更してインターバルの開始を含むプロパティを抽出します。'@{body('MyFunc')['MyProp']' 構文を使用します。
"getAllAccount": { "inputs": { "method": "get", "queries": { "$filter":"CreatedDate ge '@{body('getInterval')['start']}'" }, "uri": "https://MySite:MyPort/api.rsc/@MyAuthtoken/Orders" }
これで、ワークフローのデータソースおよび宛先としてAccess にアクセスできます。
新しレコードをメールで送信
以下のステップに従って、新しいOrders エンティティを含むレポートをメールで送信します。
- [Logic Apps Designer]で[SMTP - Send Email]アクションを追加します。
- SMTP サーバーに必要な情報を構成します。
- From、To、Subject、Body を構成します。返されたAccess 列からパラメータを追加できます。
[Save]をクリックし、[Run]をクリックして過去一時間に作成されたAccess レコードに関する電子メール通知を送信します。
