Link Hotspot

Тема в разделе "Lotus - Программирование", создана пользователем NickProstoNick, 9 ноя 2009.

Статус темы:
Закрыта.
  1. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Всем привет!
    Вопрос. Как на lotusscript создать Link Hotspot?
    AppendDocLink не подходит
     
  2. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    NickProstoNick
    AppendDocLink не подходит
    потому как там своя функция или как?
     
  3. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    AppendDocLink рисует только Notes-линки. А мне еще надо рисовать вебовские.
    Два метода описывать не хочется.
    Link Hotspot подходит как нельзя лучше. Ему все равно на что ссылаться
     
  4. RAJ

    RAJ Well-Known Member

    Регистрация:
    17 янв 2007
    Сообщения:
    440
    Симпатии:
    0
    Создан: Dmitry Akulov; Heineken 01/08/2003 04:54 PM
    Папка:
    05. Notes APIs (C/DXL/etc) Тип сообщения:
    Мне лень заполнять это поле

    Сообщение:

    08.01.2003 14:59:52 Denis Samoylovich написал:

    > Дима, а дальше простого примера это ушло?
    > интересует в частности: ограничение на размер HTML есть? отчетик там на пару
    > тысяч строк потянет?


    да, конечно , но, увы , за размером item'a надо следить самому. ДЕло в том , что HTML item не может быть больше 64к. Надо немного изменить функцию MakeHTMLItem, в первый вызов надо проверять и удалять существующий айтем, тогда айтем правильного типа будет создан, далее следить за размером html кода ( это трудно, так как в declare я указал LMBCS префикс, т.е. конвертация строки в LMBCS происходит неявно), но можно резать (IMHO можно не обращать внимание на структуру html, лотус перед показом канкатенирует все айтемы) с запасом, и не удалять существующий айтем. Причем, что интересно, что при пересохранении с воркспейса, тип у айтема меняется на RichText /Mime_Part в зависимости от настроек формы, но NB важно сначала сохранить айтем в back-end'e. И еще одна ложка дегтя, у LN примитивная реализация отображения HTML, ну ооооочень примитивная.

    Declarations
    <!--shcode--><pre><code class='vb'>Const ITEM_NOFLAG% = &H0
    Const CLASS_NOCOMPUTE = 0 '(0 << 8)
    Const TYPE_HTML = 21 + CLASS_NOCOMPUTE ' LMBCS-encoded HTML, >64K handled by more than one item of same name concatenated
    Declare Function W32_NSFItemAppendS Lib "nnotes.dll" Alias "NSFItemAppend" (Byval nHandle As Long, Byval iFlags As Integer, Byval iName As Lmbcs String, Byval iNameLength As Integer, Byval iType As Integer, Byval iValuePointer As Lmbcs String, Byval iValueLength As Long) As Integer

    Function NewHTMLItem(doc As NotesDocument, itemName As String, html As String) As Integer
    If doc.HasITem(itemName) Then
    doc.RemoveItem(itemName)
    End If
    NewHTMLItem=W32_NSFItemAppendS(doc.Handle,ITEM_NOFLAG,itemName,Len(itemName),Cint(TYPE_HTML), html, Len(html))
    End Function

    Function AppendHTMLItem(doc As NotesDocument, itemName As String, html As String) As Integer
    AppendHTMLItem=W32_NSFItemAppendS(doc.Handle,ITEM_NOFLAG,itemName,Len(itemName),Cint(TYPE_HTML), html, Len(html))
    End Function[/CODE]
     
  5. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Усложняю задачу. Линк надо рисовать в определенной ячейке таблицы.

    В общем задача вот какая. Есть класс. В нем метод копирования таблички из документа шаблона (строка-шапка, строка для данных ... набор столбцов) И метод заполнения таблички путем добавления строк AddRow. Дальше в цикле заполняется таблица.
    Ну так в определенный момент в ячейку надо рисовать Link Hotspot. Как это сделать?
     
  6. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Вот решил сделать так... Брать документ с готовой заполненной таблицей.... в местах где надо ставить Link Hotspot - расставляю метки, которые потом собираюсь заменять на хотспоты
    Экспортировать его в XML. А потом заменять метки на XML-код хотспота который предварительно был получен.
    Но вот беда - после замены меток на код импортер ругается на не правильную структуру документа :blink:
    Как это победить?
     
  7. divankin

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    Создайте форму, на форме несколько разных Link Hotspot, сохраните, а затем посмотрите XML c помощью Tools->DXL Utilities->Exporter.
    Там и увидите, как правильно оформлять Link Hotspot в XML.

    Если не получится, то код в студию или хотя бы XML c неправильной структурой.
     
  8. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Да самое обидно - ошибка возникает и при замене метки на какое-нить слово :blink:
    Я уже издеваюсь над кодом как могу....
    есть вот такая процедура в классе. Входной параметр - документ с табличкой
    Код (Text):
        Private Sub AddLink( doc As NotesDocument )

    On Error GoTo errh

    Dim tmpdoc As NotesDocument
    Dim rtitem As NotesRichTextItem
    Dim tmpRtitem As NotesRichTextItem
    Dim tmp As Variant
    Dim tmpLink As Variant
    Dim dxl As String


    If doc.Hasitem( "tmp_rtitem" ) Then
    Call doc.Removeitem( "tmp_rtitem" )
    Call doc.Save( True, False, True )
    End If


    If doc.Hasitem( "$Revisions" ) Then
    Call doc.Removeitem( "$Revisions" )
    Call doc.Save( True, False, True )
    End If

    doc.xml = ""

    Set tmpdoc = Me.curDb.Createdocument()
    tmpdoc.Form = "Kill"
    Set rtitem = tmpdoc.Createrichtextitem( "tmp_rtitem" )
    Set tmpRtitem = tmpdoc.Createrichtextitem( "tmp_rtitem1" )

    Call Me.exporter.Setinput( doc )
    Call Me.exporter.Setoutput( rtitem )
    Call Me.exporter.Process()

    tmpRtitem.values = rtitem.values

    doc.xml = tmpRtitem.Values
    Call doc.Save(true, false, true)



    Call Me.importer.Setinput( tmpRtitem )
    Call Me.importer.SetOutput( Me.curDb )
    Call Me.importer.Process

    Delete Rtitem
    Delete tmpRtitem
    Delete tmpdoc

    Set tmpdoc = Me.curDb.GetDocumentByID( Me.importer.GetFirstImportedNoteId )
    Set rtitem = tmpdoc.GetFirstItem("Body")


    If tmpdoc.Hasitem( "tmp_rtitem" ) Then
    Call tmpdoc.Removeitem( "tmp_rtitem" )
    End If


    Call rtitem.Copyitemtodocument( doc, "Body")

    Call tmpdoc.Remove( True )     


    If doc.Hasitem( "tmp_rtitem" ) Then
    Call doc.Removeitem( "tmp_rtitem" )
    End If 

    Exit Sub

    errh:
    MsgBox Me.importer.log
    Exit Sub       

    End Sub
    После многих неудач уже решил экспериментировать...
    Самым удобным для экспорта мне показалось поле типа RichText
    эта строка в коде tmpRtitem.values = rtitem.values специально написана. мне было интересно как будет вести себя импорт. Оказалось что эта строка вызывает нарушение структуры :)
    err.JPG
    Ну и собственно то же самое вызывает любое изменение.
    Ну и еще вот какая особенность во время замены метки на то что мне надо (этой строки в коде нет... пока режил победить самое простое :( )
    Rtitem.values = Replace( rtitem.values, "@Link", "TEST" )
    вызывает ДОПИСЫВАНИЕ значения в поле Rtitem, а не замену на новое значение :(
     
  9. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Может проблема в каких-то своеобразных символах либо в метке, либо в слове?
    Если попробовать метку 111111111111 заменить словом 2222222222 - так должно сработать.
    Потом можно будет копать дальше.
     
  10. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    все символы кот. могут пересекаться с синтаксисом ХМЛ надо эскейпить
     
  11. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Прошу прощения!!! Что-то торможу я сегодня дико... недосып на лицо.
    Я разобрался. Все получилось! Вместо RichText-полей использую потоки.
     
  12. ~Mikle

    ~Mikle Гость

    Не принципиально - если всё сделать правильно, создаётся несколько одноимённых полей, которые при отображении клиент собирает в единый html и показывает правильно. Есть опыт :blink:

    ps ненавижу индусов :) NotesRichTextNavigator не воспринимает hotspot как ссылку :(
     
Загрузка...
Похожие Темы - Link Hotspot
  1. Dosia
    Ответов:
    2
    Просмотров:
    37
  2. WebWare Team
    Ответов:
    1
    Просмотров:
    1.155
  3. D1kiy
    Ответов:
    2
    Просмотров:
    80
  4. kuklofon
    Ответов:
    29
    Просмотров:
    2.405
  5. vvvvikivvv
    Ответов:
    0
    Просмотров:
    249
Статус темы:
Закрыта.

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