- eventi del form
- eventi del datasource di un form
- eventi di un controllo specifico di un form
Li riporto come dal sito segnalato:
Form datasource from xFormRun
[FormEventHandler(formStr(SomeForm), FormEventType::Initialized)] public static void SomeForm_OnInitialized(xFormRun sender, FormEventArgs e) { FormDataSource MyRandomTable_ds = sender.dataSource(formDataSourceStr(SomeForm, MyRandomTableDS)); ... }
Get FormRun from form datasource
[FormDataSourceEventHandler(formDataSourceStr(MyForm, MyRandomTableDS), FormDataSourceEventType::Written)] public static void MyRandomTableDS_OnWritten(FormDataSource sender, FormDataSourceEventArgs e) { FormRun formRun = sender.formRun() as FormRun; // you can even call custom methods (I think IntelliSense won't work though) formRun.myCustomMethod(); }
Get FormRun from form control
[FormControlEventHandler(formControlStr(MyForm, MyButton), FormControlEventType::Clicked)] public static void MyButton_OnClicked(FormControl sender, FormControlEventArgs e) { FormRun formRun = sender.formRun() as FormRun; formRun.myCustomMethod(); }
Access form control from xFormRun
[FormEventHandler(formStr(SomeForm), FormEventType::Initialized)] public static void SomeForm_OnInitialized(xFormRun sender, FormEventArgs e) { // set the control to invisible as an example sender.design().controlName(formControlStr(SomeForm, MyControl)).visible(false); }
Get current record in form control event
[FormControlEventHandler(formControlStr(SomeForm, SomeButton), FormControlEventType::Clicked)] public static void SomeButton_OnClicked(FormControl sender, FormControlEventArgs e) { // as an example the datasource number is used for access; I perceive the formDataSourceStr as more robust SomeTable callerRec = sender.formRun().dataSource(1).cursor(); }
Convert Common and use DataEventArgs
[DataEventHandler(tableStr(AnyTable), DataEventType::ValidatedWrite)] public static void InventLocation_onValidatedWrite(Common sender, DataEventArgs e) { // convert Common to AnyTable AnyTable anyTable = sender; // the DataEventArgs actually are ValidateEventArgs and can be converted ValidateEventArgs validateEventArgs = e; // the ValidateEventArgs carry the validation result (so far) boolean ret = validateEventArgs.parmValidateResult(); // the table has some additional validation logic and gives back the result ret = anyTable.doSomeAdditionalCustomValidation(ret); // provide the args with the validation result validateEventArgs.parmValidateResult(ret); }
Use the onValidatedFieldValue event properly
[DataEventHandler(tableStr(SomeTable), DataEventType::ValidatedFieldValue)] public static void SomeTable_onValidatedFieldValue(Common sender, DataEventArgs e) { SomeTable someTable = sender; // the clue is to know that the DataEventArgs actually are ValidateFieldValueEventArgs and that you can get the field name from them ValidateFieldValueEventArgs validateEventArgs = e; boolean ret = validateEventArgs.parmValidateResult(); FieldName fieldName = validateEventArgs.parmFieldName(); switch (fieldName) { case fieldStr(SomeTable, SomeCustomField): ... do some magic break; } validateEventArgs.parmValidateResult(ret); }
Use the MappedEntityToDataSource event
[DataEventHandler(tableStr(MyTableEntity), DataEventType::MappedEntityToDataSource)] public static void MyTableEntity_onMappedEntityToDataSource(Common _sender, DataEventArgs _eventArgs) { DataEntityContextEventArgs eventArgs = _eventArgs; MyTableEntity entity = _sender; if (eventArgs.parmEntityDataSourceContext().name() == dataEntityDataSourceStr(MyTableEntity, MyTable)) { MyTable myTable = eventArgs.parmEntityDataSourceContext().getBuffer(); ... do some magic with it } }
Nessun commento:
Posta un commento