Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20190212 apex demo

2,290 views

Published on

Oracle APEX を利用したデモ事例紹介

Published in: Software
  • Be the first to comment

20190212 apex demo

  1. 1. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | Oracle Application Express による デモ作成事例のご紹介 日本オラクル株式会社 2019年2月12日 宇多津 真彦
  2. 2. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | Program Agenda アプリケーション作成の流れ 某自動車販売会社向けデモアプリのご紹介 その他のデモアプリ作成で対処したこと 最後に: 潜在的なAPEX開発者? 1 2 3 2 4
  3. 3. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | アプリケーション作成の流れ 3
  4. 4. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | アプリケーション アプリケーション作成の流れ 1. アプリケーション(の枠組み)を作成 2. アプリケーション内で共通に利用するものを「共有コンポーネント」で作成 1. 認証 (アプリケーションへのログイン) 2. 認可 (アクセス制限) 3. LOV (List of Value: プルダウンリスト等で利用) 3. アプリケーション機能をページ単位で作成 1. ウィザードでページを作成する 2. ウィザードでできたページを調整 4. アプリケーション全体を「共有コンポーネント」の機能で整える 1. ユーザー・インターフェース属性の調整 2. ナビゲーション・メニューに画面を登録 3. ページおよびメニュー項目毎に、必要に応じた認可設定 アプリケーション 共有コンポーネント 認証 LOV 認可 ユーザー・ インターフェース 属性 ナビゲーション・ メニュー ページ ページ ページ 4
  5. 5. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • マスター表などデータが削除されると困るテーブルは 実削除をおこなわないようにする(論理削除) また、データを変更を管理するカラムを持たせる • APEX側のロジックはAPEX側で実現 – DBのトリガーは使わない – ボタン押下時に実行される「プロセス」はPL/SQLで記述 • 各テーブルは基本的にIDを持ち、IDを主キーとする また、IDと関連したSEQUENCEを作成する – 主キーがIDでないものもある (ユーザ表の主キーとしてE-Mailアドレスを利用する、など) • LOVは基本的に動的LOV (SELECT文)で定義 – マスター表から名称を取得するLOVはあらかじめ作成する – コード用のテーブルを用意 – 年、年月などは日付管理用のテーブルを用意するのではなく、 表関数、パイプライン・テーブル・ファンクションを利用 5 個人的に気をつけていること CREATE OR REPLACE PACKAGE common AS TYPE yyyymm_type IS RECORD ( yyyymm_str VARCHAR2(7), -- 'YYYY/MM' yyyymmdd_dt DATE ); TYPE rec_yyyymm IS TABLE OF yyyymm_type; FUNCTION ret_yyyymm ( dt_in IN DATE, cnt_in IN NUMBER DEFAULT 12 )RETURN rec_yyyymm PIPELINED; END common; / CREATE OR REPLACE PACKAGE BODY common AS FUNCTION ret_yyyymm ( dt_in IN DATE, cnt_in IN NUMBER DEFAULT 12 )RETURN rec_yyyymm PIPELINED AS rec yyyymm_type; BEGIN FOR i IN 1..cnt_in LOOP rec.yyyymmdd_dt := ADD_MONTHS(dt_in, i); rec.yyyymm_str := TO_CHAR(rec.yyyymmdd_dt,'YYYY/MM'); PIPE ROW(rec); END LOOP; RETURN; EXCEPTION WHEN OTHERS THEN RAISE; END ret_yyyymm; END common; / select yyyymm_str d, TO_CHAR(TRUNC(yyyymmdd_dt,'MM'),'YYYY/MM/DD') r from table (common.ret_yyyymm(CURRENT_DATE, 3)) order by 1 ; D R ------- ---------- 2019/03 2019/03/01 2019/04 2019/04/01 2019/05 2019/05/01 パイプライン・テーブル・ ファンクションの例 表関数の例
  6. 6. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 某自動車販売会社向けデモアプリのご紹介 6
  7. 7. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 某自動車販売会社向けデモ 7 Excelの在庫管理 + FAXでの在庫リストのやりとりをWeb化したい APEX • 提案内容 – 在庫リストのDB化 およびWeb化 (Oracle Database Cloud Service利用) – 店舗スタッフからiPhoneからの予約 (APEXによるアプリケーション) • 現状の課題 – 在庫として持っている販売用の車を「提案する為に一時予約する」仕組 みをWeb化したい – 1-2時間間隔で、Excelで管理している在庫リストを店舗にFAX – 随時店舗の店長から、在庫車種の予約に関する電話が本社に – やりとりにかかるコストが馬鹿にならない 在庫リスト (Excel) 本社 店舗A 店舗B 在庫リスト (紙) 在庫リスト (紙) 電話で車種を予約 電話で車種を予約 定期的に在庫リストをFAX (xx店xxさん在庫No.x番のセダン予約中) Database Cloud Service 在庫 リスト 店舗A 店舗B 本社 メンテナンス 予約・成約 受注状況 確認 在庫リスト (Excel) APEX アプリ
  8. 8. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | • 店舗の販売員 – 認証、パスワード変更 – 在庫表のiPhoneからのアクセス – 在庫のリスト表示、車種による絞り込み – 排他制御 • 予約、予約キャンセル、成約 • 本部社員 – 在庫表のメンテナンス – 各種マスターのメンテナンス – 在庫の予約状況の可視化 • 予約、予約キャンセル、成約等のイベントのログ を取得 8 必要な機能
  9. 9. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | おおまかなテーブル構成 9 イベントの種類 • 予約時間切れ • 予約 • 予約キャンセル • 成約 • 成約キャンセル マスター表のデータは 履歴を管理するカラムを持つ (実削除をおこなわない) 現在利用しているExcel の情報を元にテーブルを 作成 アプリケーション用に追加
  10. 10. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 参考)モバイル環境用のレポート • ユニバーサル・テーマで最適化された レポート – リストビュー(今回のデモで使用) – 列切替えレポート – リフローレポート • 最適化されていないレポート – 対話モード・レポート – 対話グリッド 10 参考) Oracle® Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド リリース18.1 6.7 モバイル・デバイス用のアプリケーションの作成
  11. 11. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | iPhone からのアクセス(1) 11 車種の絞り込み
  12. 12. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | iPhone からのアクセス(2) 12 2時間予約 予約中 成約済み 別の担当者からはボダンは表示されない
  13. 13. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | ボタンの表示・非表示 13 ボタンの Server-side Conditionで 不要なボタンを非表示 「成約キャンセル」ボタンを表示する条件
  14. 14. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 予約の解除(timeout) 14 誰かが画面にアクセスした時に、時間切れの予約は解除
  15. 15. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | iPhoneからのアクセスとPCからのアクセスを振り分ける 15 owa_util.get_cgi_env('HTTP_USER_AGENT') を使い、アクセスしてきた端末を判断 ←Page 6 (iPhone用画面) 1. ログイン 2. Page 1 (ホーム) へ 3. Page 1 で端末の種類を判断 1. 端末が iPhone の場合は Page 6 へ 2. そうでなければ Page 7 へ ←Page 7
  16. 16. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | その他のデモアプリ作成で対処したこと Oracle Database が提供する機能を利用 16
  17. 17. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | デモ・アプリケーション「商品のWebカタログ」 大量の画像ファイルのアップロード(1) • やりたいこと – 商品情報として画像(jpegファイル)を扱う – APEXで扱うテーブルにおける画像カラム属性はBLOB • 懸念点 – 商品点数は500以上 • 個別の商品メンテナンス画面でいちいちアップロードするのは手間 – メンテナンス担当者はLinuxのスキルも、Oracle Databaseの スキルも無い • LinuxのShellによるオペレーションは難しい • SQL*Loader によるローディング作業も難しい 17 APEXでメンテナンス用 画面を作成 ※ SQL*LoaderでBLOBカラムへのデータ・ローディングは可能
  18. 18. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | デモ・アプリケーション「商品のWebカタログ」 • OS上で特定のディレクトリのファイル 情報の確認 – 外部表を利用 – 外部表を直接APEXから利用すると動作が 不安定だったため、削除用ページの作成用 にテーブルを用意 • OS上で特定のディレクトリ下へZipファ イルの内容を解凍 – PL/SQLから呼び出せる、C言語による 外部プロシージャ作成 18 大量の画像ファイルのアップロード(2) ← PL/SQL ← PL/SQL ← 削除用ページ+ PL/SQL ← ??? OS上のファイル情報
  19. 19. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 19
  20. 20. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 20
  21. 21. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 21
  22. 22. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 接続確認「SVF Cloudとの連携」 22 SVF Cloud: ウイングアーク1st株式会社様の提供するクラウドの帳票出力環境
  23. 23. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 接続確認「SVF Cloudとの連携」 • SVF Cloud との認証において、 JWT(Json Web Token) Bearer Token を利用 • JWT Bearer Token では RSA SHA256 を使用した署名が必要 – RSA SHA256 はOracle Database機能では 提供していないが Java は利用可能 – Java でRSA SHA256を使用した署名の 仕組みを作成し、Oracle Database へ Javaストアド・プロシージャとして登録 ※ SVF Cloudとの連携は提供される Javaのサンプルを元にPL/SQLで 記述するのみ 23 JWTベアラートークンの作成と利用の為に
  24. 24. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 24
  25. 25. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 25
  26. 26. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 26
  27. 27. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 最後に: 潜在的なAPEX開発者? Oracle Forms / E-Business Suite の元開発者 27
  28. 28. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | デモの「引継ぎ」で考えたこと • Oracle Forms / Oracle Designer (ERモデリング・ツール)利用経験者 • E-Business Suiteのアドオン開発経験者 であれば、APEXの概要理解は「すぐ」でした。 • 身近な上記経験者を誘ってみてください。 – データ・モデリングができる – データ・モデルを元に画面を作成できる – (40代 ー 60 代くらい??) 28
  29. 29. Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 29

×