2018年9月20日木曜日

②患者基本情報データの取得5

前回、ORCAから患者情報をとってこれたので、あとはスマホからWebAPIを送って、これと同じものを取ってこれるよう、認証情報をヘッダに書いてやればいいだけである。

認証情報は下記のプログラムを書いてみる。(g_user、g_passwdをそれぞれORCAのユーザ名、パスワードとする

  1. $http.defaults.headers.get = {
  2. 'Authorization' : 'Basic ' + window.btoa(g_user + ':' + g_passwd)
  3. };

残りのプログラミングをどう書けばいいのか分からないので、あるブログのこの記事の患者基本情報をところ、サイトサイト②を参考にして、プログラミングしてみた。

それぞれプログラミングしたのは以下の3枚である
図1:あるブログを参考にしたプログラム
図2:サイト①を参考にしたプログラム
図3:サイト②を参考にしたプログラム

どれも行ったが、いまだに認証画面が出てくるので、修正していって、うまく患者基本情報を取得していけるようにしていきたい。

【コメント】
認証のための下記のプログラムにおいて、g_userとg_passwdは変数です。文字列定数ではありません。
  1. $http.defaults.headers.get = {
  2. 'Authorization' : 'Basic ' + window.btoa(g_user + ':' + g_passwd)
  3. };
ですから前もってg_userとg_passwdにはORCAのユーザ('ormaster')とパスワードを代入しておく必要があります。
  1. g_user = 'ormaster';
  2. g_passwd = '[ormasterのパスワード]';
定数と変数の違いに注意してください。図1~3のいずれも定数と変数を混同しています(ormasterは変数ではありません)。

【AngularJSのプログラム作法】
AngilarJSでスマホアプリを開発するにはその作法に従う必要があります。
まず、URLからデータを取得する(いわゆるWebAPI)ためのサービスを作ります。その名前を'Patient'とすると次のようなプログラムになるでしょう。
  1. .service('Patient', ['$http', function($http) {
  2. this.get = function() {
  3. $http.defaults.headers.get = {
  4. 'Authorization' : 'Basic ' + window.btoa(g_user + ':' + g_passwd)
  5. };
  6. return $http.get('http://172.16.108.251:8000/api01rv2/patientgetv2?id=00001&format=json')
  7. .then(
  8. function(response) {
  9. return response.data.patientinfores.Patient_Information;
  10. },
  11. function(response) {
  12. alert('Error at Patient:' + JSON.stringify(response.data, null, 2));
  13. }
  14. );
  15. };
  16. }])
図1. サービス'Patient'

次にモデルとビューの懸け橋となるコントローラを作ります。その名前を'PatientController'とすると、プログラムは次のようになるでしょう。
  1. .controller('PatientController', ['$scope', 'Patient', function($scope, Patient) {
  2. var that = this;
  3.  
  4. /* 患者情報の読み込み */
  5. Patient.get()
  6. .then(
  7. function(patient){
  8. that.Patient_ID = patient.Patient_ID;
  9. that.WholeName = patient.WholeName;
  10. that.BirthDate = patient.BirthDate;
  11. that.Sex = patient.Sex == '1' ? 'M' : 'F';
  12. }
  13. );
  14. }])
図2. コントローラ'PatientController'

作成したPatientサービスをコントローラに注入して(1行目)、そのget()メソッドを使って患者情報を取得します(5行目)。取得した患者情報(患者ID、氏名、生年月日、性別)をコントローラのプロパティに設定し、ビュー(demographics.html)から参照できるようにします。
ビューではコントローラを経由して患者情報を出力します。
  1. <ons-page ng-controller="PatientController as patient">
  2. <ons-toolbar>
  3. <div class="center">Demographics</div>
  4. </ons-toolbar>
  5. <ons-list>
  6. <ons-list-header>基本情報</ons-list-header>
  7. <ons-list-item>
  8. <ons-col width="20%">患者ID</ons-col>
  9. <ons-col>{{ patient.Patient_ID }}</ons-col>
  10. </ons-list-item>
  11. <ons-list-item>
  12. <ons-col width="20%">氏名</ons-col>
  13. <ons-col>{{ patient.WholeName }}</ons-col>
  14. </ons-list-item>
  15. </ons-list>
  16. </ons-page>
図3. ビュー(demographics.html)

ここでは、1行目でPatientControllerをpatientという変数名で参照して、9行目で患者IDをpatient.Patient_IDで、13行目で患者名をpatient.WholeNameを使って出力しています。

このように、AngularJSではデータを格納するモデルをサービスで、ビューをHTMLで、そして両者の橋渡しをコントローラを使って行います。このことを念頭に置いてプログラムの設計を行う必要があります。

0 件のコメント:

コメントを投稿

レーダーチャートの表示2

前回 レーダーチャートの表示を行うことが出来たので、今回は実際の値を代入したグラフの描画を試みる。 .controller('RaderChartController', ['$scope', 'Countries', funct...