You are on page 1of 25

PeopleCode

Luigi R. Romero Sifuentes

SubRecords y SubPaginas
Subrecords
Son colecciones de campos, agrupados en una sola entidad, la cual puede ser reutilzada en diferentes records. Los subrecords no existen como tal en la base de datos, co-existen con otros records. El subrecord aadido al record principal, fisicamente en la BD son agregados como campos en la tabla. Se puede reutilizar en records que contengan campos en comun. Ejem: Tenemos el Record LVF_PERSONA y LVF_ORGANIZACION ambos records requieren una informacion de contacto, entonces tendremos nuestro subrecord LVF_CONTACT_SBR, este mismo subrecord puede ser utilizado en ambos records.

Subrecords
Todo subrecord se agregaran las letras SBR al final del mismo.

Record LVF_PERSONA utiliza subrecord LVF_CONTACT_SBR.

Subrecords
Para explorar el subrecord presionamos el icono y obtenemos:

Fases del Desarrollo


Definimos el Plan de Aplicacin. Definimos el diseo de la data. Definimos el look and field de la aplicacin. Testeo.

Vista General
Evento PeopleCode en un campo de un Registro.

Acceso al cdigo con doble clic

Acceso desde la Definicin del Registro


Estar en negrita si posse algn evento PeopleCode. Boton derecho View PoeplCode.

Acceso desde la Definicin del Registro


Desde la barra de botones: El aspa indica que campos en que eventos existe PeopleCode.
- FDe: FieldDefault - FEd: FieldEdit - FCh: FieldChange - FFo: FieldFormula - RIn: RowInit - RIs: RowInsert - RDe: RowDelete - RSe: RowSelect - SEd: SaveEdit - SPr: SavePreChange - SPo: SavePostChange - SrI: SearchInit - SrS: SearchSave - Wrk: WorkFlow - PPr: PrePop

Acceso desde la Definicin del Componente


1. 2. A eventos de Registros del Componente. A eventos de Campos de Registros del Componente.

1 2

Sentencias, Variables, Operadores, Funciones


Comentarios
REM Esto es un ejemplo de comentario en PeopleCode; /* ----- Logic for Compensation Change ----- */ /* Recalculate compensation change for next row. */ calc_next_compchg(&OLDDT, EFFSEQ, 0); /* Recalculate compensation change for current row and next row. based on new value of EFFDT. */ <* Comentario extenso *>

Next row is

Operador de Concatenacin
Error ("This course starts on " | PSU_CRS_SESSN.START_DATE | " and make the start ends on " | PSU_CRS_SESSN.END_DATE | ". Please date earlier than the end date.");

Sentencias Condicionales
If condition Then [statement_list_1] Else [statement_list_2]] End-if;

Sentencias Evaluacin

evaluate &USE_FREQUENCY when = "never" PROD_USE_FREQ = 0; Break; when = "sometimes" PROD_USE_FREQ = 1; Break; when = "frequently" PROD_USE_FREQ = 2; Break; when-other Error "Unexpected value assigned to &USE_FREQUENCY." end-evaluate;

Sentencias Repetitivas
For count = expression1 to expression2 [Step i]; statement_list End-for; Repeat statement_list Until logical_expression; While logical_expression statement_list End-while;

Tipos de Variables
Global, vlida para toda la sesin. No se recomienda su uso. Global String &Mi_Cadena; Componente, vlida en el componente. Componente Boolean &Flag; Local, vlida para el programa PeopleCode. Local Number &Mi_Numero;

Tipos de Datos
ANY BOOLEAN DATE DATETIME NUMBER OBJECT STRING TIME

Arrays, el tipo del primer parmetro determina el tipo de arreglo que se construye.
Local Array of Array of Number &AAN; Local Array of Number &AN; &AAN = CreateArray(CreateArray(1, 2), CreateArray(3, 4),5); &AN = CreateArray(6, &AAN[1]);

Tipos de Variables
Global, vlida para toda la sesin. No se recomienda su uso. Global String &Mi_Cadena; Componente, vlida en el componente. Componente Boolean &Flag; Local, vlida para el programa PeopleCode. Local Number &Mi_Numero;

Tipos de Datos
ANY BOOLEAN DATE DATETIME NUMBER OBJECT STRING TIME

Arrays, el tipo del primer parmetro determina el tipo de arreglo que se construye.
Local Array of Array of Number &AAN; Local Array of Number &AN; &AAN = CreateArray(CreateArray(1, 2), CreateArray(3, 4),5); &AN = CreateArray(6, &AAN[1]);

Funciones en People, se pueden definir en cualquier programa peoplecode.


Declare Function SumaValores PeopleCode LVF_CUSTOM.IMPORT_AMT FieldFormula;

Las funciones se pueden llamar desde cualquier lugar, tambin pueden retornar valores, sintaxis:
SumaValores()

Se escriben de la siguiente forma:


function SumaValores () statment1; statment2; statmentn; return &Total; End-Function;

Operadores Matematicos
+ * / Suma Resta Multiplicacin Divisin

Operadores Lgicos
Operador = != <> < <= > >= Descripcin equal not equal not equal less than less than or equal to greater than greater than or equal to

Sentencias SQL en PeopleCode, se utiliza la funcion SQLEXEC para ejecutar SQL desde un programa PeopleCode pasando una cadena de comandos SQL, el comando interacta directamente con el servidor de BD. Sintaxis:
DSQLEXEC(UPDATE TABLA1 SET FIELD=VAL WHERE FIELD1=:1 AND FIELD2=:2,RECORD.FIELD1,RECORD.FIELD2);

Tenemos las siguientes funciones:


Open() FetchSQL CreateSQL GetSQL StoreSQL

Eventos PeopleCode

SearchInit, es utilizado por los records que estn definidos como records de bsqueda en el
componente, si el record no es definido como tal (record de bsqueda), PS nunca disparar el evento. Generalmente se usa para setear valores por defectos de las preferencias del usuario. Ejemplo: SetSearchEdit(BUSINESS_UNIT); SetSearchDefault(BUSINESS_UNIT);

SearchSave, es utilizado para validar que todos los campos en la pgina de bsqueda sean
llenados correctamente (ac no se puede especificar que campos son requeridos o no). Ejemplo: If None(BUSINESS_UNIT) Then Error MsgGet(9000, 3, "Business Unit is a required field."); End-If;

RowInit, corre cada vez que una fila nueva se carga en la pagina. El cdigo se ejecuta para
cada nivel y cada fila de dato. Tambin se ejecuta despus de ejecutar un Select, SelectAll o ScrollSelect y del evento RowInsert. Ejemplo: If INSTALLATION.PO = "Y" Then DERIVED.EDITTABLE13 = "ITM_PURCH_FS"; End-If;

FieldDefault, en este evento se pueden codificar los valores por defecto, generalmente se
usa cuando la lgica para cargar valores por defecto es muy compleja para usarse en la definicin del record. If None(ITM_SETID) Then

ITM_SETID = GetSetId("BUSINESS_UNIT", BUSINESS_UNIT, "MASTER_ITEM_TBL", ""); End-If;

FieldChange, este evento se ejecuta bajo 2 circunstancias: cuando el valor del campo
cambia, o cuando un botn (asociado al campo) es presionado. En el primera caso se ejecuta siempre y cuando el valor real del campo es diferente al original, el usuario debe moverse del campo o guardar la pgina. En el segundo caso desde un botn se puede ejecutar casi cualquier cosa, trasladarse a otro componente, cargar data en la misma pgina en base algn criterio, correr procesos, etc. Ejemplo: &RQSTAP = CreateProcessRequest(); &RQSTAP.RunControlID = LVF_CBR_VNT_HDR.SF_REGISTER.Value | %OperatorId; &RQSTAP.ProcessType = "SQR Report"; &RQSTAP.ProcessName = "LVFCJ004"; &RQSTAP.OutDestType = "WINDOW"; &RQSTAP.OutDestFormat = "PDF"; &RQSTAP.Schedule();

FieldEdit, se utilizar mayormente para la validacin de la informacin del campo, se puede


validar utilizando diferentes campos y condiciones, tambin permite ejecutar mensajes Pcode que no generarn error de ejecucin, para advertir o detener el proceso dentro de la pgina. Adecuado cuando se desea validaciones que no permitan abandonar el campo sin ejecutarse un criterio especfico. Cuidado con el problema de bucle que puede presentarse.

FieldFormula, reservado para ubicar las funciones creadas por el desarrollador. Es evento se ejecuta en todos los eventos por lo que solo se debe colocar definicin de funciones propias. Ejemplo:
Function update_sched() &CHANGED_SCHED = "N"; UpdateValue(LINE_NBR, &LINE, PO_LINE_SHIP.UNIT_PRC_TOL, &SCHED, &UNIT_PRC_TOL);

RowSelect, utilizado para filtrar datos cargados en un scroll.


RowDelete, este evento se activa cada vez que se realiza al borrar datos de una fila. El propsito de este evento es evitar borrar data sin un criterio especfico. El manejo de mensjae es similar a como se realiza en el evento FieldEdit. RowInsert, se ejecuta cada vez que se insertan filas nuevas , esta data se valida en el evento RowInsert. Tener en cuenta que el evento RowInit se ejecuta justo despus de un RowInsert. SaveEdit, cdigo que se utiliza para validar al guardar. Es usado para validacin final. Ac podemos validar interactuando varios campos. Este evento tambin puede ser utilizado para incluir las validaciones puestas en el FieldEdit (en caso que no se haya corrido porque no se produjo un evento FieldChange en el mismo). SavePreChange, ac se puede actualizar o cambiar los valores de tablas antes que se realice el commit a la BD.

Caso Prctico
El proceso de desarrollo expuesto ser ilustrado mediante un caso prctico:
Se desea tener un registro de los empleados de una empresa (cdigo y nombre) y sus cuentas bancarias (ID y N de cuenta, banco, tipo y estado de la cuenta). Asimismo, se desea tener un registro de los bancos en que los empleados tienen sus cuentas. Desarrollar una aplicacin PeopleSoft que permita el registro de la informacin mencionada.

Diseo de la Aplicacin

Diseo de la Aplicacin

Diseo de la Aplicacin
Unidad de Negocio: UCIK

Transacciones Bancarias
transacciones Id. Empleado: Cod. Trans.: Saldo: Tipo Operacion: Monto: Comentario: Cuenta Origen: Cuenta Destino: + -

UCIK_TRANSACTION_TBL Si la operacion es Deposito, seleccionar la cuenta Origen Id Empleado Cod. Trans Si la operacion es Transferencia, seleccionar la cuenta Comentario Origen y cuenta destino Monto Si la operacion es Retiro, seleccionar la cuenta origen Operador
Fecha Creacion Fecha Actualizacion

You might also like