Dialog List

Тема в разделе "Lotus - Программирование", создана пользователем San40S, 8 июл 2009.

  1. San40S

    San40S Well-Known Member

    Регистрация:
    15 апр 2009
    Сообщения:
    69
    Симпатии:
    0
    Всем привет!
    Есть поле типа Dialog List. Значениями поля являются:

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

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    NotesUIDocument FieldGetText method
     
  3. San40S

    San40S Well-Known Member

    Регистрация:
    15 апр 2009
    Сообщения:
    69
    Симпатии:
    0
    а чтобы НЕ через UI???
     
  4. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    никак, если прямо

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

    все зависит от задачи
     
  5. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Храни список в отдельном поле.
     
  6. K-Fire

    K-Fire Гость

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

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

    Все просто :)
     
  7. San40S

    San40S Well-Known Member

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

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    San40S, ты бы задачу описал ширее, может, найдется более оптимальное решение :)
    кроме того, K-Fire не даром уточнил, что
    думаю, он имел в виду, что ты в диалоге можешь источником инфы указать поле, в которое предварительно будет записана инфа (value|alias).
    потом, когда нужно будет определить value по алиасу, ты значение алиаса берешь из поля-диалога, а поле источник разбиваешь на двое через вертикальную черту, получаешь список значений и список алиасов, в списке алиаса находишь позицию того алиаса, что взял из поля диалога, и уже по позиции находишь нужное значение в списке значений
     
  9. San40S

    San40S Well-Known Member

    Регистрация:
    15 апр 2009
    Сообщения:
    69
    Симпатии:
    0
    Попытаюсь описать подробней:
    Есть некая заявка. В этой заявке есть поле (Dialog List) - в нем хранятся НАЗВАНИЕ|ЮНИД шаблона для печати. Когда пользователь нажимает на кнопку "Печать", берется значение из Диалог Листа, по каким шаблонам печатать. Если там одно значение, то просто печатается документ, если же значений в Диалог Листе несколько, то пользователь выбирает руками (из Prompt) по какому шаблону печатать заявку.
    У меня возник трабл - в окне Промпта показываються ЮНИДы документов-шаблонов, а хотелось бы отображать там названия шаблонов ;)

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

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    а почему тип поля диалог лист? (Диалог Лист: @DbColumn("";Server:patch;"ShapeKI";1)+"|"+@DbColumn("";Server:patch;"ShapeKI";2))
    этот диалог лист интерфейсный, т.е. это поле для пользователя чего-то делает?..

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

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

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

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

    San40S Well-Known Member

    Регистрация:
    15 апр 2009
    Сообщения:
    69
    Симпатии:
    0
    Надо было изначально мне уточнить такой момент, что БД уже написана была до меня, мне всего лишь нужно дописать "примочку", потому менять там что-либо крайне не рекоммендуется!!!

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

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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Всё решаемо ;)
    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
    ну, можно диалог организовать - нарисовать (под)форму с нужным полем, содержащем "название|юнид" и вывести ее пользователю для выбора, если документ может печататься по нескольким шаблонам. (пример формулы уже есть выше)
    Можно просто вычислить значения и вывести в промт (учтите - обрезает возвращаемое значение, надеюсь, названия не слишком длинные). Можно перенумеровать названия, в конце концов, если лень вычислять позицию выбранного значения в списке.
     
  13. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    знакомая картина ;)

    получится, смотри, диалог-лист использует источник информации, который формируется некой формулой. в итоге, источником является набор строк.
    сейчас у тебя есть диалог-поле 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) с формулой:
    Код (Text):
    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

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

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

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

    San40S Well-Known Member

    Регистрация:
    15 апр 2009
    Сообщения:
    69
    Симпатии:
    0
    попробовал сделать что-то подобное...

    но вот эта часть нужна на скрипте, писал-писал, но моцк выдохся наверное :(
     
  15. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ну... посмотри в справке Evaluate, notesuiworkspace.prompt, arraygetindex... очень лениво сейчас писать, если не разберешься, завтра попробуем вместе ;)
     
  16. San40S

    San40S Well-Known Member

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

    Еще раз всем thnks!
     
  17. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.291
    Симпатии:
    0
    Гм.. Это "значение" только в UI и существует (где-то в коде формы закопано). Убери их от туда, положи в базу (а в форме будешь формулой их доставать) - тогда сможешь преобразования "значение"->"алиас" воспроизвести и в коде
     
  18. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Добрый день.

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

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

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    перед выгрузкой сохраняете массивчик значение-алиас и в процессе выгрузке подменяете алиас значением
     
  20. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Сохраняйте в скрытом поле документа соответствующее текстовое значение.
     
Загрузка...

Поделиться этой страницей