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

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

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

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

В Uidocument вставить файл в Rt-поле

  • Автор темы morpheus
  • Дата начала
M

morpheus

Стоит задача: в UI открыт документ. Есть пременная содержащая пути к файлам. Как в UI можно вставить эти файлы в рт-поле Body не переоткрывая документ ?
Файлы у меня bmp

CreateObject у меня вставляет картинку как обьект... получаеться как то криво.
 
S

Sandr

чет не понял... нужно картинку вставить, или файл?

а как же @Command( [EditInsertFileAttachment] ) ?
 
M

morpheus

ВСё таки надо вставить именно файлы. Просто файлы у меня - результаты сканирования ( бмп-хи)


мдя,а я тут занимаюсь любовью с Embeted ... а всё так просто.. и главное что на собаках не надо переоткрывать док-т в отличии от шкрипта
 
M

morpheus

Усё разобрался

Код:
@Command([ToolsRunMacro]; "Moy_agent" ); 
@Command( [EditGotoField]; "Body" ); 
@PostedCommand([EditInsertFileAttachment]; @GetProfileField( "MY_setup"; "ScanField"; @UserName ) )

запускаю агент, сканирую( всё происходит в агенте "Moy_agent" ), кидаю в личный профайл путь к файлу, вставляю файл в документ

без переоткрытия, без рагульных импортов
 
Y

yerke

Усё разобрался

Код:
@Command([ToolsRunMacro]; "Moy_agent" ); 
@Command( [EditGotoField]; "Body" ); 
@PostedCommand([EditInsertFileAttachment]; @GetProfileField( "MY_setup"; "ScanField"; @UserName ) )

запускаю агент, сканирую( всё происходит в агенте "Moy_agent" ), кидаю в личный профайл путь к файлу, вставляю файл в документ

без переоткрытия, без рагульных импортов
Добрый день!

Есть ли аналог команды: @Command([EditInsertFileAttachment]; FilePath)
в ЛС?

АПИ функция:
result = W32_NSFNoteAttachFile (hNT, "Body", Len("Body"), fileLoc$ & fname$, fname$, COMPRESS_HUFF)
тоже не подошла.

NotesRichTextItem.EmbedObject - не предлагать, так как приаттаченный файл не виден сразу.

Нужен именно та УИ функция, которая выполняется, когда юзер выбирает пункт меню "File - Attach.." на открытом УИ документе, где фокус стоит на рич текст поле?
 

VladSh

начинающий
Lotus Team
11.12.2009
1 783
157
BIT
55
yerke
Попробуйте вставить во временный item вложение, а затем заюзать , возможно получится.
 
Y

yerke

Вложения

  • 001.jpg
    001.jpg
    18,1 КБ · Просмотры: 447
A

Akupaka

А создать агент на собаках и запустить его скриптом?
 
Y

yerke

А создать агент на собаках и запустить его скриптом?

Usage
This method runs any agent regardless of source language (simple action, formula, LotusScript, Java).
You cannot run an agent recursively (cannot call it from itself).
The user cannot interact directly with a called agent. User output goes to the Domino log.
You cannot debug a called agent.
You cannot use the Notes UI classes in an agent called by this method.
For COM applications, the Notes program directory must be in the application path.
 
A

Akupaka

yerke ,
во-1, агент на собаках аж никак не использует Notes UI классы, во-2, этот участок текста из справки из метода notesAgent.RunOnServer().
Зачем ты тулишь к этому случаю запуск агента на сервере, тебе же в клиенте его нужно запустить - notesAgent.Run()!
 
Y

yerke

yerke ,
во-1, агент на собаках аж никак не использует Notes UI классы, во-2, этот участок текста из справки из метода notesAgent.RunOnServer().
Зачем ты тулишь к этому случаю запуск агента на сервере, тебе же в клиенте его нужно запустить - notesAgent.Run()!

1) согласен - @Command( [EditInsertFileAttachment] ) не Notes UI класс. Однако данная функция работает только в УИ.
2) см. вложение
 

Вложения

  • 001.jpg
    001.jpg
    55,1 КБ · Просмотры: 382
A

Akupaka

yerke
у меня в справке такого упоминания нет (нотес 8.5). Но ты таки прав - не запускается в таком порядке.

Но! Я так полагаю, что код, который должен создать вложение, активируется некоторой кнопкой. Если так, то можно попробовать сделать следующим образом.
Создать два агента: А1 и А2. А1 - скриптовый агент, который выполняет все предварительные действия, перед вызовом EditInsertFileAttachment. А2 - агент собачный, который вызывает EditInsertFileAttachment. Кнопка, которая с формы ранее запускала скрипт, должна на собаках! запустить по-очереди два агента: А1 и А2, если в А1 выполнены условия выполнения EditInsertFileAttachment.
Если надо, можно еще и третий агент А3 создать, который выполняет какие-то действия после EditInsertFileAttachment.
Думаю, должно получиться.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
yerke
у меня в справке такого упоминания нет (нотес 8.5). Но ты таки прав - не запускается в таком порядке.

Но! Я так полагаю, что код, который должен создать вложение, активируется некоторой кнопкой. Если так, то можно попробовать сделать следующим образом.
Создать два агента: А1 и А2. А1 - скриптовый агент, который выполняет все предварительные действия, перед вызовом EditInsertFileAttachment. А2 - агент собачный, который вызывает EditInsertFileAttachment. Кнопка, которая с формы ранее запускала скрипт, должна на собаках! запустить по-очереди два агента: А1 и А2, если в А1 выполнены условия выполнения EditInsertFileAttachment.
Если надо, можно еще и третий агент А3 создать, который выполняет какие-то действия после EditInsertFileAttachment.
Думаю, должно получиться.
правильно говоришь, рисуем кучу скрытых кнопок и запускаем их ява скриптом
в каждой кнопке свой код на своём языке :)

А главная УИ кнопка имеет код:
document.forms[0].StartScan.click(); // Кликаем на кнопке которая имеет id и Name - StartScan
document.forms[0].AttachFile.click(); // Кликаем на кнопке которая имеет id и Name - AttachFile

естественно имеется еще поле куда помещаем где лежит файл и которое заполняется первой кнопкой и используется второй
 
A

Akupaka

ToxaRat
а на винапи ниче дописать не надо?
 
Y

yerke

обошелся стандартными инструментами лотус

1) код кнопки на первом документе в БД "А"
ini.doc - это текущий открытый док
ini - класс инишка (содержит Current Database, current ui doc, session, current doc итд итп)

Код:
Sub CreateOutputDoc

On Error Goto EH

'=dims
Dim Server As String
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim nm As NotesName
Dim directory As String
Dim Files As Variant
Dim itm As NotesRichTextItem
Dim fp As String
Dim uidoc As NotesUIDocument
Dim udoc As NotesDocument

'=get db
Server = Lcase(Trim(Cstr(ini.doc.DocServer(0))))
Set db = ini.s.GetDatabase(Server, "B.nsf", False)
If db Is Nothing Then Error 1984, "БД «Исходящие документы» не доступна!"

'=check Output doc if already created
Set view = db.GetView("(DocRequestUNID)")
view.AutoUpdate = False
Call view.Refresh
Set doc = view.GetDocumentByKey(ini.doc.DocRequestUNID(0), True)
If Not doc Is Nothing Then Error 1984, "Исходящий документ уже создан!"

'=set environment vars
Call ini.s.SetEnvironmentVar("OutputdocFilesForAttachments", "")

Set nm = New NotesName(ini.s.UserName)
directory = ini.GetTempDir + nm.Common
If Dir$(directory, 16) = "" Then Mkdir directory

Files = Split("", "")
Set itm = ini.doc.GetFirstItem("F_Attach")
If Not itm Is Nothing Then
Forall obj In itm.EmbeddedObjects
If Not obj Is Nothing Then
If obj.Type = EMBED_ATTACHMENT Then
fp = directory + "\" + obj.Source
Call obj.ExtractFile(fp)
Files = Arrayappend(Files, Replace(fp, "\", "\\"))
End If
End If
End Forall
End If
Files = Arrayunique(Fulltrim(Files), 5)
If Trim(Join(Files, "")) <> "" Then Call ini.s.SetEnvironmentVar("OutputdocFilesForAttachments", Join(Files, "|"))

'=compose new Output doc
Set uidoc = ini.w.ComposeDocument(db.Server, db.FilePath, "output1")
Set doc = uidoc.Document

'=patch fields
doc.DocRequestUNID = ini.doc.DocRequestUNID(0)
doc.ReqType = "Служебная записка"
doc.Subject = "Справка"

doc.category = "Не задана"
doc.orgsorepid = "$"
doc.s = "$"
doc.recepient = ini.doc.F_Client_Name(0)
doc.rf = "Частное лицо"
doc.to = "Частное лицо"
doc.recepient_1 = doc.to(0) + "->" + doc.recepient(0)

'=attaching files in query recalc on Output doc
Call uidoc.RefreshHideFormulas	
Call uidoc.Refresh(True)

'=delete handles
Set doc = Nothing
Set uidoc = Nothing
Call ini.s.SetEnvironmentVar("OutputdocFilesForAttachments", "")
If Trim(Join(Files, "")) <> "" Then
Forall File In Files
Kill Replace(File, "\\", "\")
End Forall
End If

Exit Sub
EH:
Call ini.s.SetEnvironmentVar("OutputdocFilesForAttachments", "")
If Err = 1984 Then
Messagebox Error$, 16, "Ошибка"
Elseif Err = 4412 Then
Print Cstr(Err) + " (" + Cstr(Erl) + ") " + Error$
Else
Messagebox Cstr(Err) + " (" + Cstr(Erl) + ") " + Error$, 16, "Ошибка"
End If
Exit Sub
End Sub

2) код на queryrecalc на втором документе в БД "B"
Код:
@If(!@IsNewDoc; @Return(""); "");
@If(!@IsDocBeingEdited; @Return(""); "");

Files := @Text(@Environment("OutputdocFilesForAttachments"));
@Environment("OutputdocFilesForAttachments"; "");
@If(@Trim(Files) = ""; @Return(""); "");
MyFiles := @Explode(Files; "|");

@Command([EditGotoField]; "Body");
@For(nn := 1; nn <= @Elements(MyFiles); nn := nn + 1;
@Command([EditInsertFileAttachment]; MyFiles[nn]; "1")
);
@PostedCommand([EditGotoField]; "Subject")
 
Мы в соцсетях:

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