2016/09/25

1.他のテーブルとのマッチングのやりかた(1列文字列から1行テーブルへ変換)

目次に戻る
APEXでのCHECKBOX(チェックボックス)の取扱

1.他のテーブル(名称マスター)とのマッチングのやりかた
 (1列文字列から1行テーブルへ変換、その後マッチングしてまた1行文字列に戻す)


 Goal ‐ 以下のように、チェックボックスの返り値とマスターをマッチングをする
 #SQLサンプル
  COLUMN FOODS を FUNCTION T_GET_NAME に渡して、名称リストを取得
select ID
, USERNAME
, FOODS
, T_GET_NAME(FOODS) FOODS_NAME
from T_QA_SAMPLE;
ID USERNAME FOODS FOODS_NAME
--------------------------------------------------------------------------
41 APEX 1:2:4:5:6 Fried Rice, Hamburger, Ramen, Steak, Sushi
1 Toshi 1:2:5:6 Fried Rice, Ramen, Steak, Sushi
21 TEST 1:3:4 Hamburger, Pasta, Sushi
22 TEST2 5:6 Fried Rice, Steak

 #FUNCTION T_GET_NAME のSQL
create or replace function "T_GET_NAME"
(p_text in VARCHAR2)
return VARCHAR2
is
l_codetext varchar2(2000);
BEGIN
SELECT LISTAGG(L.LOOKUP_NAME,', ') WITHIN GROUP (order by null) codetext
 INTO l_codetext
FROM
--- INPUT された p_text を1列テーブルに変換し、テーブルSとする
(WITH TEMP AS (SELECT p_text IN_TEXT FROM dual)
SELECT trim(regexp_substr(IN_TEXT, '[^:]+', 1, LEVEL)) ID_LIST
FROM TEMP
CONNECT BY instr(IN_TEXT, ':', 1, LEVEL - 1) > 0) S
--- 名称マスタ を テーブルL とする
, T_LOOKUPS L
WHERE S.ID_LIST = L.G_SEQ;
return l_codetext;
END;
view raw T_GET_NAME.sql hosted with ❤ by GitHub

 
 #解説 - コロン(:)区切りのテキストを1行テーブルへ変換するSQL
SELECT trim(regexp_substr(<文字列>, '[^<区切文字>]+', 1, LEVEL)) ID_LIST
FROM DUAL
CONNECT BY instr(<文字列>, <区切文字>, 1, LEVEL - 1) > 0;
-- この場合は、文字列が 1:2:5 で、区切り文字が:
SELECT trim(regexp_substr('1:2:5', '[^:]+', 1, LEVEL)) ID_LIST
FROM DUAL
CONNECT BY instr('1:2:5', ':', 1, LEVEL - 1) > 0;
ID_LIST
--------
1
2
5






2016/09/24

CHECKBOX(チェックボックス)のハンドリング - 目次 - APEX


APEX上でのCHECKBOX(チェックボックス)のハンドリング方法


Table of contents
 
1.他のテーブルとのマッチングのやりかた

  (1列文字列から1行テーブルへ変換)
 2.検索する/フィルターをかける


Background

 APEXでチェックボックスを使う、コロン(:)区切りの文字列で値が帰ってくる。
 それをどう扱うのか?というメモ...

 (例)




2016/09/23

インタラクティブレポートのセルをクリック時にポップアップを立ち上げる - APEX

  • Goal
    インタラクティブレポートにおいて、セルのクリック時にポップアップ画面を立ち上げる。

    (例) Name をクリックしたら詳細をポップアップで表示する。




  • How
    1. インタラクティブレポート → レポート属性 → 列属性 → 列リンク

      ターゲット = URL
      URL に Javascript を貼り付ける
      &APP_ID.に違うAPP_ID を指定して飛ばす事もできる

    -- 追記 IEのエラー回避 void(0); を最後つける
    javascript:apex.navigation.popup({"url":'f?p=&APP_ID.:7<ページ番号>:&SESSION.::&DEBUG.:::',"name":"winLov","width":350,"height":400});void(0);
    -- 同一アプリ無いのページ7をPOPUPさせる
    -- 普通バージョン
    javascript:window.open('f?p=&APP_ID.:7<ページ番号>:&SESSION.::&DEBUG.:::','popup1','width=640,height=480,top=0,left=0');
    -- oracle のAPIを使うバージョン
    javascript:apex.navigation.popup({"url":'f?p=&APP_ID.:7<ページ番号>:&SESSION.::&DEBUG.:::',"name":"winLov","width":350,"height":400});
    --
    -- 変数も渡せる :これは、アプリ944ページ1にITEMを渡すサンプル
    javascript:apex.navigation.popup({"url":'f?p=944:1:&SESSION.::&DEBUG.::P1_ITEM:#ITEM#',"name":"winLov","width":700,"height":200});




    2. (追記)IEだと、POPUP表示時に、元の画面の情報が消えるエラーが発生!
      「void(0);」を追記すると解消する



2016/09/21

リージョンタイトルの書式設定 - APEX

  • Goal
    リージョンのタイトルの書式を変更する。文字を大きくしたり、色を変更する。

    (To be 例) USER_ID を追加し、文字を大きくして、太字+色を赤色に変更した例
     


  • As is

    変更前はこんな感じ



  • How
    1. リージョン定義 → タイトル に HTMLを埋め込む。変数も追加できる。

    サンプル
    Change password for <span style="color: red; font-size: large;"><b>&amp;APP_USER.</b></span>


    &APP_USER. はログインユーザーIDを意味する変数