Cuando el usuario pulsa Borrar para eliminar el contenido no predeterminado del diseño de registro único, se ejecutará la función
clearAllFields.
La función configura el diseño de forma que cuando el usuario escribe datos y pulsa Guardar, los datos que se acaban de escribir actualizan una fila de la base de datos existente.
- Pulse la pestaña Código fuente.
- Busque la función clearAllFields y déjela como se indica a continuación:
function clearAllFields(event Event in)
saveID INT = selectedPayment.paymentID; // conservar la clave
selectedPayment = new PaymentRec{};
selectedPayment.paymentID = saveID;
selectedPayment_form.publish();
end
El código conserva la clave de registro para utilizarla en una actualización posterior de la base de datos.
A continuación, el código crea un registro, lo asigna a la variable selectedPayment, asigna el valor de clave guardado en esa
variable y publica la variable en el diseño de registro único.
- Complete la función que se ha invocado cuando el usuario pulsa Guardar:
- Busque la función, que se denomina selectedPayment_form_Submit.
- Deje la función tal como se indica a continuación:
function selectedPayment_form_Submit(event Event in)
selectedPayment_category_comboBox.value
= PaymentLib.getCategoryNum(selectedPayment_category_comboBox.value);
if (selectedPayment_form.isValid())
selectedPayment_form.commit();
selectedPayment_category_comboBox.value =
PaymentLib.getCategoryDesc(selectedPayment_category_comboBox.value);
// actualizar allPayments con la versión nueva de selectedPayment
for(i INT from 1 to allPayments.getSize())
if(allPayments[i].paymentID == selectedPayment.paymentID)
allPayments[i] = selectedPayment;
exit for;
end
end
call dbService.editPayment(selectedPayment)
returning to recordRevised
onException serviceLib.serviceExceptionHandler;
end
end
La cláusula siguiente busca la validez de copiar el contenido del widget en el campo relacionado:
if (selectedPayment_form.isValid())
Con el recuadro combinado Dojo se da un problema para Descripción, porque el contenido del
widget es del tipo STRING (serie) y el campo relacionado es selectedPayment.category, que es del tipo INT.
La validación del recuadro combinado Dojo requiere que el recuadro combinado incluya enteros o series como, por ejemplo,
“1” o “20,” que se puedan convertir a enteros.
Para resolver el problema, utilice el widget del recuadro combinado EGL o asegúrese de que el recuadro combinado
Dojo incluya un entero válido antes de la validación.
El código anterior muestra la segunda opción y comienza asignado el entero:
selectedPayment_category_comboBox.value
= PaymentLib.getCategoryNum(selectedPayment_category_comboBox.value);
La función, a partir de entonces, comprobará la validez de los datos en el diseño de registro único y, si los datos son válidos, hará lo que se indica a continuación:
- Confirmar los datos de validación en el registro selectedPayment.
Esta “confirmación” forma parte del proceso de MVC y no tiene nada que ver con una confirmación de la base de datos.
- Actualizar el recuadro combinado Dojo en el diseño de registro único de forma que el valor de este campo sea de nuevo una serie.
- Revisar el elemento de matriz allPayments que contiene el valor de clave guardado.
En este punto, el elemento de matriz incluye una copia de los datos que desea el usuario en la base de datos.
- Llamar al servicio para actualizar una sola fila de la base de datos.
La función de devolución de llamada relacionada asigna la matriz allPayments a la matriz de datos de la cuadrícula de datos y esta asignación vuelve a representar la cuadrícula con los datos actualizados.
La cuadrícula se volverá a representar con los datos asignado a la función selectedPayment_form_Submit, no con los datos recuperados de la base de datos.
- Guarde el archivo pero no lo cierre. Si detecta errores en el archivo de origen, compare el código con el contenido del archivo en Código finalizado para PaymentFileMaintenance.egl.