|
0 / 0 / 0
Регистрация: 04.02.2007
Сообщений: 63
|
|
Внедрение в базу и дальнейшее использование файла30.01.2008, 17:15. Показов 27230. Ответов 17
Метки нет (Все метки)
Доброго, уважаемые.
Необходимо сделать базу данных, которая при старте запустит Exe файл. Т.е. база по сути инсталляционная, ее будет стартовать админ и для выбранных пользователей с помощью извлеченного EXE файла будут проведены определенные действияю не подскажете как это сделать? Честно просмотрел все 60 листов форума, но по моему все не то.. Зачастую обсуждается как извлечь файлы пришедшие в письме или прикрепить программно и отправить письмом, а вот как работать с прикрепленными файлами ручками (в дизайнере), чтобы потом иметь к ним программный доступ не понятно.. По большей части все советы касаются работы с Rich Edit полем, может я чего то не понимаю, но в него не вставить файл в дизайнере. Что пробовал: просто создал новую базу, добавлял аттач (в меню create -> attachment -> нужный файл). Файл отображается на форме. Дебаггер показывает, что HasEmbedded для документа false. В общем проблемы как минимум 2: 1) как все таки прикрепить файл в дизайнере и как потом программно к нему достучаться 2) надо как то спрятать прикрепленный файл, чтобы он не показывался на форме при открытии в Lotus Notus. Спасибо.
0
|
|
| 30.01.2008, 17:15 | |
|
Ответы с готовыми решениями:
17
Чтение списка из файла и дальнейшее использование информации из файла Получение капчи и дальнейшее использование Ввод числа и дальнейшее использование |
|
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
|
|
| 30.01.2008, 17:34 | |
|
Если хочешь на этапе дезигнинга, то делаешь какую-либо форму (на QO можно поставить Continue = False).
Потом в своей чудо-кнопке берёшь её через NotesNoteCollection и детачишь файл. Либо делаешь форму с ричтекстом "Install", перед посылкой тома админу создаешь документ, атачишт файл и в своей чудо-кнопке обращаешься к документу и детачишь файл.
0
|
|
|
DmT
|
|
| 30.01.2008, 17:34 | |
|
1.
... Dim doc As notesdocument Dim rtitem As NotesRichTextItem Dim object As NotesEmbeddedObject ... Set rtitem = New NotesRichTextItem (Doc,"Body") Set object = rtitem.EmbedObject (EMBED_ATTACHMENT, "", PathFile$) Call Doc.Save(True,True) .... Body - имя RT поля PathFile$ - путь к файлу 2. Поле "Body" просто скрываете через свойства поля - Hide paragraph from Lotus P.S. на форуме уже есть точно всё это |
|
|
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
|
|
| 30.01.2008, 17:36 | |
|
Для: DNT
Ну richtext просто так не скрыть. Либо в секцию, либо в программатик тэйбл.
0
|
|
|
DmT
|
|
| 30.01.2008, 17:39 | |
|
Для: Omh
ну да, сори |
|
|
0 / 0 / 0
Регистрация: 11.09.2006
Сообщений: 373
|
|
| 30.01.2008, 18:04 | |
|
Для: SparkLone
без дизайнера, но тоже вариант: Сделайте форму с одним RichText полем, откройте ее, добавьте файл, сохраните, в дизайнере поставьте в свойствах формы auto launch - first attachmet. При открытии этого документа будет запускаться приложение из поля, а форма не будет даже открываться. Можно попробовать сделать этот документ профильным, и открывать его будет гораздо проще, даже UNIDа знать не надо.
0
|
|
|
0 / 0 / 0
Регистрация: 04.02.2007
Сообщений: 63
|
|
| 30.01.2008, 18:37 | |
|
Для: Omh
Спасибо, пробую вариант с NotesNoteCollection, опыта в Лотусе маловато, так что медленно пробую ) Для: DNT 1. Не совсем понял. Вы динамически создаете RT поле "Body", и прикрепляете к нему файл из файловой системе. После закрытия базы файл останется в ней в виде embededа? Т.е. после отработки этого кода его нужно будет убрать, и написать код который использует embeded файл, так? 2. Согласен с Omh, RT - поле вообще гемор редкостный, в свое время секциями пришлось оборачивать. Столько времени на подгонку дизайна ушло.. Для: fvoice Думал об этом, но не вариант. В этом случае Exe запустится 1 раз и при старте. А мне надо запустить его с нужными параметрами после того как админ отметит чекбоксами нужных юзеров.
0
|
|
|
0 / 0 / 0
Регистрация: 11.09.2006
Сообщений: 373
|
|
| 30.01.2008, 18:44 | |
|
Для: SparkLone
Админ запустит его на машинах пользователей? Это как?
0
|
|
|
0 / 0 / 0
Регистрация: 04.02.2007
Сообщений: 63
|
|
| 30.01.2008, 18:51 | |
|
Для: fvoice
Я не писал, что админ будет запускать базу на машинах пользователей. Было сказано "ее будет стартовать админ и для выбранных пользователей с помощью извлеченного EXE файла будут проведены определенные действия". Если конкретней, - exe пропатчит мейловые базы нужных пользователей (при серверном типе установки Lotusа у пользователя конечно)
0
|
|
|
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
|
|
| 30.01.2008, 20:35 | |
|
Для: SparkLone
Ну то что richtext редкостный гемор, я особо не согласен Давай решим вот что: ты хочешь внедрить файл именно на этапе дизайна? Или потом, в уже задизайненной базе сделать документ с richtextом и в него приложить файл? Говори как надо, а мы скажем, что для этого надо сделать
0
|
|
|
0 / 0 / 0
Регистрация: 04.02.2007
Сообщений: 63
|
|
| 30.01.2008, 20:47 | |
|
Для: Omh
Ну не знаю, видимо сломался у меня на Лотусе драйвер straight_hands.sys ) В данный момент интересует именно вариант внедрить файл на этапе дизайна. В идеале - человек открывает базу, ему выводится список юзеров, он отмечает этих юзеров (вложенный файл нигде не видно), нажимает кнопку, и тут extractится файл и выполняет то что надо ----- Решил поковырять способ предложенный уважаемым DNT. Сделал две кнопки: 1) Insert File Sub Click(Source As Button) Dim session As New NotesSession Dim db As NotesDatabase Dim doc As NotesDocument Dim rtitem As NotesRichTextItem Dim object As NotesEmbeddedObject Set db = session.CurrentDatabase Set doc = CurDocument.Document Set rtitem = New NotesRichTextItem( doc, "Body" ) Set object = rtitem.EmbedObject ( EMBED_ATTACHMENT, "", "c:\setup.exe") Call doc.Save( True, True ) End Sub 2) Run Sub Click(Source As Button) Dim doc As NotesDocument Dim rtitem As NotesRichTextItem Dim fileCount As Integer Const MAX = 100000 fileCount = 0 Set doc = CurDocument.Document Set rtitem = doc.GetFirstItem( "Body" ) If ( rtitem.Type = RICHTEXT ) Then Messagebox "d" Forall o In rtitem.EmbeddedObjects If ( o.Type = EMBED_ATTACHMENT ) _ And ( o.FileSize > MAX ) Then fileCount = fileCount + 1 Call o.ExtractFile _ ( "d:\reports\newfile" & Cstr(fileCount) ) Call o.Remove Call doc.Save( True, True ) End If End Forall End If End Sub Если нажимать сначала Insert, потом Run - все работает. Если к примеру нажать Insert. Закрыть базу, открыть и нажать run - уже не рабоатет.. (не сохраняется состояние?) + ко всему размер базы растет каждый раз даже после нажатия Run, который по идее должен удалять файл (сохраняется но криво? ) В общем был бы благодарен за помощь )
0
|
|
|
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
|
||||||
| 30.01.2008, 20:58 | ||||||
|
Для: SparkLone
Если на этапе дизайна то делаем так: Допустим твой файл зовётся prg.exe В дизайнере делаем новую форму, назовём её допустим Prg В дизайнере прикладываем на форму файл, на всякий случай на ивенты QueryOpen и QuerySave ставим Continue = False (что бы юзера случайно не наплодили документов с тяжёлой формой). Всё, файл в дизайне мы создали. Теперь идём к кнопке. Пишу на память, так что сразу может и не откомпилиться
Там есть пара методов перебора NNc, это посмотри сам. В итоге у тебя в стринговой переменной есть NoteID документа формы. Берёшь по этому NoteID документ из базы и из поля $Body экстрактишь приложенный тобой файл. Запускаешь с параметрами и усё. Я предложили такой извращённый способ, потому что когда-то проверял и вроде работало Потому как если это файл приложить в SharedResources -> Files, то потом до него кроме как через DXL хрен доберёшься.
0
|
||||||
|
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
|
|
| 30.01.2008, 21:11 | |
|
Хотя я бы сам делал бы форму "install" с рич тестом и уже в задизайненной базе делал бы такие инсталляции, как мне надо.
Но вышеуказанный способ тоже имеет право на жизнь, особенно, если не хочеться делиться самим exe файлом. Правда, любой маломальски продвинутый пользователь/программер это дело вскроет со временем (хотя бы из за детачинга...).
0
|
|
|
0 / 0 / 0
Регистрация: 04.02.2007
Сообщений: 63
|
||||||
| 31.01.2008, 02:33 | ||||||
|
Omh
Огромное спасибо, за знания и терпение ) Немного вкурил в тему. Вот что вышло в итоге (экстрактим аттач, сохраняем на винт, запускаем, ждем пока отрабатывает, удаляем из базы аттач):
1) Set handle = o.Activate( False ) Это и не должно работать для обычных EXE файлов, я правильно понимаю? Только для документов которые зарегистрированы в системе и у которых можно дернуть интерфейс? (если есть способ запустить exe прям в качестве аттача - хотелось бы его узнать, от многих проблем избавляет, ибо не надо сохранять на винт и т.д.) 2) Set WShell = CreateObject("WScript.Shell") Соответственно единственный вариант чтобы запустить вложение - сохранить и запустить файл благодаря WScript.Shell, да? Не в курсе, есть ли подводные камни, на разных осях? База будет разворачиваться под W2k/XP/Vista. С той же Вистой я уже хлебнул горя, благодаря ее UACу - pain in ass у программиста.. 3) WshShell.ExpandEnvironmentStrings("%temp %") Опять таки есть ли другие способы получить путь в Temp директорию, окромя WScriptа? Сохранять буду только туда, ибо под той же Вистой вечно ни на какие папки прав нет, даже у админа, пока явным образом права UACом не повысишь.. 4) o.Remove Работает/не работает? С одной стороны отрабатывает без ошибок. С другой стороны размер базы не уменьшается. Более того, провел эксперимент: - создал базу - в ней создал форму - на форму зааттачил файл в дизайнере - сохранил (Посмотрел размер) - удалил в дизайнере файл - сохранил В итоге размер как был, так и остался большим, хотя в дизайнере файла не наблюдается. Можно ли как то удалять attachменты наверняка? А то увеличивать базы на 10 метров навсегда - дурной тон... 5) Set FSO = CreateObject("Scripting.FileSystemObject ") FSO.DeleteFile pathToFile По моему это самый простой и надежный способ удаления файла, но опять таки завязка на систему (вдруг скриптинга не будет или версия кривая). Есть другие стабильные варианты? А то просматривал функцию удаления файла Елены Нефедовой и фигел, мрачно.. ) И еще раз спасибо за помощь
0
|
||||||
|
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
|
|
| 31.01.2008, 09:34 | |
|
1. Только для Embedded чё-то там, для аттачментов действительно не воркает.
2. Можно с помощью CreateProcessA и WaitForSingleObject (в нете найти легко) 3. Ф-ия скрипта Environ 4. Надо компактить базу после удалаения аттачей 5. Ф-ия скрипта Kill А зачем ты удаляешь аттачмент из формы? Он тебе больше никогда не понадобиться. Да и там права надо что-то около Дизайнера и выше для этого, кмк.
0
|
|
|
0 / 0 / 0
Регистрация: 04.02.2007
Сообщений: 63
|
|
| 31.01.2008, 12:36 | |
|
1. Жаль конечно..
2. Угу, читал в двух темах (сошлись на мнении что надо использовать WScript и нечего извращаться) В общем если WScript будет работать на всех системах - остановлюсь на нем, если нет - буду разбираться с использованием WinAPI в Лотусе. 3, 4, 5: Cенкс, не знал ) На самом деле будут две разных базы. Одна админская - в ней удалять ничего не надо. А для юзеров (после применения как раз сохраненного приложения в админской базе) вроде как надо, я еще обсужу требования, может есть резон оставлять. Опять таки еще не ясно, что лучше - отправить юзерам письмо с инсталлятором, или проинтегрировать в их базы, чтобы при первом открытии - запустилась msiка (а потом соответственно удалился, место жалко, тем более что инсталлятор будет просечен многим юзером и дисковое пространство будет серверное). Так что вопрос: получится ли засетить жестко msi в базы пользователей? В отличи от решенно благодаря тебе проблемы - в этом случае будет изменен шаблон мейловой базы юзеров, он накатится на текущие базы юзеров (проапдейтим дизайн). Т.е. если в темплейте просетить msi интеерсно он накатится на текущие nsfы или нет. И какие есть вообще вараинты апдейта дизайна (замечу что помимо msi, там действительно будет меняться дизайн)? Я знаю 2: 1) nconvert - официальная утилитка. В минусах у нее то, что после применения отправляет сама каждый раз письмо пользователям что их база была проапдейчена - что абсолютно лишнее 2) с помощью lncppapi. В минусах то - что надо выносить отдельный exe, хотя терпимо. В принципе на этом методе и остановлюсь если вариантов лучше нет.
0
|
|
|
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
|
|
| 31.01.2008, 13:09 | |
|
Вторую часть вопроса до упора не понял, но если накатить дизайн с файлом в форме, то, кмк, файл появиться и в дизайне target базы.
0
|
|
|
0 / 0 / 0
Регистрация: 26.05.2006
Сообщений: 1,313
|
|
| 31.01.2008, 22:50 | |
|
Глупый вопрос: почтовые базы, которые надо апгрейдить, они НЕлотусовые? Може на них просто стандартную задачу DESIGN натравить?
0
|
|
| 31.01.2008, 22:50 | |
|
Помогаю со студенческими работами здесь
18
Android x86 Установка и дальнейшее использование
Динамическое клонирование полей формы и их дальнейшее использование Использование текстового файла как базу данных
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|