Вы находитесь на странице: 1из 20

TIPOS DE ACCESO DE BFER DE DATOS 1. Clase field 2. Clase record 3. Clase row 4.

Clase rowset La relacin 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" DESCRIPCIN DEL ACCESO DE BFER DE DATOS Esta seccin trata sobre: Acceso al buffer de datos. Clases de acceso. Modelo de bfer de datos y objetos de acceso a datos. ACCESO BUFFER DE DATOS Adems de las funciones incorporadas que se utilizan para acceder a la memoria intermedia de componentes, clases de objetos estn 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 tambin pueden ser utilizados para acceder a los datos de los bferes de datos generales, cargados por un programa de aplicacin de motor, una interfaz de componente, y as sucesivamente. Los mtodos y las propiedades de estas clases ofrecen una funcionalidad que es similar a lo que ha estado disponible utilizando las funciones integradas. Sin embargo, tambin proporcionan una mayor consistencia, flexibilidad y nuevas funcionalidades. Clases de acceso Las cuatro clases de bfer de datos son: rowset, row, record y Field. Estas cuatro clases son la base para el acceso a datos del bfer componente a travs 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 definicin 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 definicin 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 jerrquicos. Se compone de una coleccin de filas. Un rea de desplazamiento componente es un rowset. Usted tambin 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 jerrquica, mltiples ocurrencia. Se puede acceder a estas clases utilizando notacin de puntos. Las cuatro clases de memoria intermedia de datos se relacionan entre s de una manera jerrquica. Los puntos principales para entender estas relaciones son: Un record contiene uno o ms campos. Una row contiene uno o ms registros y cero o ms conjuntos de rows hijos. Un rowset contiene una o ms rows. Para buffers componentes, pensar en un rowset como un rea de desplazamiento en una pgina 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 aplicacin, estructura de ficheros, interrelaciones de negocios, y otras definiciones, adems de los componentes. A nivel rowset cero desde un buffer componente slo contiene un fila: las teclas que el usuario especfico para iniciar dicho componente. A nivel de rowset cero a partir de datos que no es un componente, como un mensaje o un diseo de archivo, puede contener ms 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 funcin o uno de los mtodos) 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 funcin CreateRowset, el objeto rowset es instanciado es un rowset

independiente. Todos los records(registros) y fields(campos) creadas por esta funcin se inicializan con valores nulos, es decir, ellos no contienen ningn dato. Puede rellenar este objeto rowset usando el CopyTo, Fill, o mtodos 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 bfer de datos. CONSIDERACIONES DE ACCESO DIRECTO El mtodo por default para la clase Rowset es GetRow. Esto significa que puede especificar justo el nmero de fila, y no utilizar el mtodo GetRow. Por ejemplo, las siguientes dos lneas de cdigo 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 aplicacin, record field PeopleCode. No se puede pasar un objeto rowset en el marco de un mtodo 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 mtodo 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 jerrquicos componen de filas, registros y campos. Objetos file pueden tener la misma estructura que los rowset, es decir, las estructuras de datos jerrquicos 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 funcin CreateRowset para crear un rowset independiente vacio. Un Rowset independiente es un rowset con una estructura especificada, pero no esta ligado a ningn 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 parmetro determina la estructura del rowset que se esta creando. Si tu especificas un record en el primer parmetro, se usa el record primario de nivel 0. Si tu no especificas ningn otro parmetro, se creas un rowset conteniendo una fila, con un registro vaco o despoblado. Tu puedes poblar o llenar este tipo de rowset con datos, solo puedes usar solamente: El mtodo de la clase rowset Fill o FillAppend Un mtodo record (SelectByKey) La funcin 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 ningn dato. Si tu quieres llenar o poblar este tipo de rowset con datos, usa el mtodo CopyTo o una sentencia SQL. Nota: No debes usar los mtodos del rowset Select o SelectNew para poblar o llenar rowset creados usando CreateRowset. Use la instancia Fill o FillAppend. Restricciones usando CreateRowset Los siguientes mtodos y propiedades no trabajan cuando creamos rowset usando CreateRowset: Select SelectNew Caulquier mtodo GUI(como HideAllRows) Cualquier mtodo o propiedades de fecha efectiva(como EFFDT, EFFSEQ o GETCURREFFROW) Ademas, los rowset creados usando CreateRowset no estn ligados automticamente a la base de datos. Esto significa que si insertas o borras filas, las filas no sern insertadas o borradas en la base de datos cuando yo guardes la pgina. 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, agregar un objeto secundario al rowset creado. Este debe ser un rowset existente. va a rowset recin objeto

Retornos Un objeto rowset independiente vacio. Ejemplo: El siguiente cdigo crea un rowset simple de un solo registro por fila: &RS = CreateRowset(RECORD.QA_MYRECORD); El siguiente cdigo crea un rowset con la misma estructura de un rowset especfico: &RS2 = CreateRowset(&RS); El siguiente cdigo 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 jerarqua, 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 nmero 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 funcin 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 expresin de la forma RECORD.scrollname.property o RECORD.scrollname.method(. . .) se convierte en una expresin de objeto por el uso de GetRowset (SCROLL. scrollname). Parmetro Si se especifica un parmetro, que debe ser el nombre del registro principal para el desplazamiento de que es un hijo del actual contexto. Retornos Sin parmetros, GetRowset retorna un objeto rowset para el rowset que contiene el programa actualmente en ejecucin. Si se especifica un parmetro, 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 (RowCounts) InsertRow: Insertar una Fila al Rowset HideAllRows: Ocultar todas las Filas ShowAllRows: Muestra todas las Filas del Rowset

CopyTo Sintaxis CopyTo(&DestRowset [, record_list]) Dnde 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]]. . . Descripcin El mtodo CopyTo copia del rowset de la ejecucin del mtodo para el rowset de destino determinado, como la copia nombrando campos de registro y subscrolls en los niveles correspondientes. El mtodo 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 comprobacin de los campos de registro-con nombre similar. Entonces, despus de copiar los pares de registros con nombre, este mtodo copia todos los registros con nombres idnticos. Nota: Este mtodo 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, despus 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 Retornos: ninguno Especifique un registro para ser copiado, en el objeto de rowset que desea copiar.

Ejemplo If you set one rowset equal to another, you havent 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_TMP); SetNextPage("EN_REVISION_MSG"); TransferPage(); DeleteRow Sintaxis DeleteRow(n)

RECORD.EN_REVISION,

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 tambin 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 mtodos, como GetCurrEffRow, Sort, y as sucesivamente. DeleteRow no puede ser ejecutado en el mismo rowset donde la eliminacin 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 despus 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 funcin CreateRowset son rowsets independientes, no estn 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 automticamente a la hora de guardar.

Parametros n Un entero identifica un row dentro del objeto rowset. Esto debe ser >= 1 y <= el nmero 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 continuacin, elimina de forma condicional la fila. Tener en cuenta la sintaxis del ciclo For, incluyendo el uso de -1 en la clusula del Paso desde la ms alta a valores ms bajos. Esto asegura que la nueva numeracin 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 clusula wherestring de SQL opcional, en el que los bindvalues opcionales estn sustituidos, usando los marcadores de posicin de vinculacin 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 dont 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 recor or a SQL definition.

bindvalue Specify optional bind variables to be used with the WH 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 Local Local Local Local SQL &MySql; string &MySqlString; Record &ElemDefnRec; string &ElemDefnRecName, &fldname; 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 mtodo Flush para eliminar todas las filas del rowset y liberar su memoria intermedia asociada. Las filas que se vacan no se eliminan de la base de datos. Esta funcin se utiliza a menudo para eliminar un desplazamiento de trabajo antes de utilizar el mtodo Select. Nota: Vaciar siempre deja una fila en el desplazamiento. No se puede eliminar el contexto actual del programa en ejecucin. Esto significa Flush no se puede utilizar para el rowset que contiene el programa en ejecucin, 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 bfer de componentes, el mtodo Flush ejecuta en modo turbo slo-es decir, el procesamiento se realiza por defecto, pero slo 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 programacin el ALT 7 y ENTER funcin (RowInsert). InsertRow inserta una nuevo row del rowset actual despus de la fila especificada por el parmetro 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 onlythat 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
Returns

An integer identifying a row within the rowset object. This must be >= 0 a property ActiveRowCount). A value of 0 inserts in front of the first row.

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 isnt 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 especfico 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_R owsetClassMethods-c07c55.html ClearDeletesChanges Sintaxis ClearDeletesChanges() Use el mtodo ClearDeletesChanges para borrar rows eliminadas y cambiado de rowset independiente. Nota: este mtodo trabaja solamente con rowsets independientes, es decir, rowsets creados usando la funcin CreateRowset. Este mtodo difiere desde Flush en un numero de maneras: no elimina todas las rows del rowset, las rows eliminadas solamente slo se aplica a los rowset independientes Este mtodo 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 mtodo a continuacin, borra las rows modificadas. Eso significa que los cambios realizados en un row (como valores de campo modificados) o rows recin insertados ahora se propaga a su estado original y los buffers modificados, en su caso, se liberan. Despus de ejecutar este mtodo 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 mtodo no hace las actualizaciones de base de datos. Cmo utilizar este mtodo? Suponga que utiliza un rowset independiente para rastrear los cambios que necesita hacer a algn proceso de negocio o un objeto. Despus 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 mtodo para limpiar el rowset en preparacin para su posterior procesamiento. Sin este mtodo, los rows recin insertadas y filas modificadas conservan su estado IsNew y IsChanged indefinidamente, lo que complica la lgica del programa y que puede conducir a duplicar las inserciones o eliminaciones. Parmetros: 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;

Вам также может понравиться