2012-10-24 59 views
1

我在Oracle Apex中編寫了一些代碼,我不是來自開發背景,所以請原諒我的錯誤代碼。我動態生成表單,並且當用戶更改特定表單元素的值時,我想設置一個隱藏的頁面項目。下面是我使用的代碼:如何使用Javascript來設置頁面元素的值從APEX_ITEM

select APEX_ITEM.HIDDEN(2,base_data_seq_nbr)||APEX_ITEM.HIDDEN(6,case when substr(description,0,1)= chr(49838) then substr(description,-(length(description)-1)) else description end)||APEX_ITEM.HIDDEN(7,case when substr(description,0,1)= chr(49838) then 1 else 0 end)||APEX_ITEM.HIDDEN(9, 
       data_select(replace(replace(trim(substr(field_name,-(length(field_name)-instr(field_name,',',1)))),'BSBR',''),'C','L'), substr(field_name,0,instr(field_name,',',1)-1), :P721_XCASE,:P721_XRETSTAT,:P721_XID,:P721_XCUSNUM,:P721_DB_ID))||case when substr(description,0,1)= chr(49838) 
     then '<img src="/i/themes/theme_2/images/required.gif" alt="Value Required" alt="Value Required" />' 
     else null 
     end as req_ind, 
    case when substr(description,0,1)= chr(49838) 
     then substr(description,-(length(description)-1)) 
     else description 
     end as description, 
    APEX_ITEM.DATE_POPUP(1,rownum, 
       to_date(data_select(replace(replace(trim(substr(field_name,-(length(field_name)-instr(field_name,',',1)))),'BSBR',''),'C','L'), substr(field_name,0,instr(field_name,',',1)-1), :P721_XCASE,:P721_XRETSTAT,:P721_XID,:P721_XCUSNUM,:P721_DB_ID),'MM/DD/YYYY'),'MM/DD/YYYY',10,10,'onkeyup="javascript:FormatDate(this);"' ||case when instr(substr(field_name,1,4),'DOB,',1)>0 then ' onchange="javascript:$s(''P721_DOB_RBD'',this);"' end,'datepicker_'||rownum) 
     end 
    end as field_format 
from bcvsown.bcvs_base_data 
    inner join v_lookup v 
    on v.value_seq = stmt_type 
left join (select * from apex_collections where collection_name = 'ERR_COLLECTION') ac 
    on base_data_seq_nbr=ac.n001 
where caseno = :P721_XCASE 
and v.value_cd = case when :P721_XDE_SEQ > 1 then decode(:P721_XIS_BSRS,'true','BSRS','BET') else v.value_cd end 
and db_id = :P721_DB_ID 
and v.type_cd = 'STMT_TYPE' 
order by base_data_seq_nbr 

頁面呈現與沒有錯誤,頁面的源代碼預期顯示僅適用於我的目標爲元素的JavaScript設置(onchange="javascript:$s(''P721_DOB_RBD'',this);")。但是,當我更改元素時,似乎沒有設置隱藏頁面項目的值(P721_DOB_RBD)

回答

3

沒有冒犯,那標記是相當可怕的。花時間正確地格式化和縮進你的代碼!

至於你的問題,this is the Oracle apex javascript apis reference for $s

$s(pNd, pValue, pDisplayValue, pSuppressChangeEvent) 

給出一個DOM節點或字符串ID(PND),這個函數設置 快捷應用項目價值考慮的項目類型。 pDisplayValue是可選的。如果用於屬性「輸入字段」=「不可輸入,顯示顯示值 和存儲返回值」的「彈出式LOV」 類型的頁面項目,則用於設置「輸入欄」。 pValue的值 存儲在隱藏的返回字段中。 pSuppressChangeEvent參數是可選的。如果傳遞FALSE或 未傳遞此參數值,則會導致 正在設置的項目發生更改事件觸發。通過TRUE以防止更改事件發生 正在設置的項目。

參數

pNd (DOM Node | string ID) 
pValue (String | Array) 
pDisplayValue(String) 
pSuppressChangeEvent(Boolean) 

薪火this將無法​​正常工作。當你想傳遞一個值時,它會傳遞這個對象。由於您創建的APEX_ITEM.DATE_POPUP會生成input物品,因此您需要在change事件發生時物品的value。您可以通過使用$vref

$v(pNd) 

給出一個DOM節點或字符串ID(PND)做到這一點,該函數將返回相同的格式的快捷應用項目的價值 因爲這將是 發佈。

參數

pNd (DOM Node | string ID) 

那麼,試着用這樣的:

(onchange="javascript:$s(''P721_DOB_RBD'',$v(this));") 
+0

你是我的英雄! – user1769597

0

年後 - 要格式化的代碼,使用的SQLDeveloper代碼複製到的SQLDeveloper SQL工作表, 點擊鼠標右鍵,選擇格式。

SELECT APEX_ITEM.HIDDEN(2,base_data_seq_nbr) 
    ||APEX_ITEM.HIDDEN(6, 
    CASE 
    WHEN SUBSTR(description,0,1)= chr(49838) 
    THEN SUBSTR(description,-(LENGTH(description)-1)) 
    ELSE description 
    END) 
    ||APEX_ITEM.HIDDEN(7, 
    CASE 
    WHEN SUBSTR(description,0,1)= chr(49838) 
    THEN 1 
    ELSE 0 
    END) 
    ||APEX_ITEM.HIDDEN(9, data_select(REPLACE(REPLACE(trim(SUBSTR(field_name,-(LENGTH(field_name)-instr(field_name,',',1)))),'BSBR',''),'C','L'), SUBSTR(field_name,0,instr(field_name,',',1)-1), :P721_XCASE,:P721_XRETSTAT,:P721_XID,:P721_XCUSNUM,:P721_DB_ID)) 
    || 
    CASE 
    WHEN SUBSTR(description,0,1)= chr(49838) 
    THEN '<img src="/i/themes/theme_2/images/required.gif" alt="Value Required" alt="Value Required" />' 
    ELSE NULL 
    END AS req_ind, 
    CASE 
    WHEN SUBSTR(description,0,1)= chr(49838) 
    THEN SUBSTR(description,-(LENGTH(description)-1)) 
    ELSE description 
    END AS description, 
    APEX_ITEM.DATE_POPUP(1,rownum, to_date(data_select(REPLACE(REPLACE(trim(SUBSTR(field_name,-(LENGTH(field_name)-instr(field_name,',',1)))),'BSBR',''),'C','L'), SUBSTR(field_name,0,instr(field_name,',',1)-1), :P721_XCASE,:P721_XRETSTAT,:P721_XID,:P721_XCUSNUM,:P721_DB_ID),'MM/DD/YYYY'),'MM/DD/YYYY',10,10,'onkeyup="javascript:FormatDate(this);"' 
    || 
    CASE 
    WHEN instr(SUBSTR(field_name,1,4),'DOB,',1)>0 
    THEN ' onchange="javascript:$s(''P721_DOB_RBD'',this);"' 
    END,'datepicker_' 
    ||rownum) 
END 
END AS field_format 
FROM bcvsown.bcvs_base_data 
INNER JOIN v_lookup v 
ON v.value_seq = stmt_type 
LEFT JOIN 
    (SELECT * FROM apex_collections WHERE collection_name = 'ERR_COLLECTION' 
) ac 
ON base_data_seq_nbr=ac.n001 
WHERE caseno  = :P721_XCASE 
AND v.value_cd  = 
    CASE 
    WHEN :P721_XDE_SEQ > 1 
    THEN DECODE(:P721_XIS_BSRS,'true','BSRS','BET') 
    ELSE v.value_cd 
    END 
AND db_id  = :P721_DB_ID 
AND v.type_cd = 'STMT_TYPE' 
ORDER BY base_data_seq_nbr 
0

如果你想在Javascript中設置值的應用項目,除了一個之外沒有辦法。您可以在JavaScript中使用設置頁面級別的項目:

$s(':P12_Item','value'); 

可以使用獲得的頁面級項目值:

$v('page item') 

您可以開始使用

&APP_ITEM. 

在JS應用項目值但是您不能在Javascript中設置值應用程序項目。您必須創建一個將設置應用程序項值並從Javascript apex Ajax調用此過程的進程。

<script> 
var get = new htmldb_Get(null,&APP_ID.,'APPLICATION_PROCESS=SET_APS_CASEIDS',0); 

get.addParam('x01',$caseIds); 

gReturn = get.get(); 
if (gReturn) { 
window.location='f?p=&APP_ID.:66:&SESSION.::NO:66'; 
} 
</script> 

在我的情況下,我使用Ajax設置應用程序項目中的值,並重定向到其他頁面。該頁面將使用應用程序項目值。

應用程序代碼。

首先從共享組件創建應用程序項目。

Name: APS_CASEIDS 
Session State protection:unrestricted 

從共享組件創建應用程序進程。

Name:SET_APS_CASEIDS (Name should be match in ajax call). 
Process point:On Demand:run this application process when requested by process. 
Process Text: 


BEGIN 

owa_util.mime_header('text/html', FALSE); 
htp.p('Cache-Control: no-cache'); 
htp.p('Pragma: no-cache'); 
owa_util.http_header_close; 

    APEX_UTIL.SET_SESSION_STATE('APS_CASEIDS',APEX_APPLICATION.G_X01); 
END; 
相關問題