Список Прикрепленных Файлов На Форме

iosif88

Well-known member
14.10.2009
97
1
#1
Может быть есть у кого рецепт или идея как сделать такое:

К форме могут прикрепляться различные файлы (их число заранее неизвестно).
Желательно представить эти attachment-ы в виде списка для того чтобы пользователю было удобно с ними работать (открыть или сохранить необходимый ему файл из списка, прикрепить новый attachment и.т.д)
Все это должно работать в десктопном клиенте Notes.

Вот примерный вид как это могло бы выглядеть (скрины взяты с web-сайта, понятно что на Lotuse вид может быть другой, суть в том чтобы было в виде списка)





Есть у кого идеи как это можно сделать в Lotus ?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#2
Многие делают вложения одтельно от обрабатываемого документа. Часто даже в отдельной БД.
Если вложения будут отдельными документами в той же БД, то встроенный вид - как хочешь, так и представляй.
Если в другой БД, придется играться с отображением и работой со списком вложений через поля, формировать удобочитаемый вид и т.п.
Если есть возможность глянуть как работает Босс-Референт, то можно увидеть наглядно как это реализовано, но там весьма сложная реализация (если мало опыта) ввиду сложного функционала.
 

iosif88

Well-known member
14.10.2009
97
1
#3
Многие делают вложения одтельно от обрабатываемого документа. Часто даже в отдельной БД.
Если вложения будут отдельными документами в той же БД, то ...
К сожалению вложения это обычные файлы (в основном MS Word файлы, возможно и небольшие архивы zip )
 

nvyush

Lotus team
22.04.2009
2 317
0
#4
В QueryOpen документа пробегайтесь по notesRichTextItem.EmbeddedObjects и формируйте список в поле списка. Можно также выводить в диалоге.
Для списка удобно использовать моноширинный шрифт.
 

iosif88

Well-known member
14.10.2009
97
1
#5
nvy,
спасибо за совет.
Остается самый главный вопрос как сделать этот список динамическим?
Т.е. задача чисто интерфейсная.
При добавлении нового файла в списке должно появляется новая строка.
Пользователь может выделять нужную ему строку и нажав на кнопку "открыть" приаттаченный файл(выделенная строка) должен открываться.

Обычный ListBox для этого не подходит, так как не позволяет выделять строку в режиме чтения
 

hosm

* so what *
18.05.2009
2 442
6
#6
qwerty
у доджо есть возможность рисования таблички. возможно, через икспейджи это можно заюзать на клиенте? И еще - если для винды - где-то юзали через эмбеддед едитор форму, на которой стандартный ListView control.
 

Omh

Lotus team
04.07.2007
2 210
1
#7
>Остается самый главный вопрос как сделать этот список динамическим?
Что насчёт NotesUIWorkspace.Prompt с type = PROMPT_OKCANCELLIST (4) или PROMPT_OKCANCELLISTMULT (7)
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#8
qwerty я б на вашем месте послушал Akupaka. етот вариант очен прост в реализации и отвечает вашим требованиям на 100%. но если ваши юзера работают через веб тогда уж слушайте OKEN и пробуйте через xPages
 
30.05.2006
1 345
11
#9
..
При добавлении нового файла в списке должно появляется новая строка.
Пользователь может выделять нужную ему строку и нажав на кнопку "открыть" приаттаченный файл(выделенная строка) должен открываться.
...
Обычный ListBox для этого не подходит, так как не позволяет выделять строку в режиме чтения
Видел в одной СЭД такую реализацию: в форму внедряется MS Control вместо "родного".
Функционал - именно тот, что тебе требуется, НО:
1.Этот COM (реализующий контрол) есть НЕ НА ВСЕХ клиентах (зависит от установленного MS-софта)
2.Глюки с именами файлов в национальной кодировке и др.редкими символами (типа кавычек)
 

nvyush

Lotus team
22.04.2009
2 317
0
#10
> При добавлении нового файла в списке должно появляется новая строка.
Что мешает обновить список после добавления вложения?

> Пользователь может выделять нужную ему строку и нажав на кнопку "открыть" приаттаченный файл(выделенная строка) должен открываться.
> Обычный ListBox для этого не подходит, так как не позволяет выделять строку в режиме чтения
Можно открывать не сам документ, а "на лету" создавать его двойника (без вложений, разумеется) и открывать его в режиме редактирования.

Но, кмк, лучше всё-таки через внедрённое представление.
 

iosif88

Well-known member
14.10.2009
97
1
#11
Но, кмк, лучше всё-таки через внедрённое представление.
Решил так и делать, но столкнулся с такой проблемой.

Предположим пользователь открыл главный документ (заявка).
Начал прикреплять файлы - т.е. создаются дочерние доки с вложениями.

Возникают две проблемы.

1)Что делать если пользователь решил не сохранять главный документ (т.е. по сути вложения файлов отменяются) - дочерние доки с вложениями ведь уже сохранены.

2)Предположим что пользователь прикрепил уже несколько файлов но не сохранил (продолжает добавлять файлы), другой пользователь открывший этот док на просмотр будет видеть во внедренном представлении дочерние доки-вложения не сохраненного документа (проблема по сути вытекает из первой)


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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#12
Не давать добавлять вложения без сохранения главного документа.
Или при сохранении вложения сохранять главный документ.
 

VladSh

начинающий
Lotus team
11.12.2009
1 276
6
#13
Вроде можно было на HTML табличку забабахать, в которой отображать ссылки на доки вложенные в этот же документ. Или нет?
 

hosm

* so what *
18.05.2009
2 442
6
#14
VladSh
можно, но надо при изменении переоткрывать в лотусе документ, емнип
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#15
Начал прикреплять файлы - т.е. создаются дочерние доки с вложениями
Как мне кажется, лучше тут без родственной связи обойтись. Привязку делать по ключу, например, по униду документа к которому создаются вложения. Представление отображающее вложения соответственно отображать с фильтром по ключу.
Правда, если нужно отображать где-то в других видах подчиненность, то придется симмулировать родственную связь через т.з. "Default $REF"
В общем, свои плюсы и минусы. Возможно мой опыт не совпадает с общепринятым. Но чем меньше родственных связей, тем лучше :gigi:

Вроде можно было на HTML табличку забабахать
Придется играть с перегрузкой документа, кто знает, будет ли это удобней. Плюс оно постоянно норовит криво отображаться... Я этот способ ставлю в конец очереди.

1. Можно отмечать вложения как временные. При сохранении главного документа - убирать флаг в документах вложений. Если не сохранили, то либо улавливать данный момент и удалять документы вложений, либо каким-то шедульным агентом удалять время от времени, например, ночью, когда все спят =)

Проще всего, как писал Medevic, не давать до сохранения главного документа впервые, добавлять вложения.

2. Аналогично, отметка отображающая документ вложений всем пользователям или только автору. Тут придется играть с фильтрацией данных в представлении или ограничивать доступ на чтение этих "несохраненных" документов вложений только узкому кругу лиц - автору, админам (роль!), серверу.

Хотя, если честно, то второй проблемы я не вижу. Пользователь одновременно работает либо с главным документом, либо с документом вложения. Т.е. если он нажал кнопку создать вложение, указал файл, нажал сохранить вложение (или как там у тебя реализован порядок), т.е. как только он согласился, что именно этот файл он добавляет в текущий момент, то вложение сразу становятся доступны другим пользователям, без необходимости сохранять главный документ при добавлении вложения.
Но, правила игры следует озвучить заранее! Пользователи должны быть уведомлены, что система работает именно так, как ты реализуешь, что вложения могут быть добавлены во время просмотра и т.п. Либо, должны быть оговорены и реализованы ограничения, например, пока документ на стадии добавления вложений, другие пользователи его не видят.
 

VladSh

начинающий
Lotus team
11.12.2009
1 276
6
#16
Придется играть с перегрузкой документа, кто знает, будет ли это удобней. Плюс оно постоянно норовит криво отображаться... Я этот способ ставлю в конец очереди.
"Перегрузкой", - в смысле "переоткрытием"? Так с этим проблем уж давно нет, тем более сейчас, когда пользователи даже заметить не успевают, что док "дёрнулся". Серьёзная проблема при переоткрытии одна - если надо открыть сложную форму с таблицами, секциями, в том же состоянии, в котором она была до закрытия..
Мне наоборот именно этот вариант нравится. т.к. не надо городить огород на пустом месте. Причём, если проект когда-то будет под web, то код для отображения, считай, есть.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#17
т.к. не надо городить огород на пустом месте
Да это огород и есть, в отличии от встроенного вида. Это костыли для красивого отображения ссылок на документы, если документы находятся в другой БД (если рассматривать конкретно данный случай применения).
А с переоткрытием как таковым проблем нет, есть проблемы с корректной обработкой этого процеса, в некоторых случаях.
 

VladSh

начинающий
Lotus team
11.12.2009
1 276
6
#18
Это костыли для красивого отображения ссылок на документы
Под web это костылём не назовёшь, это как раз нормально.

если документы находятся в другой БД.
Если чисто клиентское приложение, то можно попробовать Composite Application. Хотя когда-то обещали, что оно и под web работать будет (я не проверял).

(если рассматривать конкретно данный случай применения)
В конкретно данном случае человек не спрашивал за хранение в другой базе, ему это предложили/навязали, поэтому и предлагаю альтернативный вариант.

Заодно смежный вопрос: давно заметил, что при открытии документа, в котором есть большие (десятки мегабайт) вложения, он открывается медленно.. и чем больше объёма вложений, тем больше тормозит. А иногда не тормозит, но и док этот ни разу не открывался.
Интересно, от чего это зависит? Может от видимости полей, в которые вложены файлы? /сложность протестить ещё и в том, что такое не всегда наблюдается, а как хочешь протестить, то этот "эффект" исчезает/ Кто-то смог проэкспериментировать: поскрывать все поля, в которых вложения, и протестить скорость загрузки?
 

nvyush

Lotus team
22.04.2009
2 317
0
#19
Видел в одной СЭД такую реализацию: в форму внедряется MS Control вместо "родного".
Функционал - именно тот, что тебе требуется, НО:
1.Этот COM (реализующий контрол) есть НЕ НА ВСЕХ клиентах (зависит от установленного MS-софта)
2.Глюки с именами файлов в национальной кодировке и др.редкими символами (типа кавычек)
Кста, можно аналогично и соответствующий java-апплет ввернуть. Только его ещё надо написать...

Добавлено
Информация к размышлению: Java-апплет: альтернатива встроенному представлению
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#20
В конкретно данном случае человек не спрашивал за хранение в другой базе, ему это предложили/навязали, поэтому и предлагаю альтернативный вариант
Ты предлагаешь не альтернативный вариант, ты ведь говоришь о представлении данных, а не о хранении.
Я же к этому и говорю, что в случае, если вложения хранить документами в другой БД, твой вариант удобен, потому как внедренное представление из другой БД сделать сложнее (есть некоторые ограничения на работу с шаблоном и рабочей БД). Если же вложения хранятся в этой же БД отдельными документами, то твой вариант реализовывать трудозатратнее, да и не так удобно выглядит интерфейс, как внедренное представление. Если же вложения сидят в текущем документе, то, имхо, вообще выдумывать велосипед без толку.
Я не говорю, что твой вариант плох или еще что-то в этом роде, он по-своему интересен, но не всегда оптимален :)
И говорим мы о нотес-клиенте пока что, поэтому не к месту сравнивать в стиле "что под нотес костыль, то под веб нормально".

Композиты, кмк, тоже тут цеплять можно разве что для изучения технологии (к стати, интересный пример), но это сложная реализация, да и ограничена версией клиента.

Заодно смежный вопрос: давно заметил, что при открытии документа, в котором есть большие (десятки мегабайт) вложения, он открывается медленно.. и чем больше объёма вложений, тем больше тормозит. А иногда не тормозит, но и док этот ни разу не открывался.
Интересно, от чего это зависит? Может от видимости полей, в которые вложены файлы?
Кмк, это из-за того, что сервер передает тебе все эти данные. И стечение обстовятельств (документ глубоко не в памяти сервера, плюс загруженность сети, плюс ситуация на клиенте) дает непостоянный такой эффект. К стати, вроде, если включить фичу хранения вложений отдельно от БД (забыл как называется, Тоха тут о ней много говорил), то такой эффект должен уйти, вроде обращение к вложению фактически идет не при открытии документа-контейнера, а лишь при обращении к самому объекту вложения... Может мне приснилось? :)