Xpages + Lotusscript

Тема в разделе "Lotus - Xpages", создана пользователем fedotxxl, 27 авг 2010.

  1. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Итак, xPages передовая технология, которую будут развивать. У нас, к сожалению или к счастью, тонны кода на LS. Как LS дружит с xPages?
     
  2. xKlonx

    xKlonx Lotus team
    Lotus team

    Регистрация:
    10 сен 2009
    Сообщения:
    412
    Симпатии:
    0
    На данный момент занимаюсь разработкой в xpages, библиотеки написанные на LS переписываю на javascript, можно использовать и LS но только через вызов агента
     
  3. etc

    etc Гость

    А это че такое? если правильно понял (это типа "сервлеты" тобишь активные серверные страницы), то им уже капец, сейчас рулит аджакс, еще лучще какойнить сильверлайгхт.
     
  4. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    xRomax
    Как насчет использования JS в качестве backend технологии? Или же лучше Java/LS?

    etc
    JSF в лотусе
     
  5. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Гм... поискал возможность создавать JS агенты... ничего путного не нашел
    Так на чем же кодировать, если использовать xPages? JavaScript/Java/LotusScript? Который из языков позволяет описать и UI, и backGround логику? Здесь еще важен момент наличия подводных камней - с LS уже порядком намучился....
     
  6. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    fedotxxl, я так понимаю, что LS там особо не прикрутишь. JS - это как бы native язык для XPages.
     
  7. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    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">
    Код (Text):
    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))
    - для всего бэкграундного функционала (библиотеки, агенты).
     
  8. swyatogor

    swyatogor Lotus team
    Lotus team

    Регистрация:
    24 фев 2014
    Сообщения:
    432
    Симпатии:
    10
    товарищи.. есть вопрос.. есть форма стандартная. на форме панель с действиями.. все они написаны на 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):
    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
     
  9. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    такой хардкод переписывать полюбасу ;)
    это как код на пыхе - логика, строки, данные, потоки...
    все в одной куче, здесь даже рапер написать проблематично
    понадобится локализация... - опять засада
    потихоньку менять кусок за куском, если есть описание/понимание - что код делает
    у меня много старого говнокода - а шо делать :(
     
  10. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0

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


    P.S.
    На самом деле (при быстром просмотре листинга кода :( ) - тут отправка письма с предварительным вызовом диалога ... в принципе ничего критичного и сложного в том чтобы переписать это на js нет. Причем функции GetReaders и sendMail_WW можете перенести в lotusscript агент и соответственно вызывать их оттуда - т.е. в XPage реализовать только вызов диалога и запуск агента
     
  11. swyatogor

    swyatogor Lotus team
    Lotus team

    Регистрация:
    24 фев 2014
    Сообщения:
    432
    Симпатии:
    10
    да.. там ни чего сложного (для мну) нет (я писал))
    просто я кроме формул и ЛС ни на чем не писал.. и для мну темный лес как из сервер сайд ДжиэС спросить пользователя хочет он чего то или не хочет..
    как из когда страницы вызвать функцию из библиотеки?? т.е. по идее это базовые навыки программирования в страницах.. просто я этого не знаю.. вот и прошу дать пару пояснений.. как сделать..

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

    ty3uk Well-Known Member

    Регистрация:
    31 мар 2008
    Сообщения:
    169
    Симпатии:
    0
    мысли в слух....

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

Поделиться этой страницей