iCafe | IBM i / AS400等に関する技術情報ポータルサイト

IBM i / AS400等に関する技術情報ポータルサイト

お役立ち記事
iPhoneからIBM iのデータにアクセスするアプリの構築


本記事は「IBM Systems Magazine」の許諾のもと、原文を日本語化するとともに、一部再編集したものとなります。原文をご覧になりたい方は下記よりアクセスしてください。
原文タイトル:Build an App to Access IBM i Data From Your iPhone
原文著者: Mike Larsen

繋がっていることがますます重要(かつ必要)になるにつれ、必要なツールを人々に提供することも同様に重要になっています。今日、私達はいつでも情報を入手できると思っています。さらに、問題が発生した場合には迅速に対応する必要があります。たしかに、ラップトップの電源を入れてIBM iにサインオンし、必要な情報を手に入れることができますが、電話から適切にビジネスを行えるとしたらどうでしょうか? わずか数分しか節約できないのは確かですが、時として数分が重要な場合もあります。なぜモバイルアクセスがビジネスに効果があるのか、この記事の先をお読みください。

可能性についてここで考えてみましょう。携帯電話で最新の販売数や注文状況を確認するのは素晴らしいことではありませんか?おそらく、あなたは営業担当者の成績を見たいとお思いでしょう。IBM iのパフォーマンス統計をチェックするのはどうでしょう?本当にこれを自分の電話からすべて行うことができるのでしょうか?答えは「はい」であり、この種の情報を提供することはあなたが考えるよりはるかに簡単です。実際、おそらくあなたは必要な物をすでにいくつか所有しています。必要なのはデータを取得するRPGプログラム、データにアクセスするためのWebサービス、そしてそれを表示するアプリです。ビジネスに重要な指標を提供するために作成されたRPGプログラムをあなたは既に持っていると私は断言します。

それらのプログラム上にWebサービスが作成されているかどうかは分かりませんが、統合Webサービス(IWS)のようなツールはこれを実に簡単にします。さらに、IWSは既にあなたの会社のIBM iで使用できる可能性があります。ですから、RPGプログラムとWebサービスの準備が整っていれば、残る唯一の仕事は、Webサービスを使用するためのアプリを作成することです。このアプリは、あらゆるプラットフォームやデバイス上に構築できます。それは電話あるいはタブレットでも構いません。Apple、AndroidまたはWindowsのどれであるかはまったく重要ではなく、それがこのアプローチの長所です。この記事のために、iPhoneアプリを作成しましたが、そのコンセプトは他のデバイスやプラットフォームでも同じです。

私は統合開発環境(IDE)としてXCodeを使い、iPhone上にアプリを構築することにしました。たまたまIDEとしてXCodeを選択しましたが、他のもの(AppCode、Xamarinなど)も使用できます。作成したアプリは、受注システムの品目に関する情報を提供し、品目クラスをブラウズしてその詳細を見るために特定の品目をドリルダウンします。これは非常に簡単な例ですが、このプロジェクトで手始めにやってみるには申し分ありません。

このプロジェクトには、RPGプログラム、Webサービス、アプリという3つの要素があると述べましたが、RPGプログラムから説明を始めようと思います。その理由は、多分あなたにとって馴染みがあるからです。そして、それは、私がやろうとしていることの狙いを伝えるでしょう。私は3つのプロシジャーを含むRPGモジュールを作成し、それをサービスプログラムとして作成しました。異なる(しかし関連する)タスクを実行する複数のプロシジャーが必要だったので、それをプログラムではなくモジュールとして作成することにしました。なぜ3つのプロシジャーなのでしょうか? 私は、アプリの各機能のための別々のプロシジャーを持ちたかったのです。品目クラス(図1)、クラス内の品目(図2)、品目の詳細(図3)を表示するための個別のプロシジャーです。このような形でサービスプログラムを作成することで、複数のサービスの代わりに1つのWebサービスを作成することができます。もちろん、アプリで提供される各機能を代表する別々のサービスを作成することもできます。それは単に個人的な好みの問題です。

図1.品目クラス・プロシジャー

品目クラス・プロシジャーは、 ‘itemClasses’データ構造で示されるように、品目マスター表から単純に使用可能なすべての品目クラスを返します。行数も呼び出し元に返されます。このプロジェクトでは、返される品目クラスの数を50個に制限することにしました。

図2.品目プロシジャー

このプロシジャーは、品目クラスをパラメータとして受け取り、選択した品目クラスに属する品目のリストを返します。品目クラスの手続きで使用されているSQLと大変よく似ているので、データ構造にデータを取り込むSQLは表示していません。

図3.品目詳細プロシジャー

最後の3番目のプロシジャーは、品目クラスと品目番号をパラメータとして取り、品目に関する詳細を返します。
ここにはコードの一部しか示していませんが、モジュールの完全なコードは本記事の最後に掲載したリンクからダウンロードすることができます。

iPhoneアプリケーションに移る前に、IWSでWebサービスがどのように見えるか簡単に見てみたいと思います(図4)。Webサービスの作成法については既に利用可能な情報が数多くありますので触れませんが、サービスを視覚的に見ることは役に立つと思います。

図4.IWS内の品目マスターWebサービス

定義された3つのメソッド(プロシジャー)があり、それぞれがJSONオブジェクトの形でデータを返します。

RPGプログラムとWebサービスをお見せしました。では、これらをアプリでどのように使うかを見てみましょう。UIを表示することから始め、次にいくつかのコードを見て行きます。アプリを起動すると、利用可能なすべての品目クラスのリストを含む表が表示されます(図5)。これは、RPG Webサービスの ‘retrieveItemClasses’プロシジャーを使用することで行われます。この練習では、すべての品目クラスを取得しますが、本番用アプリでは、ここにいくつかのフィルタを追加しても構いません。

図5.品目クラスUI

品目クラス(この場合は品目クラス63)を選択すると、今度は ‘retrieveItems’プロシジャーを使用してクラス内のすべての品目を表示するための次のUI(図6)を表示し、再びサービスを使用します。

図6.品目UI

最後に、品目(品目番号VEL104)を再び選択すると、Webサービスを使用して品目に関する詳細を表示します(図7)。今回はどのプロシジャーが呼び出されたでしょう?予想してみてください。答えは ‘retrieveItemDetails’プロシジャーです。

図7.品目詳細UI

かなりイケてるでしょう?アプリで取るアクションごとに、RPGサービスが使用され、要求されたデータが返されます。

これを実行したコードを見る前に、アプリ作成に関する背景を少し説明します。前に述べたように、私はXCodeを使用してすべてのUIとプログラミング作成を行いました。そして、私が使用した言語はObjective Cです。Objective CはC#やCプログラミング言語に馴染みのある人にはそれらに似ているように見えます。

コードを掘り下げて見る前に、もう1つ重要なものをお見せします。それはWebサービスから返されるJSONデータです(図8)。実際のデータを見ることができれば、Objective Cコードの理解に役立つでしょう。

図8.品目クラスに対するJSONオブジェクト

JSONオブジェクトには、返される品目クラスの数と辞書オブジェクトの配列が含まれます。その意味を説明しましょう。JSONでは、配列は角括弧で囲まれ、辞書オブジェクトは波括弧で囲まれています。これは、プログラムでJSONを解析する方法を知っている必要があるので、覚えておくことが大変重要です。

品目クラスが表示されると、メソッドを呼び出してサービスを使い(図9)、結果をオブジェクトに読み込み(図10)、それらを表形式で表示します。各部分が何をしているのかを説明できるように、すべてのメソッドを示し、それを論理的な「ステップ」に分解します。

まず、Webサービスから返されるすべての情報を保持する配列を定義して初期化します(図9、ステップ1)。次に、Webサービスの呼び出しを行うのに必要なすべての構成の設定を行います(図9、ステップ2)。IWSから取得したURLを構築し、サービスがHTTPヘッダー中にJSONを返す予定であることを指定し、HTTPメソッドとして「GET」を使用していることを示します。ここで、 ‘NSURLSessionDataTask’を使用してWebサービスの呼び出しを開始します(図9、ステップ2)。これを実行すると、サーバーから応答を受け取ります。要求にエラーがあった場合も同様です。すべてがうまく行ったなら、サービスから返されたJSONデータを辞書オブジェクトにロードします(図9、ステップ4)。この辞書オブジェクトにはUIで使用するデータを準備できます。

ですから、前に示したJSONでは、品目クラス(’itemClass’)と品目クラス記述(’itemClassDesc’)を含む辞書オブジェクトを持つ ‘itemClasses’という名前の配列を定義しています。目的は、’itemClasses’配列からすべての品目クラスとそれに対応する記述を抽出することです。

配列をループしてすべての辞書オブジェクト要素を ‘ItemClassInfo’オブジェクトにロードします。最後に、’ItemClassInfo’オブジェクトを’_itemClasses’配列にロードします。その理由は、UI上にデータを提示しているクラスに返されているものが、まさにこの配列だからです(図9、ステップ5)。

図9.downloadItemClassesメソッド

このメソッドは、Webサービスの使用が完了したときに呼び出されます。パラメータとして配列(品目クラス配列)を受け取り、UIにロードします。サーバーに接続する際に問題が発生すると、ユーザーに通知するための警告が表示されます。これですべてです!これでIBM iからデータを引き出すアプリができました。品目と品目の詳細を表示する他の方法は、品目クラス・メソッドとほぼ同じで、ここには示されていませんが、ダウンロードすることができます(IBM i コードiPhoneコード)。

この記事では、RPGプログラム、Webサービス、およびデータを表示するためのアプリを使用して、IBM iからiPhoneにデータを配信する方法を示しました。私が作成したアプリはかなり簡単なものですが、アプリを作動させるのがいかに容易であるか実証しています。既に皆さんは自分自身のいくつかのアプリのアイデアをお持ちでしょう!

 

 

 

 


この記事のあとにはこちらの記事もおススメです。

メールマガジン登録

注目キーワード

フリーワード検索

お探しの情報に関する単語を入力してください。

資料ダウンロード

iCafeではIBM iに関するさまざまな資料を掲載しています。お探しの資料をぜひさがしてみてくださいね。

アクセスランキング