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

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

  1. morpheus

    morpheus скриптописец

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

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

    Sandr Гость

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

    а как же @Command( [EditInsertFileAttachment] ) ?
     
  3. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    ВСё таки надо вставить именно файлы. Просто файлы у меня - результаты сканирования ( бмп-хи)


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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Усё разобрался

    Код (Text):
    @Command([ToolsRunMacro]; "Moy_agent" );
    @Command( [EditGotoField]; "Body" );
    @PostedCommand([EditInsertFileAttachment]; @GetProfileField( "MY_setup"; "ScanField"; @UserName ) )
    запускаю агент, сканирую( всё происходит в агенте "Moy_agent" ), кидаю в личный профайл путь к файлу, вставляю файл в документ

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

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    Добрый день!

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

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

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

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

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    yerke
    Попробуйте вставить во временный item вложение, а затем заюзать NotesUIDocument.ImportItem, возможно получится.
     
  7. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    у меня 6.5.4
     

    Вложения:

    • 001.jpg
      001.jpg
      Размер файла:
      21,4 КБ
      Просмотров:
      103
  8. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    А создать агент на собаках и запустить его скриптом?
     
  9. duchan

    duchan Well-Known Member

    Регистрация:
    20 сен 2006
    Сообщения:
    105
    Симпатии:
    2
    из LS вызвать агент оперирующий UI @командами? Разве будет работать?
     
  10. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    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.
     
  11. Akupaka

    Akupaka А че я?.. О.о

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

    yerke Well-Known Member

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

    Вложения:

    • 001.jpg
      001.jpg
      Размер файла:
      66,1 КБ
      Просмотров:
      70
  13. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    yerke
    у меня в справке такого упоминания нет (нотес 8.5). Но ты таки прав - не запускается в таком порядке.

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

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

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    правильно говоришь, рисуем кучу скрытых кнопок и запускаем их ява скриптом
    в каждой кнопке свой код на своём языке :)

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

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ToxaRat
    а на винапи ниче дописать не надо?
     
  16. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    обошелся стандартными инструментами лотус

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

    Код (LotusScript):
    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"
    Код (LotusScript):
    @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")
     
Загрузка...
Похожие Темы - Uidocument вставить файл
  1. Shandrik
    Ответов:
    3
    Просмотров:
    1.049
  2. VladSh
    Ответов:
    10
    Просмотров:
    2.311
  3. wowa
    Ответов:
    6
    Просмотров:
    3.131
  4. yerke
    Ответов:
    10
    Просмотров:
    4.180
  5. DNT
    Ответов:
    1
    Просмотров:
    2.288

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