• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы iosif88
  • Дата начала
I

iosif88

Может быть есть у кого рецепт или идея как сделать такое:

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

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





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

Akupaka

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

iosif88

Многие делают вложения одтельно от обрабатываемого документа. Часто даже в отдельной БД.
Если вложения будут отдельными документами в той же БД, то ...

К сожалению вложения это обычные файлы (в основном MS Word файлы, возможно и небольшие архивы zip )
 
N

nvyush

В QueryOpen документа пробегайтесь по notesRichTextItem.EmbeddedObjects и формируйте список в поле списка. Можно также выводить в диалоге.
Для списка удобно использовать моноширинный шрифт.
 
I

iosif88

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

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

hosm

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

Omh

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

Cleric-Lviv

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

nvyush

> При добавлении нового файла в списке должно появляется новая строка.
Что мешает обновить список после добавления вложения?

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

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

iosif88

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

Решил так и делать, но столкнулся с такой проблемой.

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

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

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

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


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

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Не давать добавлять вложения без сохранения главного документа.
Или при сохранении вложения сохранять главный документ.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 783
157
BIT
53
Вроде можно было на HTML табличку забабахать, в которой отображать ссылки на доки вложенные в этот же документ. Или нет?
 
H

hosm

VladSh
можно, но надо при изменении переоткрывать в лотусе документ, емнип
 
A

Akupaka

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

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

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

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

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

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

VladSh

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

Akupaka

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

VladSh

начинающий
Lotus Team
11.12.2009
1 783
157
BIT
53
Это костыли для красивого отображения ссылок на документы
Под web это костылём не назовёшь, это как раз нормально.

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

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

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

nvyush

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

Добавлено
Информация к размышлению:
 
A

Akupaka

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

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

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

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