はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

Windows Azure Mobile Servicesに任意のテーブル構造でデータを格納する

Windows Azure Mobile Servicesはそのポータルで

  1. サンプルプログラム用のテーブル作成
  2. サンプルプログラムのダウンロード

などがおこなえるため気軽にWindows Azure Mobile ServicesのWindows 8 ストアアプリ、Windows Phone 8アプリ、iOSアプリのサンプルが作成できます。

しかし、あまりにも簡単にできてしまうため、ToDoItem以外のテーブルやToDoItem以外のテーブル構造を使いたいときにどうしたらいいのか右往左往してしまいます。

そこでサンプル脱却して自分の手中にWindows Azure Mobile Servicesを収めるためのステップをみていきましょう。

新しいテーブルの作成 (22:29)

Mobile Servicesの管理画面を表示したら、画面下の[作成]ボタンをクリックします。

image

 

テーブル名として「AnswerItem」と入力します。今回はデータの追加と表示だけで更新や削除を行えないように設定するので、[更新アクセス許可]と[削除アクセス許可]の内容を「スクリプトと管理者のみ」に変更します。

image

image

 

テーブル名をクリックするとテーブル管理画面になるので[列]ボタンをクリックします。

image

 

プログラム側でテーブル構造にあったクラスを作成する (22:41)

Windows Azure PortalのMobile Services管理画面やテーブル管理画面では作成したテーブルに列の追加などは行えません。Azure SQL Databaseの管理画面に移動すれば列の追加なども行えますが、この状態でMobile Servicesを使うアプリを動か自動的に列の追加を行うことができます。

まず、Mobile Servicesを使うWindows 8 ストアアプリをVisual Studioで開き、データ用クラスを定義します。

Public Class AnswerItem
    Public Property Id As Integer

    <datamember(name:="clientid")>
    Public Property ClientID As String

    <datamember(name:="no")>
    Public Property No As Integer

    <datamember(name:="text")>
    Public Property Text As String

    <datamember(name:="complete")>
    Public Property Complete As Boolean
End Class

このクラスを使ってInsertAsyncを実行すれば自動的にAnswerItemテーブルのテーブル構造が変わります。

Private AnswerTable As IMobileServiceTable(Of AnswerItem) =
    MobileService.GetTable(Of AnswerItem)()
         :
        (略)
         :
Public Async Sub InsertAnswerItem(item As AnswerItem)
    Await Me.AnswerTable.InsertAsync(item)
End Sub
         :
        (略)
         :
Private IndexNo As Integer = 0
Private Sub Test()
    Dim model As New StorageModel

    IndexNo += 1
    Call model.InsertAnswerItem(New AnswerItem With {
                                 .ClientID = "hatsune",
                                 .No = IndexNo,
                                 .Text = TextInput.Text})
End Sub

image

 

(以上23:05)

 

もしここでAnswerItemクラスの内容に要素を追加して実行したらどうなるでしょうか。データを追加する操作をすると

image

と実行時エラーになります。データがない時でも同様のエラーが発生するので列の自動追加はId列しかないときだけ有効な機能だという事が分かります。