Upload
senthinel-galvez
View
298
Download
7
Embed Size (px)
Citation preview
TIPOS DE ACCESO DE BÚFER DE DATOS
1. Clase field 2. Clase record
3. Clase row
4. Clase rowset La relación entre estas 4 clases puede entenderse mejor como sigue.
El Field - es un subconjunto de Registros, este es un subconjunto de fila (Row), es un subconjunto de Conjunto de filas (Rowset).
No se confunda la "clase record" con un "record"
DESCRIPCIÓN DEL ACCESO DE BÚFER DE DATOS Esta sección trata sobre:
Acceso al buffer de datos. Clases de acceso.
Modelo de búfer de datos y objetos de acceso a datos.
ACCESO BUFFER DE DATOS Además de las funciones incorporadas que se utilizan para acceder a la
memoria intermedia de componentes, clases de objetos están
disponibles que proporcionan acceso a los almacenamientos intermedios de datos estructurados utilizando la sintaxis de objeto PeopleCode.
Los buffers de datos accedidos por estas clases suelen ser los buffers de componentes que se cargan cuando se abre un componente. Sin
embargo, estas clases también pueden ser utilizados para acceder a los datos de los búferes de datos generales, cargados por un programa de
aplicación de motor, una interfaz de componente, y así sucesivamente. Los métodos y las propiedades de estas clases ofrecen una funcionalidad
que es similar a lo que ha estado disponible utilizando las funciones integradas. Sin embargo, también proporcionan una mayor consistencia,
flexibilidad y nuevas funcionalidades. Clases de acceso
Las cuatro clases de búfer de datos son: rowset, row, record y Field. Estas cuatro clases son la base para el acceso a datos del búfer
componente a través de la nueva sintaxis de objeto.
Un objeto de campo, que se crea una instancia de la clase Field, es una sola instancia de los datos dentro de un registro. Se basa en una
definición de campo. Un objeto de registro, que se crea una instancia de la clase Record, es
una sola instancia de una de datos dentro de una fila. Se basa en una definición de registro. Un objeto de registro se compone de uno
a n campos. Un objeto de fila, que se crea una instancia de la clase de row, es una
única fila de datos que consiste de uno a N registros de datos. Una sola fila en un área de desplazamiento de componentes es una fila. Una fila
puede tener de uno a n hijos conjuntos de filas. Por ejemplo, una fila en
un área de desplazamiento de dos niveles puede tener n nivel de tres conjuntos de filas de hijos.
Un objeto Rowset es una estructura de datos que se utiliza para
describir los datos jerárquicos. Se compone de una colección de filas. Un área de desplazamiento componente es un rowset. Usted también puede
tener un rowset de nivel cero.
BUFFER DE DATOS DEL MODELO Y DE ACCESO A DATOS DE CLASES El modelo de datos asumido por las clases de memoria intermedia de
datos es la de un componente de PeopleTools, donde se utilizan barras de desplazamiento (scroll) o grids para describir una estructura de datos
jerárquica, múltiples ocurrencia. Se puede acceder a estas clases utilizando notación de puntos.
Las cuatro clases de memoria intermedia de datos se relacionan entre sí de una manera jerárquica. Los puntos principales para entender estas
relaciones son: Un record contiene uno o más campos.
Una row contiene uno o más registros y cero o más conjuntos de
rows hijos. Un rowset contiene una o más rows.
Para buffers componentes, pensar en un rowset como un área de
desplazamiento en una página que contiene todos los datos de esa área de desplazamiento. Un rowset de nivel cero contiene todos los datos
para todo el componente. Puede usar rowset con los mensajes de aplicación, estructura de ficheros, interrelaciones de negocios, y otras
definiciones, además de los componentes. A nivel rowset cero desde un buffer componente sólo contiene un fila: las teclas que el usuario
específico para iniciar dicho componente. A nivel de rowset cero a partir de datos que no es un componente, como un mensaje o un diseño de
archivo, puede contener más de un nivel de fila cero.
CLASE ROWSET Un objeto rowset, es una instancia de la clase rowset, es una coleccion
de filas asociadas con un bufer de datos. El componente scroll es un rowset. Puedes tener solo un rowset a nivel cero.
Si se crea un objeto rowset se crea una instancia utilizando GetRowset (ya sea la función o uno de los métodos) el objeto rowset se crean
instancias y se rellena con datos de acuerdo con el contexto en el que se crea la instancia.
Si se crea un objeto rowset se crea una instancia utilizando la función CreateRowset, el objeto rowset es instanciado es un rowset
independiente. Todos los records(registros) y fields(campos) creadas
por esta función se inicializan con valores nulos, es decir, ellos no contienen ningún dato. Puede rellenar este objeto rowset usando el
CopyTo, Fill, o métodos FillAppend.
El procesamiento por default no se realiza en un rowset independiente. Un rowset independiente no esta ligado a un procesador de
componente. Cuando llenas con datos peoplecode no corre (por ejemplo RowInsert, FieldDefault). Delete e Insert, esta actividad en este tipo de
rowset no se aplica automaticamente para ahorrar tiempo. Usar Rowset independientes para trabajar con records.
Puedes usar el objeto rowset y la propiedad ActiveRowCount para iterar sobre las filas del rowset, o acceder a una fila especifica (usando el
metodo GetRow) o para encontrar el nombre del record primario asociado con el scroll (la propiedad DBName).
La clase rowset es una de las clases de acceso de búfer de datos. CONSIDERACIONES DE ACCESO DIRECTO
El método por default para la clase Rowset es GetRow. Esto significa que puede especificar justo el número de fila, y no utilizar el método
GetRow. Por ejemplo, las siguientes dos líneas de código son
equivalentes: &myrow = GetRowset () (5);
&myrow = GetRowset () GetRow (5).;
TIPOS DE DATO DEL OBJETO ROWSET El objeto rowset se declara de tipo rowset: Local Rowset &myrowset;
ALCANCES DE UN OBJETO ROWSET
Un rowset puede ser instanciado por pleoplecode o usando java. Este objeto se puede utilizar en donde quiera que se tenga PeopleCode,
es decir, en una clase de aplicación, record field PeopleCode. No se puede pasar un objeto rowset en el marco de un método definido
por el usuario de interfaz de componente. (Rowset no son estructuras de datos comunes fuera de un sistema de PeopleSoft.) Sin embargo,
dentro de un método definido por el usuario para una interfaz de componente puede utilizar objetos rowset.
En un Application Engine, un objeto rowset es el equivalente de un objeto record que contiene una fila y un solo registro, es decir, el State
Record. PeopleSoft sugiere utilizar el objeto Record en lugar de un objeto rowset para obtener acceso al State Record.
Los mensajes tienen la misma estructura que los rowset, es decir, las estructuras de datos jerárquicos componen de filas, registros y campos.
Objetos file pueden tener la misma estructura que los rowset, es decir,
las estructuras de datos jerárquicos componen de filas, registros y campos.
FUNCIONES INCORPORADAS DE LA CLASE ROWSET
CreateRowset
Sintaxis: CreateRowset({RECORD.recname | &Rowset} [, {FIELD.fieldname,
RECORD.recname | &Rowset}] . . .)
Use la función CreateRowset para crear un rowset independiente vacio.
Un Rowset independiente es un rowset con una estructura especificada, pero no esta ligado a ningún dato (es decir, al buffer de componente o a
un mensaje). Ademas, un rowset independiente no esta ligado a un procesador de componente. Cuando lo llenas con datos, no hay
peoplecode corriendo (como RowInsert, FieldDefault, etc). El primer parámetro determina la estructura del rowset que se esta
creando. Si tu especificas un record en el primer parámetro, se usa el record
primario de nivel 0. Si tu no especificas ningún otro parámetro, se creas un rowset conteniendo una fila, con un registro vacío o despoblado. Tu
puedes poblar o llenar este tipo de rowset con datos, solo puedes usar solamente:
El método de la clase rowset Fill o FillAppend
Un método record (SelectByKey) La función SQLExec
Si tu especificas un objeto rowset, tu estas creando un nuevo rowset basado en la estructura del objeto rowset que estas especificando.
Incluyendo los rowset hijos. Lo hara no contendiendo ningún dato. Si tu quieres llenar o poblar este tipo de rowset con datos, usa el método
CopyTo o una sentencia SQL. Nota: No debes usar los métodos del rowset Select o SelectNew para
poblar o llenar rowset creados usando CreateRowset. Use la instancia Fill o FillAppend.
Restricciones usando CreateRowset Los siguientes métodos y propiedades no trabajan cuando creamos
rowset usando CreateRowset: Select
SelectNew
Caulquier método GUI(como HideAllRows) Cualquier método o propiedades de fecha efectiva(como EFFDT,
EFFSEQ o GETCURREFFROW) Ademas, los rowset creados usando CreateRowset no están ligados
automáticamente a la base de datos. Esto significa que si insertas o borras filas, las filas no serán insertadas o borradas en la base de datos
cuando yo guardes la página. Parametros:
Record.recname | &Rowset Especifica cualquier un nombre de record o un objeto rowset
existente.
FIELD.fieldname, RECORD.recname | &Rowset
Use FIELD.fieldname, RECORD.recname para especificar
un registro relacionado en pantalla. FIELD.fieldname se
refiere al control del campo, mientras RECORD.recname se
refiere al record relacionado en pantalla.
Si especifica &Rowset, va a
agregar un objeto rowset secundario al rowset recién
creado. Este debe ser un objeto
rowset existente.
Retornos Un objeto rowset independiente vacio.
Ejemplo: El siguiente código crea un rowset simple de un solo registro por fila: &RS = CreateRowset(RECORD.QA_MYRECORD);
El siguiente código crea un rowset con la misma estructura de un rowset
específico: &RS2 = CreateRowset(&RS);
El siguiente código crea un rowset con una estructura compuesta por 4 records en estructura jerarquica, es decir: QA_INVEST_HDR
QA_INVEST_LN
QA_INVEST_TRANS
QA_INVEST_DTL
Nota: tiene que comenzar por la parte inferior de la jerarquía, y agregar los niveles superiores. Local Rowset &RS, &RS2, &RS_FINAL;
&RS2 = CreateRowset(RECORD.QA_INVEST_DTL);
&RS = CreateRowset(RECORD.QA_INVEST_TRANS, &RS2);
&RS2 = CreateRowset(RECORD.QA_INVEST_LN, &RS);
&RS_FINAL = CreateRowset(RECORD.QA_INVEST_HDR, &RS2);
El siguiente ejemplo lee todos los registros de QA_MYRECORD dentro del
rowset, y retorna el número de filas leidas: &RS = CreateRowset(RECORD.QA_MYRECORD);
&NUM_READ = &RS.Fill();
Para hacer un clone de un rowset existente, es decir, para hacer dos
copias distintas, tu debes hacer lo siguiente: &RS2 = CreateRowset(&RS);
&RS.CopyTo(&RS2);
El siguiente condigo de ejemplo es usado para crear multiples hijos en
un rowset independiente: Local Rowset &rsBOCMRole, &rsBOCMRel, &rsBOCMUse;
&rsBOCMRole = CreateRowset(Record.BO_CM_ROLE);
&rsBOCMRel = CreateRowset(Record.BO_CM_REL);
&rsBOCMUse = CreateRowset(Record.BO_CM_USE);
&rsBOCM = CreateRowset(Record.BO_CM, &rsBOCMUse, &rsBOCMRole,
&rsBOCMRel);
Get Rowset
Sintasis: GetRowset([SCROLL.scrollname])
Use la función GetRowset para obtener un objeto rowset basado en el
contexto actual. Es decir, el rowset se determina a partir de un row que contiene el programa que se está ejecutando.
Consideraciones de sintaxis de formato Una expresión de la forma RECORD.scrollname.property
o RECORD.scrollname.method(. . .)
se convierte en una expresión de objeto por el uso de GetRowset
(SCROLL. scrollname). Parámetro
Si se especifica un parámetro, que debe ser el nombre del registro principal para el desplazamiento de que es un hijo del actual contexto.
Retornos Sin parámetros, GetRowset retorna un objeto rowset para el rowset que
contiene el programa actualmente en ejecución. Si se especifica un parámetro, este devuelve un rowset para este hijo scroll.scrollname
debe ser el nombre del registro principal para el desplazamiento. Ejemplo
En el siguiente ejemplo, RS1 es un rowset de nivel 1, y RS2 es un rowset hijo de RS1. Local Rowset &RS1, &RS2;
&RS1 = GetRowset();
&RS2 = GetRowset(SCROLL.EMPL_CHKLST_ITM);
METODOS DE LA CLASE ROWSET
CopyTo: Clonar un Rowset DeleteRow: Eliminar logicamente una Fila (RowCount)
Flush: Eliminar Fisicamente todas las filas (RowCount’s)
InsertRow: Insertar una Fila al Rowset HideAllRows: Ocultar todas las Filas
ShowAllRows: Muestra todas las Filas del Rowset
CopyTo Sintaxis CopyTo(&DestRowset [, record_list])
Dónde record_list es una lista de nombres de los registros en la forma: [RECORD.source_recname1, RECORD.target_recname1
[, RECORD.source_recname2, RECORD.target_recname2]]. . .
Descripción
El método CopyTo copia del rowset de la ejecución del método para el rowset de destino determinado, como la copia nombrando campos de
registro y subscrolls en los niveles correspondientes.
El método CopyTo utiliza los datos actuales en el rowset. Esto puede ser
diferente de los valores de datos originales si el rowset se recupera de la base de datos y los valores en que se han cambiado ya sea por un
usuario final o un programa de PeopleCode Si se dan pares de nombres de origen y de destino de registro, estos se
utilizan para emparejar los records y subscrolls antes de la comprobación de los campos de registro-con nombre similar. Entonces,
después de copiar los pares de registros con nombre, este método copia todos los registros con nombres idénticos.
Nota: Este método no funciona para los State Records Application Engine. Si no se especifica record_list, tanto el nombre de registro y el
nombre del campo tienen que coincidir exactamente con los datos se copian de un campo de registro a otro. Si especifica record_list, después
de que los registros se han emparejado, los nombres de los campos
tienen que coincidir para que se copian los datos.
Si el rowset que se copia tiene el EditError nivel de campo, así como las propiedades y MessageNumber MessageSetNumber establecidos, estos
valores se copian en el rowset donde está copiando.
Parametros
&DestRowset Especifica el rowset que sera copiado. Este objeto rowset ya debe haber creado una instancia.
SourceRecname Especifica un record para ser copiado, en el objeto
rowset de la copia.
DestRecname Especifique un registro para ser copiado, en el objeto
de rowset que desea copiar.
Retornos: ninguno
Ejemplo
If you set one rowset equal to another, you haven’t made a copy of the
rowset. Instead, you have two variables pointing to the same data. To make a clone of an existing rowset, that is, to make two distinct
copies, you can do the following: &RS2 = CreateRowset(&RS);
&RS.CopyTo(&RS2); The following example copies data from one rowset object to another.
Because no like-named records exist between the two rowsets, the record names are specified. Only the like-named fields are copied from
one rowset to the other: Local Rowset &RS1, &RS2;
Local String &EMPLID;
&RS1 = CreateRowset(RECORD.PERSONAL_DATA); &RS2 = CreateRowset(RECORD.PER_VENDOR_DATA);
&EMPLID = "8001";
&RS1.Fill("WHERE EMPLID =: 1", &EMPLID); &RS1.CopyTo(&RS2, RECORD.PERSONAL_DATA,
RECORD.PER_VENDOR_DATA); The following example copies data from a message into the Component
buffers, then calls the page (using TransferPage) to redraw the page. You could do this to fill a page with message data that is in error, so
that an end-user can make corrections to the message data. &WRK_ROWSET0 is the level zero rowset and &WRK_ROWSET1 is where
the data is copied to. /* Get the Message */
&MSG = GetSubContractInstance(&PUBID, &PUBNODE, &CHNLNAME, &MSGNAME, &SUBNAME);
/* Get the Message Rowset */
&MSG_ROWSET = &MSG.GetRowset();
/* Get Level 0 */
&WRK_ROWSET0 = GetLevel0();
/* Create Work rowset */ &WRK_ROWSET1 =
GetLevel0()(1).GetRowset(SCROLL.EN_REVISION_TMP);
/* Populate Work Rowset */
&MSG_ROWSET.CopyTo(&WRK_ROWSET1, RECORD.EN_REVISION,
RECORD.EN_REVISION_TMP);
SetNextPage("EN_REVISION_MSG");
TransferPage();
DeleteRow
Sintaxis
DeleteRow(n)
El metodo DeleteRow borra el row en el rowset identificado por el
parametro. Si el programa se ejecuta desde un componente contra el buffer de
datos de componentes, un evento RowDelete PeopleCode también dispara, seguido por los acontecimientos que normalmente siguen un
RowDelete, como si el usuario hubiera presionado manualmente ALT 8 y ENTER.
Este metodo inicialmente marca el row como necesidad de ser eliminado. A la hora de guardar el row se elimina definitivamente de la
base de datos y borra de la memoria intermedia. Cuando la fila se marca como eliminado, se ignora por otros métodos, como
GetCurrEffRow, Sort, y así sucesivamente.
DeleteRow no puede ser ejecutado en el mismo rowset donde la
eliminación se lleva a cabo, o desde un rowset hijo contra el padre. Coloca el PeopleCode en un rowset padre y ejecutarlo en contra de un
rowset hijo. Cuando se utiliza DeleteRow en un ciclo, tienes que procesar las filas de
arriba hacia abajo para lograr los resultados correctos, es decir, debe eliminar de abajo hacia arriba y no de arriba hacia abajo. Esto es
necesario porque las filas se numeran después de que se eliminen (si se elimina la fila uno, la segunda fila se convierte en la fila uno).
Nota: Si tu usas DeleteRow sobre un rowset creado con la function
CreateRowset, el row no se borra automaticamente en la base de datos cuando la pagina es guardada. Los rowsets creados unsando la función
CreateRowset son rowsets independientes, no están ligadas a la base de datos, así que no hay actualizaciones de bases de datos cuando se
manipulan. Actividades Delete e Insert en estos tipos de rowset no se
aplican automáticamente a la hora de guardar.
Parametros
n Un entero identifica un row dentro del objeto rowset. Esto debe ser >= 1 y <= el número de filas activas del rowset(ActiveRowCount).
Retornos
Valor booleano opcional: True si se elimina la fila, False en caso contrario.
Ejemplo
En el siguiente ejemplo DeleteRow es usando en un ciclo For, El ejemplo comprueba un valor en cada fila, a continuación, elimina de forma
condicional la fila. Tener en cuenta la sintaxis del ciclo For, incluyendo el uso de -1 en la
cláusula del Paso desde la más alta a valores más bajos. Esto asegura que la nueva numeración de las filas no afectan al ciclo.
For &I = &RS2.ActiveRowCount To 1 Step -1
If None(&CHECK_SEQ) Then
&RS2.DeleteRow(&I);
End-If;
End-For;
Fill
Sintaxis Fill([wherestring [, bindvalue] . . .])
El metodo Fill vacia el rowset entonces lee los registros desde la base de
datos en filas sucesivas. Los registros se leen las tablas de bases de datos correspondientes al
registro de base de datos principal del desplazamiento en ese registro. Los registros se seleccionan por la cláusula wherestring de SQL opcional,
en el que los bindvalues opcionales están sustituidos, usando los marcadores de posición de vinculación habituales (: n).
En genera, este metodo se usa solamente en rowsets que han sido creados usando la function CreateRowset.
Note: Because Flush always leaves one row in the scroll, there will be one row in the scroll even if you don’t read any records.
The actual number of records read into the rowset is an optional return
of this method. Note: This method does not work with Application Engine state records.
Also, you cannot use this method in dynamic views.
When this method executes, unlike the Select method, it does not cause any associated PeopleCode to run as part of reading data into the
rowset. Note: Fill reads only the primary database record. It does not read any
related records, nor any subordinate rowset records. For every record read with the Fill method, if the set language is not the
base language and the record has related language records, the Fill method tries to read the related language record and does related
language processing. The Fill method uses a correlation ID of FILL for the table it reads. You
must use the correlation ID if you want to refer to the rowset table name as part of the wherestring. You receive a runtime error if you use
the table name as a column prefix instead of the correlation ID. Sorting Considerations
Rows come unsorted from the database when using Fill. This is not a
problem for SQL server, however, it can be a problem for DB2 UDB for OS/390 and z/OS and Oracle.
Parameters
wherestring Specify a SQL WHERE clause to use for selecting records to fill the rowset. This can be a string
or a SQL definition.
bindvalue Specify optional bind variables to be used with the WHERE clause.
Returns
The number of records read into the rowset. Example
The following example reads all of the QA_MYRECORD records into a rowset, and returns the number of rows read:
&RS = CreateRowset(RECORD.QA_MYRECORD); &NUM_READ = &RS.Fill();
The following example reads all of the QA_MYRECORD records that have a MYRECORD field equal to the value of &UVAL into a rowset, and
returns the number of rows read: &NUM_READ = &RS.Fill("where MYRECORD = :1", &UVAL);
To re-use a WHERE clause for the wherestring you can use the SQL repository, and a SQL object.
&NUM_READ = &RS.Fill(SQL.MYWHERE, &UVAL); The following example gets all the SET_CNTRL_REC rows related to the
row on the page, then updates SETID with the value from the page. Fill
is used with a rowset that was created from a message that was just created, that is, a rowset that was unpopulated.
If FieldChanged(SETID) Then
&MSG = CreateMessage(OPERATION.SET_CNTRL_REC); &MSG_ROWSET = &MSG.GetRowset();
&MSG_ROWSET.Fill("where SETCNTRLVALUE =:1 and REC_GROUP_ID
=:2", SETCNTRLVALUE, REC_GROUP_ID);
For &I = 1 To &MSG_ROWSET.ActiveRowCount &MSG_ROWSET.GetRow(&I).SET_CNTRL_REC.SETID.Value = SETID;
&MSG_ROWSET.GetRow(&I).PSCAMA.AUDIT_ACTN.Value = "C"; End-For;
&MSG.Publish();
End-If;
When using the Fill method, the IsChanged property of each field in a part rowset is not set to true. Because the fields appear to be
unchanged, this can create a problem for publication of data from Message rowsets. A technique to avoid this problem is to create a
second rowset and use the CopyTo method to copy the changes to the
Message rowset as shown in the following example: &a = CreateMessage(Operation.MY_ASYNC);
&rs = &a.GetPartRowset(1);
&trs = CreateRowset(Record.PSPMAGENT); &trs.Fill("where PM_AGENTID >= 12345");
&trs.CopyTo(&rs);
%IntBroker.Publish(&a); The following example uses a correlation ID for the table in the Fill
SELECT, to enable the use of correlated subqueries in the WHERE clause, such as the usual effective-date subquery:
&RSOWNER_NAME = CreateRowset(RECORD.PERSONAL_D00); &RSOWNER_NAME.Fill("where SETID=:1 AND EMPLID=:2 AND
%EffDtCheck(PERSONAL_D00,FILL,:3)", &SETID, &EMPLID, &EFFDT);
The Fill method implicitly uses Fill as an alias for the Rowset record. This is helpful for complex Fill where clauses with subqueries.
&oprclasscountries = CreateRowset(Record.SCRTY_TBL_GBL);
&oprclasscountries.Fill("WHERE FILL.OPRCLASS = :1 AND NOT EXISTS (SELECT 'X' FROM PS_SCRTY_SEC_GBL GBL2 WHERE GBL2.OPRCLASS
= FILL.OPRCLASS AND GBL2.COUNTRY = FILL.COUNTRY AND GBL2.PNLNAME = :2)", &OPRCLASS, %Component);
In the following example, the necessary key field values are loaded into
a rowset, then the following function is called, and the values are used as part of the Fill method.
Function FillRS2();
Local SQL &MySql;
Local string &MySqlString; Local Record &ElemDefnRec;
Local string &ElemDefnRecName, &fldname; Local Rowset &CompRec2RS;
/* Build the record object that is used for building the SQL and
executing the select */ &ElemDefnRec = CreateRecord(@("Record." | &pkgRecName));
/* Initialize the SQL string */
&MySqlString = "%SelectByKey(:1 A)";
/* Create a SQL to select a rows based on the key fields. */
For &i = 1 To &ElemDefnRec.FieldCount If &ElemDefnRec.GetField(&i).IsKey Then
&fldname = &ElemDefnRec.GetField(&i).Name; &ElemDefnRec.GetField(&i).Value =
&CompRec2RS.GetRow(1).GetRecord(@("Record." | &pkgRecName)).GetField(@("Field." | &fldname)).Value;
End-If; End-For;
/* Create the SQL and execute the select */
&MySql = CreateSQL(&MySqlString); &MySql.Execute(&ElemDefnRec);
/* Copy each selected row into the rowset */
While &MySql.Fetch(&ElemDefnRec)
&ElemDefnRec.CopyFieldsTo(&CompRec2RS(&CompRec2RS.ActiveRowC
ount).GetRecord(1)); End-While;
End-Function;
Flush
Syntax
Flush()
Description
Utilice el método Flush para eliminar todas las filas del rowset y liberar su memoria
intermedia asociada. Las filas que se vacían no se eliminan de la base de datos. Esta
función se utiliza a menudo para eliminar un desplazamiento de trabajo antes de utilizar el
método Select.
Nota: Vaciar siempre deja una fila en el desplazamiento.
No se puede eliminar el contexto actual del programa en ejecución. Esto significa Flush no
se puede utilizar para el rowset que contiene el programa en ejecución, o en cualquier
rowset hijo y ejecutados contra el rowset padre. Coloca el PeopleCode en un rowset padre y
ejecutarlo en contra de un rowset hijo.
Para los rowset que corresponden a datos del búfer de componentes, el método Flush
ejecuta en modo turbo sólo-es decir, el procesamiento se realiza por defecto, pero sólo en
que se tiran la fila.
Considerations When Initializing New Rows
Flush removes all rows and inserts a row.
If you want to initialize the row, that is, have the defaults and any RowInit PeopleCode run, you must do something to invoke the default value processing. This can be as simple as setting the value of another field on the same page that has a PeopleCode program associated with it.
If the rowset is created from message data, an Application Engine program, and so on, the rows are flushed but the row that is inserted is not initialized.
Considerations for User-Sorted Grids
If a grid has a user personalized sort defined for it and your PeopleCode program flushes that grid and then repopulates it (for instance, through a Fill, a Select, or a series of InsertRow calls), this could invalidate the user's personalized sort and the current row in the user's view unless your PeopleCode program makes arrangements to reapply these user personalizations.
After flushing and repopulating the rowset, your PeopleCode program should re-sort the rowset (that is, re-sort the grid). If the user has a personalized sort, then the user's personalized sort will be reapplied via the PeopleCode sort.
Also, after flushing and repopulating a grid, it will be important to manage which row is deemed the current row. This can be managed using methods such as IsUserSorted, GetFirstUserSortedRow, MapBufRowToUserSortRow, and then by setting the TopRowNumber property accordingly.
See IsUserSorted.
Parameters
None.
Returns
None.
Example
The following example checks for the value of the field CHECKLIST_CD. If something exists in this field, the second level rowset is flushed and new values are selected into it.
If All(CHECKLIST_CD) Then
&RS1H.Flush();
&RS1H.Select(RECORD.CHECKLIST_ITEM, "where Checklist_CD = :1 and EffDt
= (Select Max(EffDt) from PS_CHECKLIST_ITEM Where CheckList_CD = :2)",
CHECKLIST_CD, CHECKLIST_CD);
End-If;
InsertRow
Syntax
InsertRow(n)
Description
InsertRow
InsertRow realiza mediante programación el ALT 7 y ENTER función (RowInsert). InsertRow inserta una nuevo row del rowset actual después de la fila especificada por el parámetro si el registro principal para el rowset no es eficaz en fecha o un rowset independiente. Si el registro primario para el rowset es efectiva con fecha posterior o de un conjunto de filas independiente, la nueva fila se inserta antes de la fila actual, y todos los valores de la fila actual se copian en la nueva fila, excepto para EFFDT, que se fija a la corriente fecha.
Ademas, InsertRow propaga las llavez de desde e mas alto nivel en los row insertados.
In addition, InsertRow propagates the keys from the higher level (if any) into the inserted row.
If the program is being run from a component against Component buffer data, a RowInit PeopleCode event also fires, followed by the events that normally follow a RowInsert, as if the user had manually pressed ALT+7 and ENTER.
The InsertRow method can be executed against the same rowset where the insertion will take place.
For rowsets corresponding to component buffer data, the InsertRow method executes in turbo mode only—that is, default processing is performed, but only on the row being inserted. Additional information on turbo mode and non-turbo mode is available in the documentation with the InsertRow PeopleCode built-in function.
See InsertRow.
InsertRow cannot be executed from the same rowset where the insertion will take place, or from a child rowset against a parent. Place your PeopleCode in a parent rowset and execute it against a child rowset.
Note: If you use InsertRow on a rowset created using the CreateRowset function, the row isn't automatically inserted in the database when the page is saved. Rowsets created using the CreateRowset function are standalone rowsets, not tied to the database, so there are no database updates when they are manipulated. Delete and insert activity on these types of rowsets aren't automatically applied at save time.
Effective-Dated Row Considerations
When a row is inserted, if that row contains child scrolls, this method also inserts an empty row for any child scrolls. The effective-date field for this empty row is also empty. The current date is not used.
Parameters
n An integer identifying a row within the rowset object. This must be >= 0 and <= the number of active rows in the rowset (see property ActiveRowCount). A value of 0 inserts in front of the first row.
Returns
An optional Boolean value: True if the row is inserted, False if the row is not inserted.
Example
In the following example, as the primary database record isn’t effective-dated, the new row is inserted after the second row in the rowset.
&ROWSET.InsertRow(2);
HideAllRows
Syntax
HideAllRows()
Description
HideAllRows oculta todos los rows del rowset. Usando este metodo es modificar la propiedad visible de cada row del rowset a False.
HideAllRows hides all rows of the rowset. Using this method is equivalent to a loop setting the visible property of each row of the rowset to False.
Yo no puedes ocultar roes dentro del context del programa que se esta ejecuntando.
You cannot hide rows in the current context of the executing program. This means HideAllRows cannot hide the rowset containing the executing program, or in any child rowsets and be executed against the parent rowset. Place your PeopleCode in a parent rowset and execute it against a child rowset.
Parameters
None.
Returns
None.
Example
The following example hides the second level scroll if a value exists in the NO_COMMENTS field in the first level of the scroll. The code is running from the first level of the scroll.
Local Rowset &RS1, &RS2;
&RS1 = GetRowset();
&RS2 = GetRowset(SCROLL.EMPL_CHKLST_ITM);
For &I = 1 to &RS1.ActiveRowCount
If ALL(&RS1.GetRow(&I).EMPLOYEE_CHECKLIST.NO_COMMENTS) Then
&RS2.HideAllRows();
End-If;
/*other processing */
End-For;
ShowAllRows
Syntax
ShowAllRows()
Description
ShowAllRows desoculta todas rows del objeto rowset ejecutandose en el metodo. Usando este metodo es equivalente a modificar la propiedad visible de cada row en el rowset a True.
ShowAllRows "unhides" all rows of the rowset object executing the method. Using this method is equivalent to a loop setting the visible property of each row of the rowset to True.
ShowAllRows cannot be executed from the same rowset you want to display, or from a child rowset against a parent. Place your PeopleCode in a parent rowset and execute it against a child rowset.
Parameters
None
Returns
None.
Example
&ROWSET.ShowAllRows();
FlushRow
Syntax
FlushRow(n)
Description
Use el metodo FlushRow para remover un row en específico del rowset
y del buffer de component. Los Rows flusheados no son borrados de la base de datos.
El Metodo FlushRow es especializado y frecuentemente usado. El
muchas ocaciones, tu puedes usar DeleteRow para remover un row del buffer de componente y remover de la base de dato hasta que el
componente es guardado.
You cannot flush the current context of the executing program. This
means FlushRow cannot be used for the rowset containing the executing program, or in any child rowset and executed against the
parent rowset. Place your PeopleCode in a parent rowset and execute it against a child rowset.
http://docs.oracle.com/cd/E41633_01/pt853pbh1/eng/pt/tpcr/langref_RowsetClassMethods-c07c55.html
ClearDeletesChanges
Sintaxis ClearDeletesChanges()
Use el método ClearDeletesChanges para borrar rows eliminadas y cambiado de rowset independiente.
Nota: este método trabaja solamente con rowsets independientes, es decir, rowsets creados usando la función CreateRowset.
Este método difiere desde Flush en un numero de maneras: no elimina todas las rows del rowset, las rows eliminadas
solamente sólo se aplica a los rowset independientes
Este método primero limpia las rows eliminadas, es decir, todas las rows que han sido eliminadas usando DeleteRow que se eliminen del rowset y
sus buffers asociados son liberados.
Este método a continuación, borra las rows modificadas. Eso significa que los cambios realizados en un row (como valores de campo
modificados) o rows recién insertados ahora se propaga a su estado original y los buffers modificados, en su caso, se liberan.
Después de ejecutar este método en un rowset independiente, cualquier row que antes era nuevo o modificado ya no tiene ese estado. Las
propiedades isNew y IsChanged de una fila devuelven false. Este método no hace las actualizaciones de base de datos.
¿Cómo utilizar este método? Suponga que utiliza un rowset independiente para rastrear los cambios que necesita hacer a algún
proceso de negocio o un objeto. Después de hacer las actualizaciones de
las bases de datos apropiadas para reflejar los cambios registrados en el
rowset (es decir, inserciones o eliminaciones o cambios), se llama a este método para limpiar el rowset en preparación para su posterior
procesamiento. Sin este método, los rows recién insertadas y filas
modificadas conservan su estado IsNew y IsChanged indefinidamente, lo que complica la lógica del programa y que puede conducir a duplicar las
inserciones o eliminaciones. Parámetros: ninguno
Retornos: ninguno Ejemplo REM +--------------------------------------------------+;
REM | Function to Update the DB for a Standalone Rowset|;
REM +--------------------------------------------------+;
Function ProcessDatabaseUpdateforRowset(&rsIn As Rowset)
For &i = 1 To &rsIn.RowCount
&rwTMP = &rsIn.GetRow(&i);
If &rwIn.IsDeleted And
Not &rwIn.IsNew Then
&rTMP = &rwIn.GetRecord(1);
&rTMP.Delete();
End-If;
If &rwTMP.IsNew And
&rwTMP.IsChanged And
Not &rwTMP.IsDeleted Then
&rTMP = &rwTMP.GetRecord(1);
&rTMP.Insert()
End-If;
If Not &rwTMP.IsNew And
&rwTMP.IsChanged And
Not &rwTMP.IsDeleted Then
&rTMP = &rwTMP.GetRecord(1);
&rTMP.Update();
End-If;
End-For;
REM +-----------------------------------------------+;
REM | Now we need to reset the Rowset flags and |;
REM | remove deleted rows |;
REM +-----------------------------------------------+;
&rsIn.ClearDeletesChanges();
End-Function;