Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / отличие CSP от CLS / 25 сообщений из 83, страница 1 из 4
28.01.2011, 10:06
    #37083512
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
В чем отличие между созданием csp страницы и созданием класса вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Class User.NewClass1 Extends %CSP.Page [ ProcedureBlock ]
{

ClassMethod OnPage() As %Status
{
	&html<<html>
	<head>
	</head>
	<body>>
	;To do...
	&html<</body>
	</html>>
	Quit $$$OK
}

}

есть ли какие-то явные преимущества одного из этих методов?
...
Рейтинг: 0 / 0
28.01.2011, 10:13
    #37083539
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
AndrewQwerВ чем отличие между созданием csp страницы и созданием класса
Все легко сравнивается если csp страницу "Вид->Посмотр других"...

AndrewQwerесть ли какие-то явные преимущества одного из этих методов?
csp - более хтмэльная, меньше писанины.
cls - уже скомпилированая, типа быстрее грузится.

Но никто не запретил писать csp, потом самому их компилировать... Потом использовать в урлах расширение cls...
...
Рейтинг: 0 / 0
28.01.2011, 10:16
    #37083548
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
cls,
проще организовать наследование,
удобнее писать на чистом COS
можно получить более читаемый удобный код
csp,
можно использовать теги <csp:?>
проще писать когда в основном это HTML
...
Рейтинг: 0 / 0
28.01.2011, 10:27
    #37083588
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
ясненько, спасибо
...
Рейтинг: 0 / 0
28.01.2011, 10:35
    #37083617
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
DAiMorможно получить более читаемый удобный код
В сравнении с csp? В cls будет более читабельный код? По-мне так это очень сомнительное высказываете... Особенно если учесть что речь таки идёт о вэбе.
...
Рейтинг: 0 / 0
28.01.2011, 10:37
    #37083625
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
Это значит менее читабельно...

Код: 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.
<HTML>
<!--Кривошеев С.А.-->
<HEAD>
<TITLE>Абонент</TITLE>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=WINDOWS-1251">
<link rel="stylesheet" type="text/css" href="#($$MyCSS^version)#">

<script language="javascript">

// Обновить информацию
function LoadInfo() {
	var obj=document.fAbon
	obj.submit()
}

// Переход на другую страницу
function Go(File) {
	var obj=document.fAbon
	obj.action=File
	obj.submit()
}

// Запись данных
function Save(Id) {
	fAbon_save()
	alert("Данные записаны!")
}

// Удалить тип версии
function DelAbon(Id) {
	var ok
	ok=confirm("Удалить абонента")
	if (ok) {
		ok=#server(..cDelAbon(Id))#
		ok=document.fAbon.type.value
		Go("abonall.csp?type="+ok)
	}
}
</script>

</HEAD>

<csp:method name="cDelAbon" arguments="Id:%String" returntype="%String">  
	// Удалить тип версии
	n o
	s o=##class(ver.Abon).%OpenId(Id)
	d ##class(ver.Abon).%Delete(o.%Oid())
	d o.%Close()
	q  1 
</csp:method>

<BODY onload='document.fAbon.tCode.focus()'>

<csp:object name='oAbon' classname='ver.Abon' objid='#(%request.Data("abon", 1 ))#'>

<form name='fAbon' cspbind='oAbon' method='post' action='abon.csp' onsubmit='return Save(#(%request.Data("type", 1 ))#)'>
<!--Основные переменные-->
<input type='hidden' name='abon' value='#(%request.Data("abon", 1 ))#'>
<input type='hidden' name='type' value='#(%request.Data("type", 1 ))#'>
<input type='hidden' name='dprt' value='#(%request.Data("dprt", 1 ))#'>

<!--Основная структурная таблица-->
<table width=' 100 %' border=' 0 '>
<tr>
<td valign='top' width=' 90 %'>
<h1>Абонент #($$NameAbon^version(oAbon.Code,%request.Data("dprt", 1 )))#</h1>
<!--Таблица данных-->
<table border=' 0 '>
<tr>
<td>Код 
<td><input type='text' name='tCode' cspbind='Code' title='Код из дешифратора D_ABON'>
</table>
<td valign='top'>
<!--Таблица кнопок-->
<table border=' 0 '>
<tr>
<td><input type='button' value='На начало' onclick='Go("info.csp")'>
<tr>
<td><input type='button' value='Выход' onclick='Go("abonall.csp?type="+#(%request.Data("type", 1 ))#)'>
<tr>
<td><input type='submit' value='Записать'>
<tr>
<td><input type='button' value='Удалить' onclick='DelAbon(#(%request.Data("abon", 1 ))#)'>
</table>
</table>
</form>
</BODY>
</HTML>

Та же страничка но в cls, более читабельна?

Код: 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.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
Import User

Class air.vers.abon Extends %CSP.Page [ ClassType = "", Language = cache, Not ProcedureBlock ]
{

Parameter CONTENTTYPE = "TEXT/HTML";

Parameter CSPFILE = "c:\Inetpub\wwwroot\VERS\abon.csp";

Parameter CSPURL = "/vers/abon.csp";

Parameter FileTimestamp = "60465,33839";

ClassMethod OnPage() As %Status
{
 Do ..OnPagePREHTML()
 Do ..OnPageCSPROOT()
 Do ..OnPagePOSTHTML()
 Quit $$$OK
}

ClassMethod OnPageBODY() As %Boolean
{
 Write "<BODY onload='document.fAbon.tCode.focus()'>"
 Write !,(..HyperEventBody())
 Write !,!
 If ((%request.Data("abon", 1 ))'="") {
     Set oAbon = ##class(ver.Abon).%OpenId((%request.Data("abon", 1 )))
 } Else {
     Set oAbon = ##class(ver.Abon).%New()
 }
 Write !,!,"<form name='fAbon' method='post' action='abon.csp' onsubmit='return Save("_(%request.Data("type", 1 ))_")'>"
 Write !,"<!--Основные переменные-->"
 Write !,"<input type='hidden' name='abon' value='"_(%request.Data("abon", 1 ))_"'>"
 Write !,"<input type='hidden' name='type' value='"_(%request.Data("type", 1 ))_"'>"
 Write !,"<input type='hidden' name='dprt' value='"_(%request.Data("dprt", 1 ))_"'>"
 Write !,!,"<!--Основная структурная таблица-->"
 Write !,"<table width='100%' border='0'>",!
 Write "<tr>",!
 Write "<td valign='top' width='90%'>",!
 Write "<h1>Абонент "_($$NameAbon^version(oAbon.Code,%request.Data("dprt", 1 )))_"</h1>",!
 Write "<!--Таблица данных-->"
 Write !,"<table border='0'>",!
 Write "<tr>",!
 Write "<td>Код ",!
 Write "<td>"
 Set %value = ..EscapeHTML($get(%request.Data("tCode", 1 ),$ZSTRIP($select(oAbon="":"", 1 :(oAbon.CodeLogicalToDisplay(oAbon.Code))),">W")))
 Write "<input VALUE="""_(%value)_""" type='text' name='tCode' title='Код из дешифратора D_ABON'>"
 Write !,"</table>",!
 Write "<td valign='top'>",!
 Write "<!--Таблица кнопок-->"
 Write !,"<table border='0'>",!
 Write "<tr>",!
 Write "<td>"
 Write "<input NAME=""%noname"" type='button' value='На начало' onclick='Go(""info.csp"")'>"
 Write !,"<tr>",!
 Write "<td>"
 Write "<input NAME=""%noname"" type='button' value='Выход' onclick='Go(""abonall.csp?type=""+"_(%request.Data("type", 1 ))_")'>"
 Write !,"<tr>",!
 Write "<td>"
 Write "<input NAME=""%noname"" type='submit' value='Записать'>"
 Write !,"<tr>",!
 Write "<td>"
 Write "<input NAME=""%noname"" type='button' value='Удалить' onclick='DelAbon("_(%request.Data("abon", 1 ))_")'>"
 Write !,"</table>",!
 Write "</table>",!
 Write "<input name=""OBJID"" type=""hidden"" value="""_($select(oAbon="":"", 1 :oAbon.%Id()))_""">"
 Write ..InsertHiddenFields("abon.csp"),!
 Write "</form>"
 Write !,"</BODY>"
}

ClassMethod OnPageCSPROOT() As %Boolean
{
 Do ..OnPageHTML()
}

ClassMethod OnPageHEAD() As %Boolean
{
 Write "<HEAD>"
 Write !,"<TITLE>Абонент</TITLE>",!
 Write "<META HTTP-EQUIV=""CONTENT-TYPE"" CONTENT=""TEXT/HTML; CHARSET=WINDOWS-1251"">"
 Write !,"<link rel=""stylesheet"" type=""text/css"" href="""_(..Link(($$MyCSS^version)))_""">"
 Write !,!,"<script language=""javascript"">"
 Write !,!,"// Обновить информацию",!
 Write "function LoadInfo() {",!
 Write $c( 9 )_"var obj=document.fAbon",!
 Write $c( 9 )_"obj.submit()",!
 Write "}",!
 Write !,"// Переход на другую страницу",!
 Write "function Go(File) {",!
 Write $c( 9 )_"var obj=document.fAbon",!
 Write $c( 9 )_"obj.action=File",!
 Write $c( 9 )_"obj.submit()",!
 Write "}",!
 Write !,"// Запись данных",!
 Write "function Save(Id) {",!
 Write $c( 9 )_"fAbon_save()",!
 Write $c( 9 )_"alert(""Данные записаны!"")",!
 Write "}",!
 Write !,"// Удалить тип версии",!
 Write "function DelAbon(Id) {",!
 Write $c( 9 )_"var ok",!
 Write $c( 9 )_"ok=confirm(""Удалить абонента"")",!
 Write $c( 9 )_"if (ok) {",!
 Write $c( 9 , 9 )_"ok="_($case(%session.BrokerImplementation, 1 :"cspRunServerMethod", 2 :"cspHttpServerMethod",:"cspSelectServerMethod"))_"('"_(..Encrypt($listbuild("air.vers.abon.cDelAbon:air.vers.abon"))_$select(%session.UseSessionCookie'=2:"&CSPCHD="_%session.CSPSessionCookie,1:""))_"',Id)",!
 Write $c( 9 , 9 )_"ok=document.fAbon.type.value",!
 Write $c( 9 , 9 )_"Go(""abonall.csp?type=""+ok)",!
 Write $c( 9 )_"}",!
 Write "}",!
 Write "</script>"
 Do ..fAbonGenJS()
 Write !,(..HyperEventHead())
 Write !,!,"</HEAD>"
}

ClassMethod OnPageHTML() As %Boolean
{
 Write "<HTML>"
 Write !,"<!--Кривошеев С.А.-->"
 Write !
 Do ..OnPageHEAD()
 Write !,!,!,!
 Do ..OnPageBODY()
 Write !,"</HTML>"
}

ClassMethod OnPagePOSTHTML() As %Boolean
{
 Set oAbon=$$$NULLOREF
}

ClassMethod OnPagePREHTML() As %Boolean
{
 Set oAbon=$$$NULLOREF
}

ClassMethod cDelAbon(Id As %String) As %String
{
   
 	// Удалить тип версии
 	n o
 	s o=##class(ver.Abon).%OpenId(Id)
 	d ##class(ver.Abon).%Delete(o.%Oid())
 	d o.%Close()
 	q  1 
}

/// Called to render JavaScript code that is required for form <var>fAbon</var>.
ClassMethod fAbonGenJS() [ Language = cache ]
{
 Write !,"<SCRIPT Language=JavaScript>",!
 Write "<!--",!
 Write "function fAbon_new()",!
 Write "{",!
 Write "   // invoke #server(air.vers.abon.fAbonLoad())",!
 Write "   return ("_$case(%session.BrokerImplementation, 1 :"cspRunServerMethod", 2 :"cspHttpServerMethod",:"cspSelectServerMethod")_"('",..Encrypt($listbuild("air.vers.abon.fAbonLoad"))_$select(%session.UseSessionCookie'=2:"&CSPCHD="_%session.CSPSessionCookie,1:""),"','') == 1);",!
 Write "}",!
 Write "function fAbon_save()",!
 Write "{",!
 Write "   var form = self.document.fAbon;",!
 Write "   var objid = form.OBJID.value;",!
 Write "   var result = 0;",!
 Write "   if (fAbon_validate()) {",!
 Do ..fAbonSavJS()
 Write "   }",!
 Write "   return (result == 1);",!
 Write "}",!
 Write "function fAbon_validate()",!
 Write "{",!
 Write "   var errorMsg = '';",!
 Write "   var missingMsg = '';",!
 Write "   var invalidMsg = '';",!
 Write "   var missingArray = new Array();",!
 Write "   var invalidArray = new Array();",!
 Write "   var valid;",!
 Write "   missingMsg = fAbon_testRequired(missingArray);",!
 Write "   invalidMsg = fAbon_testValid(invalidArray);",!
 Write "   if ((missingMsg == '') && (invalidMsg == '')) {",!
 Write "      return true;",!
 Write "   }",!
 Write "   errorMsg   = "_..QuoteJS(%response.GetText("","%CSPBind","SaveErrorLine","_______________________________________________________________"))_"+'\n\n';",!
 Write "   errorMsg  += "_..QuoteJS(%response.GetText("","%CSPBind","SaveError","The form was not saved because of the following error(s)."))_"+'\n';",!
 Write "   errorMsg  += "_..QuoteJS(%response.GetText("","%CSPBind","SaveCorrect","Please correct these error(s) and try again."))_"+'\n';",!
 Write "   errorMsg  += "_..QuoteJS(%response.GetText("","%CSPBind","SaveErrorLine","_______________________________________________________________"))_"+'\n\n';",!
 Write "   if (missingMsg!= '') {",!
 Write "      errorMsg += "_..QuoteJS(%response.GetText("","%CSPBind","SaveRequiredError","The following required field(s) are empty: "))_" + missingMsg + '\n';",!
 Write "   }",!
 Write "   if (invalidMsg != '') {",!
 Write "      errorMsg += "_..QuoteJS(%response.GetText("","%CSPBind","SaveInvalidError","The following field(s) contain invalid values: "))_" + invalidMsg + '\n';",!
 Write "   }",!
 Write "   alert(errorMsg);",!
 Write "   return false;",!
 Write "}",!
 Write "function fAbon_testRequired(missingArray)",!
 Write "{",!
 Write "   var missingMsg = '';",!
 Do ..fAbonReqJS()
 Write "   return missingMsg;",!
 Write "}",!
 Write "function fAbon_testValid(invalidArray)",!
 Write "{",!
 Write "   var valid;",!
 Write "   var invalidMsg = '';",!
 Do ..fAbonValJS()
 Write "   return invalidMsg;",!
 Write "}",!
 Write "// -->",!
 Write "</SCRIPT>",!
 QUIT
}

/// Updates the form <var>fAbon</var> from the specified object instance by sending JavaScript to the client.
ClassMethod fAbonLoad(objid As %String, obj As %Integer = "") As %Boolean [ Language = cache ]
{
 If '..fAbonLoadJS(.objid,obj) {
   Write "CSPPage.alert("_..QuoteJS("fAbonLoad: "_%response.GetText("","%CSPBind","OpenObjectError","Unable to open object."))_");",!
   Do ..fAbonLoadJS(objid,obj, 1 )
 }
 QUIT  1 
}

/// Updates the form <var>fAbon</var> from the specified object instance by sending JavaScript to the client.  Error reporting is left to the caller.
ClassMethod fAbonLoadJS(objid As %String, obj As %Integer = "", alwaysLoad As %Boolean =  0 ) As %Boolean [ Language = cache ]
{
 New close,ok
 Set close= 0 ,ok= 1 
 If (obj'=$$$NULLOREF) {
   Set objid = obj.%Id()
 } Else {
   If (objid'="") {
     Set obj = ##class(ver.Abon).%OpenId(objid)
   } Else {
     Set obj = ##class(ver.Abon).%New()
   }
   If (obj=$$$NULLOREF) {
     If 'alwaysLoad Quit 0
     Set ok= 0 
   } Else {
     Set close= 1 
   }
 }
 Write "var form = CSPPage.document.fAbon;",!
 Write "if (form.tCode != null) { form.tCode.value = ",..QuoteJS($select(obj="":"", 1 :($select(obj.Code=$c( 0 ):"", 1 :(obj.CodeLogicalToDisplay(obj.Code)))))),";}",!
 Write "if (form.OBJID != null) { form.OBJID.value = ",..QuoteJS(objid),";}",!
 If close= 1  Set obj=""
 QUIT ok
}

/// Called during rendering of this page to write out JavaScript code to do required field tests for form <var>fAbon</var>.
ClassMethod fAbonReqJS() [ Language = cache ]
{
 QUIT
}

/// Called during rendering of this page to write out JavaScript code to invoke the server-side save method for form <var>fAbon</var>.
ClassMethod fAbonSavJS() [ Language = cache ]
{
 Write "      //invoke #server(air.vers.abon.fAbonSave())"
 Write !,"      result = "_$case(%session.BrokerImplementation, 1 :"cspRunServerMethod", 2 :"cspHttpServerMethod",:"cspSelectServerMethod")_"('",..Encrypt($listbuild("air.vers.abon.fAbonSave"))_$select(%session.UseSessionCookie'=2:"&CSPCHD="_%session.CSPSessionCookie,1:""),"',1,'',objid"
 Write ",",!,"         (form.tCode == null) ? null : cspTrim(form.tCode.value)" ;%in1
 Write ");",!
 QUIT
}

/// Saves the data sent from the form <var>fAbon</var> into the specified object instance. If successful, updates the values on the form.
ClassMethod fAbonSave(respond As %Boolean =  0 , ByRef errmsg As %String = "", objid As %String = "", %in1 As %Library.String) As %Boolean [ Language = cache ]
{
 New obj,sc,value,in,error,sverror,err,i,ok
 Set sc=$$$OK
 Set ok= 1 
 Set error=""
 Set sverror=""
 If (objid="") {
   Set obj = ##class(ver.Abon).%New()
 } ElseIf '$isobject(objid) {
   Set obj = ##class(ver.Abon).%OpenId(objid)
 } Else {
   Set obj = objid
 }
 If (obj=$$$NULLOREF) {
   If (respond) {
     Write "CSPPage.alert("_..QuoteJS(%response.GetText("","%CSPBind","SaveObjectError","Unable to open object for saving"))_");",!
   } Else {
     Set errmsg = %response.GetText("","%CSPBind","SaveObjectError","Unable to open object for saving")
   }
   QUIT  0 
 }
 ; Code 
 If $D(%in1) Do
 . Set value=$S(%in1="":"", 1 :##class(ver.Abon).CodeDisplayToLogical(%in1))
 . If (%in1'=""),(value="") Set error=error_"tCode has an invalid value.\n"
 . Else  Set obj.Code=value
 Set:error'="" ok=0
 Set:error="" sc=obj.%Save()
 If $$$ISERR(sc) {
   Set ok= 0 
   Do DecomposeStatus^%apiOBJ(sc,.err,"")
   For i= 1 : 1 :err {
     If (respond) {
       Set sverror=sverror_" + "_..QuoteJS(err(i))_" + '\n'"
     } Else {
       Set sverror=sverror_..EscapeHTML(err(i))_"\n"
     }
   }
 }
 If (respond) {
   If (ok) {
     Do ..fAbonLoad("",obj)
   } Else {
     Write "CSPPage.alert(",!
     Write ..QuoteJS(%response.GetText("","%CSPBind","SaveErrorLine","_______________________________________________________________"))_"+'\n\n'+",!
     Write ..QuoteJS(%response.GetText("","%CSPBind","SaveError","The form was not saved because of the following error(s)."))_"+'\n'+",!
     Write ..QuoteJS(%response.GetText("","%CSPBind","SaveCorrect","Please correct these error(s) and try again."))_"+'\n'+",!
     Write ..QuoteJS(%response.GetText("","%CSPBind","SaveErrorLine","_______________________________________________________________"))_"+'\n\n'+",!
     Write "'",error,"'",sverror,");",!
   }
 } Else {
   Set errmsg=error_sverror
 }
 QUIT ok
}

/// Translates a submit request from form <var>fAbon</var> into a call to <METHOD>fAbonSave</METHOD>.
ClassMethod fAbonSubmit(ByRef errmsg As %String = "", objid) As %Boolean [ Language = cache ]
{
 New v
 Set v("Code")=$ZSTRIP($get(%request.Data("tCode", 1 )),">W")
 If $get(objid)="" Set objid=$get(%request.Data("OBJID", 1 ))
 Quit ..fAbonSave( 0 ,.errmsg,objid,v("Code"))
}

/// Called during rendering of this page to write out JavaScript code to do field validation tests for form <var>fAbon</var>.
ClassMethod fAbonValJS() [ Language = cache ]
{
 Quit
}

}
...
Рейтинг: 0 / 0
28.01.2011, 10:40
    #37083637
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
krvsacls - уже скомпилированая, типа быстрее грузится.

Но никто не запретил писать csp, потом самому их компилировать... Потом использовать в урлах расширение cls...
Когда вы обращаетесь к csp, на самом деле идет запуск метода класса, так что с точки зрения быстродействия пофиг.
Если у вас не стоит автоматическая компиляция, конечно (раньше она замедляла работу, даже если компилировать не нужно ничего).
...
Рейтинг: 0 / 0
28.01.2011, 11:05
    #37083723
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
Блок А.Н. , потому и написал
krvsa типа быстрее грузится
...
Рейтинг: 0 / 0
28.01.2011, 11:51
    #37083892
neznau
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
krvsa,

Я согласен с DAiMor, он же указал, что "проще писать когда в основном это HTML", так что вашим убеждениям, как мне показалось, это совсем не противоречит.
У вас код вторичен, данные первичны (т.е. вашу csp-станичку легче отдать дизайнеру на доработку), во втором вашем случае наоборот, этот код легче для осваивания разработчиком. Так что каждому своё :)

Вообще, CSP, конечно, это технология от Cache' ;)
...
Рейтинг: 0 / 0
28.01.2011, 12:08
    #37083943
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
ну да, в общем если сказать проще то csp лучше для HTML дизайнера, а CLS для программиста
если код складывается в основном из HTML, до да проще его сделать в CSP
а вот если в коде гораздо больше генерации на основе COS, то cls непременно будет удобней
...
Рейтинг: 0 / 0
28.01.2011, 12:47
    #37084041
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
DAiMorа вот если в коде гораздо больше генерации на основе COS, то cls непременно будет удобней
Все равно сильно сомневаюсь... И примеров тому пока не видел...
...
Рейтинг: 0 / 0
28.01.2011, 17:13
    #37084979
Turk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
krvsaDAiMorа вот если в коде гораздо больше генерации на основе COS, то cls непременно будет удобней
Все равно сильно сомневаюсь... И примеров тому пока не видел...
Простой пример - вывод записей в таблицу (минимум - цикл по ИД). Можно воспользоваться Ajax-ом, но это не всегда целесообразно.
...
Рейтинг: 0 / 0
28.01.2011, 20:32
    #37085337
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
krvsa, что ж вы над людьми издеваетесь...
krvsa
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ClassMethod OnPageBODY() As %Boolean {
 Write "<BODY onload='document.fAbon.tCode.focus()'>"
 Write !,(..HyperEventBody())
 Write !,!
 If ((%request.Data("abon", 1 ))'="") {
     Set oAbon = ##class(ver.Abon).%OpenId((%request.Data("abon", 1 )))
 } Else {
     Set oAbon = ##class(ver.Abon).%New()
 }

используйте &html<> и &js<>
Код: 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.
ClassMethod OnPageBODY() As %Boolean {
 k args m args=%request.Data
 w ..HyperEventHead()
 &html<body onload='document.fAbon.tCode.focus()'>>
 s abon=$g(args("abon", 1 ))
 If abon'="" {
     s oAbon = ##class(ver.Abon).%OpenId(abon)
 } else {
     Set oAbon = ##class(ver.Abon).%New()
 }
 d ..wForm(.args)

 &html<<script language="javascript">
  // Обновить информацию
  function LoadInfo() {
	var obj=document.fAbon; obj.submit();
 }
 </script></body>>
 Q  1 
}

///Пишем что угодно, тестируем откуда угодно, переопределяем как угодно
ClassMethod wForm(ByRef args as %String="") as %Status {
 &html<<form>Insert your code here>
 d ..wTable(.args) ;и так далее
 &html<</form>
 >
}

CLS + :
единый синтаксис (никаких arguments="&ars:%String" и прочих "расширений")
регистрозависимые имена классов
полноценное тестирование любой части
обычное программирование на COS (метки в методе, например) без всяких "дырявых абстракций" в виде CSP и ЗЕН.
Кстати можно создать очень быстро создать их аналог ("просмотр другого кода") под себя ;)

СSP(ZEN) + : хоть и "дырявая", но все-таки абстракция. Разные вкусности в виде cspbind и zen-компонентов.
СSP(ZEN) - : чтобы вкусности получить придется изучить еще два языка (CSP, ZEN)
ZEN -: не на всех версиях будет работать

P.S но каждому свое, конечно...
...
Рейтинг: 0 / 0
29.01.2011, 09:39
    #37085753
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
doublefintkrvsa, что ж вы над людьми издеваетесь...
Не понял почему это адресовано мне, если пример (cls), что я привёл, генерит Каше... Т.ч. прям в техподдержку ИС так и напиши:
- ИС, что ж вы над людьми издеваетесь...

Ну а далее потексту с примерами...
...
Рейтинг: 0 / 0
29.01.2011, 09:40
    #37085754
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
TurkПростой пример - вывод записей в таблицу (минимум - цикл по ИД). Можно воспользоваться Ajax-ом, но это не всегда целесообразно.
И в чем тут выигрыш cls vs csp?
...
Рейтинг: 0 / 0
29.01.2011, 11:16
    #37085803
Turk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
krvsaTurkПростой пример - вывод записей в таблицу (минимум - цикл по ИД). Можно воспользоваться Ajax-ом, но это не всегда целесообразно.
И в чем тут выигрыш cls vs csp?
Речь шла не о выигрыше, а о удобстве. CSP в указанном примере вряд ли получится сделать более "красивым", чем CLS.
Другой пример - комментарии в коде. Чаще всего нежелательна передача этих строк на клиентскую машину (в целях безопасности или экономии трафика).
...
Рейтинг: 0 / 0
29.01.2011, 11:22
    #37085807
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
krvsa, не уходите от сути... Требовать наглядности от генератора несправедливо имхо, у него другие задачи.
Что более читабельно CSP или CLS? На чем у разработчика больше возможностей наглядно и удобно организовать свой код?
...
Рейтинг: 0 / 0
29.01.2011, 11:46
    #37085819
neznau
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
это дискуссия из серии: блочная верстка vs табличная ) имхо
...
Рейтинг: 0 / 0
29.01.2011, 13:19
    #37085879
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
doublefintkrvsa, не уходите от сути...
Я не ухожу, я тут. А вот твои укоры были не по адресу...

doublefintЧто более читабельно CSP или CLS?
Я таки считаю что в csp... Обратных примеров я не видел.
...
Рейтинг: 0 / 0
29.01.2011, 13:22
    #37085881
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
TurkРечь шла не о выигрыше, а о удобстве
Да как ниназови...

TurkCSP в указанном примере вряд ли получится сделать более "красивым", чем CLS.
Где примеры "красивого" и "некрасивого" аналога? Примеров таки все нет... Значит разговор "не предметный".

TurkДругой пример - комментарии в коде.
Примеры? Где они?
Сколько килобайт и какой секретной информации скрывается от "клиента"?
...
Рейтинг: 0 / 0
29.01.2011, 13:29
    #37085889
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
neznauэто дискуссия из серии: блочная верстка vs табличная ) имхо
Там можно и нужно сочетать. Тут сочетать не получится, тут либо/либо...
Но как делать, кождый решает сам. Мне просто жутко интересно посмотреть именно "удобство" класса, а его так и не хотят продемонстрировать...

Я например жду демонстрацию такого типа:
- Вот как удобно в классе
- А вот неудобный аналог на csp

Для меня это будет минимум поучительно, а как максимум - можно взять на вооружение.

Пока кроме наследования никаких явных преимуществ мне не продемонстрировали... Но я это уравниваю простым инклюде в csp.

Пример превосходства doublefint над кащейским компилятором не всчет.
...
Рейтинг: 0 / 0
29.01.2011, 14:40
    #37085958
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
Через csp практически невозможно отдать бинарный контент, так как вылезут пробелы и переводы строк, которые его испортят.
Через csp неудобно отдавать высокодинамичный контент, например через классы мы отдаем XML.
Через классы есть смысл делать библиотечные страницы, вызываемые из разных мест, так как у них постоянный url,
в отличии от csp, url которых может плавать.

Во всех остальных случаях использую csp, даже если это сыз такого вида.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<html>
<head>...</head>
<body>
<server>
..
</server>
</body>
</html>
...
Рейтинг: 0 / 0
29.01.2011, 14:54
    #37085976
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
krvsa, каждому свое... :)
Код: 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.
///Не тестировал, сорри
Class krvsa.clsPage Extends %CSP.Page {
Parameter CHARSET="utf-8";
Parameter TITLE = "Example cls for krvsa";
/// Вывод страницы
ClassMethod OnPage() As %Status {
 m args=%request.Data
 s abon=$g(args("abon", 1 )), type=$g(args("type", 1 )), dprt=$g(args("dprt", 1 ))
 s abonCode="" s:##class(ver.Abon).%ExistsId(abon) abonCode=##class(ver.Abon).NameGetStored(abon)
 s abonName=$$NameAbon^version(abonCode,dprt)
 
 &html<<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" />>
 d ..wTitle(.args)
 d ..wCSS(.args)
 w ..HyperEventHead()
 &html<</head><body>>
 d ..wForm(.args)
 d ..wJS(.args)
 &html<</body></html>>
 Quit $$$OK
}

///Название страницы
ClassMethod wTitle(ByRef args as %String) as %Status {
  w "<title>",..#TITLE,"</title>" Q $$$OK
}

///Подключаемые стили
ClassMethod wCSS(ByRef args as %String) as %Status {
  s href=$$MyCSS^version() 
  &html<<link rel="stylesheet" type="text/css" href="#(href)#" />
  <style type="text/css">
   table {border:none;border-collapse:collapse;width: 90 %;}
 </style>
  >
  Q $$$OK
}

///Выводим форму
ClassMethod wForm(ByRef args as %String) as %Status {
 &html<<form id="fAbon" name='fAbon' method='post' action='abon.csp'>
<!--Основные переменные-->
<input type='hidden' id="abon" name='abon' value='#(abon)#' />
<input type='hidden' id="type" name='type' value='#(type)#' />
<input type='hidden' id="dprt" name='dprt' value='#(dprt)#' />

<!--Таблица данных-->
<fieldset><legend>Абонент <span id="aName">#(abonName)#</span></legend>
<table id="tblData">
<tr>
 <td><label for="tCode">Код:</label></td> 
 <td><input type='text' id="tCode" name='tCode' value="#(abonCode)#" title='Код из дешифратора D_ABON'></td>
</tr>
</table>
</fieldset>
<!--Таблица кнопок-->
<fieldset>
<table id="tblButtons">
 <tr><td><input type='button' id="btnHome" value='На начало'/></td></tr>
 <tr><td><input type='button' id="btnExit" value='Выход'/></td></tr>
 <tr><td><input type='button' id="btnWrite" value='Записать'/></td></tr>
 <tr><td><input type='button' id="btnDel" value='Удалить'/></td></tr>
</table>
</fieldset>
</form>> 
}
///Клиентская логика
ClassMethod wJS(ByRef args as %String){
  s atype=$g(args("type", 1 ))
  &html<<script type="text/javascript">
  function $g(id){return document.getElementById(id);}
  function $$new(tagName){return document.createElement(tagName);}
  var $bind=("\v"=="v")?function(obj,evt,handler){ obj.attachEvent("on"+evt,handler);}
                      :function(obj,evt,handler){ obj.addEventListener(evt,handler,false);}
                      
  var $page={ //не засоряем пространство имен
    go: function(target){ var form=$g("fAbon"); form.target=target; form.submit();}
   ,focus: function(){ $g("tCode").focus(); }
   ,home: function(){ $page.go("info.csp");}
   ,exit: function(){ $page.go("abonall.csp?type=#(atype)#")}
   ,del: function(){ 
     if (!confirm("Удалить абонента?")) return;
     var id=$g("abon").value; 
     var res=#(..HyperEventCall("..Delete","id"))#; if (!res) return;
     $page.exit();
   }
   ,save: function(){ //
     var id=$g("abon").value, code=$g("tCode").value
     var dprt=$g("dprt").value, type=$g("type").value
     var callback="$page.set";
     var res=#(..HyperEventCall("..Save","id,code,dprt,type,callback"))#; if (!res) return false;
     return true;
   }
   ///Переустановит значения на клиенте после сохранения на сервере
   ,set: function(/*JSON server obj*/ аbonObj){ $g("abon").value=abonObj.id; $g("tCode").value=abonObj.code; }
  }
  
  //инициализация клиенткого WUI
  $bind(window,"load",function(){
    $bind($g("fAbon"),"submit",$page.save);  
    $bind($g("btnHome"),"click",$page.home);
    $bind($g("btnExit"),"click",$page.exit);
    $bind($g("btnWrite"),"click",$page.write);
    $bind($g("btnDel"),"click",$page.del);
    $page.focus();
  });
   
 </script>>  
}
///Удаление на сервере
ClassMethod Delete(id as %String,jsfunc as %String="alert") as %Boolean {
 s sc=##class(ver.Abon).%DeleteId(id) Q:sc  1 
 s err=$system.Status.GetOneErrorText(sc)
 w jsfunc,"(",..QuoteJS(err),");" 
 Q  0 
}

///Сохранение на сервере
ClassMethod Save(id as %String,code as %String, dprt as %String, type as %String, jsfunc as %String="alert") as %Boolean {
 s abon=##class(ver.Abon).%OpenId(id) s:'$IsObject(abon) abon=##class(ver.Abon).%New()
 s abon.Code=code, abon.dprt=dprt, abon.type=type, sc=abon.%Save()
 s err="" s:'sc err=$system.Status.GetOneErrorText(sc)
 w jsfunc,"({id:",..QuoteJS(abon.%Id()),",code:",..QuoteJS(abon.Code),"});"
 Q:sc  1  Q  0 
}
}

...
Рейтинг: 0 / 0
29.01.2011, 15:09
    #37086004
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
doublefint , и это типа удобнее и понятнее csp?
...
Рейтинг: 0 / 0
29.01.2011, 15:09
    #37086008
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отличие CSP от CLS
doublefint , а csp аналог этому у тебя будет какой?
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / отличие CSP от CLS / 25 сообщений из 83, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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