Dialog List

San40S

Well-Known Member
15.04.2009
69
0
#1
Всем привет!
Есть поле типа Dialog List. Значениями поля являются:

Название документа | Айдишка документа
value | Alias

пользователь видит Значение, а программно мы получаем Алиас.
Вопрос, как можно взять значения (value) Dialog List-a, потому-что у меня всегда берет Алиас Диалог Листа???
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#4
никак, если прямо

можно делать алиас иначе, вместо "value | Alias", делать "value | value | Alias"
тогда фактически алиас будет содержать и значение и алиас

все зависит от задачи
 
K

K-Fire

Гость
#6
В диалог лист же данные откуда-то грузятся? Из другого поля или из вьюшки.
Найти документ по алиасу не проблема, тем более что алиас это юнид. Далее вытащить значение - тем более не проблема.

Этот код повесить либо на кнопку (а тип поля с диалог листа заменить на текст), либо на событие какое-нить.

Все просто :)
 

San40S

Well-Known Member
15.04.2009
69
0
#7
В диалог лист же данные откуда-то грузятся? Из другого поля или из вьюшки.
Найти документ по алиасу не проблема, тем более что алиас это юнид. Далее вытащить значение - тем более не проблема.

Этот код повесить либо на кнопку (а тип поля с диалог листа заменить на текст), либо на событие какое-нить.

Все просто :)
Да, мне твоя мысль тоже в голову приходила, но это лишние операции (найти документ по ЮНИДу, взять значения полей и т.д.)!
З.Ы. Я не любитель нагружать многими операциями работу, но раз простого пути нет, придется делать именно так, как ты написал!

Спасибо всем ;)
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#8
San40S, ты бы задачу описал ширее, может, найдется более оптимальное решение :)
кроме того, K-Fire не даром уточнил, что
В диалог лист же данные откуда-то грузятся? Из другого поля или из вьюшки.
думаю, он имел в виду, что ты в диалоге можешь источником инфы указать поле, в которое предварительно будет записана инфа (value|alias).
потом, когда нужно будет определить value по алиасу, ты значение алиаса берешь из поля-диалога, а поле источник разбиваешь на двое через вертикальную черту, получаешь список значений и список алиасов, в списке алиаса находишь позицию того алиаса, что взял из поля диалога, и уже по позиции находишь нужное значение в списке значений
 

San40S

Well-Known Member
15.04.2009
69
0
#9
San40S, ты бы задачу описал ширее, может, найдется более оптимальное решение :)
кроме того, K-Fire не даром уточнил, что
думаю, он имел в виду, что ты в диалоге можешь источником инфы указать поле, в которое предварительно будет записана инфа (value|alias).
потом, когда нужно будет определить value по алиасу, ты значение алиаса берешь из поля-диалога, а поле источник разбиваешь на двое через вертикальную черту, получаешь список значений и список алиасов, в списке алиаса находишь позицию того алиаса, что взял из поля диалога, и уже по позиции находишь нужное значение в списке значений
Попытаюсь описать подробней:
Есть некая заявка. В этой заявке есть поле (Dialog List) - в нем хранятся НАЗВАНИЕ|ЮНИД шаблона для печати. Когда пользователь нажимает на кнопку "Печать", берется значение из Диалог Листа, по каким шаблонам печатать. Если там одно значение, то просто печатается документ, если же значений в Диалог Листе несколько, то пользователь выбирает руками (из Prompt) по какому шаблону печатать заявку.
У меня возник трабл - в окне Промпта показываються ЮНИДы документов-шаблонов, а хотелось бы отображать там названия шаблонов ;)

З.Ы.:
Диалог Лист: @DbColumn("";Server:Patch;"ShapeKI";1)+"|"+@DbColumn("";Server:Patch;"ShapeKI";2)
Prompt: cc = w.Prompt (4, "Шаблоны для печати", "Выберите шаблоны для печати", ,shapecode)
shapecode - это переменная типа Вариант, которая вмещает значения Диалог Листа.

З.Ы.Ы. Надеюсь уже более понятно. Хелп плз. Как показывать в Промпте не алиасы а сами значения?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#10
а почему тип поля диалог лист? (Диалог Лист: @DbColumn("";Server:Patch;"ShapeKI";1)+"|"+@DbColumn("";Server:Patch;"ShapeKI";2))
этот диалог лист интерфейсный, т.е. это поле для пользователя чего-то делает?..

сделай обычное многозначное поле, в которое будешь подтягивать формулой @DbColumn("";Server:Patch;"ShapeKI";1)+"|"+@DbColumn("";Server:Patch;"ShapeKI";2) значения

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

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

т.е. реализация зависит от того, какой интерфейс нужно организовать...
 

San40S

Well-Known Member
15.04.2009
69
0
#11
а почему тип поля диалог лист? (Диалог Лист: @DbColumn("";Server:Patch;"ShapeKI";1)+"|"+@DbColumn("";Server:Patch;"ShapeKI";2))
этот диалог лист интерфейсный, т.е. это поле для пользователя чего-то делает?..
Надо было изначально мне уточнить такой момент, что БД уже написана была до меня, мне всего лишь нужно дописать "примочку", потому менять там что-либо крайне не рекоммендуется!!!

сделай обычное многозначное поле, в которое будешь подтягивать формулой @DbColumn("";Server:Patch;"ShapeKI";1)+"|"+@DbColumn("";Server:Patch;"ShapeKI";2) значения
не получиться, - пользователь Диалог Листом, когда документ создавался, выбирает по каким шаблонам вообще возможна печать сего док-а.

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

hosm

* so what *
18.05.2009
2 442
9
42
Kiev, Ukraine
#12
не получиться, - пользователь Диалог Листом, когда документ создавался, выбирает по каким шаблонам вообще возможна печать сего док-а.
Всё решаемо ;)
A поля вам свои запрещено добавлять для расчета своего списка шаблонов на основе всего списка шаблонов?
Evaluate можно в скрипте использовать.
Что мешает формулами в обычном мультизначном поле по выбранным в диалог-листе юнидам получить нужные для отображения элементы списка "название|юнид" из общего списка шаблонов? (общий список получаем по @DbColumn("";Server:Patch;"ShapeKI";1)+"|"+@DbColumn("";Server:Patch;"ShapeKI";2) и на формулах xотя бы через @For пройтись по выбранным юнидам, можно и поэлегантней придумать).
List:="A|1":"B|2":"C|3";
(@DbColumn("";Server:Patch;"ShapeKI";1)+"|"+@DbColumn("";Server:Patch;"ShapeKI";2) в вашем случае)
Selected :="|2":"|3"; ("|" + юнид в вашем случае)
@Trim(@Transform(List; "x"; @If(@Ends(x; Selected); @LeftBack(x; "|"); @Nothing))) вернет "B":"C". (список выбранных названий)
Если @LeftBack(x; "|") заменить на x, то вернет "B|2":"C|3"; (список выбранных названий и юнидов)
Еще идея с формулой лежит тут:
http://web3.inttrust.ru/Site/itforum.nsf/a...E0?OpenDocument
не вижу как использовать Диалог лист... если документ может печататься только по одному шаблону, то он просто возьмет и напечатается. Если же, документ может печататься по нескольким шаблонам, то пользователю должна даваться возможность выбрать по какому именно шаблону, из возможных, нужно печатать документ.
ну, можно диалог организовать - нарисовать (под)форму с нужным полем, содержащем "название|юнид" и вывести ее пользователю для выбора, если документ может печататься по нескольким шаблонам. (пример формулы уже есть выше)
Можно просто вычислить значения и вывести в промт (учтите - обрезает возвращаемое значение, надеюсь, названия не слишком длинные). Можно перенумеровать названия, в конце концов, если лень вычислять позицию выбранного значения в списке.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#13
потому менять там что-либо крайне не рекоммендуется
знакомая картина ;)

не получиться, - пользователь Диалог Листом, когда документ создавался, выбирает по каким шаблонам вообще возможна печать сего док-а.
получится, смотри, диалог-лист использует источник информации, который формируется некой формулой. в итоге, источником является набор строк.
сейчас у тебя есть диалог-поле DialogFilter1 (например) с источником-формулой @DbColumn("";Server:Patch;"ShapeKI";1)+"|"+@DbColumn("";Server:Patch;"ShapeKI";2)
если добавить обычное многозначное поле DialogSource1, computed for display (либо computed, если значение нужно будет хранить) с вышеуказанно формулой, а в источник DialogFilter1 указать просто имя поля DialogSource1 (вместо текущей формулы), то для пользователя ничего не изменится. он сможет так же работать дальше.

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

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

чтобы пользователю выбрать конечный шаблон можно сделать еще одно поле DialogSource2 (computed for display) с формулой:
Код:
values := @Left(DialogSource1; "|");
aliases := @Right(DialogSource1; "|");

aliasesInvert := @Replace(aliases; DialogFilter1; "");
aliasesFilter := @Replace(aliases; aliasesInvert; "");

valuesInvert := @Replace(aliases; aliasesInvert; values);
valuesFilter := @Replace(values; valuesInvert; "");

@Trim(@Replace(valuesFilter + "|" + aliasesFilter; "|"; ""))
теперь это поле будет содержать только те пары value|alias, алиасы которых выбраны в поле-диалоге DialogFilter1

теперь для выбора конкретного значения формулой можно сделать так (код на кнопке):
Код:
values := @Left(DialogSource2; "|");
aliases := @Right(DialogSource2; "|");

selectedValue := @Prompt([OkCancelList]; "Выбор шаблона"; "Укажите шаблон:"; values[1]; values);
selectedValueIndex := @Member(selectedValue; values);
selectedAlias := aliases[selectedValueIndex];

@Prompt([Ok]; "Алиас выбранного шаблона"; selectedAlias)
 

San40S

Well-Known Member
15.04.2009
69
0
#14
знакомая картина ;)


получится, смотри, диалог-лист использует источник информации, который формируется некой формулой. в итоге, источником является набор строк.
сейчас у тебя есть диалог-поле DialogFilter1 (например) с источником-формулой @DbColumn("";Server:Patch;"ShapeKI";1)+"|"+@DbColumn("";Server:Patch;"ShapeKI";2)
если добавить обычное многозначное поле DialogSource1, computed for display (либо computed, если значение нужно будет хранить) с вышеуказанно формулой, а в источник DialogFilter1 указать просто имя поля DialogSource1 (вместо текущей формулы), то для пользователя ничего не изменится. он сможет так же работать дальше.

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

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

чтобы пользователю выбрать конечный шаблон можно сделать еще одно поле DialogSource2 (computed for display) с формулой:
Код:
values := @Left(DialogSource1; "|");
aliases := @Right(DialogSource1; "|");

aliasesInvert := @Replace(aliases; DialogFilter1; "");
aliasesFilter := @Replace(aliases; aliasesInvert; "");

valuesInvert := @Replace(aliases; aliasesInvert; values);
valuesFilter := @Replace(values; valuesInvert; "");

@Trim(@Replace(valuesFilter + "|" + aliasesFilter; "|"; ""))
теперь это поле будет содержать только те пары value|alias, алиасы которых выбраны в поле-диалоге DialogFilter1
попробовал сделать что-то подобное...

но вот эта часть нужна на скрипте, писал-писал, но моцк выдохся наверное :(
теперь для выбора конкретного значения формулой можно сделать так (код на кнопке):
Код:
values := @Left(DialogSource2; "|");
aliases := @Right(DialogSource2; "|");

selectedValue := @Prompt([OkCancelList]; "Выбор шаблона"; "Укажите шаблон:"; values[1]; values);
selectedValueIndex := @Member(selectedValue; values);
selectedAlias := aliases[selectedValueIndex];

@Prompt([Ok]; "Алиас выбранного шаблона"; selectedAlias)
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#15
ну... посмотри в справке Evaluate, notesuiworkspace.prompt, arraygetindex... очень лениво сейчас писать, если не разберешься, завтра попробуем вместе ;)
 

San40S

Well-Known Member
15.04.2009
69
0
#16
Всем спасибо за внимание, спасибо за помощь!
Сделал все следующим образом (примерно так, как предлагал K-Fire):
Тобишь, в качестве алиаса, в Диалог Листе у меня хранятся ЮНИДы документов-шаблонов. Зная ЮНИД, могу найди самы эти документы... далее из найденых документов беру значение поля (такое же значение отображает, ранее упомянутый Диалог Лист), и отображаю эти значения в Промпте.
Вот, собсна говоря, и все! :)

Еще раз всем thnks!
 

Constantin A Chervonenko

Well-Known Member
Lotus team
#17
Гм.. Это "значение" только в UI и существует (где-то в коде формы закопано). Убери их от туда, положи в базу (а в форме будешь формулой их доставать) - тогда сможешь преобразования "значение"->"алиас" воспроизвести и в коде
 

Eugen

Well-Known Member
22.03.2012
177
0
Москва
#18
Добрый день.

Дабы не плодить темы спрошу здесь:

у меня имеется поле DialogList, в котором лежат значения с алиасами:
Паспорт|01
Военный билет|02
и тд...
В таком случае в самом лотусе, насколько я понимаю будут храниться именно алиасы, а отображаться соответствующие им вырианты.
Также моя база общается с веб-сервисом через xml. Значения элементов в xml тоже будут алиасы?
Еще у меня есть что - то типа выгрузки в ворд - агент кладет значения определенных полей в закладки ворда. То есть получается, что в ворд мне надо передать отображаемый вариант, а в xml его алиас. В принципе можно было бы создать скрытое вычисляемое поле с формулой типа @If(docType="01";"Паспорт";docType="02";"Военный билет") и т.д., но у меня там будет больше сотни вариантов, и прописывать все это очень неохота... Кто что может подсказать по этому поводу?