Отображение/ Скрытие поля в форме

Обсуждение вопросов по разработке программ в среде продуктов копорации "Progress Software"
sega1999
Новичок
Сообщения: 8
Зарегистрирован: 16 авг 2016, 16:49

Отображение/ Скрытие поля в форме

Сообщение sega1999 » 18 авг 2016, 16:36

Есть форма документа для ввода данных:
Дата ввода: 01,01,16
Номер документа: 0001/16
Создатель: Петров И.И.

Мне нужно поле "Создатель" скрывать для всех пользователей кроме пользователя "USER"
В Событии OnNewDocument я бы на предыдущем языке написал бы так:
if UPPER(users:NAME) = "USER"
self:odcUser:Visible:= TRUE
else
self:odcUser:Visible:= FALSE
endif
/*
где:
SELF - текущий объект (окно)
odcUser - поле/кнопка в окне
Visible - свойство контрола которое отвечает за отображение/скрытие объекта
*/
а как в PROGRESS`е?
как обратиться к свойству нужного поля/кнопки/ любого контрола?

Аватара пользователя
Arelav
Администратор
Сообщения: 1881
Зарегистрирован: 25 мар 2005, 17:05
Откуда: Progress Technologies
Контактная информация:

Re: Отображение/ Скрытие поля в форме

Сообщение Arelav » 19 авг 2016, 11:34

В общем также

Код: Выделить всё

if USERID("DICTDB")  = "user" then
     this-object:label1:visible = true.
else
     this-object:label1:visible = false.


функция USERID возвращает имя пользователя в текущей базе данных (dictdb).

this-object:label1- это элемент win-формы System.Windows.Forms.Label.

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

Код: Выделить всё

if can-do(permission.can-see, USERID) then
     this-object:label1:visible = true.
else
     this-object:label1:visible = false.

sega1999
Новичок
Сообщения: 8
Зарегистрирован: 16 авг 2016, 16:49

Re: Отображение/ Скрытие поля в форме

Сообщение sega1999 » 19 авг 2016, 11:43

Извините, забыл добавить.
Не Windows.
Работаем через TELNET с UNIX.

Аватара пользователя
Arelav
Администратор
Сообщения: 1881
Зарегистрирован: 25 мар 2005, 17:05
Откуда: Progress Technologies
Контактная информация:

Re: Отображение/ Скрытие поля в форме

Сообщение Arelav » 19 авг 2016, 13:09

Тогда можно либо использовать оператор HIDE - позволяет скрыть элемент фрэйма,
OpenEdge Development: ABL Reference писал(а):Makes a widget invisible (sets its VISIBLE attribute to FALSE), or clears the message area for a window, or hides all widgets and clears messages in a window.


Либо атрибут HANDLE. Подробности см. OpenEdge Development: ABL Reference, Handle Attributes and Methods Reference.

Вот простой пример на скорую руку.
Здесь по нажатию по кнопке hide-button поле customer.name будет скрываться или открываться в зависимости от текущего состояниям.
Также с помощью переменной whand с типом handle изменяется метка кнопки с Hide на Unhide и наоборот.

Код: Выделить всё

define button hide-button label "Hide".
define variable whand    as handle no-undo.

form hide-button  skip(2)
    customer.name no-labels
    with frame but-frame row 1.
   
find first customer no-lock no-error.
display customer.name with frame but-frame.

whand = hide-button:HANDLE.

on choose of hide-button
    do:
        if customer.name:handle:visible then
        do:
            customer.name:handle:visible = false.
            whand:label = "Unhide".
        end.
        else
        do:
            customer.name:handle:visible = true.
            whand:label = "Hide".
        end.
    end.
   
enable hide-button customer.name with frame but-frame.
wait-for window-close of current-window.


Определение имени пользователя остаётся таким же, через USERID.