Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

ASP.NET Core Blazor C# で CData ADO.NET Provider kintone を使う

f:id:sugimomoto:20191129194451p:plain

最近 Blazor を触り始めました!

JavaScriptフレームワークjQueryで止まっている私(Reactはちょこっと触ったけど)にはめちゃくちゃありがたいフレームワークだなと思いながら、楽しんでいます。

Blazorは .NET ライブラリ・既存の .NET エコシステムを流用できるのが大きなポイントです。やっぱり JSON.NET とか REST Clientとか使いたい。

docs.microsoft.com

そして、私の会社で提供している CData ADO.NET Provider も .NET Core 対応をしていたので、これならイケそうじゃん? と思い、試してみました。

CData ADO.NET Provider について

今回は kintone API に接続するためのProvider CData ADO.NET Provider for kintone を使ってみました。

kintone APIREST API)は通常、以下のリファレンスにあるようなデータの取得アプローチを行いますが

developer.cybozu.io

CData ADO.NET Provider では、以下のように通常であればRDBに接続するフレームワークである ADO.NET DataAdapterやLinqToSQL(もしくはDapperなどのORMを挟んでもいいです)で、kintoneのデータにアクセスできるようになります。

string connectionString = "User=myuseraccount;Password=mypassword;Url=http://subdomain.domain.com;GuestSpaceId=myspaceid";
 
using (KintoneConnection connection = new KintoneConnection(connectionString)) {
  KintoneDataAdapter dataAdapter = new KintoneDataAdapter(
  "SELECT CreatorName, Text FROM Comments", connection);
 
  DataTable table = new DataTable();
  dataAdapter.Fill(table);
 
  Console.WriteLine("Contents of Comments.");
 
  foreach (DataRow row in table.Rows) {
    Console.WriteLine("{0}: {1}", row["CreatorName"], row["Text"]);
  }
}

http://cdn.cdata.com/help/EKE/jp/ado/pg_ADOqueriestable.htm

上記コードはSELECTですが、INSERT・UPDATE・DELETEにも対応しているので、kintone アプリのデータは柔軟に操作可能です。

Blazor で使ってみる

Blazor で使うからといって特に特別なことが必要なわけではありません。

もちろん、RDB向けのドライバーと違い最終的にはHTTPリクエストが行われるので、サーバーサイド Blazorとしてサーバーサイドから実行されるのか、クライアントサイド Blazorとして、実行中のブラウザからHTTPリクエストが行われるのかの違いはあります。そのあたりはネットワークやプロキシの設定として注意が必要でしょう。

今回はとりあえずプロジェクトテンプレートでデフォルト生成される サーバーサイドBlazorで試してみました。

まずは以下のURLから CData ADO.NET Provider for kintone のトライアルを入手します。

https://www.cdata.com/jp/drivers/kintone/ado/

f:id:sugimomoto:20191129194041p:plain

インストールは特に難しいところはありません。EULAを確認し次へ次へと進めていくだけです。

f:id:sugimomoto:20191129194324p:plain

Visual Studio を立ち上げて、Blazor アプリのプロジェクトを作成します。

f:id:sugimomoto:20191129193718p:plain

プロジェクトを作成したら「C:\Program Files\CData\CData ADO.NET Provider for kintone 2019J\lib\netstandard2.0」から「System.Data.CData.Kintone.dll」を参照してください。

f:id:sugimomoto:20191129193801p:plain

あとは、ADO.NET Provider 接続部分をKintoneConnectionに切り替えて、DataAdapterを利用するだけです。

あまりこんな書き方はしないと思いますが、せっかく Blazorなので、そのままrazorページでコールしてみました。

gist.github.com

接続文字列には、kintoneのURL、IDとパスワードを指定します。また、CData Driverの都合上、ライセンスが接続文字列埋込み型になるので、試したい方はCData サポートデスク(support@cdata.co.jp)までご連絡ください。

実行すると、このような形でkintoneからデータ取得を行い、HTMLテーブル形式にレンダリングしています。

f:id:sugimomoto:20191129193821p:plain

もうちょっとスタイルを整えれば、以下のような感じにもできます。

通常Kintone APIがサポートしないようなCountやJOINなんかも駆使できるのがいいですね。

https://cdatajbuilds.s3-ap-northeast-1.amazonaws.com/sugimototest/kintoneado.gif

簡易的に社内で kintone 連携の外部アプリを作りたい時とかいいですね。

Blazor自身、もちろんまだまだ課題も多いフレームワークだと思いますが、C#を触っている人間からすると、直感的に書けるのが大変ありがたいですね。

なお、この記事は「CData Software User Group Advent Calendar 2019」の1日目の記事としても書いています。

qiita.com