Código de datos modificados y propiedad modified

Cada campo de un formulario de texto tiene un código de datos modificados, que es un valor de estado que indica si se considera que el usuario ha cambiado el campo de formulario cuando el formulario se presentó por última vez.

Como se describe más adelante, el código de datos modificados de un campo es distinto de la propiedad modified del campo, que está establecida en el programa y que preestablece el valor del código de datos modificados.

Interacción con el usuario

En la mayoría de casos, el código de datos modificados está preestablecido en no cuando el programa presenta el formulario al usuario; a continuación, si el usuario cambia los datos en el campo de formulario, el código de datos modificados se establece en , y la lógica del programa puede realizar lo siguiente:
  • Utilizar una función o tabla de datos para validar los datos modificados (como ocurre automáticamente cuando el código de datos modificados del campo es )
  • Detectar que el usuario modificó el campo incluyendo el nombre del campo en una sentencia if estructurada de la forma siguiente:
      if (field is modified)
        ;
      end
    Para obtener detalles, consulte el apartado Expresiones lógicas.

El usuario establece el código de datos modificados escribiendo un carácter en el campo o bien suprimiendo un carácter. El código de datos modificados permanece establecido, incluso si el usuario, antes de enviar el formulario, devuelve el contenido del campo al valor que se ha presentado.

Cuando vuelve a visualizarse un formulario debido a un error, el formulario sigue procesando la misma sentencia converse. Como resultado, los campos que se modificaron en converse tienen el código de datos modificado establecido en al volver a visualizarse el formulario. Por ejemplo, si se entran datos en un campo que tiene una función de validador, la función puede invocar a la función ConverseLib.validationFailed para establecer un mensaje de error y provocar que vuelva a visualizarse el formulario. En este caso, cuando se pulse una tecla de acción, la función de validador volverá a ejecutarse ya que el código de datos modificado del campo sigue establecido en .

Establecer la propiedad modified

Es posible que desee que el programa realice una tarea independientemente de si el usuario ha modificado un determinado campo; por ejemplo:
  • Es posible que desee forzar la validación de un campo de contraseña aunque el usuario no haya introducido datos en dicho campo
  • Puede especificar una función de validación para un campo de gran importancia (incluso para un campo protegido) de modo que el programa realice siempre una determinada validación entre campos, lo que significa que la lógica del programa valida un grupo de campos y considera cómo el valor de un campo afecta a la validez de otro.
Para manejar los casos anteriores, puede establecer la propiedad modified de un determinado campo en la lógica del programa o en la declaración de formulario:
  • En la lógica que precede a la presentación del formulario, incluya una sentencia del tipo set field modified. El resultado es que cuando se presenta el formulario, el código de datos modificados del campo está preestablecido en .
  • En la declaración de formulario, establezca la propiedad modified del campo en . En este caso, se aplican las siguientes normas:
    • Cuando el formulario se presenta por primera vez, el código de datos modificados del campo está preestablecido en .
    • Si se produce alguna de las siguientes situaciones antes de que se presente el formulario, el código de datos modificados está preestablecido en cuando se presenta el formulario:
      • El código ejecuta una sentencia del tipo set field initial, que vuelve a asignar el contenido y los valores de propiedad originales del campo; o bien
      • El código ejecuta una sentencia del tipo set field initialAttributes, que vuelve a asignar los valores de propiedad originales (pero no el contenido) de cada campo del formulario; o bien
      • El código ejecuta una sentencia del tipo set form initial, que vuelve a asignar el contenido y los valores de propiedad originales de cada campo del formulario; o bien
      • El código ejecuta una sentencia del tipo set form initialAttributes, que vuelve a asignar los valores de propiedad originales (pero no el contenido) de cada campo del formulario
Las sentencias set afectan al valor de la propiedad modified, no al valor actual del código de datos modificados. Una prueba del tipo siguiente se basa en el valor del código de datos modificados que estaba en vigor cuando los datos de formulario se devolvieron por última vez al programa:
  if (field is modified)
    ;
  end
Si intenta probar el código de datos modificados de un campo antes de que la lógica presente el formulario por primera vez, se produce un error durante la ejecución.
En caso de que necesite detectar si el usuario (y no el programa) ha modificado un campo, asegúrese de que el valor del código de datos modificados del campo esté preestablecido en no:
  • Si la propiedad modified del campo está establecida en no en la declaración de formulario, no utilice una sentencia del tipo set field modified. En ausencia de esta sentencia, la propiedad modified se establece automáticamente en no antes de cada presentación de formulario.
  • Si la propiedad modified del campo está establecida en en la declaración de formulario, utilice una sentencia del tipo set field normal en la lógica que precede a la presentación de formulario. Esta sentencia establece la propiedad modified en no y (como resultado secundario) presenta el campo como no protegido, con intensidad normal.

Probar si el formulario está modificado

Se considera que el formulario en su conjunto está modificado si el código de datos modificados está establecido en para alguno de los campos variables de formulario. Si prueba el estado de modificación de un formulario que todavía no se ha presentado al usuario, el resultado de la prueba es FALSE.

Ejemplos

Supongamos los siguientes valores en el formulario form01:
  • La propiedad modified para el campo field01 está establecida en no
  • La propiedad modified para el campo field02 está establecida en

La lógica siguiente muestra el resultado de varias pruebas:

  // el resultado de la prueba es false porque no se ha 
  // ejecutado una sentencia converse para el formulario
  if (form01 is modified)
    ;
  end

  // produce un error de entorno de ejecución porque no se ha
  // ejecutado una sentencia converse para el formulario
  if (field01 is modified)
    ;
  end

  // supongamos que el usuario modifica ambos campos
  converse form01;

  // el resultado de la prueba es true
  if (field01 is modified)
    ;
  end

  // el resultado de la prueba es true
  if (field02 is modified)
    ;
  end

  // establece la propiedad modified en no 
  // en la siguiente sentencia converse para el formulario 
  set field01 initialAttributes;
  
  // establece la propiedad modified en sí 
  // en la siguiente sentencia converse para el formulario 
  set field02 initialAttributes;

  // el resultado de la prueba es true 
  // (la sentencia establecida anteriormente sólo se aplica
  // en la siguiente sentencia converse para el formulario
  if (field01 is modified)
    ;
  end

  // supongamos que el usuario no modifica ninguno de los dos campos
  converse form01;

  // el resultado de la prueba es false porque el programa ha establecido 
  // el código de datos modificados en no y el usuario no ha introducido datos 
  if (field01 is modified)
    ;
  end

  // el resultado de la prueba es true porque el programa ha establecido 
  // el código de datos modificados en sí
  if (field02 is modified)
    ;
  end
  
  // supongamos que el usuario no modifica ninguno de los dos campos
  converse form01;

  // el resultado de la prueba es false
  if (field01 is modified)
    ;
  end

  // el resultado de la prueba es false porque la presentación
  // no era la primera y el programa no ha restablecido las
  // propiedades de campo en sus valores iniciales
  if (field02 is modified)
    ;
  end

Consulta relacionada
Expresiones lógicas

Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.