Ext.nd. Шо Це Таке?

Eugen

Well-known member
22.03.2012
177
0
#1
Всем здрасьте.

Начальство поставило задачу разобраться с Ext.ND. Насколько я понимаю, это что-то похожее на Xpages, но менее мощное. Может кто подскажет где и что можно почитать про этого "зверя невиданного", желательно на русском. На openNTF скачал последнюю версию(beta4), но мануала так и не нашел. Кто-нибудь работал с этой штукой?
 

Eugen

Well-known member
22.03.2012
177
0
#3

Eugen

Well-known member
22.03.2012
177
0
#4
На форуме случайно нет раздела, посвященного этой теме?
 

savl

Lotus team
28.10.2011
2 131
102
#5
Сомневаюсь... Слишком специфичная штука, но может кто использовал.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#6
на ExtJS писал примерчик для нотусни (вебморду), не помню - выкладывал здесь или нет
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#9
там чистый ExtJS, а не надстройка над ним (extND)
вопрос к начальству - надо ли оно им? :please:

Добавлено: как всегда - встанет вопрос парсинга данных и их отдача по хттп, у домины с этим... ну не очень :mellow:
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#10
и еще камент...
для наколеночной реализации
Для просмотра контента необходимо: Войти или зарегистрироваться

нормально, но для проекта - уж очень топорно, притом вывод идет в ХМЛ, что потребует парсинга в JS (в отличии от JSON)
ну и тамже - хардкоденные принты...
я даже за 5-ть дней - не поленился сделать обертки :please:
как класс отсутствует вывод ошибок в браузер
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#11
пояснения для моей БД (для экономии времени)
из JS дергаются агенты (order....)
агенты используют либу orgPrice
в orgPrice расширяется AgentBase, расширенный класс и используют агенты
все данные вываливаются в ХМЛ (можно переопределить классы - будет JSON)
код писан на java

Добавлено: есть либа предобработки хттп, на LS <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"HttpProcessing"</div></div><div class="sp-body"><div class="sp-content">
Код:
'encode возвращает вместо " " -> "+"
'http://docs.oracle.com/javase/1.4.2/docs/api/java/net/URLEncoder.html
Class HttpBase As ErrorHandlerWJ
Private curdoc As NotesDocument
Private ses As NotesSession
Private isPrintedHeader As Boolean
Private isPrintedEnd As Boolean
Private decoderClass As JavaClass
Private encoderClass As JavaClass
Private encoderObj As JavaObject
Private Contenttype As String
Private msgList List As String
Private msgCount As Long
Private errList List As String
Private errCount As Long
Sub New()
Set ses=New NotesSession
Set curdoc=ses.DocumentContext
Set encoderClass=jSession.Getclass({java/net/URLEncoder})
Set decoderClass=jSession.Getclass({java/net/URLDecoder})
Contenttype={text}
End Sub

Sub Delete
Me.Close
End Sub

Property Get CGIvar(xName As String) As String
CGIvar=curdoc.GetItemValue(xName)(0)
End Property

Private Property Set Content As String

End Property

Property Get GetRequestParams As Variant
On Error Goto ErrH
Dim s As String
s=Fulltrim(GetRequestQuery)
If Len(s)>0 Then
GetRequestParams=Split(s,{&})
Else
s=Fulltrim(GetRequestPost)
If Len(s)>0 Then GetRequestParams=Split(s,{&})
End If
Quit:
Exit Property
ErrH:
Me.PrintError(Me.RaiseError)
Resume Quit
End Property

Property Get GetRequestQuery As String
On Error Goto ErrH
'используется Query_String_Decoded - не чувствует разницы между "+" и " "
'это поведение типично и потому "+" -> " "
GetRequestQuery=curdoc.getItemValue("Query_String_Decoded")(0)
Quit:
Exit Property
ErrH:
Me.PrintError(Me.RaiseError)
Resume Quit
End Property

Property Get GetRequestPost As String
On Error Goto ErrH
GetRequestPost=curdoc.getItemValue("Request_Content")(0)
Quit:
Exit Property
ErrH:
Me.PrintError(Me.RaiseError)
Resume Quit
End Property

Property Get GetRequesPath As String
GetRequesPath=curdoc.getItemValueString("Path_Info_Decoded")
End Property

Sub PrintMsg(msg As String)
PrintHeader
msgList({message_} &Cstr(msgCount))=msg
msgCount=msgCount+1
End Sub

Function Decode(msg As String) As String
Decode=decoderClass.decode(msg)
End Function

Function DecodeUTF8(msg As String) As String
DecodeUTF8=decoderClass.decode(msg,{UTF-8})
End Function

Function DecodeCP1251(msg As String) As String
DecodeCP1251=decoderClass.decode(msg, {Cp1251})
End Function

Function DecodeAll(msg As String, enc As String) As String
DecodeAll=decoderClass.decode(msg, enc)
End Function

Function EncodeAll(msg As String, enc As String) As String
EncodeAll=encoderClass.encode(msg, enc)
End Function

Function Encode(msg As String) As String
Encode=encoderClass.encode(msg)
End Function

Sub PrintMsgEncoded(msg As String)
PrintHeader
msgList({messageEnc_} &Cstr(msgCount))=encoderClass.encode(msg)
End Sub

Private Function PrintHeader As Boolean
On Error Goto ErrH
If isPrintedHeader Then Exit Function
'возвращаем результат в UTF-8
Print {Content-Type: } &Contenttype &{; charset=UTF-8"} 'text/xml;application/xml;
'		Print {Content-Type: } &Contenttype &{; charset=Windows-1251"}
isPrintedHeader=True
Me.PrintHeader=True
Quit:
Exit Function
ErrH:
Error Err, RaiseError
End Function

Private Function PrintEnd As Boolean
If Not isPrintedHeader Then Exit Function
If isPrintedEnd Then Exit Function
isPrintedEnd=True
Me.PrintEnd=True
End Function

Private Sub PrintError(msg As String)
PrintHeader
errList({error_} &Cstr(errCount))=msg
errCount=errCount+1
End Sub

Sub Close
PrintEnd
End Sub
End Class

Class HttpBaseXML As HttpBase
Function PrintHeader As Boolean
Dim b As Boolean
b=HttpBase..PrintHeader
Me.PrintHeader=b
If Not b Then Exit Function
Print {<?xml version="1.0" encoding="UTF-8"?>}
Print {<response>}
End Function

Sub New()
Contenttype={text/xml}
End Sub

Sub PrintMsg(msg As String)
PrintHeader
Print {<message>} &msg &{</message>}
End Sub

Sub PrintMsgEncoded(msg As String)
PrintHeader
Print {<messageenc>} &encoderClass.encode(msg) &{</messageenc>}
End Sub

Function PrintEnd As Boolean
Dim b As Boolean
b=HttpBase..PrintEnd
Me.PrintEnd=b
If Not b Then Exit Function
Print {</response>}
End Function

Sub PrintError(msg As String)
Call HttpBase..PrintError(msg)
Print {<error><object>} & Typename(Me) &{</object><message>} &msg &{</message></error>}
End Sub
End Class

Class HttpBaseJSON As HttpBase
Function PrintHeader As Boolean
Dim b As Boolean
b=HttpBase..PrintHeader
Me.PrintHeader=b
If Not b Then Exit Function
'		Print |{"response":[|
Print |{|
End Function

Sub New
Contenttype="application/json"
End Sub

Function PrintEnd As Boolean
Dim b As Boolean
b=HttpBase..PrintEnd
Me.PrintEnd=b
If Not b Then Exit Function
'		Print |"end":"end"]}|
Print |"end":"end"}|'заглушка, чтобы не заморачиваться на оконечные запятые
End Function

'	Sub PrintMsg(msg As String)
'		PrintHeader
'		Print {"message":"} &msg &{",}
'	End Sub

'	Sub PrintMsgEncoded(msg As String)
'		PrintHeader
'		Print {"message_enc":"} &encoderClass.encode(msg) &{",}
'	End Sub

Sub PrintJSONvar(xName As String, xValue As String)
PrintHeader
Print {"} &xName &{":"} &xValue &{",}
End Sub

'	Sub PrintError(msg As String)
'		Call HttpBase..PrintError(msg)
'		Print |"error":{"object":"| & Typename(Me) &|", "message":"| &msg &|"},|
'	End Sub

Sub Close
'разделим потоки ошибок и сообщений
'выводим ошибки из буфера
Print |errors:[|
Forall e In errList
Print |{"| & Listtag(e) & |":{"object":"| & Typename(Me) &|", "message":"| & e &|"}},|
End Forall
'если первым елементом - errors[0]=="end" - нет ошибок
Print |"end"],| 'зглушка окончания списка ошибок
'выаодим сообщения из буфера
Print |messages:[|
Forall m In msgList
'			Print |{"| &Listtag(m) &|":"| &m &|"},|
Print |"| &m &|",|
End Forall
'если первым елементом - messages[0]=="end" - нет сообщений
Print |"end"],| 'заглушка окончания списка сообщений
HttpBase..Close
End Sub
End Class

Class HttpObj As HttpBaseJSON
End Class
она могет и ХМЛ и JSON, правила мои :please:
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#12
все это я к тому, что не знаю как у них (extND) там с JS, но судя по куску LS - не очень старались над доминошной частью
и брать эту либу как основу для проектов - яб еще раз цать подумал