powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / отличие CSP от CLS
25 сообщений из 83, страница 1 из 4
отличие CSP от CLS
    #37083512
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В чем отличие между созданием 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
отличие CSP от CLS
    #37083539
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewQwerВ чем отличие между созданием csp страницы и созданием класса
Все легко сравнивается если csp страницу "Вид->Посмотр других"...

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

Но никто не запретил писать csp, потом самому их компилировать... Потом использовать в урлах расширение cls...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083548
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cls,
проще организовать наследование,
удобнее писать на чистом COS
можно получить более читаемый удобный код
csp,
можно использовать теги <csp:?>
проще писать когда в основном это HTML
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083588
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ясненько, спасибо
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083617
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorможно получить более читаемый удобный код
В сравнении с csp? В cls будет более читабельный код? По-мне так это очень сомнительное высказываете... Особенно если учесть что речь таки идёт о вэбе.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083625
Фотография 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.
<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
отличие CSP от CLS
    #37083637
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsacls - уже скомпилированая, типа быстрее грузится.

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

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

Вообще, CSP, конечно, это технология от Cache' ;)
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37083943
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да, в общем если сказать проще то csp лучше для HTML дизайнера, а CLS для программиста
если код складывается в основном из HTML, до да проще его сделать в CSP
а вот если в коде гораздо больше генерации на основе COS, то cls непременно будет удобней
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37084041
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorа вот если в коде гораздо больше генерации на основе COS, то cls непременно будет удобней
Все равно сильно сомневаюсь... И примеров тому пока не видел...
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37084979
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsaDAiMorа вот если в коде гораздо больше генерации на основе COS, то cls непременно будет удобней
Все равно сильно сомневаюсь... И примеров тому пока не видел...
Простой пример - вывод записей в таблицу (минимум - цикл по ИД). Можно воспользоваться Ajax-ом, но это не всегда целесообразно.
...
Рейтинг: 0 / 0
отличие CSP от CLS
    #37085337
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
отличие CSP от CLS
    #37085753
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintkrvsa, что ж вы над людьми издеваетесь...
Не понял почему это адресовано мне, если пример (cls), что я привёл, генерит Каше... Т.ч. прям в техподдержку ИС так и напиши:
- ИС, что ж вы над людьми издеваетесь...

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

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

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

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

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

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

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

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


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