0 / 0 / 0
Регистрация: 19.10.2005
Сообщений: 603
1

Xpages + Lotusscript

26.08.2010, 11:41. Показов 20250. Ответов 11
Метки нет (Все метки)

Итак, xPages передовая технология, которую будут развивать. У нас, к сожалению или к счастью, тонны кода на LS. Как LS дружит с xPages?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.08.2010, 11:41
Ответы с готовыми решениями:

Xpages И Lotusscript Agent
Доброго времени суток! Возникла необходимость запуска лотусового агента из xpages. Столкнулся с...

Запустить lotusscript c dll из xpages.
Добрый день! Не могу понять как решить задачу. Направьте на путь истинный. Есть у меня...

Lotusscript
Доброго времени суток всем. Возникли некоторые вопросы по ЛС. Вообще он очень похож на бейсик. Но...

Enumeration В Lotusscript
Доброе время суток! Продолжаю скромные попытки расширить возможности разработки на LS. На сей...

11
0 / 0 / 0
Регистрация: 11.09.2009
Сообщений: 313
26.08.2010, 15:45 2
На данный момент занимаюсь разработкой в xpages, библиотеки написанные на LS переписываю на javascript, можно использовать и LS но только через вызов агента
0
0 / 0 / 0
Регистрация: 28.01.2009
Сообщений: 82
26.08.2010, 17:14 3
Цитата Сообщение от fedotxxl
xPages
А это че такое? если правильно понял (это типа "сервлеты" тобишь активные серверные страницы), то им уже капец, сейчас рулит аджакс, еще лучще какойнить сильверлайгхт.
0
0 / 0 / 0
Регистрация: 19.10.2005
Сообщений: 603
27.08.2010, 17:26 4
xRomax
Как насчет использования JS в качестве backend технологии? Или же лучше Java/LS?

etc
JSF в лотусе
0
0 / 0 / 0
Регистрация: 19.10.2005
Сообщений: 603
28.08.2010, 21:55 5
Гм... поискал возможность создавать JS агенты... ничего путного не нашел
Так на чем же кодировать, если использовать xPages? JavaScript/Java/LotusScript? Который из языков позволяет описать и UI, и backGround логику? Здесь еще важен момент наличия подводных камней - с LS уже порядком намучился....
0
0 / 0 / 0
Регистрация: 07.02.2010
Сообщений: 1,063
29.08.2010, 10:00 6
fedotxxl, я так понимаю, что LS там особо не прикрутишь. JS - это как бы native язык для XPages.
0
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
04.11.2010, 11:28 7
LS можно использовать:
- для создания дока на основе XPage на клиенте
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">

Код
xPageName$ = "test"
q$ = |"notes://" + @Name([CN]; @DbName[1]) + "/" + @DbName[2] + "/| + xPageName$ + |.xsp?OpenXPage"|
URL = Evaluate(q$)

Dim NUIWS As New NotesUIWorkspace
Call NUIWS.URLOpen(URL(0))
- для всего бэкграундного функционала (библиотеки, агенты).
0
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 467
06.10.2014, 16:05 8
товарищи.. есть вопрос.. есть форма стандартная. на форме панель с действиями.. все они написаны на LS с вызовом дополнительных функций из библиотек - тоже на LS..
Стоит задача сделать тоже самое на Web морде.. хотелось сделать на XPage.. но уперся в тот момент что не знаю как это переселить на JS.
Можете хотя бы ткнуть пальцем в сторону как это можно реализовать..
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">А это пример одной из кнопок на панели</div></div><div class="sp-body"><div class="sp-content">

LotusScript
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
Sub Click(Source As Button)
Dim session As New NotesSession
Dim view As NotesView
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim w As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim unid As String
Dim sendto As Variant
Dim success As Variant
Dim item As NotesItem
Set db = session.CurrentDatabase
Set uidoc = w.CurrentDocument
Set doc = uidoc.Document
 
AllowEdit = True
If uidoc.EditMode = False Then uidoc.EditMode = True
Call uidoc.Document.ReplaceItemValue("status","3")
Call uidoc.Document.ReplaceItemValue("state","4")
Call uidoc.Document.ReplaceItemValue("ss3","1")
Call uidoc.Document.ReplaceItemValue("ss3_date",Now())
 
answer = Msgbox ("Желаете прокоментировать?",4+32, "Вопрос:")
If answer = IDYES Then
f = w.DialogBox("DlgComment",True,True,False,True,False,False,"Комментарии:",,False,False,True)
If f Then
Call uidoc.Document.ReplaceItemValue("activity_document", Now() & " --> " & uidoc.FieldGetText("activity_user") & " : Служебная записка согласована утверждена адресатом с комментарием: " & uidoc.FieldGetText("tmpComments") & Chr(13) & uidoc.FieldGetText("activity_document"))
Call sendMail_WW(db,uidoc.Document, uidoc.Document.GetItemValue("author"),"СЗ: Ваша служебка утверждена адресатом - " + uidoc.FieldGetText("InternalNumber"),uidoc.FieldGetText("tmpComments"),"Служебную записку утвердили с коментарием")
If Not uidoc.FieldGetText("sendto_copy") ="" Then
Call sendMail_WW(db,uidoc.Document, uidoc.Document.GetItemValue("sendto_copy"),"СЗ: Утверждено адресатом (ознакомление) - " + uidoc.FieldGetText("InternalNumber"),uidoc.FieldGetText("tmpComments"),"Служебную записку утвердили с коментарием")
End If
 
Call uidoc.FieldSetText("tmpComments","")
Call uidoc.Save
Call uidoc.Document.Save(True,False)
End If
Else
 
Call uidoc.Document.ReplaceItemValue("activity_document", Now() & " --> " & uidoc.FieldGetText("activity_user") & " : Служебная записка утверждена адресатом " & Chr(13) & uidoc.FieldGetText("activity_document"))
Call uidoc.Save
Call uidoc.Document.Save(True,False)
Call sendMail_WW(db,uidoc.Document, uidoc.Document.GetItemValue("author"),"СЗ: Ваша служебка утверждена адресатом - " + uidoc.FieldGetText("InternalNumber"),Left(uidoc.FieldGetText("Body"),100),"Часть текста служебной записки")
If Not uidoc.FieldGetText("sendto_copy") ="" Then
Call sendMail_WW(db,uidoc.Document, uidoc.Document.GetItemValue("sendto_copy"),"СЗ: Утверждено адресатом (ознакомление) - " + uidoc.FieldGetText("InternalNumber"),Left(uidoc.FieldGetText("Body"),100),"Часть текста служебной записки")
End If
End If
 
If doc.Getitemvalue("SendTo_Copy")(0)<>"" Then
var = GetReaders(doc.Getitemvalue("SendTo_Copy"))
Set item = doc.ReplaceItemValue("Ot_Readers",Arrayappend(doc.ot_readers,var) )
Item.IsReaders = True
Item.IsSummary = True
Call doc.Save(True,False)
End If
 
 
Call uidoc.Save()
 
Call uidoc.Close
End Sub
 
Function GetReaders (Names As Variant)
Dim rez As Variant
Dim Persons As Variant
Dim tmpPers As Variant
 
ForAll Nam In names
tmpPers = Split(nam,"@")
rez = Evaluate(|
@Do(
Server := "Ezop";
DbName := "names.nsf";
View := "($LDAPCN)";
@Certificate([Subject];@DbLookup("":"NoCache"; Server : Dbname; View; @LowerCase(@Name([CN];"| & tmpPers(0) & |")); "Certificate")))|)
 
If IsArray(persons) Then
persons = ArrayAppend(Persons,rez)
Else
persons = rez
End If
 
End ForAll
 
GetReaders = persons
End Function
 
Sub sendMail_WW (db As NotesDatabase,doc As NotesDocument,sendto As Variant, subject As String, body As String, HeadBody As string)
Dim s As New NotesSession
Dim hdr As NotesMIMEHeader
Dim stream As NotesStream
Dim MIMEE As NotesMIMEEntity
Dim Hlink As String
Dim Nlink As String
Nlink = doc.Notesurl
 
Hlink = Replace( Nlink, "нотес адрес" , "инет адрес")
Hlink = Replace( Hlink, "notes:" , "https:")
 
 
Set mailDoc = db.CreateDocument
mailDoc.Form = "memo"
mailDoc.Principal = "Хранилище типовых документов"
mailDoc.SMTPOriginator = "Хранилище типовых документов"
mailDoc.DisplaySent = "Mail Agent"
mailDoc.From = "Внутренний документооборот"
mailDoc.Subject = subject
mailDoc.Importance = importance
mailDoc.SendTo = sendto
 
Set MIMEE = maildoc.CreateMIMEEntity("Body")
Set hdr = MIMEE.CreateHeader("MIME-Version")
Call hdr.SetHeaderValAndParams(|1.0|)
Set stream = s.CreateStream
 
Call stream.WriteText(|<p><font size="1" color="maroon" face="Tahoma">Данное сообщение является информационным. Для совершения требуемых действий
пройдите по представленным ниже ссылкам. Отвечать на данное сообщение ненужно. </p></font>|)
Call stream.WriteText(|<p><font size="2" face="Tahoma">Ссылки на документ.<br>|)
Call stream.WriteText(|<a href="| + Nlink + |">Ссылка для доступа через стандартный клиент</a><br>|)
Call stream.WriteText(|<br>|)
 
Call stream.WriteText(|<a href="| + Hlink+ |">Ссылка для доступа через WEB или с мобильного клиента</a>|)
Call stream.WriteText(|<br>|)
Call stream.WriteText(|<br>|)
 
Call stream.WriteText(||+HeadBody+|:<br>|)
Call stream.WriteText(|<br>|)
 
Call stream.WriteText(|</font><Table border="1"><Tbody><TR><TD>|)
Call stream.WriteText(Body)
Call stream.WriteText(|</TD></TR></Tbody></Table>|)
 
stream.Position = 0&
MIMEE.SetContentFromText stream, "text/html;charset=UTF-8", ENC_IDENTITY_8BIT
Call maildoc.CloseMIMEEntities(True, "MIMEE")  finalize pending changes into the document.
Call mailDoc.Send(False)
End Sub
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
06.10.2014, 19:01 9
такой хардкод переписывать полюбасу ;)
это как код на пыхе - логика, строки, данные, потоки...
все в одной куче, здесь даже рапер написать проблематично
понадобится локализация... - опять засада
потихоньку менять кусок за куском, если есть описание/понимание - что код делает
у меня много старого говнокода - а шо делать :(
0
0 / 0 / 0
Регистрация: 15.01.2010
Сообщений: 256
06.10.2014, 19:05 10
Цитата Сообщение от swyatogor
товарищи.. есть вопрос.. есть форма стандартная. на форме панель с действиями.. все они написаны на LS с вызовом дополнительных функций из библиотек - тоже на LS..
Стоит задача сделать тоже самое на Web морде.. хотелось сделать на XPage.. но уперся в тот момент что не знаю как это переселить на JS.
Можете хотя бы ткнуть пальцем в сторону как это можно реализовать..
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">А это пример одной из кнопок на панели</div></div><div class="sp-body"><div class="sp-content">

LotusScript
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
Sub Click(Source As Button)
Dim session As New NotesSession
Dim view As NotesView
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim w As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim unid As String
Dim sendto As Variant
Dim success As Variant
Dim item As NotesItem
Set db = session.CurrentDatabase
Set uidoc = w.CurrentDocument
Set doc = uidoc.Document
 
AllowEdit = True
If uidoc.EditMode = False Then uidoc.EditMode = True
Call uidoc.Document.ReplaceItemValue("status","3")
Call uidoc.Document.ReplaceItemValue("state","4")
Call uidoc.Document.ReplaceItemValue("ss3","1")
Call uidoc.Document.ReplaceItemValue("ss3_date",Now())
 
answer = Msgbox ("Желаете прокоментировать?",4+32, "Вопрос:")
If answer = IDYES Then
f = w.DialogBox("DlgComment",True,True,False,True,False,False,"Комментарии:",,False,False,True)
If f Then
Call uidoc.Document.ReplaceItemValue("activity_document", Now() & " --> " & uidoc.FieldGetText("activity_user") & " : Служебная записка согласована утверждена адресатом с комментарием: " & uidoc.FieldGetText("tmpComments") & Chr(13) & uidoc.FieldGetText("activity_document"))
Call sendMail_WW(db,uidoc.Document, uidoc.Document.GetItemValue("author"),"СЗ: Ваша служебка утверждена адресатом - " + uidoc.FieldGetText("InternalNumber"),uidoc.FieldGetText("tmpComments"),"Служебную записку утвердили с коментарием")
If Not uidoc.FieldGetText("sendto_copy") ="" Then
Call sendMail_WW(db,uidoc.Document, uidoc.Document.GetItemValue("sendto_copy"),"СЗ: Утверждено адресатом (ознакомление) - " + uidoc.FieldGetText("InternalNumber"),uidoc.FieldGetText("tmpComments"),"Служебную записку утвердили с коментарием")
End If
 
Call uidoc.FieldSetText("tmpComments","")
Call uidoc.Save
Call uidoc.Document.Save(True,False)
End If
Else
 
Call uidoc.Document.ReplaceItemValue("activity_document", Now() & " --> " & uidoc.FieldGetText("activity_user") & " : Служебная записка утверждена адресатом " & Chr(13) & uidoc.FieldGetText("activity_document"))
Call uidoc.Save
Call uidoc.Document.Save(True,False)
Call sendMail_WW(db,uidoc.Document, uidoc.Document.GetItemValue("author"),"СЗ: Ваша служебка утверждена адресатом - " + uidoc.FieldGetText("InternalNumber"),Left(uidoc.FieldGetText("Body"),100),"Часть текста служебной записки")
If Not uidoc.FieldGetText("sendto_copy") ="" Then
Call sendMail_WW(db,uidoc.Document, uidoc.Document.GetItemValue("sendto_copy"),"СЗ: Утверждено адресатом (ознакомление) - " + uidoc.FieldGetText("InternalNumber"),Left(uidoc.FieldGetText("Body"),100),"Часть текста служебной записки")
End If
End If
 
If doc.Getitemvalue("SendTo_Copy")(0)<>"" Then
var = GetReaders(doc.Getitemvalue("SendTo_Copy"))
Set item = doc.ReplaceItemValue("Ot_Readers",Arrayappend(doc.ot_readers,var) )
Item.IsReaders = True
Item.IsSummary = True
Call doc.Save(True,False)
End If
 
 
Call uidoc.Save()
 
Call uidoc.Close
End Sub
 
Function GetReaders (Names As Variant)
Dim rez As Variant
Dim Persons As Variant
Dim tmpPers As Variant
 
ForAll Nam In names
tmpPers = Split(nam,"@")
rez = Evaluate(|
@Do(
Server := "Ezop";
DbName := "names.nsf";
View := "($LDAPCN)";
@Certificate([Subject];@DbLookup("":"NoCache"; Server : Dbname; View; @LowerCase(@Name([CN];"| & tmpPers(0) & |")); "Certificate")))|)
 
If IsArray(persons) Then
persons = ArrayAppend(Persons,rez)
Else
persons = rez
End If
 
End ForAll
 
GetReaders = persons
End Function
 
Sub sendMail_WW (db As NotesDatabase,doc As NotesDocument,sendto As Variant, subject As String, body As String, HeadBody As string)
Dim s As New NotesSession
Dim hdr As NotesMIMEHeader
Dim stream As NotesStream
Dim MIMEE As NotesMIMEEntity
Dim Hlink As String
Dim Nlink As String
Nlink = doc.Notesurl
 
Hlink = Replace( Nlink, "нотес адрес" , "инет адрес")
Hlink = Replace( Hlink, "notes:" , "https:")
 
 
Set mailDoc = db.CreateDocument
mailDoc.Form = "memo"
mailDoc.Principal = "Хранилище типовых документов"
mailDoc.SMTPOriginator = "Хранилище типовых документов"
mailDoc.DisplaySent = "Mail Agent"
mailDoc.From = "Внутренний документооборот"
mailDoc.Subject = subject
mailDoc.Importance = importance
mailDoc.SendTo = sendto
 
Set MIMEE = maildoc.CreateMIMEEntity("Body")
Set hdr = MIMEE.CreateHeader("MIME-Version")
Call hdr.SetHeaderValAndParams(|1.0|)
Set stream = s.CreateStream
 
Call stream.WriteText(|<p><font size="1" color="maroon" face="Tahoma">Данное сообщение является информационным. Для совершения требуемых действий
пройдите по представленным ниже ссылкам. Отвечать на данное сообщение ненужно. </p></font>|)
Call stream.WriteText(|<p><font size="2" face="Tahoma">Ссылки на документ.<br>|)
Call stream.WriteText(|<a href="| + Nlink + |">Ссылка для доступа через стандартный клиент</a><br>|)
Call stream.WriteText(|<br>|)
 
Call stream.WriteText(|<a href="| + Hlink+ |">Ссылка для доступа через WEB или с мобильного клиента</a>|)
Call stream.WriteText(|<br>|)
Call stream.WriteText(|<br>|)
 
Call stream.WriteText(||+HeadBody+|:<br>|)
Call stream.WriteText(|<br>|)
 
Call stream.WriteText(|</font><Table border="1"><Tbody><TR><TD>|)
Call stream.WriteText(Body)
Call stream.WriteText(|</TD></TR></Tbody></Table>|)
 
stream.Position = 0&
MIMEE.SetContentFromText stream, "text/html;charset=UTF-8", ENC_IDENTITY_8BIT
Call maildoc.CloseMIMEEntities(True, "MIMEE")  finalize pending changes into the document.
Call mailDoc.Send(False)
End Sub

Переписывать, тут UI-шные вещи есть как минимум - ws и т.д. ... это никак XPage не поймет (естественно даже если это в агент запихнуть)


P.S.
На самом деле (при быстром просмотре листинга кода :( ) - тут отправка письма с предварительным вызовом диалога ... в принципе ничего критичного и сложного в том чтобы переписать это на js нет. Причем функции GetReaders и sendMail_WW можете перенести в lotusscript агент и соответственно вызывать их оттуда - т.е. в XPage реализовать только вызов диалога и запуск агента
0
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 467
06.10.2014, 19:20 11
да.. там ни чего сложного (для мну) нет (я писал))
просто я кроме формул и ЛС ни на чем не писал.. и для мну темный лес как из сервер сайд ДжиэС спросить пользователя хочет он чего то или не хочет..
как из когда страницы вызвать функцию из библиотеки?? т.е. по идее это базовые навыки программирования в страницах.. просто я этого не знаю.. вот и прошу дать пару пояснений.. как сделать..

а вообще появилось желание снести это всё в агента.. а пользователь будет делать только простейшие (для меня) действия делать - изменить одно поле и сохранить док.. или создавать новый док)) это я знаю как))
0
ty3uk
07.10.2014, 09:37 12
мысли в слух....

у меня сейчас медленно но верно поднимается вопрос переделки всего ЭДО на работу с XPages-ами. Слава богу, что ранее, я уже вводил всякие стандарты, которые облегчат этот переход. Система, сделана так, что некоторая часть кода есть в самой форме (это всевозможные "выборы" из других баз и т.п.), а вся бизнесс логика, висит в "процессах". В процессах, в свою очередь, работа с пользователем минимальная. В 99% случаев, это "алерты" (для данного перехода нужно заполнить такое-то поле!) или действия, которые выполяются без участия пользователя (отсылка нотификаций, пинание агнта в другой базе и т.п.). Но даже для Алертов, у меня, давно, "закладка" есть, делается это не messagebox-ом, а отдельной функцией (которая, в свою очередь, знает где сейчас "находимся", уя/агент/веб/хпагесы) и, соотвественно, в зависимости от ситуации, ведёт себя по разному.
Одна из фич, которая появилась в 8.5.1 если мне память не изменяет, это тот момент, что можно передавать документ с веба в лотусовый агент, БЕЗ СОХРАНЕНИЯ! Т.е. в моём случае, для процессов, теже алерты, тупо пихаются обратно в документ (через спец поле) и отдаются в веб, где идёт перехват и показывается пользователю.
А вот чистая работа с формой, это да, проблема. Но деваться некуда, надо переписывать для ХПагесов. Огромный плюс в том, что можно сделать КастомКонтрол, и, потом, его "зашарить" по всем базам (мне это очень важно, т.к. во всех базах идёт работа с ОргСтруктурой, Контрами и некоторыми специфичными для клиента базами, и, если есть какие-то изменения, то надо сразу во всех базах менять). Соотвественно поменяв Кастом в корневой базе, он, автоматом, обновиться во всех (вроде, пока не проверял). Есть, конечно, один сильный минус, это то, что кастом надо привязывать к полю, но, я пока не пробовал, но можно делать свои кастомы, в которые передавать поле как параметр.
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2014, 09:37
Помогаю со студенческими работами здесь

Lotusscript And Word
Всем привет! Есть такая проблема, в WORDe через макрос команда записи в колонтитул мне не о чем не...

проверка на Lotusscript
Помогите написать на LotusScript проверку заполнения обязательных полей на форме с выводом...

Webservice lotusscript
никогда не создавал на LS, но тут решил попробовать - задолбался первый же вопрос - подключение...

Lotusscript Library
Всем здрасте! Есть у кого-нить наработки как получить перечень процедур из библиотеки?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru