• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Link Hotspot

Статус
Закрыто для дальнейших ответов.

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Всем привет!
Вопрос. Как на lotusscript создать Link Hotspot?
AppendDocLink не подходит
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
NickProstoNick
AppendDocLink не подходит
потому как там своя функция или как?
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
AppendDocLink рисует только Notes-линки. А мне еще надо рисовать вебовские.
Два метода описывать не хочется.
Link Hotspot подходит как нельзя лучше. Ему все равно на что ссылаться
 
R

RAJ

Создан: 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]
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Усложняю задачу. Линк надо рисовать в определенной ячейке таблицы.

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

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Вот решил сделать так... Брать документ с готовой заполненной таблицей.... в местах где надо ставить Link Hotspot - расставляю метки, которые потом собираюсь заменять на хотспоты
Экспортировать его в XML. А потом заменять метки на XML-код хотспота который предварительно был получен.
Но вот беда - после замены меток на код импортер ругается на не правильную структуру документа :blink:
Как это победить?
 
D

divankin

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

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

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Да самое обидно - ошибка возникает и при замене метки на какое-нить слово :blink:
Я уже издеваюсь над кодом как могу....
есть вот такая процедура в классе. Входной параметр - документ с табличкой
Код:
	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, а не замену на новое значение :(
 
N

nvyush

Да самое обидно - ошибка возникает и при замене метки на какое-нить слово :(
Может проблема в каких-то своеобразных символах либо в метке, либо в слове?
Если попробовать метку 111111111111 заменить словом 2222222222 - так должно сработать.
Потом можно будет копать дальше.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
все символы кот. могут пересекаться с синтаксисом ХМЛ надо эскейпить
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Прошу прощения!!! Что-то торможу я сегодня дико... недосып на лицо.
Я разобрался. Все получилось! Вместо RichText-полей использую потоки.
 
M

~Mikle

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

ps ненавижу индусов :) NotesRichTextNavigator не воспринимает hotspot как ссылку :(
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!