Powerbuilder: Как я могу убедиться, что текстовое поле в окне данных не пусто? - PullRequest
1 голос
/ 24 июня 2010

У меня есть пользовательский объект, который использует службы pfc.Теперь, во время обновления, как я могу убедиться, что текстовое поле в окне данных не пусто?

Ответы [ 3 ]

3 голосов
/ 24 июня 2010

PFC имеет службу DataWindow Required Column, которая изменяет поведение атрибута Required столбцов для оценки во время сохранения.Если ваше требование касается столбцов с правкой маски, это не сработает, но может быть простым способом добиться этого в противном случае.

Чтобы использовать это, я бы поместил следующий код в конструкторе ( предупреждение:Прошло много времени с тех пор, как я использовал его ):

of_SetReqColumn(TRUE)
inv_reqcolumn.of_RegisterSkipColumn ("col_a")

Удачи,

Терри.

2 голосов
/ 24 июня 2010

Что я сделал в PB, так это установил следующие свойства столбца окна данных в значение ИСТИНА или выбрал:

  • Пустая строка равна NULL
  • Обязательно

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

[РЕДАКТИРОВАТЬ - Разъяснение после всегда хороший совет Терри]

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

Службу PFC Required Column можно включить и зарегистрировать столбец, чтобы обеспечить проверку времени сохранения. Это упрощает перемещение пользователя по полям во время навигации по полям и приставляет пользователя только к попыткам сохранения.

2 голосов
/ 24 июня 2010

Я попытаюсь объяснить метод, который я использую, чтобы убедиться, что пользователь не оставит указанное поле пустым.Ниже приведен код, который я поместил в событие pfc_updateprep для u_dw (предка).Затем для каждого из столбцов, для которых в любом случае нужно указать значение, я помещаю M в tag свойство текстового поля , которое описывает столбец.HTH.

integer         li_size,i,l,li_zero
string           ls_textname,ls_tag,ls_objects[]
string           ls_col,ls_type,ls_text,ls_key,ls_any
any             la_null,la_any
dec             ld_zero
real               lr_zero
long               ll_zero
boolean         lb_zero

dwItemStatus    l_status,l_key_status

This.Modify("DataWindow.Table.UpdateKeyinPlace=Yes")

li_size = This.inv_base.of_Getobjects(ls_objects[ ],"column","*",TRUE)

FOR l=1 TO This.Rowcount()
    l_status=This.GetItemStatus(l, 0,Primary!)
    IF l_status=NewModified! OR l_status=Datamodified! THEN
        FOR i = 1 to li_size
            ls_col=ls_objects[i]

            ls_key = Upper(This.Describe(ls_col+".Key"))
            ls_type=This.Describe ( ls_col + ".ColType")

            ls_textname=ls_col+"_t" // because the textnames that I use are the same as the column names followed by a "_t"
            ls_tag=This.Describe(ls_textname+".Tag")
            ls_text=This.Describe(ls_textname+".Text")


            IF ls_tag='M' THEN
                lb_zero = FALSE
                IF This.Rowcount()>0 THEN
                    la_null=This.inv_base.of_GetItemany(l,ls_col)

                    choose case Upper(MidA(ls_type,1,3))
                        case 'DEC' 
                            ld_zero=Dec(la_null)
                            IF ld_zero = 0 THEN lb_zero=TRUE
                        case 'INT' 
                            li_zero=Integer(la_null)
                            IF li_zero = 0 THEN lb_zero=TRUE
                        case 'REA' 
                            lr_zero=Real(la_null)
                            IF lr_zero = 0 THEN lb_zero=TRUE
                        case 'LON' 
                            ll_zero=Long(la_null)
                            IF ll_zero = 0 THEN lb_zero=TRUE
                    end choose

                    IF Isnull(la_null) OR lb_zero THEN
                        Messagebox(gnv_app.of_Getframe().Getactivesheet().Title,&
                                    "You must provide a value for the following field ~r("+&
                                    ls_text+") !!!")
                        Return FAILURE
                    END IF
                END IF
            END IF
        NEXT
    END IF
NEXT

Return  SUCCESS
...