Notesrichtextitem и Link

  • Автор темы lepa
  • Дата начала
L

lepa

#1
Всем привет!
Есть поле NotesRichTextItem в нем ссылка на документ из другой базы.
Пытаюсь её получить

Код:
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
If Not Isempty(rtitem.EmbeddedObjects) Then
..... Сюда я никогда не попадаю
End If				
End If
Проверка на пустоту всегда говорит о том что в риче ничего нету, но в реале там есть ссылка, как мне её получить?
Спасибо за рание.
 

nvyush

Lotus team
22.04.2009
2 317
0
#2
Код:
Dim rtnav As NotesRichTextNavigator
Set rtnav = rtitem.CreateNavigator
If rtnav.FindFirstElement(5) Then
...
 
K

keen

#3
В Helpe есть такой пример:

Dim session As NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim rti As NotesRichTextItem
Dim rtnav As NotesRichTextNavigator
Dim rtlink As NotesRichTextDocLink
Sub Initialize
Set session = New NotesSession
Set db = session.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument
Set rti = doc.GetFirstItem("Body")
Set rtnav = rti.CreateNavigator
If Not rtnav.FindFirstElement(RTELEM_TYPE_DOCLINK) Then
Messagebox "No doclinks in Body item",, "No doclinks"
Exit Sub
End If
Set rtlink = rtnav.GetElement
If rtlink.DocUNID = String$(32, "0") Then
Messagebox "Link does not have a doc component",, _
"No doc"
Exit Sub
End If
Dim linkDb As New NotesDatabase("", "")
If Not linkDb.OpenByReplicaID("", _
rtlink.DbReplicaID) Then
Messagebox "No local replica",, "Cannot find database"
Exit Sub
End If
Dim linkDoc As NotesDocument
On Error Goto InvalidUNID
Set linkDoc = linkDb.GetDocumentByUNID(rtlink.DocUNID)
Messagebox linkDoc.Subject(0),, "Subject of document"
Exit Sub
InvalidUNID:
Messagebox "Cannot locate document",, "No document"
Exit Sub
End Sub

название топика Examples: DocUNID property
 
A

Anonimous

#4
Можно вот тоже спросить, о ссылках в RT-поле. Есть база Notes на сервере. Есть файлик, который кладется в определенную папку TEMP. Задача состоит в том, что в RT-поле созданного документа Лотус надо добавить ссылку на этот файлик. При нажатии на эту ссылку должно открываться диалоговое окно, как для выбора документов для вложения, в котором будет открыта эта папка с этим файликом. Папка TEMP лежит на той же машине, на которой стоит сервер Домино. Такое возможно в Лотусе - сделать в документе Notes ссылку на файлик, который лежит в какой-то папке на диске? Нужна имеенно ссылка на файлик, не вложение этого файлика. Заранее спасибо )
 

NetWood

Lotus team
17.04.2008
372
19
#5
> ссылка на файлик в RTF поле.
Делаете ярлык для файла или папки штатными средствами WIN и этот ярлык вкладываете в поле. Все дела.
 
A

Anonimous

#6
Спасибо, забыл сказать, что это надо программно средствами LS. Как через LS ярлык сделать? Потом, как понимаю, надо вложить его в РТ средствами AppendText?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#7
> ссылка на файлик в RTF поле.
Делаете ярлык для файла или папки штатными средствами WIN и этот ярлык вкладываете в поле. Все дела.
в условиях антивирусов это может не пройти, да и зачем - есть url...
file:///resource/path
где resource м.б. сетевой путь типа server\shredname
либо driveletter://
наклон слэшей ЕМНИП может быть нормальный (т.е. - вправо)
 
A

Anonimous

#8
Делаю вот так. Ссылка вставляется в docPoint, поле RTLink. Папка, в который лежит файл, открыта как общий ресурс

Dim rtitem As NotesRichTextItem
Dim object As NotesEmbeddedObject

Set rtitem = New NotesRichTextItem( docPoint, "RTLink" )
Set object = rtitem.EmbedObject _
( EMBED_OBJECTLINK, "", "//путь к серверу/папка/12345.txt")

Ссылка не получается ( ни с прямыми слэшами, ни с обратными
 

savl

Lotus team
28.10.2011
2 135
104
#9
потому что не так делаете...
EmbedObject используется только для вставки аттачей, либо OLE объектов.
Если хотите win-ярлык прикрепить, то да это поможет, но win-ярлык надо будет создать предварительно.
lmike, как я понимаю, предлагает просто прописать текстом url в RT-поле, тогда этот текст будет преобразован в линк.
При нажатии откроется.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#10
при отправке по мэлу - преобразует в линк, как написал savl
если нужно работать с сущ. доком то DXL
или MIME
все это - просто откроет урл (из дока)
а вот про какие-то ссылки на то чтобы диалог получить - ничего не понял (зачем ваще там ссылка)
ЗЫЖ через DXL модно и кнопку вставить...
 
A

Anonimous

#11
Добавляю текстом URL так file:///путь к серверу/папка/12345.txt. Ссылка добавляется, но при нажатии файл не находит

а вот про какие-то ссылки на то чтобы диалог получить - ничего не понял (зачем ваще там ссылка)

Это хотят для экономии пространства на диске - чтоб все файлы лежали в одном месте, а из документов Лотус ссылаться на них. Хотят, чоб при программном прикреплении файла он физически появлялся на ftp, а в в лотусе оставалась только ссылка, по нажатии на которую открывается папка где лежит файл либо стандартное лотусовое окно, что делать с файлом.
 

savl

Lotus team
28.10.2011
2 135
104
#12
Это хотят для экономии пространства на диске - чтоб все файлы лежали в одном месте, а из документов Лотус ссылаться на них.
И какая тут экономия? ))) Идиотия сплошная, простите это не к вам.
Файл на сервере, где стоит Domino, в папке TEMP!!! А если у вас папку TEMP кто-то грохнет, что делать будете? )))
Если загрузить в документ эти файлы, то они будут так же на сервере где стоит Domino.
Только сжаты через LZ1, и скажем 5 Мб файл ужмется до 140 Кб.
И так, где экономия то?
 
A

Anonimous

#13
Не так выразился. Это для синхронизации Лотус и Web. Чтоб 1 файл не дублировался в двух местах, чтоб и Notes, и Web ссылались на одну эту папку TEMP. Вот для такой экономии. Просто думал, это не в тему
 

savl

Lotus team
28.10.2011
2 135
104
#14
Хм... не знаю стоит ли так усложнять, крепить ярлыки и ссылки...
Если путь к этой папке известен всегда, то сделайте просто кнопку на форме.
"Открыть папку с файлами", а внутри команду:
Код:
	Dim res As Variant
res = Shell({rundll32 url.dll,FileProtocolHandler "C:\Java\"},1)
Как понимаете - вариант для windows
вместо C:\Java\ пишете путь к вашей папке, но в кавычках.
И надо уходить от TEMP на какой-нибудь сетевой диск и там папку.
 
A

Anonimous

#15
Я сделал кнопку с помощью DXL, как написано здесь, где показал Imike http://ozinisle.blogspot.ru/2010/11/lotuss...hotspot-to.html.
В тестовой базке добавление поля RT со ссылкой к документу, выделенному в представлении, Sub Click пишу так

Dim session As New NotesSession
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem

Dim result As String

'** grab the first selected doc in the view
Set doc = session.CurrentDatabase.UnprocessedDocuments.GetFirstDocument
Set rtitem = doc.GetFirstItem("Body")
If (rtitem Is Nothing) Then
Set rtitem = New NotesRichTextItem(doc, "Body")
End If

Call AppendHotspotLink(rtitem,"file:///C:/TEMP/12345.txt")

'** save and exit
Call doc.Save(True, True)

все получилось, файл 12345.txt открывается )
А вот сделал точно так же в своей библиотеке, которую вызывает агент, то ссылка в поле RT документа создается, но не работает.
В библиотеке у меня так. В одном Sub создается документ docNew, указываю форму (на ней явно есть поле RT - RTField) потом в этот документ добавляю ссылку на файл 12345.txt в папке TEMP

Dim rtitem As NotesRichTextItem
Set rtitem = New NotesRichTextItem( docNew, "RTField" )

AppendHotspotLink rtitem,"file:///C:/TEMP/12345.txt"

docNew.Save True, True

Добавил без изменений функцию AppendHotspotLink, XmlConvert, как по ссылке выше.
Ссылка в документе появляется, но при нажатии на нее ничего не происходит ( Тут какой-то нюанс?
 
A

Anonimous

#16
А, понял, наверно это из-за того, что RT-поле у меня на субформе лежит, которая подтягивается к основной форме через ComputedSubform. Всем спасибо!