Attachments

Тема в разделе "Lotus - Программирование", создана пользователем Gor, 3 сен 2008.

  1. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Здравствуйте!

    Столкнулся с очередной проблемой)

    Форма под web.

    На ней 5 полей. Мне необходимо чтобы в каждое поле поле можно было прицепить свой аттачмент.

    Знаю что есть такая вещь FileUpload.
    Сделал напротив каждого поля File upload.
    Так вот FileUpload как я понял цепляет аттачмент непосредственно в форму... т.к. после сохранения дока экран разделяется на 2 части и там содержатся аттачменты...
    А мне бы хотелось чтобы каждый аттачмент цеплялся непосредственно к своему полю и чтобы больше нигде аттачментов не было видно...?
     
  2. alb

    alb Well-Known Member

    Регистрация:
    13 июл 2005
    Сообщения:
    212
    Симпатии:
    0
    было гдето здесь надо будет поискать
    на сохранения надо ставить агента который выгружает аттчмент на диск после номально крепить в нужное поле

    источник
    вот это тоже прочитайте
     
  3. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    здесь способ такой что он не раскладывает Аттачменты в нужные поля...
    На формулах в принципе практически тоже самое можно изобразить...

    Код (Text):
    "[<a class=bodylink href=" + @Text(@DocumentUniqueID) + "/$FILE/" + @URLEncode("Domino";@AttachmentNames) + ">" + @AttachmentNames + "</a> (" + @Text(@AttachmentLengths) + " bytes)"+" Delete?<input type=\"checkbox\" name=\"%%Detach.29\" value=\"" + @AttachmentNames + "\"><script>show_preview('" + @LowerCase(@RightBack(@AttachmentNames;".")) + "','" + "/" + DbHref + "/GetFile?OpenAgent&UNID=" + @Text(@DocumentUniqueID) + "&Detach=" + @URLEncode("Domino";@AttachmentNames) + "');</script>]"

    На Интертрасте обсуждалось, жаль что рещение на JS не выложили...

    Только обсуждение
     
  4. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Написал следующее

    Код (Text):
    function Attachment1()
    {

    if (document.getElementByid("Fup1").Value != '')
    {
    document.getElementById("Attach1").Value = document.getElementByid("Fup1").Value
    };

    if (document.getElementByid("Fup2").Value != '')
    {
    document.getElementById("Attach2").Value = document.getElementByid("Fup2").Value
    };

    if (document.getElementByid("Fup3").Value != '')
    {
    document.getElementById("Attach3").Value = document.getElementByid("Fup3").Value
    };

    }
    Где Fup - идентификатор File upload, Attach - идентификатор поля в которое я хочу записать название аттача
    Выводит ошибки на странице( не пойму почему
     
  5. D!m@n

    D!m@n Гость

    У меня в JS опыта мало, но мне кажется, что вы просто не там точки с запятой поставили ;)
    Должно быть так:
    Код (Text):
    function Attachment1()
    {

    if (document.getElementByid("Fup1").Value != '')
    {
    document.getElementById("Attach1").Value = document.getElementByid("Fup1").Value;
    }

    if (document.getElementByid("Fup2").Value != '')
    {
    document.getElementById("Attach2").Value = document.getElementByid("Fup2").Value;
    }

    if (document.getElementByid("Fup3").Value != '')
    {
    document.getElementById("Attach3").Value = document.getElementByid("Fup3").Value;
    }

    }
     
  6. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Возможно, хотя даже вот такая функция ругается

    Код (Text):
    function Attachment()
    {
    document.getElementById("Attach1").Value == document.getElementByid("Fup1").Value;
    }
    Тут вопрос то главный как взять значение из одного поля и записать в другое, зная их id

    почему то и такая конструкция не подходит...
    document.ReplaceItemValue("Attach1",document.getElementByid("Fup1").Value);
     
  7. D!m@n

    D!m@n Гость

    А теперь Вы два равно подряд написали в операции присвоения! ;)
    Насколько Вы знакомы с C-шным синтаксисом?
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    это операция сравнения - булева величина и никуда не присваивается...
    присвоение - просто =
    ежели написано function - так и значение возвращать надо
     
  9. D!m@n

    D!m@n Гость

    2Gor: извиняюсь, в суть проблемы особо не вникал, но Вы явно хотели либо
    Код (Text):
    function Attachment()
    {
    document.getElementById("Attach1").Value = document.getElementByid("Fup1").Value;
    }
    либо
    Код (Text):
    function Attachment()
    {
    return (document.getElementById("Attach1").Value == document.getElementByid("Fup1").Value);
    }
     
  10. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    в общем я хотел пускай по нажатию кнопки записать значение из одного поля в другое

    одно поле (Fup1) type="file" другое (Attach1) text

    Я хотел скопировать путь до прикреплённого файла из Fup1 в обычное текстовое поле
     
  11. SkinGreek

    SkinGreek Гость

    и еще хотел бы добавить, если это еще актуально. JS регистрозависимый язык и функции document.getElementByid нет, есть document.getElementById. И если память не изменяет свойства Value тоже нет есть value
    Желательно узнать какие имено ошибки происходят на странице. В данном случае он должен ругаться что объект не имеет такого метода.
    Документация по DOM может помочь снять несколько вопросов.
     
  12. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    мда))) Как то я неаккуратно с регистрами, поправил и всё заработало)
     
  13. SkinGreek

    SkinGreek Гость

    ЗЫ:
    в таком случае лучше сразу же и отрезать путь к файлу ("C:\...")
    Примерно так...
    Код (Text):
    path = path.replace(/([^\.\\]+\.\w{3})$/i, "$1");
    В данном примере выцепляются имя файла(то есть перед концом строки сначала все символы не являюхимися точкой или слешем, далее точка и 3 текстового символа являющихся расширением)
    Можно воспользоваться и методом match, но имхо так короче и понятней.
    если с RegExp не знакомы то вот одна из вводных статей
    http://www.opennet.ru/base/dev/pcre_javascript.txt.html
     
  14. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    а вообще чтобы записать значение в поле хватит присвоения из одного поля в другое?
    Или метод есть специальный?

    Потому что вот так не получается

    Код (Text):
    function Atata(form)
    {

    form.l58.Value = form.Fup1.value;

    p = form.l58.value;

    alert (p);
    }
    Выводит пустое значение в алерте, хотя form.Fup1.value не равно пустому...
     
  15. SkinGreek

    SkinGreek Гость

    Опять Value вместо value :)
    И еще такой способ доступа к полям формы вроде не специфицирован, а значит в FF может и не будет работать.
    У вас несколько форм? Может лучше через document.getElementById()? в Id элементов например добавлять префикс для каждой формы и его уже передавать в функцию?
    Но может я и не прав и в FF это сработат, надо пробовать
    Свойство Value отдает и записыват значение поля. У некоторых элементов это свойство ReadOnly таких как input type file но вам это не грозит

    упс
    имел ввиду свойство value:))
     
  16. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    =) Невнимательность, действительно)

    Да почему то честно говоря document.getElementById("Attach1").Value мне всегда выводит значение [OBJECT]
    Да и document.replaceItemValue("Attach1",document.getElementByid("Fup1").Value) в такой конструкции не заработал)

    Хотя в div ы я поле взял...
    Поэтому и пошёл этим путём)
    Кстати спасибо за терпение и за мои занудные вопросы)) Просто опыта JS у меня вообще нету... Институтский C++ и ещё пары языков,
    а с LotusScripta перестроиться бывает сложновато))
     
  17. SkinGreek

    SkinGreek Гость

    Да я понимаю так же как и мне на LS сложно перейти.
    Метода document.replaceItemValue нету(если он выполняется на клиенте, то есть в браузере)
    JS пишется в венгерской нотации поэтому там преобладает малый регистр первых букв в названиях методов и переменных(это чтоб проще было не забывать писать value)
    Документацию по DOM можно найти
    тут
    http://msdn.microsoft.com/en-us/library/ms...63(VS.85).aspx#
    Правда тут больше ориентируются под IE, но думаю у тебя не будет браузеро зависимого кода.
    если "Attach1" это input type=text должно, то можно как получить введеный текст так и записать его самостоятельно
    Если же это input type=file то document.getElementById("Attach1").value получает полное имя выбранного файла. Это должно работать.
    В доке по INPUT type=file написано
    Можешь посмотреть HTML исходник сгенереный лотусом чтоб понять какой филд генерит какой html элемент.
     
  18. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    который раз пытаюсь направить в "нужное" русло процесс постижения JS :) ...

    динамично развивающиеся библиотеки prototype, jQuery и т.п. избавят от проблем кроссбраузерности (почти) и дадут богатейшую почву для развити интерфейсов, к ним выпускаются плагины...
    используется объектных подход...

    подозреваю :) следующим шагом, после задания и присвоения значений, будет валидация полей...

    это все уже давно написано в упомянутых библиотеках и плагинах

    вот валидатор, например:
    http://ewavetnt.com.au/upload/demo/form_validation.html
    и вот - http://bassistance.de/jquery-plugins/jquer...gin-validation/
    там же есть реализация дерева

    вот всякие манипуляции и ограничения на поля (разного типа):
    http://www.pengoworks.com/workshop/jquery/...in.htm#examples

    вот ричтекст: http://www.fyneworks.com/jquery/FCKEditor/

    вот подборка по аттачам (поиск по плагинам):
    http://plugins.jquery.com/search/node/uplo...project_project

    вот линки на Доминошные замуты:
    http://www.inttrust.ru/site/itforum.nsf/6e...33;OpenDocument
    http://www.inttrust.ru/Site/itforum.nsf/al...45?OpenDocument

    не тратьте время на собственные велики
     
  19. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Хотелось бы немного вернуться к задаче...
    конечно информации достаточно много, это хорошо... как я и писал ранее
    по моей проблеме есть только это

    Код (Text):
    У FileUpload Control можно задать идентификатор. Затем, на JS записыаем название аттача в скрытое текстовое поле (каждому FileUpload Control соответствует свое поле), а дальше все просто.
    Я хочу сделать загрузку аттачмента с определённого FileUpload в определённое ричтекствое поле.

    Предположим я с горем пополам сделал первую часть))))
    т.е.
    перед вызовом агента на WebQuerySave у меня запускается Java script, который записывает путь к файлу в текстовые поля, каждому FileUpload соответствует своё поле (c l58 по l62)


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

    я сделал так:

    Код (Text):
    Sub Click(Source As Button)

    Вim session As New NotesSession
    Dim v2File As NotesItem
    Dim rtItem As NotesRichTextItem
    Dim inputAttachment As NotesEmbeddedObject
    Dim tempDirectory As String
    Dim fileName As String
    Dim filePath As String
    Dim doc As NotesDocument
    Set doc = session.DocumentContext

    Set v2File = doc.GetFirstItem ( "$File" )

    p1 = doc.GetItemValue("l58")
    p1 = Strrightback(p1(0),"\")
    p2 = doc.GetItemValue("l59")
    p2 = Strrightback(p2(0),"\")
    p3 = doc.GetItemValue("l60")
    p3 = Strrightback(p3(0),"\")
    p4 = doc.GetItemValue("l61")
    p4 = Strrightback(p4(0),"\")
    p5 = doc.GetItemValue("l62")
    p5 = Strrightback(p5(0),"\")

    fileName = v2File.Values(0)
    Set inputAttachment = doc.GetAttachment ( fileName )
    '--CUSTOMIZE the tempDirectory below if you want to save the file to a different directory

    tempDirectory = session.GetEnvironmentString ( "Directory", True )
    filePath = tempDirectory + "\" + fileName

    '--Save the file on the server
    Call inputAttachment.ExtractFile ( filePath )
    '--Delete the original attachment
    Call doc.RemoveItem ( "$File" )
    Call doc.Save ( True, True )

    If fileName = p1 Then

    Set rtItem = doc.GetFirstItem ("l58_a")    
    Set inputAttachment = rtItem.EmbedObject ( EMBED_ATTACHMENT, "",FilePath )

    End If

    If fileName = p2 Then

    Set rtItem = doc.GetFirstItem ("l59_a")
    Set inputAttachment = rtItem.EmbedObject ( EMBED_ATTACHMENT, "",FilePath )

    End If

    If fileName = p3 Then

    Set rtItem = doc.GetFirstItem ("l60_a")    
    Set inputAttachment = rtItem.EmbedObject ( EMBED_ATTACHMENT, "",FilePath )

    End If


    If fileName = p4 Then

    Set rtItem = doc.GetFirstItem ("l61_a")            
    Set inputAttachment = rtItem.EmbedObject ( EMBED_ATTACHMENT, "",FilePath )

    End If


    If fileName = p5 Then

    Set rtItem = doc.GetFirstItem ("l62_a")    
    Set inputAttachment = rtItem.EmbedObject ( EMBED_ATTACHMENT, "",FilePath )

    End If

    Call doc.ReplaceItemValue("l58","")
    Call doc.ReplaceItemValue("l59","")
    Call doc.ReplaceItemValue("l60","")
    Call doc.ReplaceItemValue("l61","")
    Call doc.ReplaceItemValue("l62","")
    Kill FilePath
    Call doc.Save ( True, True )
    End Sub
    Работает он очень криво к моему сожалению(( Если на форме ещё нет прицелёных файлов то когда агент отрабатывает после первого сохранения всё замечательно,
    но когда хочешь прицепить ещё один файл на эту же форму то получается бред...
    Что бросается сразу в глаза это то что скрипт не удаляет Item - $File....
    В ричтекстовое поле цепляет, а в документе внизу всё равно видно прицепленый файл...

    Не могу понять почему((
     
  20. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    вы мой пост прочли? И ссылки в конце видели?
    там есть конкретное решение для домины
    Ей (домине) надо определенное имя, ей плевать на ваши доморощенные! (это я к тому, что можно JS скриптом надобавлять кучу одинаковых контролов)

    После определения имени (см. внимательно по ссылкам) для остальных контролов нужно присвоить такое же имя (это не запрещено)

    а уж в агенте перебирать...

    тамже (в моих ссылках, внутрях) есть референц:
    http://www.intertrust.ru/Site/itforum.nsf/...97?OpenDocument

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

    ежели лень заморачиваться на доминошный агент и форму тюнить - можно сервлет-манагер поднять на домине и сервлету давать форму на парсинг... А там ужо готовых решений тьма (в моих ссылках тоже это есть)
    http://www.inttrust.ru/Site/itforum.nsf/al...12?OpenDocument

    ЗЫ:куча РТ полей - это, ИМХО, очень неудобно, проще все аттачи пихать в одно
     
Загрузка...
Похожие Темы - Attachments
  1. xpro
    Ответов:
    12
    Просмотров:
    1.949
  2. ToxaRat
    Ответов:
    8
    Просмотров:
    4.761

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