今天遇到一個需求:在做頁面輸入驗證的時候,如果用戶沒有輸入某個項,那么這個項顯示為紅色,一直沒頭緒,也找peoplebook,發現field有一個style的方法,后來又在谷歌上找,終於找到了方法:
Just to check, did you include custom stylesheet in PSSTYLEDEF? That is a key step in order to use any custom style sheet in PeopleCode or anywhere in app designer. This is what I did (a similar requirement)
1) Define custom stylesheet, background #94CFC9
2) Include the custom stylesheet in PSSTYLEDEF (our default style for Portal)
3) Loop in peoplecode to find difference(as you did) and that's it.
代碼貼圖(row的saveedit級別):
/*判斷補簽的時間段是否符合補簽規則*/
Local datetime &PUNCH_DTTM_1;
Local datetime &PUNCH_DTTM_2;
Local datetime &PUNCH_DTTM_3;
Local datetime &PUNCH_DTTM_4;
Local string &KL_RPCH_FST_ST_WRK;
Local string &KL_RPCH_FST_OF_WRK;
Local string &KL_RPCH_SND_ST_WRK;
Local string &KL_RPCH_SND_OF_WRK;
Component string &SHOW_ERROR_FLAG;
&KL_RPCH_FST_ST_WRK_FLD = GetRow().GetRecord(Record.KL_RPNH_CRD_TBL).GetField(Field.KL_RPCH_FST_ST_WRK);
&KL_RPCH_FST_OF_WRK_FLD = GetRow().GetRecord(Record.KL_RPNH_CRD_TBL).GetField(Field.KL_RPCH_FST_OF_WRK);
&KL_RPCH_SND_ST_WRK_FLD = GetRow().GetRecord(Record.KL_RPNH_CRD_TBL).GetField(Field.KL_RPCH_SND_ST_WRK);
&KL_RPCH_SND_OF_WRK_FLD = GetRow().GetRecord(Record.KL_RPNH_CRD_TBL).GetField(Field.KL_RPCH_SND_OF_WRK);
&EMPLID = GetRow().KL_RPNH_CRD_TBL.EMPLID.Value;
&EFFDT = GetRow().KL_RPNH_CRD_TBL.KL_ATTENDANCE_DT.Value;
&KL_RPCH_FST_ST_WRK = GetRow().KL_RPNH_CRD_TBL.KL_RPCH_FST_ST_WRK.Value;
&KL_RPCH_FST_OF_WRK = GetRow().KL_RPNH_CRD_TBL.KL_RPCH_FST_OF_WRK.Value;
&KL_RPCH_SND_ST_WRK = GetRow().KL_RPNH_CRD_TBL.KL_RPCH_SND_ST_WRK.Value;
&KL_RPCH_SND_OF_WRK = GetRow().KL_RPNH_CRD_TBL.KL_RPCH_SND_OF_WRK.Value;
SQLExec("SELECT A.PUNCH_DTTM_1,A.PUNCH_DTTM_2,A.PUNCH_DTTM_3,A.PUNCH_DTTM_4 FROM PS_KL_ORGL_PNH_TBL A WHERE A.EMPLID = :1 AND A.KL_ATTENDANCE_DT = :2", &EMPLID, &EFFDT, &PUNCH_DTTM_1, &PUNCH_DTTM_2, &PUNCH_DTTM_3, &PUNCH_DTTM_4);
&KL_RPCH_FST_ST_WRK_FLD.Style = "PSEDITBOX";
&KL_RPCH_FST_OF_WRK_FLD.Style = "PSEDITBOX";
&KL_RPCH_SND_ST_WRK_FLD.Style = "PSEDITBOX";
&KL_RPCH_SND_OF_WRK_FLD.Style = "PSEDITBOX";
/*對比取補簽時間段*/
If &KL_RPCH_FST_ST_WRK = "Y" And
All(&PUNCH_DTTM_1) Then
&KL_RPCH_FST_ST_WRK_FLD.Style = "PSERROR"; /*對錯誤的,顯示紅色*/
&SHOW_ERROR_FLAG = "Y"
End-If;
If &KL_RPCH_FST_OF_WRK = "Y" And
All(&PUNCH_DTTM_2) Then
&KL_RPCH_FST_OF_WRK_FLD.Style = "PSERROR";
&SHOW_ERROR_FLAG = "Y"
End-If;
If &KL_RPCH_SND_ST_WRK = "Y" And
All(&PUNCH_DTTM_3) Then
&KL_RPCH_SND_ST_WRK_FLD.Style = "PSERROR";
&SHOW_ERROR_FLAG = "Y"
End-If;
If &KL_RPCH_SND_OF_WRK = "Y" And
All(&PUNCH_DTTM_4) Then
&KL_RPCH_SND_OF_WRK_FLD.Style = "PSERROR";
&SHOW_ERROR_FLAG = "Y"
End-If;
理解:首先這里定義的 &KL_RPCH_SND_OF_WRK_FLD.Style = "PSERROR",它是根據page的stylesheet來的,一般來說,我們建好page之后,page的style是默認的,那個這個默認的stylesheet名稱叫:PSSTYLEDEF,在ADD打開它之后,發現里面有很多樣式定義,其中就有“PSERROR ”,“PSEDITBOX”的樣式定義。 peoplebook:http://docs.oracle.com/cd/E13292_01/pt849pbr0/eng/psbooks/tapd/chapter.htm?File=tapd/htm/tapd17.htm