Código de datos modificados y propiedad modified

Cada elemento 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 elemento de formulario cuando el formulario se presentó por última vez. En relación con CICS, una ventaja del código de datos modificados es que el tráfico de red es menor ya que la transferencia de datos desde el usuario al programa sólo incluye los elementos que se considera que están modificados por el usuario.

Como se describe más adelante, el código de datos modificados de un elemento es distinto de la propiedad modified, 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 elemento 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 elemento es )
  • Detectar que el usuario ha modificado el elemento (por ejemplo, utilizando una sentencia condicional del tipo if item modified)

El usuario establece el código de datos modificados escribiendo un carácter en el elemento 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 elemento 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 item modified. El resultado es que cuando se presenta el formulario, el código de datos modificados del elemento está preestablecido en .
  • En la declaración de formulario, establezca la propiedad modified del elemento en . En este caso, se aplican las siguientes normas:
    • Cuando el formulario se presenta por primera vez, el código de datos modificados del elemento 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 item initial, que vuelve a asignar el contenido y los valores de propiedad originales del elemento; o bien
      • El código ejecuta una sentencia del tipo set item initialAttributes, que vuelve a asignar los valores de propiedad originales (pero no el contenido) de cada elemento 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 elemento 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 elemento 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 if item modified 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. Si intenta probar el código de datos modificados de un elemento 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 elemento, asegúrese de que el valor del código de datos modificados del elemento esté preestablecido en no:
  • Si la propiedad modified del elemento está establecida en no en la declaración de formulario, no utilice una sentencia del tipo set item 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 elemento está establecida en en la declaración de formulario, utilice una sentencia del tipo set item 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 elemento 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 elementos 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 item01 está establecida en no
  • La propiedad modified para el campo item02 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 (item01 is modified)
    ;
  end

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

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

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

  // establece la propiedad modified en no 
  // en la siguiente sentencia converse para el formulario 
  set item01 initialAttributes;
  
  // establece la propiedad modified en sí 
  // en la siguiente sentencia converse para el formulario 
  set item02 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 (item01 is modified)
    ;
  end

  // supongamos que el usuario no modifica ninguno de los dos elementos
  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 (item01 is modified)
    ;
  end

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

  // el resultado de la prueba es false
  if (item01 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 elemento en sus valores iniciales
  if (item02 is modified)
    ;
  end
Condiciones de uso | Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.