Событие Закрытия Документа Word

  • Автор темы Автор темы Bob84
  • Дата начала Дата начала
Bob84
Пользователь может внести изменения в файл.
это еще зачем?
есть шаблон, кот. автоматом заполняется - абсолютно не нужно позволять ручные изменения хранить в системе...
то что юзер сделал не из системы - не должно в ней сохраняться

Добавлено: причина крайне проста - повторяемость генерации будет нарушена - т.е. прямое противоречие целостности хранимой информации
 
Ох-ох-хох....
1. Bob84: я показал только маленький кусочек, где показан пример поиска открытого док-та, как обрабатывать отдельный вопрос. У меня было реализовано через таймер. после деаттача и запуска приложения редактирования (тоже отдельный вопрос), запускаем таймер и по событию таймера делаю обработку с проверкой сохранения\закрытия (у меня реализованно что при сохранении в приложении, файл сразу аттачился, НО это требование к моей задаче). Задача в общем не тревиальная, требует занний и умений, не только в лотусе, но и в смежных облостях, так что если есть возможность попробуйте упростить.
2. All: По поводу шаблонов: Если бы все задачи сводились к жестко формируемым печатным формам, то Ворд в 75% случая можно избежать формируя и печатая из Нотса. НО, Вселенная не идеальна... Чаще всего (если конечно эта система не просто картатека с вложениями), то по шаблону формируется скелет документа (из лотуса берем данные и вносим их в "поля" документа), а содержательную часть пользователь формирует сам. Затем все это сохраняем в лотус, для работы\хранения. Мало того этот документ может быть открыт затем и исправлен!... :) :( Так что для "документоориентированных" :( систем такой инструментарий естественнен...
3. All: Так как документ в отдельном хранилище, то в UI открывать "карточку" не надо, всё в бакэнд и ни каких заморочек с переоткытием! НО, можно и в текущий документ: делаем секцию с управляемым доступом, в доступ не существующего пользователя\группу (типа что бы ни кто не мог править секцию), секция всегда свернута, и скрыта по видимости, в секцию помещаем поле в котором будем хранить вложение. Всё, теперь можно с этим полем через бакэнд работать - через UI оно не бедет сохранятся, так что конфликта не будет.
4. All: Конечно можно избежать всего связанного с винАПИ, но перекладывая на пользователя открытие и редактирование вложения. т.е. в скрытом режиме формируем шаблон\скелет документа, например через COM\OLE, вкладываем в документ и открываем карточку с вложением, далее пользователь может кликнув по вложению выбрать "Правка"(Edit) и править штатными средствами лотуса. Если док-т в отдельном хранилище, то можно открыть во фрейме (фрейм при этом может быть и не большим, только для отображения вложения). Чуть сложнее если вложений несколько, тогда (например) 2 фрейма, в одном список вложений (например "эмбеднутая" вьюшка), во второй отображаем карточку выбраного вложения. (хотя нет тут может возникнуть проблема с сохранением карточки во фрейме, хотя надо проверять на 100% не скажу)
 
DuChan
а содержательную часть пользователь формирует сам
вот даже интересно - из чего состоит "содержательная часть" и почему её надо формировать именно в ворде?
Замечу, что пользователь - это не дизайнер, не художник, не макетчик... т.е. в контексте наполнения текс/таблицы/ну может картинки
при этом - недопустимо управление стилями форматированием и т.п. (иначе результат буде ужасен)
документоориентирование - это не дизайнерские и не художественные, главное - контент, а не его украшательство
в любом случае - интересно услышать от топикстартера - чёже там юзер должен набаянить в ворд ;)
 
из недостатков которые предоставляет лотус это:
1) неявное/неудобное/непривычное(нужное подчеркнуть) первоначального оформления текста(зачастую пользователи формируют текст во внешнем редакторе и потом просто вставляют текст в поле). При этом если оформление сделано не стандартно(формат листа альбомный или же хитрое форматирование), то при вставке этого текста в rtf поле - лотус подстраивается под этот текст, убивая разметку документа лотус или съезжает разметка самого текста и ее надо уже в документе редактировать
2) рецензирование одновременное несколькими пользователями текста документа. При этом при открытии документа 3-м согласующим - желательно уже видеть "почеркивания" предыдущих 2-х и он наоборот может почеркать не сам текста уже их комментарии. MS Office/Libre Office/OpenOffice визуально это предоставляют более привлекательно и информативнее нежели средствами лотус

из последних наработок работа ведется в сторону ODF, т.е. этот формат для лотуса является основным. Напечатал текст во внешнем(удобном) для пользователя редакторе - сохрани в формат ODT и импортируй в лотус форму, где сервер уже распарсит его и вычленит необходимые данные и приведет их к нужному форматированию. Хочешь редактировать данные - сервер готовит ODT документ и отдает пользователю на растерзание, при этом тот документ, который был отдан пользователю, необходимо тут же забрать обратно и на сервере распарсить изменения и внести эти изменения в основной документ. Вот главная сейчас задача -как корректно забрать у пользователя обратно документ. Вариант "в лоб" - заставить его ручками вложить. Но некрасивый этот вариант. Хочется автоматизировать этот процесс, но удачного решения пока нет.
 
в любом случае - интересно услышать от топикстартера - чёже там юзер должен набаянить в ворд
Не имею понятия, мало ли, например вставить картинку с котиком, ну там добавиь семь красных паралельных линий и две из них должны пересекатся...
Я не сам себе ставлю задачи и не влияю на их постановку (только если это окажется уж совсем технически не реализуемо), так же как укладчик плитки не указывает хозяевам, что выбранная цветовая гамма не является подходящей.

Задача в общем не тревиальная, требует занний и умений, не только в лотусе, но и в смежных облостях, так что если есть возможность попробуйте упростить.
Да уж постараюсь.
Спасибо всем за помощь.
 
Не имею понятия, мало ли, например вставить картинку с котиком, ну там добавиь семь красных паралельных линий и две из них должны пересекатся...
Я не сам себе ставлю задачи и не влияю на их постановку (только если это окажется уж совсем технически не реализуемо), так же как укладчик плитки не указывает хозяевам, что выбранная цветовая гамма не является подходящей.
ТЗ должен писать человек разбирающийся в предметной области и знающий инструмент разработки...
если этого нет - то вот и имеем к-ту херь, с набором дебильных пожеланий и минимумом применимости в жизни
В задаче должны присутствовать:
- роли пользователей
- возможности ролей в плане доступа и модификации информации
- специфика для платформы (нотус в данном случае)
- форматы хранения информации (если допустимо - файлы и их форматы)

не должно присутствовать:
- описание ср-в вне платформы (в данном случае - взаимодействие пользователя с вордом и сохранения в нем)
- мифических "пользователь сам чего-то делает"
почему - дапатамучто система создается под задачи конкретные, а не серебряная пуля. Результатом создания серебряной пули, обычно, бывает пуля из г-на, с соответствующим действием ;)

Добавлено: erdi нотус, да и домина вопщем, не является , со всеми вытекающими
нужен ECM - берем его
 
Анти-паттерн (от англ. anti-pattern; он же ловушка, англ. pitfall) — это то, как поступать не надо, но как всё равно все, всегда и повсюду поступают. Сколько ни предупреждают. Потому как дедлайны. Потому как бизнес. Потому как до******.

Не холивара ради:
lmike ,твои слова бы да в мозги многим людям...
Это проблема мелких/средних компаний, где один человек сидит на 3-5 должностях. В крупных проблемы другие, там ИБ, там долгое согласование, там порой тирания регламентов(что весьма неплохо), много всего.
В мелких/средних ТЗ пишет разработчик, в лучшем случае. В худшем сам заказчик, оперируя выражениями: "здесь надо кнопочек добавить и чтобы письма отправлялись". Ни процесса работы, ни базовых шагов, просто надо так. А когда вопросы задаешь слышишь в ответ: "Вы ничего не понимаете, надо так ..." и хорошо, если задал их до релиза... Вот поэтому и имеем то, что имеем...
Самое что лучшее было на моей памяти в средней конторе, представитель заказчика писал ТрЗ на основе опроса рабочей группы(начальники департаментов, которых поставили для унификации процессов). Затем это все переписали в ТЗ, согласовали и сделали.
 
ТЗ должен писать человек разбирающийся в предметной области и знающий инструмент разработки...
Вашими устами да мед пить ;)

В других проектах так как правило и было, либо ТЗ до утверждения согласовывали с группой разаботки. Ну а тут "маемо те шо маемо"(с)
 
не знаю есть ли к-л плагины к домине...
давно не искал, речь пойдет о подобии ECM:
- плага в домину дающая WebDAV к БД (воще есть некие мануалы, но из того что видел - кастыли)
- плага в офисный пакет (или системную), кот. позволяет интегрироваться в ВебДАВ-ом домины
- обработка специфичных uri - дабы запускать работу с офисом из браузера/нотусни

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

Добавлено: ну вот например

Добавлено: не распаковывая доки почитать https://github.com/OpenNTF/WebDAVForDomino
 
проприерастное решение
не пробовал
 
lmike вот даже интересно - из чего состоит "содержательная часть" и почему её надо формировать именно в ворде?
Оочень странное замечание... :) Контент который может участвовать в документообороте может быть чудовищно различным, начиная от стандартных писем (отписок), сформировать и напечатать которые можно и без участия пользователя и\или Ворда, и до сложнейших автокадовских проектов (у меня система работы с контентом не ограничивается MSOffice - мне вообще пофиг на контент, да хоть RAR запихай, или AVI - система найдет просмоторщик\редактор и отдаст ему. есть нюансы для некоторых приложений, но их не так много и они строго спецефичны). Да и для не "сильно сложных" документов, не всегда применимо "печатный бланк". Формируемый документ может содержать информацию "по существу", которую не имеет смысла\не возможно хранить в РКК - может содержать таблицы, изображения, диаграммы и т.п. Да даже тот же договор - сформировать по шаблону в соответствии с тематикой\направлением можно, но в процессе согласования\договоренностей с клиентом\заказщиком могут возникать доп.пункты, менятся пункты, фрмулировки. Вы как, предлагаете хранить всю структуру пунктов в Лотусе (ага еще на каждй пункт свой поддокумент :D ) - это издевательство над пользователем. Да и в массе своей не имеет смысла для хранения - проще один вордовский док-т иметь.
{Крик души}Не надо все сводить к РКК (как меня устали эти РКК) - документооборот это движение ДОКУМЕНТОВ - документ первичен (!!!), а все эти парадигмы РКК - шаблон\стереотип, когда-то "на заре" принятый и до сих пор засевший во всё...

P.S. Извените за эмоциональность... Как и предрикал - холивар.... ;)
З.Ы. по ТЗ: Есть требования к системе от заказщика (хотелки) и есть ТЗ - между ними пропасть... ;) Во многом с Вами согласен, но Вы несколько односторонне смотрите на ситуацию
 
DuChan я не зря упомянул ECM...
описанный процесс - входит в их концепцию ;) и путь описал, кот. это возможно для Нотуса (хотя затратно по разработке)
версионность никто не отменял и вести обсуждение/согласование дока в формате форума - тоже вполне себе вариант
реализация вики движка - очень подходит под процесс совместной работы над документом
я не отрицаю присутствие вложений, но упор на кривую интеграцию, вполне логично, вызывает отторжение :)
 
Стандартную базу "Библиотека документов" или "Библиотека документов Microsoft Office" видели? Может это то, что вам надо?
 
Уже видел, не совсем то, что мне надо по постановке. Пока шло это обсуждение, сам заказчик начал думать, что ему таки надо. Пока не решили.
 
Пастернака не читал, но осуждаю.
В смысле обсуждение не читал, но решение знаю.

Фича в том, что документ открытый в ворде лочится на запись.
Итого:
1. детачим док куда-то
2. шмаляем ворд на этот документ
3. в цикле проверяем не закрыт ли документ на запись (пока ворд открыт, он залочен)
4. как только отлочился, спрашиваем, аттачим и танцем гопак.
Если это объединить с "Background thread" агентом, то вообще получится штука с преферансом и куртизанками.

Код:
Dim ExportFilepath As String
ExportFilepath = ExportPath + ExportFilename 'экспортированный и открытый в ворде файл

Dim OriginalFileDateTime As Variant
OriginalFileDateTime = Filedatetime(ExportFilepath)

Dim Flag As Boolean
Flag = True

While Flag
Sleep(0.2)
Flag = IoIsFileOpenV2(ExportFilepath)
Wend

Dim CurrentFileDateTime As Variant
CurrentFileDateTime = Filedatetime(ExportFilepath)

If CurrentFileDateTime <> OriginalFileDateTime Then
Print "File " + ExportFilepath + " changed... "
<ПОНЕСЛОСЬ *ОВНО ПО ТРУБАМ>
Else
Print "File " + ExportFilepath + " not changed... "
End If

Код:
Function IOIsFileOpenV2(Path As String) As Boolean
If Path = "" Then Exit Function

Dim fileNum As Integer
fileNum = Freefile()

On Error 101 Goto errorFileAlreadyOpen
Open Path For Random Lock Read Write As filenum
On Error Goto 0

Close filenum

IoIsFileOpenV2 = False
Exit Function

errorFileAlreadyOpen:
IoIsFileOpenV2 = True
Exit Function
End Function
Возюзай!
 
Omh
6♠
Одновременная работа с несколькими документами? Честно, не знаю сколько агентов в отдельном потоке можно запустить...
Как отреагирует, если вдруг закроется Word с ошибкой? Предложит приаттачить?

Если уж мы говорим про MS... такой тоже возможен:
Возвращаемое значение: состояние запущенного процесса. Возможные значения:
0 - приложение запущено.
1 - приложение завершено.
Замечание: только чтение.
Код:
Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("notepad")
MsgBox "status - " & WshExec.Status
WshExec.Terminate
MsgBox "status - " & WshExec.Status
или через тот же :
Код:
RetCode = WshShell.Run("notepad", 1, True)
 
Omh
Конечно же не While\Wend а в пул check_out док-ов :) иначе замерзнет нафиг клиент на одном доке...

savl
Если Timestamp файла поменялся, то можно уже говорить что 1 транзакция записи уже вроде как прошла+версионинг:) И если юзать пул - то и 1 агента достаточно.
 
rinsk
>иначе замерзнет нафиг клиент на одном доке...

Если это объединить с бекграунд трид агентом и показать юзеру, куда жать в случае геморроя (как отключить бекграунд агент) то всё заиграет новымми красками даже в том случае, если word накосячит.

savl
>Одновременная работа с несколькими документами?
Бекгаунд трид :)

>Честно, не знаю сколько агентов в отдельном потоке можно запустить...
Я сам шмалял что-то том в районе 10-ти.
 
Мы в соцсетях:

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