Power Builder - Obtener los campos requeridos en tiempo de ejecución

 
Vista:
Imágen de perfil de Omar
Val: 6
Ha aumentado 1 puesto en Power Builder (en relación al último mes)
Gráfica de Power Builder

Obtener los campos requeridos en tiempo de ejecución

Publicado por Omar (14 intervenciones) el 22/02/2018 14:51:12
Estimados amigos del Foro,
Tengo un pequeño problema,
Tengo un dw dinámico, en el cual se hacen los mantenimientos de todos las tablas maestras, el tema es que quiero hacer una validación para obligar al usuario a llenar los campos requeridos.

Quisiera pedirles su ayuda para poder obtener los campos requeridos de cada tabla que se refresca de forma dinámica en tiempo de ejecución.

A la espera de sus comentarios.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Adolfo
Val: 253
Bronce
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Obtener los campos requeridos en tiempo de ejecución

Publicado por Adolfo (145 intervenciones) el 23/02/2018 15:12:14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Integer li_i, li_j
String ls_nombre, ls_tipo, ls_identity, ls_etiqueta, ls_id, ls_key
 
li_j = Integer(dw_datos.Object.Datawindow.Column.Count)
for li_i = 1 to li_j
	ls_id  		= Trim(dw_datos.Describe("#"+string(li_i) + ".ID"))
	ls_nombre 	= Trim(dw_datos.Describe("#"+string(li_i) + ".Name"))
	ls_tipo 		= Trim(dw_datos.Describe("#"+string(li_i) + ".Coltype"))
	ls_identity = Trim(dw_datos.Describe("#"+string(li_i) + ".Identity"))
	ls_key		= Trim(dw_datos.Describe("#"+string(li_i) + ".Key"))
	ls_etiqueta = ls_nombre + "_t.Text"
	ls_etiqueta = Trim(dw_datos.Describe(ls_etiqueta))
	MessageBox("Columnas","ID = " + ls_id+"~nNombre = " + ls_nombre + "~nTipo = " + ls_tipo + "~nKey = " + ls_key + "~nIdentity = " + ls_identity + "~nEtiqueta = " + ls_etiqueta,Information!)
next
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Leonardo Daniel A.
Val: 858
Oro
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Obtener los campos requeridos en tiempo de ejecución

Publicado por Leonardo Daniel A. (376 intervenciones) el 23/02/2018 21:24:10
Hola, yo usaba antes la propiedad required, pero ya no, ahora uso la propiedad TAG y le pongo una R para saber que es requerido


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/**********************************************************
 Funcion para validar los campos de un datawindow 
 debe tener texto de validacion para que los tome.
 param: tipo dw,    nombre parametro: adw_a_validar 
**********************************************************/
integer li_cols, li_cont
string ls_nomcol, ls_lstcols, ls_txtcol, ls_coltype, ls_valstr, ls_required
boolean lb_msg = false, lb_vacio = false
 
long ll_valNum
decimal ldc_valDC
 
adw_a_validar.AcceptText()
 
li_cols = f_ColCount( adw_a_validar )
 
for li_cont = 1 to li_cols
    ls_nomcol = trim( adw_a_validar.Describe("#"+string(li_cont)+".name")	)
 
	 ls_txtcol = adw_a_validar.Describe(ls_nomcol+"_t.Text")
	 ls_txtcol = mid( ls_txtcol, 1, Pos(ls_txtcol, ':') -1 )
 
	 //ls_txtcol = adw_a_validar.Describe(ls_nomcol+"_t.Text")	 	 
	 //ls_required = adw_a_validar.Describe(ls_nomcol+".Edit.Required")	 
 
	 ls_required = adw_a_validar.Describe(ls_nomcol+".Tag")
	 ls_required = Left( ls_required, 1)
 
 
	 //if Len( adw_a_validar.Describe(ls_nomcol+".Validation") ) >1 then 
	 if ls_required = "R" then
		 //adw_a_validar.SetColumn(li_cont)
 
		 ls_coltype = adw_a_validar.Describe("#"+string(li_cont)+".coltype")
 
		 if match( ls_coltype, '(') then  // quitar parentesis ej. char(30)
   		 ls_coltype = mid(ls_coltype,1, Pos(ls_coltype, '(')-1 )
		 end if
 
		 choose case ls_coltype
			case "char"
				ls_valstr = adw_a_validar.GetItemString( adw_a_validar.GetRow(), ls_nomcol )
				if f_esta_vacio(ls_valstr) then
					lb_vacio = True
				end if
			case "date"
				ls_valstr = adw_a_validar.GetItemString( adw_a_validar.GetRow(), ls_nomcol )
				if not isDate(ls_valstr) or isNull(ls_valstr) then
					lb_vacio = True
				end if
			case "long", "int", "number"
				ll_valnum = adw_a_validar.GetItemNumber( adw_a_validar.GetRow(), ls_nomcol )
				if ll_valnum  = 0 or isNull(ll_valnum) then
					lb_vacio = True
				end if
			case "decimal"
				ldc_valdc = adw_a_validar.GetItemDecimal( adw_a_validar.GetRow(), ls_nomcol )
				if ldc_valdc = 0 or isNull(ldc_valdc) then
					lb_vacio = True
				end if
		 end choose
	 end if
 
	 if lb_vacio = True then
		 ls_lstcols = ls_lstcols + "~t" + ls_txtcol+ "~r~n"
		 lb_msg = true
	 end if
	 ls_required = ""
	 ls_valstr = ""
	 lb_vacio = false
next
 
if lb_msg = True then
	beep(2)
 	f_mensaje("A", "Some fields are empty, fill them:"+ ln + ls_lstcols )
   return false
else
   Return True
end if
 
return true
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Omar
Val: 6
Ha aumentado 1 puesto en Power Builder (en relación al último mes)
Gráfica de Power Builder

Obtener los campos requeridos en tiempo de ejecución

Publicado por Omar (14 intervenciones) el 23/02/2018 22:48:15
Gracias por sus comentarios....

Pero lo que yo necesito es....
Cuando uno crea una tabla indica a cada campo si puede almacenar valores nullos o no.

ahora lo que quiero es obtener que campos son los que no aceptan valores nullos para hacer las validaciones antes del UPDATE....

Ojo que el mantenimiento es dinámico.....

A la espera de sus comentarios y Apoyo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar