Ok, por lo que entiendo recien estas en pañales... no te dare todo ahora, pero si lo necesario para tengas nociones.
Power Builder es un Lengoaje de programacion orientado a objetos, asi que en cualkier objeto puede crearse una o mas funciones, pero a la vez existe un objeto funcion, el cual es global y eso es lo que kieren que crees. para ello una vez creado el workspace, cuando le des click en nuevo y seleccionas la pestaña PB Object encontraras uno que dice function, y es ahi donde debes de crear la funcion.
Este, directo te lleva a una ventana, donde pondras el nombre de la funcion los paramentros de entrada y e salida, y en la parte de abajo el codigo que va dentro de la funcion, OJO que no existe ningun objeto visual solo es el codigo.
Como indicas en tu pregunta, la funcion debe tener 02 parametros, pero directamente no retorna nada, pero ya depende de uno si desea retornar algun valor..., por ejemplo puedo retornar 0 cuando es un valor incorrecto, 1=Numerico, 2=Letras, 3=Alfanumerico, de esta forma controlas mejor tu funcion en cualquier parte... entoncess...
en los campos al momento de crear la funcion debe ir...
RETURN TYPE = INTEGER
FUNCTION NAME = mi_funcion (Aki puede ir el nombre que mas te paresca para la funcion. ejem. uf_validar, siempre es bueno usar los prefijos uf= User Function, si la funcion esta dentro de un objeto of=object function).
ARGUMENT TYPE = STRING y ARGUMENT NAME = as_valor (Este es para el primer argumento, el nombre de la variable es as_valor as=argumento tipo string)
ARGUMENT TYPE = CHARACTER y ARGUMENT NAME = ac_tipo (Para el segundo parametro)
------ hasta ahi hemos definido el nombre de nuestra funcion, cuantos paramentros tendra y si retornará algun valor. Ahora toca la parte del codigo que debe ejecutar la funcion para identificar que tipo es.
------ solo te dare pistas...
en el codigo iria:
/////////
integer li_ret //li=Local Integer
choose case ac_tipo
case 'N'
if isnumber(as_valor) then
li_ret = 1 //Deciamos que si es 1 es numerico
else
li_ret = 0 // Aqui le indicas que el tipo datos es incorrecto, imaginemos que puseron letras, pero en el tipo
//te dicen q es nro, osea incongruente
end if
case 'L'
//Si es letra tienes que verificar si todos son letras que estan entre A a Z
//Es cuestiond e hacer un recorrido por toda la cadena nada mas, y eliminar los espacios en blanco
//Si tods la cadena es letra entonces
li_ret = 2
// Sino
li_ret = 0
case 'A'
//lo mismo q el anterior pero verificar tambien si es numero
//Si cumple
li_ret = 3
//Sino
li_ret = 0
case else
//Enviar mensaje indicando que la funcion no soporta otro tipo que no sea las 3 anteriores
li_ret = -1
end choose
RETURN li_ret
//////Aki finalizaria la funcion/////////
Por ultimo en la ventana, en cada uno de los campos que te pida...
como todos seran Single Line Edit, por ahora .... cuando le daz el enter.. quiere decir en el evento modified ahi se debe de programar...
evento modified... del campo nombre, donde el campo se llame sle_nombre (Osea el obejto es un SingleLineEdit)
integer li_valret //valor que retornara la funcion que se creo
li_valret = mifuncion(sle_nombre.text,'L') //Aqui le indico que el valor que tenga el campo nombre debe ser solo letras,
//por tanto debe retornarme el valor de 2 segun nuestra funcion.
si li_valret=2 entonces
// paso al siguiente campo
// quiere decir que debo de enfocar el campo apellidos...
sino
si li_valret=0 entonces
//mensaje, datos incorrectos
si li_valret=-1 entonces
// la funcion no soporta otros tipos de datos
fin de si
Eso es lo que debe hacer en cada campo, dependiendo del tipo de dato
Espero que te ayude en algo... ps... no es bueno darte todo ok