Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/148: Рейтинг темы: голосов - 148, средняя оценка - 4.66
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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.01.2008, 17:15
Ответы с готовыми решениями:

Чтение списка из файла и дальнейшее использование информации из файла
основная using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; ...

Получение капчи и дальнейшее использование
Уже часов 5 себе мозг "имею". Как получить капчу на регистрацию отсюда : http://money-birds.com/signup ? Вот что последнее пробовал : ...

Ввод числа и дальнейшее использование
Помогите пожалуйста. Вот текст MOV ah, 01 ;ввожу одно число с клавиатуры и помещаю его в n, n это слово INT 21h SUB...

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 (что бы юзера случайно не наплодили документов с тяжёлой формой).
Всё, файл в дизайне мы создали.

Теперь идём к кнопке.
Пишу на память, так что сразу может и не откомпилиться

Code
1
2
3
4
5
6
7
8
9
10
Dim Sess As New NotesSession
Dim Db As NotesDatabase
Set Db = sess.CurrentDatabase
 
Dim NNc As NotesNoteCollection
Set NNc = Sess.CreateNoteCollection(False)
NNc.SelectForm = True
NNc.SelectionFormula = {@Implode($Title; "") = "Prg"} $Title - мультивэлью, точнее двухвэлью...
 
Call NNc.BuildCollection
Если всё правильно, то в данный момент у тебя в NNc содержиться NoteID документа формы (форма тот же документ).
Там есть пара методов перебора 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
Огромное спасибо, за знания и терпение ) Немного вкурил в тему. Вот что вышло в итоге (экстрактим аттач, сохраняем на винт, запускаем, ждем пока отрабатывает, удаляем из базы аттач):

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim handle As Variant
Dim pathToFile As String
Dim NNc As NotesNoteCollection
 
Set db = session.CurrentDatabase
Set FSO = CreateObject("Scripting.FileSystemObject")
Set NNc = db.CreateNoteCollection(False)
NNc.SelectForms = True
NNc.SelectionFormula = {@Implode($Title; "") = "container"}
Call NNc.BuildCollection
 
nid = NNc.GetFirstNoteId
Set doc = db.GetDocumentByID(nid)
Set rtitem = doc.GetFirstItem("$Body")
Forall o In rtitem.EmbeddedObjects
%REM
Set handle = o.Activate( False )
%ENDREM
Set WshShell = CreateObject("WScript.Shell")
pathToFile = WshShell.ExpandEnvironmentStrings("%temp%")     & "\" & o.source
o.ExtractFile(pathToFile)
ReturnCode = WshShell.Run(pathToFile, 1, True)
Msgbox "OK"
o.Remove
Call doc.Save(True, True)
FSO.DeleteFile pathToFile
End Forall
End Sub
Ну а теперь вопросы, как же без них?
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.01.2008, 22:50
Помогаю со студенческими работами здесь

Android x86 Установка и дальнейшее использование
Устанавливаю упомянутую выше систему, после этого не могу делать скриншоты и ставить программы, т.к не имеется памяти Хотя в системе...

Определение значения через if и дальнейшее использование
День добрый. Только учусь C#. В работе нуждаюсь в программе, решил ее написать. Столкнулся с некоторыми проблемами. Через IF...

Динамическое клонирование полей формы и их дальнейшее использование
Здравствуйте. Есть необходимость динамического склонирования элементов формы. Есть форма. есть три текстовых инпута c id (first, second,...

Использование текстового файла как базу данных
В общем, написал программу, выводящую в зависимости от дня и введённого пользователем класса расписание уроков. Но больше 500 строк из-за...

Запуск Командной строки от имени администратора и дальнейшее её использование
Всем привет! Сделал ярлык, который запускает командную строку от имени администратора, в батнике прописал, чтобы он запускал этот ярлык....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
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-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru