5
Guía Arquitecto OpenEdge > ABL Referencia del lenguaje > ABL Referencia ASIGNAR declaración Transfiere datos colocados previamente en el búfer de pantalla por una instrucción de entrada de datos o mueve datos especificada en la instrucción ASSIGN por una expresión para los campos correspondientes y variables en la memoria intermedia. El movimiento de datos Sintaxis ASIGNAR { [[INPUT] MARCO frame | BUSCA browse ] { field [= expression ]} [WHEN expression ] } ... [NO-ERROR] ASIGNAR { record [EXCEPTO field ...]} [NO-ERROR] [MARCO frame | BUSCA browse ] field El nombre del campo o variable ( field) que se fijará a partir del valor correspondiente que se encuentra en el búfer de pantalla o expresión. El field debe ser calificado por un nombre de marco ( frame ) o navegar por nombre ( browse ) si field se especifica como un widget de entrada de más de un fotograma. Si field se configura a partir de expression , field puede incluir todos los elementos que se definen para el lado izquierdo de una declaración (=) Asignación . expression Una expresión con un tipo de datos que es consistente con el tipo de datos de field . En este caso, la MAV determina el fieldvalor de la expresión en vez de a partir de la memoria tampón de pantalla. Para obtener más información acerca de expression , véase la expresión de entrada de referencia. CUANDO expression Mueve los datos a la memoria intermedia sólo si expression tiene un valor de TRUE. En este caso, expression es un nombre de campo, nombre de la variable, o expresión cuyo valor es lógico. El AVM evalúa CUANDO expresiones al inicio de la tarea, antes de cualquier asignación tienen lugar. NO-ERROR Suprime errores ABL o mensajes de error que se produciría y los desvía a la manija del sistema ERROR- STATUS . Si se produce un error, la acción de la declaración no se hace y la ejecución continúa con la instrucción siguiente. Si la sentencia falla, los posibles efectos secundarios persistentes de la declaración se restituyen. Si la instrucción incluye una expresión que contiene otros elementos ejecutables, como métodos, el trabajo realizado por estos elementos puede o no puede hacer, dependiendo de la orden de la MAV resuelve los elementos de expresión y la aparición del error. Para la declaración ASSIGN SIN ERRORES, si una condición de error se eleva, cada instancia del field se mantiene sin cambios. Para comprobar si hay errores después de una instrucción que utiliza la opción NO-ERROR: o Compruebe el error-STATUS: atributo ERROR para ver si el AVM planteó la condición de error. o Compruebe si el ERROR-STATUS: atribuyen NUM-mensajes es mayor que cero para ver si el AVM genera mensajes de error.Métodos mango ABL utilizan en un bloque sin un callejón CATCH errores bloque tratan como advertencias y no plantean ERROR, no establezca el ERROR-STATUS: atributo ERROR, pero añadir mensajes a la manija del sistema ERROR STATUS. Por lo tanto, esta prueba es la mejor prueba para el código usando métodos de la manija sin bloques extremos CATCH.Métodos mango ABL utilizan en un bloque con un extremo CATCH aumento bloque ERROR y añadir mensajes al objeto de error generado por el MAV. En este caso, la AVM no actualiza el mango del sistema ERROR STATUS. o Utilice ERROR-STATUS: Get-Message ( message-num ) para recuperar un mensaje en particular, en message- num es 1 para el primer mensaje. Si la declaración no incluye la opción NO-ERROR, puede utilizar un bloque final CATCH para controlar los errores que plantea el comunicado.

Guía Arquitecto OpenEdge

Embed Size (px)

Citation preview

Page 1: Guía Arquitecto OpenEdge

Guía Arquitecto OpenEdge > ABL Referencia del lenguaje > ABL Referencia

ASIGNAR declaración

Transfiere datos colocados previamente en el búfer de pantalla por una instrucción de entrada de datos o mueve datos especificada en la instrucción ASSIGN por una expresión para los campos correspondientes y variables en la memoria intermedia.

El movimiento de datos

Sintaxis

ASIGNAR { [[INPUT] MARCO frame | BUSCA browse ] { field [= expression ]} [WHEN expression ] } ... [NO-ERROR]

ASIGNAR { record [EXCEPTO field ...]} [NO-ERROR]

[MARCO frame | BUSCA browse ] field

El nombre del campo o variable ( field) que se fijará a partir del valor correspondiente que se encuentra en el búfer de pantalla o expresión. El field debe ser calificado por un nombre de marco ( frame ) o navegar por nombre ( browse ) si field se especifica como un widget de entrada de más de un fotograma. Si field se configura a partir de expression , field puede incluir todos los elementos que se definen para el lado izquierdo de una declaración (=) Asignación .

expression

Una expresión con un tipo de datos que es consistente con el tipo de datos de field . En este caso, la MAV determina el fieldvalor de la expresión en vez de a partir de la memoria tampón de pantalla. Para obtener más información acerca de expression , véase la expresión de entrada de referencia.

CUANDO expression

Mueve los datos a la memoria intermedia sólo si expression tiene un valor de TRUE. En este caso, expression es un nombre de campo, nombre de la variable, o expresión cuyo valor es lógico. El AVM evalúa CUANDO expresiones al inicio de la tarea, antes de cualquier asignación tienen lugar.

NO-ERROR

Suprime errores ABL o mensajes de error que se produciría y los desvía a la manija del sistema ERROR-STATUS . Si se produce un error, la acción de la declaración no se hace y la ejecución continúa con la instrucción siguiente. Si la sentencia falla, los posibles efectos secundarios persistentes de la declaración se restituyen. Si la instrucción incluye una expresión que contiene otros elementos ejecutables, como métodos, el trabajo realizado por estos elementos puede o no puede hacer, dependiendo de la orden de la MAV resuelve los elementos de expresión y la aparición del error.

Para la declaración ASSIGN SIN ERRORES, si una condición de error se eleva, cada instancia del field se mantiene sin cambios.

Para comprobar si hay errores después de una instrucción que utiliza la opción NO-ERROR:

o Compruebe el error-STATUS: atributo ERROR para ver si el AVM planteó la condición de error.

o Compruebe si el ERROR-STATUS: atribuyen NUM-mensajes es mayor que cero para ver si el AVM genera mensajes de error.Métodos mango ABL utilizan en un bloque sin un callejón CATCH errores bloque tratan como advertencias y no plantean ERROR, no establezca el ERROR-STATUS: atributo ERROR, pero añadir mensajes a la manija del sistema ERROR STATUS. Por lo tanto, esta prueba es la mejor prueba para el código usando métodos de la manija sin bloques extremos CATCH.Métodos mango ABL utilizan en un bloque con un extremo CATCH aumento bloque ERROR y añadir mensajes al objeto de error generado por el MAV. En este caso, la AVM no actualiza el mango del sistema ERROR STATUS.

o Utilice ERROR-STATUS: Get-Message ( message-num ) para recuperar un mensaje en particular, en message-num es 1 para el primer mensaje.

Si la declaración no incluye la opción NO-ERROR, puede utilizar un bloque final CATCH para controlar los errores que plantea el comunicado.

Algunas otras notas de uso importantes sobre la opción NO-ERROR:

o NO-ERROR no suprime los errores que se levante el tope o SALIR condición.

o Una declaración CATCH, que introduce un bloque CATCH final, es análogo a una opción de NO-ERROR, ya que también suprime los errores, pero lo hace para todo un bloque de código. Es diferente en que los mensajes de error están contenidos en un objeto de error basado en la clase (generada por el AVM o lanzado de forma explícita), en comparación con el mango del sistema ERROR STATUS. Además, si los errores generados en la secuencia no son manejadas por un bloque CATCH compatible, EN frase ERROR o UNDO declaración, tampoco suprime el error, pero manejado con el procesamiento de errores por defecto para ese tipo de bloque.

o Cuando una declaración contiene la opción NO-ERROR y reside en un bloque con un bloque CATCH final, la opción NO-ERROR tiene prioridad sobre el bloque CATCH. Es decir, un error generado en la cuenta con la opción NO-ERROR no será

   

Page 2: Guía Arquitecto OpenEdge

manejada por un bloque final CATCH compatible. El error se redirecciona al mango del sistema ERROR STATUS como normal.

o Si un objeto de error se lanza a una declaración que incluya la opción NO-ERROR, la información y los mensajes en el objeto de error se utilizarán para establecer el identificador del sistema ERROR STATUS. Esta característica de interoperabilidad es importante para aquellos código integradora que utiliza la técnica de NO-ERROR tradicional con el más nuevo, el control de errores estructurado que cuenta con objetos de error y bloques extremos CATCH.

record

El nombre del búfer de registro con los campos establecidos, a partir de los valores correspondientes en el búfer de pantalla. El nombramiento de un disco es una forma abreviada de la lista de cada campo de dicho registro de forma individual.

Para utilizar ASSIGN con un registro de una tabla definida para múltiples bases de datos, es posible que tenga que calificar el nombre de la tabla de registro con el nombre de la base de datos. Consulte la frase Registro de entrada de referencia para más información.

EXCEPTO field

Todos los campos en el búfer de registro están afectados a excepción de los enumerados. Nombres de campo con un espacio.

Ejemplos

El siguiente procedimiento le pide un número de cliente y recupera el registro del cliente, si existe, o crea uno nuevo si no existe. Si se crea un nuevo registro, el valor de la CustNum campo se asigna a partir del valor que ha introducido en respuesta a la declaración PROMPT-FOR.

R-asgn.p

REPETIR: PROMPT-PARA Customer.CustNum. ENCONTRAR Cliente USO Customer.CustNum NO-ERROR. Si no está disponible al cliente ENTONCES HACER: CREAR Cliente. ASIGNAR Customer.CustNum. END. ACTUALIZAR Cliente CON 2 COLUMNAS. END.

El siguiente procedimiento cambia el número de pedido y la línea número de un registro de pedido en línea. (Se copia una línea de pedido de un orden a otro.) Establece los nuevos valores en variables y modifica el registro con una sola instrucción ASSIGN que contiene dos frases de asignación en forma field = expression . Por lo tanto, ambos campos se cambian en una sola sentencia.Debido a que la MAV registros re-índices al final de cualquier declaración que cambia un valor de campo de índice, y porqueOrderLine.OrderNum y OrderLine.LineNum se utilizan de forma conjunta en un solo índice, esta técnica no genera un índice hasta que ambos valores cambian.

R-asgn2.p

DEFINE neword VARIABLE COMO orden line.order-num ETIQUETA "Nuevo Orden". DEFINE newordli VARIABLE COMO orden line.line-num ETIQUETA "New Order Line". REPETIR: PROMPT-PARA OrderLine.OrderNum OrderLine.LineNum. ENCONTRAR OrderLine USO OrderLine.OrderNum Y OrderLine.LineNum. SET newordli neword. ENCONTRAR Orden DONDE Order.OrderNum = neword. ASIGNAR OrderLine.OrderNum = neword OrderLine.LineNum = newordli. END.

Notas

Si field es un entero y expression es un decimal, la AVM redondea el valor de la expresión antes de asignarlo. Si field es un decimal y expression es un decimal, la AVM redondea el valor de la expresión para el número de decimales definidos para el campo en el diccionario de datos, o definidas o implícitas para un campo o variable temp-mesa.

Si field es un tipo de matriz ABL (definida con MEDIDA EN) y expression no es una matriz, y no a identificar un elemento concreto de la matriz, la tiendas de AVM expression en cada elemento de la matriz. Si usted identifica un elemento en particular, la tiendas de AVM expression en el elemento especificado de la matriz.

Si tanto field y expression son los tipos de matriz ABL, las copias AVM los datos de todos expression elementos de la matriz en los elementos correspondientes del field array. Esto se conoce como una copia en profundidad.

Una serie indeterminada es aquella en que el tamaño de la medida aún no es fijo. Una matriz determinada es uno en el que se fija el tamaño de extensión. Al copiar profunda una matriz a otra, se aplican las siguientes reglas:

o Si tanto la matriz en el lado izquierdo y el lado derecho de la ecuación son determinadas matrices, el tamaño de la extensión debe coincidir o el AVM genera un error.

o No se puede asignar un conjunto indeterminado de una matriz determinada.

o Puede asignar cualquier matriz a una matriz indeterminada, pero no se puede asignar un valor escalar a una serie indeterminada.

ABL le permite asignar arrays ABL y. NET array de objetos entre sí. ¿Cómo funciona un trabajo conjunto entre el ABL y. NET arrays depende del tipo de matriz de field (el destino de la asignación) y el tipo de matriz de expression (la fuente de la asignación).Para obtener más información, vea los tipos de datos de referencia de entrada.

Si expression es un objeto basado en la manija de ABL (por ejemplo, una temperatura de-mesa, ProDataSet, widget o socket),field debe ser un ámbito temporal de la tabla, variable, o cualquier otro elemento de datos ABL definido como un mango

Page 3: Guía Arquitecto OpenEdge

compatible. En este caso, la MAV asigna sólo el identificador del objeto basado en la manija ABL a field , no todo el objeto y su contenido.

Si cualquier field es un campo de un registro de base de datos, la declaración ASSIGN actualiza el estado de bloqueo de registro a EXCLUSIVA-LOCK antes de actualizar el registro.

Si algún field es parte de un registro obtenido con una lista de campos, la declaración ASSIGN relee el expediente completo antes de actualizarlo.

Si field es un mango, la expression en la mano del lado derecho de la asignación correspondiente también debe evaluarse como un valor de identificador que se especifica el uso de una referencia adecuada a un mango de objetos basado en la manija.Para obtener más información sobre los objetos referencias mango, consulte la sección "Atributos y métodos de referencia de la manija" .

Durante la entrada de datos, una expresión de validación definida para el campo en la base de datos o en una frase Formato ejecuta sólo si el widget asociado con el campo recibe el foco de entrada. Utilice el método de validación () para ejecutar una expresión de validación definido para un campo independientemente de si se recibe el foco de entrada o no.

Utilice una sentencia ASSIGN después de una instrucción PROMPT-FOR o escribir cambia de un campo habilitado a la base de datos. ASIGNAR mueve el valor de la memoria tampón de pantalla en el campo o variable.

Utilice la sentencia PROMPT-DE para recibir uno o más campos de índice de usuario, y se utiliza la instrucción FIND para encontrar un registro que coincida con los valores de índice. Si no se encuentra ningún registro, utilice la sentencia CREATE para crear un nuevo disco y utilizar la instrucción ASSIGN para asignar los valores que el usuario que se proporciona al nuevo registro.

No se puede utilizar la sentencia SET en lugar de la declaración PROMPT-FOR. La sentencia SET pide al usuario la entrada y luego asigna esa entrada al registro en el búfer. Sin embargo, si no hay un registro disponible, SET no puede asignar los valores.

ASIGNAR no se mueve datos en un campo o variable si no hay datos en el campo de pantalla correspondiente. Hay datos en un campo de pantalla si un despliegue de campo se realizó o si los datos se introducen en el campo. Si le solicitan-para un campo o una variable que no ha sido representada en el marco e introducir espacios en blanco, la AVM no cambia el campo o variable, ya que considera que el campo de pantalla cambia sólo si el contador se distingue de lo que había en el campo.

Si una sentencia ASSIGN referencia a un campo o variable que se utiliza en más de una trama, se utiliza el valor en el marco de más reciente introducción en el procedimiento.

Si escribe los espacios en blanco en un campo que nunca ha mostrado los datos, la función devuelve FALSE ENTRADO y la instrucción SET o ASSIGN no actualiza el campo o variable subyacente. Además, si el AVM marca un campo tal como se escribió, y la declaración PROMPT-DE solicita el campo otra vez y no se introduce ningún dato, la AVM ya no considera el campo entró.

Si utiliza un único identificador, calificado con la declaración ASSIGN, el compilador interpreta la referencia como dbname.filename. Si el compilador no puede resolver la referencia como dbname.filename , trata de resolverlo lo filename.fieldname .

Muchas asignaciones dentro de una única instrucción ASSIGN son más eficientes que las múltiples declaraciones ASSIGN. Se ahorra el tamaño de código r y mejora el rendimiento.

La declaración ASSIGN, cuando se utilizan en campos de bases de datos, las causas ASSIGN base de datos todos relacionados dispara a ejecutar en el orden en que fueron asignados los campos. El ASSIGN desencadena después de ejecutar todas las tareas se han llevado a cabo. Si un disparador ASSIGN falla (o se ejecuta una instrucción RETURN con la opción ERROR), todos los cambios de base de datos se deshacen.

Puede asignar datos de objetos grandes desde una BLOB o memptr a otro, y de un CLOB, LongChar o personaje a otro. No se puede asignar datos de objetos grandes entre BLOB y CLOB o MEMPTRs y LONGCHARs. Puede llevar a cabo, de forma indirecta, mediante la instrucción COPY-LOB. Para obtener más información, consulte la sentencia COPY-LOB entrada de referencia.

Tabla 9 enumera las conversiones de caracteres por defecto que el AVM realiza al asignar CLOB, LongChar y datos de caracteres.Las referencias a CLOBCP y CLOBDB representan datos CLOB en cualquiera de las páginas del CLOB definido el código o la página de códigos de la base de datos definida, respectivamente. Las referencias a la "página de códigos fijo" representan la página de códigos de un objetivo LongChar variable establecida mediante la instrucción FIX-CODEPAGE.

Tabla 9: conversiones de caracteres por defecto con la declaración ASSIGN

Cuando el campo de destino es un archivo. ..

Y la expresión de origen se traduce en una. . .

El AVM convierte el resultado de la expresión de origen a. . .

LongChar CLOBDB -cpinternal o la página de códigos fijo

LongChar CLOBCP Página de códigos definido del CLOB o la página de códigos fijo

LongChar PERSONAJES -cpinternal o la página de códigos fijo

CLOBDB PERSONAJES Página de códigos definidos de la base de datos

CLOBDB LongChar Página de códigos definidos de la base de datos

CLOBCP PERSONAJES Página de códigos definido del CLOB

CLOBCP LongChar Página de códigos definido del CLOB

PERSONAJES CLOBDB -cpinternal página de códigos

PERSONAJES CLOBCP -cpinternal página de códigos

Page 4: Guía Arquitecto OpenEdge

PERSONAJES LongChar -cpinternal página de códigos

Cuando se asigna el valor desconocido ( ? ) a un campo BLOB o CLOB, el AVM elimina los datos de los objetos asociados.

Puede asignar DATE, DATETIME, y los datos DATETIME-TZ. Cuando la expresión de tipo de datos en el lado izquierdo de la instrucción de asignación contiene más información que la expresión de tipo de datos en el lado derecho proporciona (por ejemplo, datetime-tz = date en que un valor DATETIME-TZ contiene más información que un valor DATE), el valor del tiempo por defecto para la medianoche y el valor del tiempo de zona por defecto es la zona horaria de la sesión. Cuando la expresión tipo de datos en el lado izquierdo de la instrucción de asignación contiene menos información que la expresión tipo de datos en el lado derecho proporciona (por ejemplo, date = datetime-tz en que un valor DATE contiene menos información que un valor DATETIME-TZ), el AVM convierte el valor DATETIME-TZ de la fecha y la hora local de la sesión, luego cae la hora y la zona horaria.

Si expression es una invocación de aislamiento de la nueva función, esta función se comporta de acuerdo con las reglas especificadas para la nueva función (clases) cuando no operan en el contexto de una nueva declaración .

Si expression se evalúa como un valor de referencia de objeto, field también debe ser un elemento de datos se define como un tipo de clase o interfaz que es compatible con el tipo expression de acuerdo con las reglas para la asignación de referencias a instancias de clases definidas por la nueva declaración. Para obtener más información, consulte la declaración NUEVA entrada de referencia. Por lo tanto, se puede asignar una variable de referencia de objeto a otra variable de referencia de objeto cuando la referencia de objeto de destino (en el lado izquierdo de la asignación) se define por la misma clase, un superclase, o un interfaz de la referencia de objeto está asignando (en el lado derecho de la asignación). La referencia a un objeto de destino conserva su clase o interfaz tipo definido para la compilación. Sin embargo, después de su asignación, en tiempo de ejecución, el destino representa la subclase de field (o la clase que implementa la interfaz especificada por el field ) que se define por expression.

Si field tiene un tipo de clase que es una subclase más bajo en la jerarquía de clases que el tipo de clase representado porexpression , puede convertir expression al tipo de field se utiliza la función CAST, pero sólo si expression es un super clase que en realidad contiene una instancia del field tipo de clase. Si field tiene un tipo de clase que implementa una interfaz de tipo representado por expression , puede convertir de manera similar expression utilizando la función CAST, pero sólo siexpression contiene en realidad una instancia del field tipo de clase. Para obtener más información acerca de la función CAST, consulte la función CAST entrada de referencia.

Después de la asignación, field contiene una copia del valor de referencia de objeto devuelto por expression , que apunta a la misma instancia de objeto, no una copia del objeto al que hace referencia expression .

Aunque puede asignar una referencia de objeto a un campo temporal de la tabla se define como una clase Progress.Lang.Objecttipo, no se puede asignar una referencia de objeto a un campo de una tabla de base de datos. Para obtener más información, consulte Desarrollo OpenEdge: Programación orientada a objetos.

Ver también

Asignación declaración (=) , función CAST , referencia de objeto Clasista , método COPY-conjunto de datos () , sentencia COPY-LOB , método COPY-TEMP-MESA () , tipos de datos , Expresión , FIX-CODEPAGE declaración , función de entrada , PROMPT -FOR ,instrucción SET , UPDATE

   

http://documentation.progress.com/infocenter/openedge_architect/10.2B/index.jsp?topic=/com.openedge.pdt.langref.help/html_langref/langref-05-07.html

OpenEdge 10.2B estrenoCopyright © 2009 Progress Software

Corporation