$Web Sel* example: Difference between revisions
m (Created page with "This page demonstrates some of the concepts of the $Web_Sel* functions. The application is a simple form which lets the user select a day of the week. To show how this can exploi...") |
m (1 revision) |
(No difference)
|
Latest revision as of 21:53, 18 October 2012
This page demonstrates some of the concepts of the $Web_Sel* functions.
The application is a simple form which lets the user select a day of
the week.
To show how this can exploit metadata, assume that you have a Model 204
file with the days of the week in several languages, and that you have saved
the user's language in a cookie named LANG
.
Note that by giving values of DN0
, DN1
, etc., the code does not
need to deal with the actual day names (the option descriptions).
Assume you have records like the following:
IN META STORE RECORD TYPE = LANG LANG = ENGLISH END STORE IN META STORE RECORD TYPE = DAY LANG = ENGLISH DAY = Sunday END STORE IN META STORE RECORD TYPE = DAY LANG = ENGLISH DAY = Monday END STORE ...
$Web_Save_Sel is used to save one global select element for each language. You can do this when you start the online, but a later example shows how a language can be dynamically added. Assume the following procedure:
PROCEDURE GEN_DAYS SUBROUTINE GEN_DAYS(%LANG IS STRING LEN 20, - %NDAY IS FLOAT OUTPUT)ut) %NDAY = 0 %L1 FLOAT %L2 FLOAT %X FLOAT %L1 = $LISTNEW %L2 = $LISTNEW IN META FR WHERE TYPE=DAY AND LANG=%LANG %X = $LISTADD(%L1, 'DAY' WITH %NDAY) %X = $LISTADD(%L2, DAY) %NDAY = %NDAY + 1 END FOR IF %NDAY THEN %x = $WEB_SAVE_SEL('DAYS.' WITH %LANG, - DEL %L1, %L2) END IF END SUBROUTINE END PROC
You can use this procedure at the start of the online:
//CCAIN ... ... BEGIN IN META FR WHERE TYPE=LANG CALL GEN_DAYS(LANG, %RC) END FOR INCLUDE GEN_DAYS END
You can use the global select elements to create a drop-down list in an
HTML form.
$Web_Selp is used with the same second argument (the parameter
name, DN
) as the name=
attribute of the select
element; this is
how you can easily "pre-select" the same day chosen before when the
form is redisplayed to the user:
B
%lang string len 20
%rc float
%lang = $web_cookie_parm('LANG')
print '<form method=post action="' with -
$web_hdr_parm('URL') with'">'
print 'Select day: <select name=DN>
'
%RC = $web_selp('DAYS.' with %lang, 'DN')
print '<input type=submit>
'
print '</form>'
End
This approach works fine, except that if a language is added while the online is running, a user who acquires this language in his or her cookie will have the User Language request cancelled, because $Web_Selp will not find the desired global select element. The following approach can be used to handle this situation when the web form is built. the NOCAN option of $Web_Selp is used to see if a new language is in use:
Begin
%lang string len 20
%rc float
%lang = $web_cookie_parm('LANG')
print '<form method=post action="' with -
$web_hdr_parm('URL') with '">'
print 'Select day: <select name=DN>
'
%rc = $web_selp('DAYS.' with %lang, 'DN', -
'NOCAN')
if %rc ne 0 then
call gen_days(%lang, %rc)
%rc = $web_selp('DAYS.' with %lang, 'DN')
end if
print '<input type=submit>
'
print '</form>'
include gen_days
End
If you want to remove a language from further processing, you can call $Web_Del_Sel:
Begin %rc = $web_del_sel('DAYS.ESPERANTO') End
However, it is then possible that a "stale cookie" may be left around in a user's browser. In that case, you will want to set a default language, but if the deleted language was Romulac, and a day beyond the 7th had been selected, you might also want to force the pre-selected day to be the middle of the week. The following code contains changes that do the following:
- Set a default language (with $Web_Set_Cookie)
- Use $Web_Selp_Check to ensure that the user's form parameter DN
(which, remember, will contain the language-independent values
DN0
,DN1
, etc.) is within the range of the default language. If DN is outside that range, $Web_Sel is used so that the pre-selected day is the "hand-coded"DN3
.
B
%lang string len 20
%rc float
%lang = $web_cookie_parm('LANG')
print '<form method=post action="' with -
$web_hdr_parm('URL') with '">'
print 'Select day: <select name=DN>
'
%rc = $web_selp('DAYS.' with %lang, 'DN', -
'NOCAN')
if %rc ne 0 then
call gen_days(%lang, %rc)
if %rc ne 0 then
%lang = 'ENGLISH'
%rc = $web_set_cookie('LANG', 'ENGLISH')
end if
%rc = $web_selp_check('DAYS.' with %lang, -
'DN')
if %rc ne 0 then
%rc = $web_sel('DAYS.' with %lang, 'DN3')
else
%rc = $web_selp('DAYS.' with %lang, 'DN')
end if
end if
print '<input type=submit>
'
print '</form>'
include gen_days
End