_DataDOMEventSink_Event.OnBeforeChange event

Occurs after changes to a form's underlying XML document have been made but before the changes are accepted.

Namespace:  Microsoft.Office.Interop.InfoPath.SemiTrust
Assembly:  Microsoft.Office.Interop.InfoPath.SemiTrust (in Microsoft.Office.Interop.InfoPath.SemiTrust.dll)

Syntax

'Declaration
Event OnBeforeChange As _DataDOMEventSink_OnBeforeChangeEventHandler
'Usage
Dim instance As _DataDOMEventSink_Event
Dim handler As _DataDOMEventSink_OnBeforeChangeEventHandler

AddHandler instance.OnBeforeChange, handler
event _DataDOMEventSink_OnBeforeChangeEventHandler OnBeforeChange

Remarks

This event handler allows users to cancel a DataDOM operation.

During the OnBeforeChange event, the form's underlying XML document is placed in read-only mode. If the ReturnStatus property of the DataDOMEventObject object is set to false, Microsoft InfoPath rejects the changes that were made and a message box is displayed to the user. If an error occurs in the code for the OnBeforeChange event, InfoPath rejects the changes and restores the data to its previous state.

Note

It is best to avoid switching views during the OnBeforeChange event; changes have not yet been accepted, and switching to another view may result in an error.

Note

In some cases, events related to changes in a form's underlying XML document may occur more than once. For example, when existing data is changed, an insert and delete operation occurs.

Note

If a validation error is encountered in the OnBeforeChange event, the document fails to load. A try/catch block in the OnLoad event can be used to catch this validation failure and to load the document despite the error.

Examples

In the following example, the OnBeforeChange event handler is used to validate the data in a field. If the data is not valid, the ReturnStatus property of the DataDOMEventObject object is used to reject the changes.

[InfoPathEventHandler(MatchPath="/Customers/Customer/RepVisitDt", EventType=InfoPathEventType.OnBeforeChange)]
public void RepVisitDt_OnBeforeChange(DataDOMEvent e)
{
 IXMLDOMNode phone = thisXDocument.DOM.selectSingleNode    (@"/Customers/CustomerInfo/ContactDates/PhoneContactDt");
 if (phone.text == "")
 {
  e.ReturnMessage = "The Phone Contact Start date must be set prior to the Representative Visit date.";
  e.ReturnStatus = false;
  return;
 }
 // If the data is valid, eventObj.ReturnStatus = true.
 e.ReturnStatus = true;
 return;
}

See also

Reference

_DataDOMEventSink_Event interface

_DataDOMEventSink_Event members

Microsoft.Office.Interop.InfoPath.SemiTrust namespace