Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вопросы новичка по ZEN. / 22 сообщений из 22, страница 1 из 1
08.11.2007, 09:37
    #34923933
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
В этой теме мне бы хотелось получать Ваши ценные советы по ZEN. Так как я только начал знакомиться с ZEN, просьба ногами сильно не пинать.
Начну с самого простого:
Почему не работатет этот код?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Class Webdev.Page Extends %ZEN.Component.page
{
Parameter APPLICATION = "Webdev.Academy";
Parameter PAGENAME = "Page";
Parameter DOMAIN = "Webdev";

XData Style
{
<style type="text/css">
</style>
}
XData Contents
{
<page>
<html>
<h3 align="center">Today is: #($zd($h))#</h3>
</html>
<label align="center" label="Today is: #($zd($h))#"/>
</page>
}
}
На #($zd($h))# выдает "Expression Error"
...
Рейтинг: 0 / 0
09.11.2007, 11:14
    #34927361
Erick
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
У меня похожий вопрос. Как вывести на страницу значение глобала?
...
Рейтинг: 0 / 0
09.11.2007, 11:19
    #34927388
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
Да... Что пока одни вопросы, а ответов нет...

Новый вопрос. К примеру, со страницы авторизации, при условии успешной проверки, осуществляется переход на другую страницу. Необходимо передать туда логин и пароль (да и вообще любые данные).
У меня так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
ClassMethod SubmitForm(pSubmit As %ZEN.Submit) As %Status
{
	if (/*некоторая проверка логина и пароля*/)
	{
                      set %session.Data("login")=pSubmit.%GetValue("login")
		set %session.Data("password")= $system.Encryption.MD5Encode(pSubmit.%GetValue("password"))
  		
                      set %response.ServerSideRedirect = "Some.SomePage.cls"
  		quit  1 
	}
	quit  1 
}
Данные в сессии передаются. А вот как, к примеру, вывести значение %session.Data("login") в поле text?
Вот так ничего не выдает:
Код: plaintext
<text align="center" id="login" name="login" value="#(%session.Data('login'))#"/>

Как сделать правильно?
...
Рейтинг: 0 / 0
09.11.2007, 12:15
    #34927668
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
В дополнение к вышесказанному:
В классе страницы определены два свойства
Код: plaintext
1.
Property IsValidLogin As %ZEN.Datatype.boolean;
Property IsValidPassword As %ZEN.Datatype.boolean;
Теперь вместо
Код: plaintext
/*некоторая проверка логина и пароля*/
я использую
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
if (%page.IsValidLogin)
{
		
		set %session.Data("login")=pSubmit.%GetValue("login")
		set %session.Data("password")=$system.Encryption.MD5Encode(pSubmit.%GetValue("password"))
  		
  		set %response.ServerSideRedirect = "Dilers.ChangePassword.cls?login=123"
  		q  1 
	}
	quit  1 
На что получаю такой ответ:
Error code returned by submit handler:
ERROR #5001: <UNDEFINED>zSubmitForm+2^Dilers.Authorization.2 *%page

Т.е., на сколько я понял, не определен объект страницы. Как получить доступ к странице и ее свойству из SubmitForm?
...
Рейтинг: 0 / 0
09.11.2007, 18:19
    #34929282
''
''
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
13-й Пилигрим
Почему не работатет этот код?
На #($zd($h))# выдает "Expression Error"

Потому что существуют ограничения на использование подстановочных выражений.
Посмотрите документацию
http://localhost:?/csp/docbook/DocBook.UI.Page.cls?KEY=GZEN_page_programming#GZEN_runtime_expressions

Ответы на остальные вопросы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
Class Webdev.Page Extends %ZEN.Component.page
{

Parameter APPLICATION = "Webdev.Academy";
Parameter PAGENAME = "Page";
Parameter DOMAIN = "Webdev";

Property day As %ZEN.Datatype.string [ InitialExpression = {$zd($H)} ];
Property IsValidLogin As %ZEN.Datatype.boolean(ZENURL = "IsValidLogin") [ InitialExpression = "0" ];

XData Style
{
<style type="text/css">
</style>
}

XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="">
<html id="html1">
<h3 align="center">Today is: bla-bla-bla</h3>
</html>
<label id="label1" align="center" label="Today is: bla-bla-bla"/>
<label id="label2" align="center" label="bla-bla-bla"/>
<label id="label3" align="center" label="#(%page.day)#"/>
<label id="label4" align="center" label="bla-bla-bla"/>


<form id="LoginForm">
<text hidden="true" id="IsValidLogin" name="IsValidLogin" value="#(%page.IsValidLogin)#"/>
<submit caption="Save" action="save" id="Submit" name="Submit"/>
</form>
</page>
}

/// This callback is called after the server-side page 
/// object and all of its children are created.<br>
/// Subclasses can override this to add, remove, or modify 
/// items within the page object model, or to provide values
/// for controls.
Method %OnAfterCreatePage() As %Status
{
  Set t = %page.%GetComponentById("label1")
  set t.label="Label Today is: "_$zd($h)
  
  Set t = %page.%GetComponentById("label2")
  set t.label=%session.Data("login")
  
  Set t = %page.%GetComponentById("html1")
  set t.content="<h3 align='center'>html Today is: "_$zd($h)_"</h3>"
  
  Quit $$$OK
}

/// This callback is called when a form on this page is submitted.
/// <var>pSubmit</var> is a <class>%ZEN.Submit</class> object
/// containing details of the form submit.<br>
/// Subclasses override this method.
ClassMethod %OnSubmit(pSubmit As %ZEN.Submit) As %Status
{
 if (pSubmit.%Action = "save") 
 {
  if (pSubmit.%GetValue("IsValidLogin")="1"){ //вместо (%page.IsValidLogin)
	  //Что-то делаем
             set %session.Data("login")=pSubmit.%GetValue("login")
	set %session.Data("password")=$system.Encryption.MD5Encode(pSubmit.%GetValue("password"))
 	
  		set %response.ServerSideRedirect = "Dilers.ChangePassword.cls?login=123"
  		q $$$OK
  }
 }
 
	Quit $$$OK
}

}


Erick
Как вывести на страницу значение глобала?

См. выше

PS: Я привел только некоторые варианты решения, хотя их гораздо больше.
...
Рейтинг: 0 / 0
13.11.2007, 11:40
    #34934636
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
Спасибо за ответы. Новая порция вопросов.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
ClassMethod SubmitForm(pSubmit As %ZEN.Submit) As %Status
{
	s pswlngth=$L(pSubmit.%GetValue("password"))
		
	if (pSubmit.%GetValue("login")? 1 .3U1"-"1.N && (pSubmit.%GetValue("password")?.ANP1NP.ANP1NP.ANP)&&(pswlngth> 7 ))
	{		
		if (pSubmit.%GetValue("password")="password00")
		{
			set %session.Data("login")=pSubmit.%GetValue("login")
			set %session.Data("password")=$system.Encryption.MD5Encode(pSubmit.%GetValue("password"))
  			set %session.Data("AllowAccess")= 1 
  			set %response.ServerSideRedirect = ..Link("Dilers.ChangePassword.cls")
  			q  1 
		}
		else 
		{
			set %session.Data("AllowAccess")= 0 
			set %response.ServerSideRedirect = ..Link("Dilers.Login.cls")
  			q  1 
		}
	}
	quit  1 
}

Method %OnAfterCreatePage() As %Status
{
	if $Get(%session.Data("AllowAccess"))= 0 
	{
		set t = %page.%GetComponentById("errorTitle")
		set t.content = "<h3 align='center'>Неверный пароль</h3>"
		Quit $$$OK
	}
	Quit $$$OK
}

Т.е. мне нужно, чтобы по Submit формы проверялся логин и пароль по шаблону, и, если шаблону соответствуют, и пароль при этом равен паролю по умолчанию ("password00"), то перенаправляется на ChangePassword.cls. Иначе же AllowAccess %session устанавливается в 0 и возвращается на эту же страницу Login.cls. При формировании Login.cls проверяется AllowAccess, и если равен 0, то выводится сообщение об ошибке.
Вся проблема в том, что при возвращении на Login.cls, Submit формы считается сработавшим, со всеми предыдущими значениями, и опять происходи редирект на Login.cls. Т.е. происходит зацикливание. Как сделать правильно?
...
Рейтинг: 0 / 0
13.11.2007, 12:42
    #34934906
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
13-й Пилигрим , почему вы не используете JS?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
13.11.2007, 13:18
    #34935096
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
krvsa 13-й Пилигрим , почему вы не используете JS?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT

Ткните, пожалуйста, носом - как можно использовать JS.
...
Рейтинг: 0 / 0
13.11.2007, 14:32
    #34935408
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
Наверняка как и раньше...
Пишите JS функцию... Вешаете ее на событие... Из нее вызываете кащейский метод, который возвращает что-то, по чему можно понять успех/не_успех... Оформляете нужный вам переход.
В обычном же csp это работало. Наверняка работает и теперь...
В качестве примера на csp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
<HTML>
<HEAD>
<title>Киоск</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link rel="stylesheet" type="text/css" href="/prt/css/standart.css">

<script language='JavaScript'>

// Переход на другую страницу
function Go(Page,Lgn) {
	if (Lgn== 1 ) {
		var ok=#server(..cLogin())#
		if (ok=='') {
			alert('Даный пункт доступен только после авторизации...')
			return false
		}
	}
	top.location=Page
}

// Выход пользователя
function Exit() {
	var ok=#server(..cExit())#
	obj.submit()
}

// Проверка регистрации
function Login() {
	var ok=#server(..cLogin())#
	if (ok!='') {
		return true
	}
	var log=obj.log.value
	if (log=='') {
		alert('Укажите логин...')
		return false
	}
	var pas=obj.pas.value
	if (pas=='') {
		alert('Укажите пароль...')
		return false
	}
	ok=#server(..cLogin(log,pas))#
	if (ok=='') {
		alert('Такой пользователь не зарегистрирован...')
		return false
	}
	return true
}
	
</script>

</HEAD>

<csp:method name="cLogin" arguments="Log:%String,Pas:%String" returntype="">  
   // Проверка регистрации
   n set,id
   s set=$$Set^sysNAME
   if $g(Log)="" {
	   q $g(@set@("Login"))
   }
   s id=##class(prt.Users).GetId(Log)
   q:id="" ""
   s @set@("Login")=Log
   s @set@("Login","Id")=id
   q Log
</csp:method>

<csp:method name="cExit" arguments="" returntype="">  
   // Выход пользователя
   n set
   s set=$$Set^sysNAME
   k @set@("Login")
   q  1 
</csp:method>

<BODY>
<form action='/ksk/menu.csp' method='post' onsubmit='return Login()'>

<!--#include virtual="/prt/inc/scrbeg.csp"-->

<script language='Cache' runat='Server'>
	s set=$$Set^sysNAME
	s @set@("Task")="ksk"
	s @set@("Csp")="/ksk/menu.csp"
	s buf=$$Temp^sysNAME()
	d TITLE^kskSTAND
	d TITLE^prtHTML(zkl,val)
</script>

<table width="100%"  border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="187" valign="top">
<!--#include virtual="/prt/inc/navmenu.csp"-->

<!-- Табличка авторизации -->
<table width="187"  border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="187" height="26" class="mb_t">АВТОРИЗАЦИЯ
<tr>
<td width="187" class="mb_m" align="center">

<csp:If CONDITION='..cLogin()=""'>
	<table cellspacing="0" cellpadding="0" border="0">
	<tr>
	<td>Логин:
	<td><input class="if" name="log" type="text" maxlength="26" size="8" style='padding:0px;'>
	<tr>
	<td>Пароль:
	<td><input class="if" name="pas" type="password" maxlength="26" size="8">
	<tr>
	<td colspan="2" align="right"><input class="ib" type="submit" value="Вход">
	<tr>
	<td colspan='2' align='left'>
	<a href='javascript:Go("/ksk/reg/info.csp")' class='normallink1'>Регистрация</a>
</table>
<csp:Else>
	<!-- Табличка приветствия -->
	<table width="90%" cellspacing='0' cellpadding='0' border='0'>
	<tr>
	<td class="auth_ent_msg">Вошли как:</td>
	<tr>
	<td class="auth_usr_msg"><font color='blue'>[ </font>#(..cLogin())#<font color='blue'> ]</font></td>
	<tr>
	<td class="auth_log_but"><input class="ib" type="button" onclick='Exit()' value="Выход">
	</table>
</csp:If>

<tr>
<td width="187" height="5" class="mb_b">
</table>
<!-- Табличка авторизации (окончание) -->
<table width="187" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class='leftpict'>
</table>

<td valign="top">

<script language='Cache' runat='Server'>
	s buf=$$Temp^sysNAME()
	s nam=$na(@buf@("Menu"))
	k @nam
	s @nam="Виды государственных услуг"
	s @nam@( 1 )="Вакансий"
	s @nam@( 1 ,"Url")="Go('/ksk/vks/alltype.csp',1)"
	s @nam@( 2 )="Обучение"
	s @nam@( 2 ,"Url")="Go('/ksk/lrn/alltype.csp',1)"
	s @nam@( 3 )="Нормативно-правовые вопросы"
	s @nam@( 3 ,"Url")="Go('/ksk/npv/all.csp',1)"
	s @nam@( 4 )="Адреса службы занятости"
	s @nam@( 4 ,"Url")="Go('/ksk/adr/all.csp',1)"
	d MENU^prtHTML(nam,"Go('/prt/main.csp')")
</script>

</table>

</form>
<!--#include virtual="/prt/inc/scrend.csp"-->

<script language='JavaScript'>
	obj=document.forms[ 0 ]
</script>

</BODY>
</HTML>
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
13.11.2007, 14:59
    #34935573
''
''
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
Попробуйте удалить строку
Код: plaintext
set %response.ServerSideRedirect = ..Link("Dilers.Login.cls")
либо заменить ее на
Код: plaintext
set %response.Redirect = ..Link("Dilers.Login.cls")

Примеры по использованию JS (и не только) можно найти по адресу:
http://www.intersystems.ru/cache/education/zen/index.html

PS: В вашем случае я бы отказался от submit и сделал бы метод по проверке логина/пароля типа ZenMethod или javascript.
...
Рейтинг: 0 / 0
14.11.2007, 10:27
    #34937400
''
''
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
Еще вариант:
Код: plaintext
set pSubmit.%NextPage=..Link("Dilers.Login.cls")
...
Рейтинг: 0 / 0
14.11.2007, 14:20
    #34938626
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
Спасибо за советы.
Такой вот теперь вопрос:
Проверку логина и пароля я организовал следующим образом: при нажатии Submit вызывается
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Method OnSubmitClick() [ ZenMethod ]
{
	set lgn = %page.%GetValueById("login")
	set psw = %page.%GetValueById("password")
	
	///* Здесь будет проверка логина и пароля по БД *///
	if (lgn="TST-001"&&psw="password00") 
	{
		set %session.Data("login", 1 ) = lgn
		set %session.Data("password", 1 )=psw
		set %session.Data("AllowAccess", 1 )= 1 
	}
	else
	{
		set %session.Data("AllowAccess", 1 )= 0 
	}
	quit  1 
}
А затем в %OnAfterCreatePage() я проверяю %session.Data("AllowAccess")
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Method %OnAfterCreatePage() As %Status
{
	if $D(%session.Data("AllowAccess", 1 ))
	{
		if %session.Data("AllowAccess", 1 )= 0 
		{
			set obj = %page.%GetComponentById("errorMessage")
			set obj.content="<h4 align='center' style='color:red'>В доступе отказано!</h4><h4 align='center' style='color:red'>Неверный Логин или Пароль</h4>"
			q  1 
		}
		if %session.Data("AllowAccess", 1 )= 1 
		{
			set %response.Redirect = "Dilers.ChangePassword.cls"
			quit  1 
		}
	}
	Quit $$$OK
}
Этот механизм, в принципе работает. Но в силу определенных причин мне бы хотелось вместо %session в %OnAfterCreatePage() использовать %request. Что-то вроде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Method %OnAfterCreatePage() As %Status
{
	if ($D(%request.Data("login", 1 ))&&$D(%request.Data("password", 1 )))
	{
		if ((%request.Data("login", 1 )'="TST-001")&&(%request.Data("password",1)'="password00"))
		{
			set obj = %page.%GetComponentById("errorMessage")
			set obj.content="<h4 align='center' style='color:red'>В доступе отказано!</h4><h4 align='center' style='color:red'>Неверный Логин или Пароль</h4>"
			q  1 
		}
		else
		{
                       set %session.Data("AllowAccess", 1 )= 1 
			set %response.Redirect = "Dilers.ChangePassword.cls"
			quit  1 
		}
	}*/
	Quit $$$OK
}

Тогда бы отдельный OnSubmitClick() не понадобился бы. Ведь, насколько я понимаю, при нажатии на subnit формы имена контролов и их значения автоматически записываются в %request, даже если нет отдельного обработчика onsubmit. Так ли это? Но я не могу получить данные из %request. if ($D(%request.Data("login",1))&&$D(%request.Data("password",1))) - выдает 0 в %OnAfterCreatePage(). Как мне достать данные из %request?
...
Рейтинг: 0 / 0
14.11.2007, 16:46
    #34939446
''
''
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
авторВедь, насколько я понимаю, при нажатии на subnit формы имена контролов и их значения автоматически записываются в %request, даже если нет отдельного обработчика onsubmit. Так ли это?

Нет, не так. Посмотрите документацию:
http://localhost:?/csp/docbook/DocBook.UI.Page.cls?KEY=GZEN_forms#GZEN_C10462

Чтобы взять значение из %request нужно либо положить его в %response (см. пример ниже), либо передать его в параметрах строки подключения (...cls?login=...&password=...).

авторНо я не могу получить данные из %request. if ($D(%request.Data("login",1))&&$D(%request.Data("password",1))) - выдает 0 в %OnAfterCreatePage(). Как мне достать данные из %request?
Зачем так усложнять? Сделайте проще. Например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="">

<form id="LoginForm" name="LoginForm">
<text id="login" name="login" label="Логин:"/>
<text id="password" name="password" label="Пароль:"/>
<submit id="Submit" name="Submit" action="save" caption="Войти"/>
</form>
</page>
}

/// This callback is called when a form on this page is submitted.
/// <var>pSubmit</var> is a <class>%ZEN.Submit</class> object
/// containing details of the form submit.<br>
/// Subclasses override this method.
ClassMethod %OnSubmit(pSubmit As %ZEN.Submit) As %Status
{
 if (pSubmit.%Action = "save") 
 {
  set lgn=pSubmit.%GetValue("login")
  set psw=pSubmit.%GetValue("password")
  
  ; Здесь будет проверка логина и пароля по БД 
  ; Set %response.Context("login") = lgn
  ; Set %response.Context("password") = psw
  
	if ((lgn="TST-001") && (psw="password00")) 
	{
		set pSubmit.%NextPage=..Link("Dilers.ChangePassword.cls")
	}
	else
	{
	  Do pSubmit.%SetError("LoginForm","В доступе отказано (Неверный Логин или Пароль)")
	}
	
 }
 
	Quit $$$OK
}

/// This callback is called after the server-side page 
/// object and all of its children are created.<br>
/// Subclasses can override this to add, remove, or modify 
/// items within the page object model, or to provide values
/// for controls.
Method %OnAfterCreatePage() As %Status
{
	Quit $$$OK
}
...
Рейтинг: 0 / 0
06.02.2008, 10:26
    #35112736
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
Добрый день. Возникла новая порция вопросов по ZEN.
Есть такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Class Webdev.Page Extends %ZEN.Component.page
{

Parameter APPLICATION = "Webdev.Academy";
Parameter PAGENAME = "Page";
Parameter DOMAIN = "Webdev";

XData Style
{
<style type="text/css">
</style>
}

XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page>
 <form id="form" name="form">
  <combobox id="cmbx" name="cmbx" valueList="0,1" displayList="Нет,Да"/>
  <submit id="save" action="save" caption="OK"/> 
 </form>
</page>
}

ClassMethod %OnSubmit(pSubmit As %ZEN.Submit) As %Status
{
	#; this is overridden by subclasses
	d pSubmit.%SetError("form","Error")
	Quit $$$OK
}

}
Вопросы:
1. Можно ли каким-либо образом задать стиль сообщения об ошибке, которое выводится по d pSubmit.%SetError("form","Error"). В частности интересует размер шрифта. Необходимо его увеличить.
2. При выводе сообщения об ошибке в ComboBox отображается значение из valueList, а не из displayList. Т.е., к примеру, выбирается в ComboBox "Да", нажимается submit, согласно %OnSubmit в форму выводится "Error", но при этом в ComboBox отображается "1" а не "Да". Как от этого избавиться?
...
Рейтинг: 0 / 0
06.02.2008, 12:32
    #35113276
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
1) Стили для сообщений об ошибках:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
/* @doc="Style for error messages for controls." */
.zenError {
	color: red;
	font-size:  90 %;
	padding-left: 2px;
	padding-right: 2px;
}
.zenError:before {
	content: "[";
}
.zenError:after {
	content: "]";
}

2) У меня Caché 2008.1.RC1 и такой ошибки уже не наблюдается.
...
Рейтинг: 0 / 0
06.02.2008, 13:18
    #35113496
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
Спасибо, стили для ошибок работают.
Насчет
2. При выводе сообщения об ошибке в ComboBox отображается значение из valueList, а не из displayList. Т.е., к примеру, выбирается в ComboBox "Да", нажимается submit, согласно %OnSubmit в форму выводится "Error", но при этом в ComboBox отображается "1" а не "Да". Как от этого избавиться?

2) У меня Caché 2008.1.RC1 и такой ошибки уже не наблюдается.
Это признанная ошибка, которая исправлена в новой версии? Что скажут пользователи Caché 2007.1 по этому поводу, проявляется ли у вас эта ошибка? Как ее можно обойти на Caché 2007.1?
...
Рейтинг: 0 / 0
06.02.2008, 14:18
    #35113754
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
В версии "Cache for Windows (x86-32) 2007.1.3 (Build 607U) Tue Oct 16 2007 23:51:33 EDT" проявляется.
Решение: либо самим подправить класс %ZEN.Component.combobox, либо заказать adhoc.
Лучше заказать adhoc, так как есть нюансы по правке системной БД.
...
Рейтинг: 0 / 0
06.02.2008, 14:45
    #35113881
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
У нас стоит Caché 2007.1.0.369.0. Не подскажите, к кому обратиться для заказа adhoc'a? Что он собой представляет? Как его потом установить в систему?
...
Рейтинг: 0 / 0
06.02.2008, 15:15
    #35114015
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
Adhoc - это патч. В нем есть инструкции по установке.
Заказать можно через WRC или Вашего консультанта.
...
Рейтинг: 0 / 0
21.02.2008, 12:13
    #35146990
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
Такой вопрос: как проверить активирован ли JavaScript на конечной машине? Т.е. необходимо, чтобы при загрузке страницы выводилось сообщение о необходимости активации JavaScript в броузере в случае его отключения.
...
Рейтинг: 0 / 0
21.02.2008, 12:23
    #35147050
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
13-й ПилигримТакой вопрос: как проверить активирован ли JavaScript на конечной машине? Т.е. необходимо, чтобы при загрузке страницы выводилось сообщение о необходимости активации JavaScript в броузере в случае его отключения.
<noscript>Включи JavaScript, а то щастя не будет</noscript>
...
Рейтинг: 0 / 0
21.02.2008, 13:59
    #35147503
13-й Пилигрим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка по ZEN.
Спасибо за совет. Все работает.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вопросы новичка по ZEN. / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]