CodeZine(コードジン)

特集ページ一覧

Windows Azureモバイルサービスを利用しよう

Windows Azure 新機能チュートリアル(19)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/12/10 14:15

目次

モバイルサービスのデータストア

 ここからはサーバー側のデータストアについて解説します。

データのアクセス権限

 先述したとおり、モバイルサービスのデータにはアクセス権限があります。これらは、管理ポータルから確認、設定することができます。

 管理ポータルのデータ画面から、[アクセス許可]を選択します(図10)。挿入、更新、削除、読み込みについて、それぞれアクセス権限を設定できます。

図10:アクセス権限の確認
図10:アクセス権限の確認

 各アクセス権限についての意味は、下表のとおりです。

表:アクセス権一覧
アクセス権 意味
すべてのユーザー アプリケーションキーが不要で、誰でもアクセス可能です。
アプリケーションキーを持つユーザー アプリケーションキーを持っていればアクセス可能です。
認証されたユーザーのみ 認証されたユーザーのみアクセス可能です。
認証のためには、マイクロソフトアカウントや
Facebook、Twitter、Googleなどと連携できます。
スクリプトと管理者のみ サーバーサイドのスクリプトと、管理者
(マスターキー保有者)のみアクセス可能です。

 モバイルサービスへの接続でも触れましたが、本稿で説明したサンプルではアプリケーションキーを利用しています。これ以外にもアクセス権限を設定することによって、アプリケーションキーが不要だったり、アプリケーションキー以外のマスターキーが必要だったりします。

 これらは、管理ポータルのモバイルサービス画面下部の[キーの管理]を選択すると確認できます(図11)。また[再生成]ボタンをクリックすることによって、キーの値を再生成することも可能です。

図11:管理キーの確認
図11:管理キーの確認

サーバースクリプト

 モバイルサービスでは、サーバーサイドで実行するカスタムビジネスロジックをJavaScriptで実装できます。クライアントサイドではなく、サーバーサイドで何らかの処理したい場合に便利な機能です。これらは、データの挿入、更新、削除、読み取りごとに実行されます。スクリプトは管理ポータル上のエディタから編集することができます。管理ポータルのデータ画面から[スクリプト]を選択します。[操作]は既定で[挿入]が選択されているでしょう(図12)。

図12:挿入処理のスクリプト
図12:挿入処理のスクリプト

 上記の例では、挿入処理時に呼ばれる関数を定義しています。いずれの動作においても、requestオブジェクトのexecuteメソッドを呼ぶことによって、要求した処理が完了します。挿入(Insert)以外にも、更新(Update)、削除(Delete)、閲覧(Read)が選択でき、それぞれの操作時のスクリプトを定義できます。

1. サーバースクリプトの編集

 サンプルアプリケーションでは空白の文字を登録できてしまうため、これを抑止する処理をスクリプトに追加してみましょう。リスト6の内容を入力して、画面下部の[SAVE]ボタンをクリックします。

リスト6 モバイルサービスへの接続
function insert(item, user, request) {

    if (item.text.trim().length === 0) {                              (1)
        console.log('Text is null.');                                 (2)
        request.respond(statusCodes.BAD_REQUEST, 'Text is null.');    (3)
    } else {
        request.execute();
    }
}

 スクリプトの内容について解説すると、第1引数のitemオブジェクトには、データに対応したtextプロパティに文字列が格納されて渡されます。第2引数のuserオブジェクトは、認証サービスを利用したときの認証情報が格納されますが、それ以外は未定義です。第3引数のrequestオブジェクトは、要求されたリクエストに応答するための操作メソッドが提供されます。

 (1)のif文では、textプロパティの文字列をトリムして長さが0ならばエラーの処理を実施しています。

 (2)はconsoleオブジェクトのlogメソッドを呼び出し、ログ出力をしています。出力されたログは管理ポータルから確認することができます(図13)。

 (3)は、requestオブジェクトのrespondメソッドを呼び出して、クライアント側にエラーを通知(HTTP Error 400 Bad Request)しています。

図13:ログの確認
図13:ログの確認

 サーバー側のスクリプトについては、「MSDNのサーバースクリプトリファレンス」を参照してください。

2. クライアント側の修正

 サーバーサイドでエラーを返却するように修正しましたが、そのままでは例外が発生してしまうため、クライアント側で正しく例外をキャッチする必要があります(リスト7)。

リスト7 データ挿入時の例外処理(Main.xaml.cs 44行目~)
using Windows.UI.Popups;                                                    ...(3)


...
        private async void InsertTodoItem(TodoItem todoItem)
        {
            try
            {
                await todoTable.InsertAsync(todoItem);
                items.Add(todoItem);
            }
            catch (MobileServiceInvalidOperationException e)                ...(1)

            {
                var dialog = new MessageDialog(e.Response.Content,          ...(2)
                    string.Format("{0} {1}",  
                    e.Response.StatusDescription,
                    e.Response.StatusCode));
                var ignoreResult = dialog.ShowAsync();                      ...(4)
            }
        }

 サーバー側でエラーが返却されると、MobileServiceInvalidOperationExceptionが発生するため、(1)のcatch文で例外をキャッチします。(2)では例外オブジェクトから必要な情報を取得しダイアログを作成しますが、(3)のusingが必要です。(4)のダイアログを表示では、Responseオブジェクトのコンテンツ、ステータス情報を表示しています。これらの内容は、リスト6のrespondメソッドで応答した情報に対応します。

 ここでも表示は非同期メソッドのみ用意されており、ダイアログを表示する場合も従来のShowメソッドではなく、ShowAsyncメソッドを呼び出します。

図14:エラー画面
図14:エラー画面

まとめ

 Windows Azure モバイルサービスを利用することによって、簡単にモバイルサービスの基盤が構築できることが理解いただけたでしょうか。現在、マイクロソフトはWindows Azureを基盤としたサービスレイヤーの強化に注力しているようにみえます。今後もWindows Azureで提供されるサービスが増えてくるかと思います。

 次回以降は、もう少し踏み込んで、サーバーサイドのスクリプトや、モバイルサービスの認証、プッシュ通知について解説していきたいと思います。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Windows Azure新機能チュートリアル

もっと読む

著者プロフィール

  • WINGSプロジェクト statemachine(statemachine)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5