Создание ярлыка в ОС на документ в Lotus

R

Ruska132

кроме всего прочего получить с такого ярлыка вот это Посмотреть вложение 19665 далеко не равна нулю;) (это при "правильном" линке типа notes:///...)
ещё, если док в нотусе открывается во фрейме и, при своём открытии, что то делает в УИ (напр. обновляет другой фрейм) будет ващще бардак)


такая ошибка возникает если документ не из представления переносите на раб стол.
 
R

Ruska132

создаете вы и каким образом проще?
вот токма что взял из произвольной БД и отволок на РабСтол - создался файл с содержимым:

мне надо скопировать данные в буфер а пользователь создает ярлык и вставляет из буфера данные.
 

alexas1

Green Team
10.04.2014
1 185
218
BIT
18
такая ошибка возникает если документ не из представления переносите на раб стол.
очень даже из представления;)
... и при "ручном" заполнении линка
... а так же иногда буфер "залипает" (вин 10х64) - открывается предыдущий(!) док
 
R

Ruska132

очень даже из представления;)
... и при "ручном" заполнении линка
... а так же иногда буфер "залипает" (вин 10х64) - открывается предыдущий(!) док

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

alexas1

Green Team
10.04.2014
1 185
218
BIT
18
s.ServerName
db.ReplicaID
view.UniversalID
doc.UniversalID
конкатенацией собираешь строку и пишешь в редактируемое(!) (штоб копипастить в режиме редактирования) поле
 
R

Ruska132

может я как то не так описал ход задачи чуть чуть добавлю или подправлю:
будет созданна кнопка с кодом (где будет код : соберется строка из переменных документа, далее скопируется в буфер) пользователь при создании ярлыка добавить скопированную строку и ярлык создаться.
 
R

Ruska132

s.ServerName
db.ReplicaID
view.UniversalID
doc.UniversalID
конкатенацией собираешь строку и пишешь в редактируемое(!) (штоб копипастить в режиме редактирования) поле


вот запишу я эти даные в переменную SSS как мне переменную скопировать в буфер
 

alexas1

Green Team
10.04.2014
1 185
218
BIT
18
вот запишу я эти даные в переменную SSS как мне переменную скопировать в буфер
а записать это в поле, штоб "умный" копипастом, оттуда взял в буфер, не в кайф?
или скриптом
call uidoc.GoToField("field")
call uidoc.SelectAll
call uidoc.Copy
 
  • Нравится
Реакции: Ruska132
R

Ruska132

а записать это в поле, штоб "умный" копипастом, оттуда взял в буфер, не в кайф?

я не буду в поле писать. потому как документ не в режиме редактирования, простую переменную в скрипте и потом эту переменную скопирую
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 951
602
BIT
422
если я с любой БД с любого представления переношу документ на раб стол у меня создается ярлык с сылкой
Ярлык Интернета (.url)
Notes://Aksu1/462581FD00274523/B759AAD1E431402BC3256E3D0053A419/4C41513FACB07D59462582B200149735?server=Aksu1&replicaID=462581FD00274523

вот эту строчку я и хочу (вернее надо) собрать кнопкой и потом вставить при создании в виндовсе ярлыка
и что мешает? Это текстовой файл! назовите файл ...url и запишите правильное содержимое (его можно взять из обекта документа url$ = notesDocument .NotesURL из хэлпа)
имя сервера и RID базы - тоже получаются из соответ свойств базы
и это НЕ ВИНДОВС ЯРЛЫК! это др. тип называйте правильно - тогда и людей не запутаете и сами не запутаетесь
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 951
602
BIT
422
кроме всего прочего получить с такого ярлыка вот это Посмотреть вложение 19665 далеко не равна нулю;) (это при "правильном" линке типа notes:///...)
ещё, если док в нотусе открывается во фрейме и, при своём открытии, что то делает в УИ (напр. обновляет другой фрейм) будет ващще бардак)
не сталкивался и фреймов не делаю, и чем это будет отличаться от lnk слабо представляю...
 

alexas1

Green Team
10.04.2014
1 185
218
BIT
18
не сталкивался и фреймов не делаю, и чем это будет отличаться от lnk слабо представляю...
у меня часто, после открытия дока, инициируется инфа в соседнем фрейме, зависимая от содержания дока
соотв. при открытии его из линка он будет открываться вне фрейма и рядом откроет ещё что то
хотя, канешь, это можно заблокировать...
 
Последнее редактирование:

alexas1

Green Team
10.04.2014
1 185
218
BIT
18
ну ладно, если в CFD поле положишь:
"Notes://"+@Subset(@DbName; 1)+"/" + @ReplaceSubstring(@ReplicaID;":";"") +"/"+@ViewTitle+"/"+@Text(@DocumentUniqueID)+"?OpenDocument"
то в режиме чтения(!) ночальнег сможет скопипастить оттуда линк в свой, блин, ярлык ))
так пойдёт?
------------
ну и до кучи
либа libWindowsClipboard
Код:
Option Public
Option Declare


Declare Private Sub MoveMemory  Lib "kernel32" Alias "RtlMoveMemory" ( ByVal strDest As Any, ByVal lpSource As Any, ByVal Length As Any)
Declare Private Function GlobalAlloc Lib "kernel32" (ByVal uFlags As Long, ByVal dwBytes As Long) As Long
Declare Private Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Declare Private Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Declare Private Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Declare Private Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
Declare Private Function GetClipboardData Lib "user32" (ByVal uFormat As Long) As Long
Declare Private Function CloseClipboard Lib "user32" () As Long
Declare Private Function EmptyClipboard Lib "user32" () As Long
Declare Private Function SetClipboardData Lib "user32" (ByVal uFormat As Long, ByVal hData As Long) As Long

'Clipboard Constants...
Private Const GMEM_MOVABLE = &H2&
Private Const GMEM_DDESHARE = &H2000&
Private Const CF_TEXT = 1
Private Const CANNOTOPENCLIPBOARD = 2
Private Const CANNOTGLOBALLOCK = 4
Private Const CANNOTCLOSECLIPBOARD = 5
Private Const CANNOTGLOBALALLOC = 6
Private Const CANNOTEMPTYCLIPBOARD = 7
Private Const CANNOTSETCLIPBOARDDATA = 8
Private Const CANNOTGLOBALFREE = 9

Function fSendToClipboard(strText As String) As Variant
    Dim varRet As Variant
    Dim fStClpData As Long
    Dim hMem As Long
    Dim lpMemory As Long
    Dim lngSize As Long
    Dim varTemp As Variant
    
    varRet = False
    fStClpData = False
    
    lngSize = Len(strText) + 1
    hMem = GlobalAlloc(GMEM_MOVABLE Or _
    GMEM_DDESHARE, lngSize)
    If  (hMem) =0 Or IsNull(hMem)Then
        varRet = Error(CANNOTGLOBALALLOC)
        GoTo sTxtDone
    End If
    
    lpMemory = GlobalLock(hMem)
    If  (lpMemory) =0 Or IsNull(lpMemory) Then
        varRet = Error(CANNOTGLOBALLOCK)
        GoTo sTxtGlblFree
    End If
    
    Call MoveMemory(lpMemory, strText, lngSize)
    
    Call GlobalUnlock(hMem)
    varTemp = (OpenClipboard(0&))
    If  varTemp=0 Or IsNull(varTemp) Then
        varRet = Error(CANNOTOPENCLIPBOARD)
        GoTo sTxtGlblFree
    End If
    varTemp = (emptyClipboard())
    If  varTemp=0 Or IsNull(varTemp) Then
        varRet = Error(CANNOTEMPTYCLIPBOARD)
        GoTo fSendToClipboardCloseClipboard
    End If
    varTemp = SetClipboardData(CF_TEXT, hMem)
    If  varTemp=0 Or IsNull(varTemp) Then
        varRet = Error(CANNOTSETCLIPBOARDDATA)
        GoTo fSendToClipboardCloseClipboard
    Else
        fStClpData = True
    End If
    
fSendToClipboardCloseClipboard:
    varTemp = closeclipboard()
    If   varTemp=0 Or IsNull(varTemp) Then
        varRet = Error(CANNOTCLOSECLIPBOARD)
    End If
    
sTxtGlblFree:
    If Not fStClpData Then
        varTemp = globalfree(hmem)
        If  varTemp=0 Or IsNull(varTemp) Then
            varRet = Error(CANNOTGLOBALFREE)
        End If
    End If
    
sTxtDone:
    fSendToClipboard = varRet
End Function
Кнопа
Код:
Use "libWindowsClipboard" 
Sub Click(Source As Button)
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim url As String    
    Dim varRet As Variant
    Set uidoc = workspace.CurrentDocument
    uidoc.Document.u2 = id
    url = uidoc.Document.NotesURL 
    Messagebox "Ссылка на документ скопирована в буфер обмена"
    varRet = fSendToClipboard( url )
End Sub
в вин10 х64 работает
 
Последнее редактирование:

VladSh

начинающий
Lotus Team
11.12.2009
1 802
159
BIT
255
Народ, вы гоните? lmike же ж всё уже сказал!

Создаёте обычный текстовый файл c:\Users\yourlogin\Desktop\documentTytle.url с содержимым:
[InternetShortcut]
URL=Notes://ServerName/DbReplicaID/0/DocumentUNID
В качестве "yourlogin", "documentTytle", "ServerName", "DbReplicaID" и "DocumentUNID" вписываете свои значения и всё!!!
 

alexas1

Green Team
10.04.2014
1 185
218
BIT
18
Народ, вы гоните? lmike же ж всё уже сказал!

Создаёте обычный текстовый файл c:\Users\yourlogin\Desktop\documentTytle.url с содержимым:
В качестве "yourlogin", "documentTytle", "ServerName", "DbReplicaID" и "DocumentUNID" вписываете свои значения и всё!!!
ичЁ??? ))))
ты давно с эффективными мэнэджароми рагаваревал?
мэнэджар умеет делать копи-паст;)
такшта, в морг голупчик, глвврачь херни не скажэт)))
 

VladSh

начинающий
Lotus Team
11.12.2009
1 802
159
BIT
255
alexas1
будет создана кнопка с кодом (где будет код : ...
Если будет кнопка, то буфер уже не нужен. Кнопку или действие нужно разместить на форме того дока, на который будет создаваться линк, либо создать универсальный агент (независящий от форм документов), запускаемый из меню действий. И там из текущего/выделенного документа получаем все параметры, открываем поток и пишем содержимое полученной переменной в файл на диск - это и есть создание линка.

Если каждый менэржер будет архитектором, значит надо купить себе пэржэр)))
 
Мы в соцсетях:

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