SDKSmartStoreはじめにみなさん、はじめまして。走れるシステムエンジニアこと、溝口です。実業団の陸上部を引退して、去年の1月にテラスカイに入社してから今まで、本当に色々な方々に支えられて、エンジニアとしての経験を積むことが出来ました。そんな中でも、今回は縁があってモバイルアプリケーションの開発に携わる事ができ、これは是非自分からもみなさんに何か伝えたい!という思いでこの記事を書き始めました。SDK」を使用したアプリケーション、その中で恐らく需要が高いであろうオフライン対応の部分について触れてみたいと思います。SDKとはみなさんご存知の通り、Salesforceから提供されているモバイル開発向けのSDKです。開発出来るアプリケーションとして、Native(iOS、Android)、Hybrid(HTML5+Javascript)、HTML5が挙げられます。ライブラリの主に3つの機能が提供されていることが分かります。その中で、今回はNative(iOS)アプリケーションのSmartStoreを使ってみたいと思います。ライブラリ』という説明からも分かる通り、Salesforceから取得したレコードをモバイル機器の内部ストレージに安全に保存する為の仕組みになります。使用する際にはスープと呼ばれる一時領域を定義して使います。内部的にFMDatabaseクラス(iOSの内部DBであるSQLiteを扱うためのクラス)をラッピングしているので、Salesforce仕様の内部DBを簡単に扱えるようになるクラス、という認識で問題無いと思います。スープ、及びスープのデータの保持期間はリフレッシュトークンの有効期間となります。ログアウト処理を行うか、リフレッシュトークンの有効期間が切れると自動でSmartStoreのデータとスープ領域は消失します。SmartStoreの定義部分をAccountオブジェクト仕様に簡易的に変更したものを使用します。SDKのサンプルアプリケーションについてはコチラを参照して下さい)では、コード上ではどのようにしてスープを定義していくのか、見てみましょう。スープの定義ここでは主にSmartStoreのスープ領域で使用する項目の定義を行います。SQLでいうCREATE文と同じような処理だと思って頂いて構いません。10?14行目で項目を定義しています。(今回はId、Name共にString型なので、kSoupIndexTypeStringで定義しています)17行目で各項目のIndexを作成します。※ここで設定した並び順がデータを取得する際の配列のIndex番号として設定されます。「項目名:データ」の形式でNSDictionary型の値を作成し、NSArrayの配列に入れてupsertEntriesメソッドを呼び出します。SQLというSmartStore独自のクエリを使用してデータを取得します。今回はAccountスープの全件を取得するクエリを使用します。{スープ名}』の形式でクエリを発行します。SQLについて詳しく知りたい場合はコチラを参照して下さい。SmartStoreを使ってみよう!では、定義したSmartStoreのスープ領域を使用した簡単な実装例を紹介します。下記画面が今回使用するアプリケーションの画面です。今回はSmartStoreの実装方法の方をメインに紹介しますので、画面の作成手順に関しては割愛させて頂きます。メイン画面】(RootViewController)Accountオブジェクトのレコードを最大10件取得し、表示するビューです。【編集画面】(DetailViewController)メイン画面で対象のレコードをタップした際に遷移する編集画面です。(TempViewController)SmartStoreに保存したレコードの一覧を表示する画面です。今回は表示機能のみ実装しています。実装例について今回は以下の様な処理を想定しています。一時保存画面でスープ領域にデータが保存されていることを確認スープ領域を作成メイン画面の読み込み時にスープ領域を作成しています。同名のスープ領域が存在する場合は処理はスキップされます。Salesforceにクエリを投げ、データを取得メイン画面表示用のSalesforceのデータを取得します。編集画面でデータの保存時に圏外等で通信が出来なくなってしまった場合の処理です。Saveの処理でSalesforceにデータを投げる際にエラーとなる為、didFailLoadWithErrorメソッドが呼び出されます。その中でエラーコードが-1009(通信エラー)だった場合のみ、SmartStoreに対象のデータを保存しています。この処理を入れることにより、ネットワークが途切れた場合でもSalesforceに保存予定だったデータを救済することが出来ます。オフラインでもデータを編集することが可能です。モバイルアプリケーションのクラウド連携のオフライン対応、と聞くとどうしてもハードルが高い様な気がしますが、こんなにも簡単にオフライン機能を実装することが出来ました。SDKでSalesforce連携モバイルアプリケーション開発を始めてみては如何でしょうか?※今回作成したアプリケーションに関しては私個人のGitHubアカウントにて公開しています。検索クラウドやるならテラスカイ。求む!Salesforce開発エンジニア。