Отобразить коллекцию

  • Автор темы Dragon108
  • Дата начала
D

Dragon108

Возник следующий вопрос:

Некоторым образом формируется коллекция документов.
Хотелось бы всю эту коллекцию выводить во вью в отдельное окно (например dialog box), или как то ещё выводить пользователю, что бы он мог просмотреть её элементы, открыть их и т.д.
Какие есть идеи? Спасибо.


P.S. Пробовал через session.PickListCollection - не подходит, так как PickListCollection не ищет вхождения, а выводит элементы по жесткому критерию. Ищет в категоризованной вью, и выводит только одну категорию ;)
 
H

hosm

мб, закинуть коллекцию в папку?

Добавлено: или просто показывать темповый документ с инфой о доках и со ссылками на документы коллекции.
 
D

Dragon108

мб, закинуть коллекцию в папку?

Добавлено: или просто показывать темповый документ с инфой о доках и со ссылками на документы коллекции.


Да, можно. Но если честно с работой с папками мало знаком ;) Потом можно будет например настроить вью, что бы показывал документы из этой папки?
 
X

Xalet

Как вариант во вьюшке менять селекшн формулу, рефрешить и подсовывать в тот же PickListCollection.

Ну или с папкой, как предлагалось.
 
N

nvyush

Да, можно. Но если честно с работой с папками мало знаком ;) Потом можно будет например настроить вью, что бы показывал документы из этой папки?
Папка упрощённо и есть представление, только документы в ней отображаются не в соответствии с формулой отбора, а те, что в неё положены. Пример работы тут:
link removed
 
I

iki

Есть еще 1 интересный и очень извращенный способ =)

Перед открытием вьюшки с документами собираешь запрос для поиска во вьюхе. Фигачишь все это дело в буфер. Затем после открытия вьюшки открываешь поиск и вставляешь туда содержимое буфера после чего програмно жмакаешь ентер. что-то типо этого:

@Command ([ViewShowSearchBar]; @False);
@Command ([ViewShowSearchBar]; @True);
@Command ([EditPaste]);
@Command ([Compose]; "(pressEnter)")

На инициалайзе формы стоит события нажатия клавиши ентер. на квери опене continue = False.
Есть недостатки:

1. остаеца видна строка поиска с ацки шаманским запросом
2. после закрытия вьюхе надо прятать серчбар, иначе он помто в других вьюхах этой базы повылазит.

зы. с криками еретик и сжечь прошу не обращаца так как механизм этот вполне удачно и главное быстро работает =)
ззы мы с тобой помоему в одной конторе работаем так что ты мне звякни или зайди F8D82BE51B0E870AC325757C00681D2D - карточка в ТС =)
я скажу где посмотреть =)
 
D

Dragon108

:mellow:

зы. с криками еретик и сжечь прошу не обращаца так как механизм этот вполне удачно и главное быстро работает =)
ззы мы с тобой помоему в одной конторе работаем так что ты мне звякни или зайди F8D82BE51B0E870AC325757C00681D2D - карточка в ТС =)
я скажу где посмотреть =)

Боюсь что нет :) В конторе в которой работаю я всего два прогера: я и мой начальник. Если ты не он :) то значит ты работаешь удаленно и я ничего не знаю. Но вроде начальник никого не брал больше :))


За способ спасибо! проверю обязательно!
 
K

Kee_Keekkenen

можно создать вид с одной колонкой и формулой отбора @true, по коллекции имеющихся документов создать в памяти коллекцию документов с заполненным (или несколькими по необходимости полями) полем (что в колонке значится), подсунуть коллекцию хитрым образом, и получим пиклист с выбором чего угодно и в любом количестве, затем обратная процедура, по выбранной коллекции значений определяем документы из которых они взяты и уже работаем с документами..
 
I

iki

Вот код по переносу запроса в буфер. Мб будет полезно.

Код:
Declare Function OpenClipboard Lib "User32.dll" Alias "OpenClipboard" (Byval hWnd As Long) As Long
Declare Function EmptyClipboard Lib "User32.dll" Alias "EmptyClipboard" ( ) As Long
Declare Function SetClipboardData Lib "User32.dll" Alias "SetClipboardData" (Byval wFormat As Integer,Byval hAnsiText As Long ) As String
Declare Function CloseClipboard Lib "User32.dll" Alias "CloseClipboard" ( ) As Long
Declare Function GlobalAlloc Lib "Kernel32.dll" Alias "GlobalAlloc" (Byval wFlags As Long, Byval dwBytes As Long) As Long
Declare Function GlobalLock Lib "Kernel32.dll" Alias "GlobalLock"(Byval hMem As Long) As Long
Declare Function GlobalUnlock Lib "Kernel32.dll" Alias "GlobalUnlock" (Byval hMem As Long) As Long
Declare Function lstrcpy Lib "kernel32.dll" (Byval lpString1 As Any, Byval lpString2 As Any) As Long

Const CF_TEXT = &H001
Const CF_LOCALE = 16

'queryString - СТРОКА С ЗАПРОСОМ

Dim ptr As Long, ghand As Long, handle As Long
Dim ptrlocale As Long, ghandlocale As Long, handlelocale As Long

'get global storage for field contense
ghand = GlobalAlloc (0, (Len(queryString)+1))
'lock global storage
ptr = GlobalLock (ghand)
'copy contense of field to global storage
ptr = lstrcpy (ptr, queryString)
'free global storage
Call GlobalUnlock(ghand)

' проблема при заполнении не русской раскладкой, поэтому записываем русскую локаль в буфер
ghandlocale = GlobalAlloc (0, 4 )
ptrlocale = GlobalLock (ghandlocale)
ptrlocale = lstrcpy (ptrlocale, Cstr (0000419))
Call GlobalUnlock (ghandlocale)

' open clipboard
Call OpenClipboard (0)
Call EmptyClipboard()
'write to clipboard
Call SetClipboardData (CF_TEXT, ptr)

Call SetClipboardData (CF_LOCALE, ptrlocale)

'close clipboard
Call CloseClipboard()

ЗЫ насчет работы в одной конторе. Это я вот почему решил, но видимо ты ушел в другую. https://codeby.net/threads/33717.html
 
A

Akupaka

Эй, кто там в Конструкторском Бюро заведует? Внесите код, пожалуйста :)
 
I

iki

Держите.

Код:
Declare Sub keybd_event Lib "user32.dll" (Byval bVk As Integer, Byval bScan As Integer, _
Byval dwflags As Long, Byval dwextrainfo As Long)

Sub Initialize
keybd_event 13,0,0,0  
keybd_event 13,0,2,0
End Sub

Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
continue = False
End Sub
 
N

nvyush

по коллекции имеющихся документов создать в памяти коллекцию документов с заполненным (или несколькими по необходимости полями) полем (что в колонке значится), подсунуть коллекцию хитрым образом
С этого места поподробнее, пожалуйста (с). Или Вы предлагаете для каждого найденного документа создавать документ-ссылку, подпадающий под условие отбора "хитрого" представления, а потом ссылки удалять?
 
I

iki

кста, а где же кроссплатформенность? винапапи сплошное)

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

Главное скорость.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
471
версии клиентов, и проч. жестко заданы регламентом, который в ближайшие стопицот лет врятли изменится.
смелое утверждение...
скорость чего увеличится? разработки - тока падает от такого подхода
код на сервер не перенести (он часто не виндовые)
оверхед по переписыванию по-человечески - ваще всё выбросить и переписать
и это при том, что нет необхадимости в винапи, в большинстве случаев
 
I

iki

Ненадо меня под расстрел пожалуйста.

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

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
471
а апплет мона вывести шо хошь
 
K

Kee_Keekkenen

С этого места поподробнее, пожалуйста (с). Или Вы предлагаете для каждого найденного документа создавать документ-ссылку, подпадающий под условие отбора "хитрого" представления, а потом ссылки удалять?

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

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