The Russian Electronic Developer Magazine | |
Русский электронный журнал разработчика | |
%{ ****************************************************************************** Define Section: Use this section to define variables (e.g. DATABASE) used in your macro file. At a minimum, the DATABASE variable must be defined. ****************************************************************************** %} %DEFINE{ DTW_PRINT_HEADER="NO" DTW_SET_TOTAL_ROWS="YES" DATABASE="INFO" LOGIN="LOGIN" PASSWORD="PASSWORD" SHOWSQL="YES" RETURN_CODE="" TOTAL="0" %} %{ ****************************************************************************** Function query: ****************************************************************************** %} %FUNCTION(DTW_SQL) query_article() { select Word, Description from BES where Word = ucase('$(Word)') or Word like ucase('%$(Word)%') order by Word %report{ %ROW{ <p align="JUSTIFY"> $(ROW_NUM) <b>- $(V1)</b> <br> $(V2) </p> %} %} %message{ +100: "<i>Увы. На сервере нет информации удовлетворяющей ваш запрос</i>": continue %} %} %FUNCTION(DTW_SQL) query_count() { select count(*) from BES %report{ @DTW_ASSIGN(TOTAL,V1) %} %} %{ ****************************************** FRAME SECTION ****************************************** %} %HTML(FRAME){ Content-type: text/html; charset=ibm866 <Html> <FrameSet Rows="180,600" border=1> <Frame Name="top" Src="/cgi-bin/db2www/bes.d2w/start" Scrolling="NO" MarginWidth="0" MarginHeight="0"> <Frame Name="bottom" Src="/cgi-bin/db2www/bes.d2w/empty" Scrolling="Auto" MarginWidth="0" MarginHeight="0"> </FrameSet> </Html> %} %{ ****************************************************************************** EMPTY Section: ****************************************************************************** %} %HTML(EMPTY) { Content-type: text/html; charset=ibm866 @query_count() <HTML> <FONT FACE="Swiss,Helvetica,Helv" SIZE=4> <p align="JUSTIFY"> Коллекция сайта содержит $(TOTAL) словарных статей </center> </HTML> %} %{ ****************************************************************************** START Section: ****************************************************************************** %} %HTML(START){ Content-type: text/html; charset=ibm866 <Html> <Form Method=Post Action="/cgi-bin/db2www.exe/bes.d2w/report" target="bottom"> Образец запроса словарной статьи:<br> <input type="TEXT" name="Word" value="" size="50"><br> <INPUT TYPE="submit" VALUE="Запрос"> </form> </body> </Html> %} %{ ****************************************************************************** REPORT Section: ****************************************************************************** %} %HTML(REPORT){ Content-type: text/html; charset=ibm866
<HTML> @query_article() </HTML> %}Работу этого макроса можно посмотреть на http://udb.fcn.ru/cgi-bin/db2www/bes.d2w/frame.
Примечание 1: иногда, в случаях установки NetData на машине-клиенте UDB приходится биндить ее ресурс с помощью файла D2WSQL.BND.
Если вы
|
Код описывающий эту форму, а также секция обработки ее средствами NetData даны ниже.
%HTML(START){ Content-type: text/html; charset=ibm866 <Html> <FONT FACE="Swiss,Helvetica,Helv" SIZE=4> <body text="#000080" bgcolor="#CCCCCC"> <TABLE> <TR> <TD> <Form Method=Post Action="report" target="bottom"> <table border=0 width="400"> <tr > <td valign="top" width="17%">Образец запроса </td> <td ><input type="TEXT" name="PERSON" value="" size="50"></td> </tr> <tr > <td align=right>Год </td> <td><input type="TEXT" name="YYYY" value="" size="4" maxlength=4> <INPUT TYPE="submit" VALUE="Запрос"></td> </tr> </table> </form> </TD> <TD bgcolor="#FF6666" align="center"> <font color="#FFFF80"><b>Если вы</b></font> <br> <form Method=Post Action="expert" target="top"> <INPUT TYPE="submit" VALUE="Эксперт"></form> </TD> </TR> </TABLE> </body> </Html> %}
%HTML(REPORT){ Content-type: text/html; charset=ibm866 <HTML> <FONT FACE="Swiss,Helvetica,Helv" SIZE=4> %IF (PERSON=="LIST" || PERSON=="!LIST" || PERSON=="list" || PERSON=="!list") %IF (PERSON=="LIST" || PERSON=="list") @DTW_ASSIGN(REQUEST,"") %ELSE @DTW_ASSIGN(REQUEST,"WHERE ID NOT IN (select id_pr from relation)") %ENDIF <table> @query_list() </table> %ELSE %IF (PERSON=="*") @query_count() @DTW_ASSIGN(REQUEST,@rand_req(TOTAL_PHOTOS)) %ELSE %IF (PERSON !="") @DTW_ASSIGN(PERSON,@p2s(PERSON)) @DTW_ASSIGN(REQUEST,"ID_PHOTO IN (") @DTW_CONCAT(REQUEST,PERSON,REQUEST) @DTW_CONCAT(REQUEST,")",REQUEST) %ELSE @DTW_ASSIGN(STRING,"select id_photo from photos") %IF ( YYYY !="") @DTW_CONCAT(STRING," where yyyy=",STRING) @DTW_CONCAT(STRING,YYYY,STRING) @DTW_ASSIGN(YYYY,"") %ENDIF @DTW_ASSIGN(REQUEST,"id_photo in ((") @DTW_CONCAT(REQUEST,STRING,REQUEST) @DTW_CONCAT(REQUEST,") except (select id_ph from relation)) FETCH FIRST 32 ROWS ONLY",REQUEST) %ENDIF %ENDIF %IF ( YYYY !="") @DTW_CONCAT(REQUEST," AND YYYY=",REQUEST) @DTW_CONCAT(REQUEST,YYYY,REQUEST) %ENDIF @DTW_GETENV("REMOTE_ADDR",CLIENT_IP) @DTW_ASSIGN(CLIENT_IP,@log_client(CLIENT_IP,REQUEST)) @query2() %ENDIF </HTML> %}Секция REPORT реализует логику приложения и формирует запрос к UDB DB2, который выводится прямо в нее.
%FUNCTION(DTW_SQL) query2() {
select SPHOTO,
ID_PHOTO, YYYY, ID_PERSON, NOTE from PHOTOS where $(REQUEST)
%REPORT{
<table>
%ROW{
@DTW_ADD(COUNT,"1",COUNT)
%IF ($(COUNT)=="1")
<tr>
%ENDIF
<TD>
<form method="get" action="info">
<input type=image SRC="$(V1)" weight="80" Height="100" border=0>
<input type="hidden" name=SPHOTO value=$(V1)>
<input type="hidden" name=ID_PHOTO value=$(V2)>
<input type="hidden" name=YYYY value=$(V3)>
<input type="hidden" name=ID_PERSON value=$(V4)>
@DTW_ASSIGN(NOTE,"'")
@DTW_CONCAT(NOTE,V5,NOTE)
@DTW_CONCAT(NOTE,"'",NOTE)
<input type="hidden" name=NOTE value=$(NOTE)>
</form>
</TD>
%IF ($(COUNT)=="4")
@DTW_ASSIGN(COUNT,"0")
</tr>
%ENDIF
%}
</table>
%}
%message{
-104: "Запрос содержит синтаксическую ошибку - $(RETURN_CODE)": continue
+100: "<i>Увы. На сервере нет информации удовлетворяющей ваш запрос</i>":
continue
+default : "<i>Увы. Что-то в вашем запросе есть порочное</i> - $(RETURN_CODE)"
: continue
%}
%}
Здесь ответ сервера через внутреннии переменные (V1,V2...) встраивается
в HTML код генерируемой страницы.
Как видите хоть и слегка громоздкий, но все же вполне понятный
и работающий
пример.
Joseph Shrago
Интересные ссылки:
Малого бизнеса.
Комментариев к странице: 0 | Добавить комментарий
Редактор: Дмитрий Бан
Оформление: Евгений Кулешов