1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Создание HTML

Тема в разделе "Lotus - Программирование", создана пользователем Medevic, 16 фев 2005.

  1. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Привет всем !
    Формирую отчет. Так как таблицы в РичТексте - вообще полный сакс, то решил сделать отчет в HTML. Но и тут возникла проблема.
    Как создать письмо, поле которого содержало бы HTML-текст и при открытии его по форме Memo (т.е. в стандартной почтовой базе) оно нормально отобразилось ?
    Если можно, то дайте небольшой примерчик.
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Сделал, то что спрашивал.
    При нажатии на кнопку формируется документ по новой форме, а в нем динамически создается HTML-текст и нормально отображается. Конечно как-то это через одно место. Если кому-нибудь надо, то расскажу.
     
  3. nor

    nor Гость

    Репутация:
    0
    Medevic
    Мне очень интересно. Расскажи, пожалуйста.
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Лотус 6.5
    Вот как это работает.
    Есть форма (пусть будет Form1), где пользователь выбирает имя менеджера и год для отчета. И жмет кнопку. Открывается форма Form2. Где создается наша таблица.
    Кнопка создает другой документ по форме Form2 и передает данные в новый документ:

    Вот код:
    Код:
    Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim ws As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim curdoc As NotesDocument
    Set db = session.CurrentDatabase
    Dim doc As New NotesDocument(db)
    Set curdoc = ws.CurrentDocument.Document
    doc.Form="Form2"
    doc.Manager=curdoc.Manager
    doc.Year=curdoc.Year	
    Call ws.EditDocument(False, doc)
    End Sub
    На Form2 создаем поле (например Body). Обычное текстовое (лучше бы сделать RichText - но тут определенные трудности. возможно неопредолимые). Его потом делаем невидимым.
    Также создаем Computed Text со значением Body. Выделяем Computed Text и ставим ему Pass-Thru HTML (меню Text->Pass-Thru HTML).
    Дальше в событии QueryOpen формы Form2 начинаем создавать HTML-документ.

    Вот код (упрощенный, но должен работать):
    Код:
    Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
    Dim curdoc As NotesDocument
    Set curdoc = Source.Document
    Dim st As String
    st=""
    st=st+"<H3>Тест !!!</H3>"
    curdoc.Body=st
    End Sub
    Вот, вроде, все. Если не не забыл чего-нить.
     
  5. Гость

    Репутация:
    0
    Занимаюсь созданием сайта.Не знаю как сделать простейший форум с окном сообщений.
     
  6. Гость

    Репутация:
    0
    Я работаю с html и прошу скажите кто-нибудь нужные тэги.
     
  7. nor

    nor Гость

    Репутация:
    0
    Андрей
    Посмотри как сделаны web-ориентированные базы данных в лотус, например, почтовый ящик. Создай из шаблона нужные базы и посмотри их в дизайнере и в броузере.
    Про какие-такие нужные тэги ты хочешь, чтобы тебе рассказали?
     
  8. Guest

    Guest Гость

    Репутация:
    0
    Я хочу узнать как сделать окошко в котором будут видны сообщения тех кто их отправит (пользователей моего сайта). Не надо ни ников, ни логинов, ни тем более авторов.Внизу html документа должно быть окно отправки сообщений(типа как здесь). Прошу мой сайт на гране ОБЛОМА!!! Я разослал это сообщение на десятки форумов, откликнулись только здесь.
    Пробовал. На большинстве форумов полней шая заморочка:все тэги в перемешку и без разбора.
    И насчёт баз я не очень рублю...Буду очень благодарен если ты подробно всё опишешь
     
  9. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Андрей. Лотус имеет к твоему сайту отношение или тебе нужен любой готовый форум ? Если любой готовый, то гляди сюда http://www.3dnews.ru/software/invision/
     
  10. nor

    nor Гость

    Репутация:
    0
    Андрей
    На форме оформляешь форму (NotesForm) с окном сообщения. Располагаешь на форме поле типа RichTextItem, называешь его, например, "Body". В свойствах поля на закладке "Advanced" в секции "Help Description" прописываешь, например, "[<rows=8 cols=85>]" - высота 8, ширина 85. Далее, допустим, располагаем ниже три кнопочки: "Сохранить" (сохранение сообщения на форуме), "Отмена" (Undo), "Удалить" (удаление собственного сообщения на форуме). В свойствах формы на закладке "Defaults" в секции "On Open" ставишь галочку "Automatically Enable Edit Mode". Для оформления тэгов HTML на форме необходимо выполнить следующее: прямо на форме записать нужные тэги, выделить их, через меню "Text" для выделенного текста установить признак "Pass-Thru HTML". Фон тэгов должен полсле этого принять серый цвет. (Например, таким образом можно оформить отступы на форме между ее элементами: <br>).
    В кнопках по событию "onClick" необходимо расположить JavaScript код либо вызов функций JavaScript. В последнем случае все функции JavaScript необходимо расположить в секции формы "JS Header". Кнопки можно оформлять в виде картинок для лучшего стилистического оформления. (Картинкам кнопок можно придать иллюзию их нажатия при наведении курсора мышки на них. Для этого необходимо расположить две картинки (кнопка в ненажатом состоянии и кнопка в нажатом состоянии) рядом с отступом по горизонтали в один пиксел между ними. Все картинки естественно лучше хранить в базе данных в секции "Shared Resources - Images". Кроме того, чтобы этот эффект работал в свойствах картинки на секции "Basics - Advanced" для свойства "Images across" необходимо выставить "2", для свойства "Images down" необходимо выставить "1" и поставить птичку "Web browser compatible").
    Итак, на кнопке "Отмена" у нас происходит вызов стандартной процедуры JavaScript "reset()".
    На кнопке "Сохранить" у нас происходит вызов процедуры JavaScript "RefreshDoc()":
    Код:
    function RefreshDoc(){
    
    document.forms[0].action.value = "refreshing_doc";
    document.forms[0].submit(); 
    
    }
    "action" - название скрытого поля на форме, который хранит значения выполняемых действий с документом. В данном случае мы хотим документ сохранить в базе данных (на форуме) и снова отобразить его на экране (возможно сделать так, что после сохранения нового сообщения на форме орывается не текущая форма документа, а уже другая, которая, например, содержит список всех сообщений данной темы, как в стандартных форумах это принято).
    По команде "submit()" вызывается агент, прописанный в секции формы "WebQuerySave". В моем случае там прописано следуюющее: "@Command([ToolsRunMacro]; "board")", где "board" - название агента.
    Рассмотрим этот агент. В свойствах агента на закладке "Basics" в секции "Runtime" он имеет свойства: "Trigger On event Action menu selection, Target None".
    Код:
    (Declarations)
    Dim session As NotesSession	
    Dim db As NotesDatabase	
    Dim doc As NotesDocument
    Dim profile As NotesDocument
    Dim view As NotesView
    Dim item As NotesItem
    Код:
    Sub Initialize
    
    Set session = New NotesSession
    Set db = session.CurrentDatabase
    
    Set doc = session.DocumentContext	
    
    Set view = db.GetView("($profile)")
    Set profile = view.GetFirstDocument
    
    If doc.action(0) = "refreshing_doc" Then Call RefreshDoc(doc)
    If doc.action(0) = "deleting_doc" Then Call DeleteMsg(doc)
    
    
    End Sub
    Код:
    Sub RefreshDoc(doc As NotesDocument)
    
    Set item = doc.GetFirstItem("body")	
    doc.msg_to_display = item.Text
    doc.msg_attr = " Автор: " + doc.user_name(0) + Chr(10) + "Дата: " + doc.cur_date(0)	
    Call doc.Save(True, True)
    Call doc.ComputeWithForm(False, False)
    Print "[" + profile.db_directory(0) + "/" + db.FileName + "/0/" + doc.UniversalID + "?OpenDocument]"
    
    End Sub
    Код:
    Sub DeleteMsg(doc As NotesDocument)
    
    Set send_confirmation = New NotesDocument(db)
    send_confirmation.Form = "send_confirmation"
    send_confirmation.is_draft = 1
    send_confirmation.title = "Подтверждение удаления документа"
    send_confirmation.msg = "Документ успешно удален." 
    send_confirmation.action = doc.action(0)
    send_confirmation.updating_doc_unid = doc.UniversalID 
    Call send_confirmation.Save(True, True) 
    
    Print "[" + profile.db_directory(0) + "/" + db.FileName + "/0/" + send_confirmation.UniversalID + "?OpenDocument]"
    
    End Sub
    В секции "Initialize" агент инициирует профильный документ текущей базы данных "profile" и в зависимости от кода поля текущей формы "action" вызывает определенную функцию LotusScript. В данном случае - "RefreshDoc". Что делает эта функция? Получает доступ к полю "body" и в скрытое поле "msg_to_display" копирует текст сообщения. В поле "msg_attr" заносятся атрибуты сообщения: автор и дата сообщения, которые берутся из скрытых полей "user_name"
    Код:
    (value="name := @Left(@V3UserName; "/");")
    и "cur_date"
    Код:
    (value="@Left(@Text(@Now); " ")")
    . Затем документ сохраняется в базе данных и переоткрывается в броузере. Поле профильного документа текущей базы данных: "db_directory"
    Код:
    (value=directory := @LeftBack(@Subset(@DbName;-1);"\\"); "/" + @ReplaceSubstring(directory; "\\"; "/" ))
    .
    По кнопке "Удалить" происходит выхов функции JavaScript "DeleteMsg()":
    Код:
    function DeleteMsg(){
    var flag;
    
    flag = confirm("Внимание: документ будет безвозвратно удален.\r\rПродолжить?");	
    if(flag == true){	
    document.forms[0].action.value = "deleting_doc";
    document.forms[0].submit();	
    }
    }
    Данная процедура вызывает функцию LotusScript "DeleteMsg" в агенте "board". Данная функция выводит в броузере форму подтверждения удаления документа. При создании данного документа на событии формы этого документа "WebQueryOpen" вызывается фунция другого агента, которая находит помеченный документ на удаление по его UNID и удаляет из базы данных.
    _________________
    Естественно необходимо сделать так, чтобы доступ не радактирование и удаление сообщений форума давался только опредленному кругу лиц - его создателю и группе привилегированных пользователей и в определенных случаях.
    На форме сообщения в событиии "WebQueryOpen" вызывается агент "refresh_access", который определеят текущий уровень доступа текущего пользователя к документу:
    Код:
    (Declarations)
    Dim session As NotesSession	
    Dim db As NotesDatabase	
    Dim doc As NotesDocument
    Код:
    Sub Initialize
    Dim user_name, owner_name As Variant
    
    Set session = New NotesSession
    Set db = session.CurrentDatabase
    
    Set doc = session.DocumentContext	
    
    user_name = Evaluate("@UserNamesList", doc) 	
    user_name = Strleft(Strright(Cstr(user_name(0)), "="), "/")
    owner_name = Evaluate("@Left(@Right(NotesName; ""=""); ""/"")", doc) 
    doc.name1 = user_name
    doc.name2 = Cstr(owner_name(0))
    If user_name = Cstr(owner_name(0)) Then
    doc.is_owner = 1
    Else
    doc.is_owner = 0
    End If
    
    Call doc.ComputeWithForm(False, False)  
    
    End Sub
    Данный агент сравнивает имя владельца документа и имя теущего пользователя и в зависимости от результата сравнения заполняет скрытое поле "is_owner".
    Поле "body" и кнопки располагаются в секции "Section - Controlled Access", тип которой "Computed":
    Код:
    @If(
    @IsNewDoc; "[consultant]" : "[request_author]" : "[coordinator]";
    is_owner = 0; "[coordinator]";
    "[consultant]" : "[request_author]" : "[coordinator]"
    )
    Все комбинации с ролевым доступом к документу необходимо выполнять, используя поля типа "Readers" и "Authors"
    (В квадратных скобках - названия ролей (roles) в текущей базе данных).
    Сообщения форума можно отобразить посредством внедренного представления документов (Embedded View) на форме.
     
  11. Гость

    Репутация:
    0
    Если можно то вышли мне на skavarotker@mail.ru готовую страницу форума а то я в Лотасах и в Яве вообще не рублю.
     
Загрузка...

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