Datavalideringshendelser i Hendelser-eksempelskjemaet for utviklere
Hendelser-eksempelskjemaet for utviklere inkluderer mange forskjellige Microsoft Office InfoPath 2003-datavalideringshendelser som kan brukes til å validere data som er angitt i et skjema. Datavalideringshendelser kan skje etter at et felt eller en gruppe har blitt endret, etter at et felt eller en gruppe har blitt endret, men før dataene er utført, og etter at et felt eller en gruppe har blitt endret, og etter at dataene er utført.
Hvis du vil bruke en av datavalideringshendelsene, må du først opprette hendelsen i dialogboksen Egenskaper for felt eller gruppe som er tilgjengelig i Datakilde- oppgaveruten. Når du skal åpne denne dialogboksen, høyreklikker du et av feltene eller en av gruppene i oppgaveruten, og deretter klikker du Egenskaper. Velg hendelsen du vil opprette, i kategorien Validering og skript, og klikk deretter Rediger. Dette gjør at Microsoft Skriptredigering åpnes. Her vises den InfoPath-genererte hendelsesbehandlingen.
Obs! Hendelsesbehandling i InfoPath må opprettes i utformingsmodus.
I tabellen nedenfor vises hver av datavalideringshendelsene som er inkludert i Hendelser-eksempelskjemaet for utviklere, sammen med en beskrivelse over hvordan de brukes.
Hendelse | Beskrivelse |
---|---|
OnValidate | Brukes til å validere dataene i ContactDates-gruppen. Når denne hendelsen skjer, brukes skriptkode til å bekrefte at datoene som brukes, er innen et angitt område. |
OnBeforeChange | Brukes til å validere dataene i datofeltene Start for e-post-kampanje, Start for telefonkontakt og Besøk fra representant. Når denne hendelsen skjer, brukes skriptkode til å implementere bedriftslogistikk som kontrollerer om bestemte datoer eksisterer før andre kan angis eller fjernes. |
OnAfterChange | Brukes til å kalle opp en funksjon som beregner de totale kampanjekostnadene og oppdaterer Kampanjekostnad-feltet. |
OnValidate-hendelsen inntreffer etter at et felt har blitt endret. Når en bruker endrer et felt og deretter går ut av feltet, kan OnValidate-hendelsen validere dataene brukeren angav.
I Hendelser-eksempelskjemaet for utviklere validerer OnValidate-hendelsen dataene som angis i ContactDates-gruppen, som inkluderer datofeltene Start for e-post-kampanje, Start for telefonkontakt og Besøk fra representant. Når en bruker angir en dato i et av disse feltene, enten ved å skrive den inn eller bruke Datovelger-kontrollen, inntreffer OnValidate-hendelsen, og skriptkoden den inneholder, bekrefter at de angitte datoene ikke overskrider et angitt intervall. Hvis de overskrider det angitte intervallet, brukes ReportError-metoden for DataDOMEvent-objektet, som er eventObj-argumentet som sendes til hendelsesbehandlingen, til å gi melding til brukeren. Følgende eksempel fra Hendelser-eksempelskjemaet for utviklere viser OnValidate-hendelsesbehandlingen:
function msoxd__ContactDates::OnValidate(eventObj)
{
var iNumberOfDays = 0;
var objEmailDate = XDocument.DOM.selectSingleNode
('/Customers/CustomerInfo/ContactDates/EmailCampaignDt');
var objPhoneContactDate = XDocument.DOM.selectSingleNode
('/Customers/CustomerInfo/ContactDates/PhoneContactDt');
var objRepVisitDate = XDocument.DOM.selectSingleNode
('/Customers/CustomerInfo/ContactDates/RepVisitDt');
// First validate the email and phone contact dates.
if (!objEmailDate || !objPhoneContactDate)
return;
var emailDate = new Date(Application.FormatString
(objEmailDate, "date", "dateFormat:MM-dd-yyyy"));
var phoneContactDate = new Date(Application.FormatString
(objPhoneContactDate, "date", "dateFormat:MM-dd-yyyy"));
if (isNaN(emailDate) || isNaN(phoneContactDate))
return;
// Get the number of days between the two dates.
iNumberOfDays = GetElapsedDays(emailDate, phoneContactDate);
if (iNumberOfDays < REQUIRED_PHONE_EMAIL_INTERVAL)
eventObj.ReportError(objPhoneContactDate,
"The Phone Contact Start date must occur after " +
REQUIRED_PHONE_EMAIL_INTERVAL +
" days from the start of the Email Campaign.", false);
// Now validate the phone contact and rep visit dates.
if (!objRepVisitDate)
return;
var repVisitDate = new Date(Application.FormatString
(objRepVisitDate, "date", "dateFormat:MM-dd-yyyy"));
if (isNaN(repVisitDate))
return;
// Get the number of days between the two dates.
iNumberOfDays = GetElapsedDays(phoneContactDate, repVisitDate);
if (iNumberOfDays < REQUIRED_REPVISIT_PHONE_INTERVAL)
eventObj.ReportError(objRepVisitDate,
"The Representative Visit date must occur after " +
REQUIRED_REPVISIT_PHONE_INTERVAL +
" days from the start of the Phone Campaign.", false);
// And finally, the email and rep dates.
// Now check the Email Campaign start.
iNumberOfDays = GetElapsedDays(emailDate, repVisitDate);
if (iNumberOfDays > REQUIRED_REPVISIT_EMAIL_INTERVAL)
eventObj.ReportError(objRepVisitDate,
"The Representative Visit date cannot occur later than
Email Campaign Start date plus " +
REQUIRED_REPVISIT_EMAIL_INTERVAL + " days.", false);
}
Bruke OnBeforeChange-hendelsen
OnBeforeChange-hendelsen inntreffer etter at et felt har blitt endret, men før endringen har blitt utført. Når en bruker endrer et felt og deretter går ut av feltet, kan OnBeforeChange-hendelsen validere dataene brukeren angav, og forkaste endringen før den er utført.
I Hendelser-eksempelskjemaet for utviklere validerer OnBeforeChange-hendelsen dataene som angis i datofeltene Start for e-post-kampanje, Start for telefonkontakt og Besøk fra representant. Når en bruker angir en dato i et av disse feltene, enten ved å skrive den inn eller bruke Datovelger-kontrollen, inntreffer OnBeforeChange-hendelsen, og skriptkoden den inneholder, bekrefter at de angitte eller fjernede datoene er i riktig rekkefølge. Hvis de ikke er angitt i riktig rekkefølge, brukes ReturnMessage-egenskapen for DataDOMEvent-objektet, som er eventObj-argumentet som sendes til hendelsesbehandlingen, til å angi teksten som skal vises for brukeren, og ReturnStatus-egenskapen brukes til å angi at endringen ikke vil bli godtatt. Følgende eksempel fra Hendelser-eksempelskjemaet for utviklere viser OnBeforeChange-hendelsesbehandlingen for datofeltet Start for e-post-kampanje:
function msoxd__EmailCampaignDt::OnBeforeChange(eventObj)
{
// Ensure that the Phone Contact Date is not filled in already.
if (XDocument.DOM
.selectSingleNode('/Customers/CustomerInfo/ContactDates/EmailCampaignDt')
.text == "" && XDocument.DOM
.selectSingleNode('/Customers/CustomerInfo/ContactDates/PhoneContactDt')
.text != "")
{
eventObj.ReturnMessage = "Because you have entered a Phone Contact
Start date, the Email Contact Start date information cannot be removed.";
eventObj.ReturnStatus = false;
return;
}
}
OnAfterChange-hendelsen inntreffer etter at et felt har blitt endret, og etter at endringen har blitt utført. Når en bruker endrer et felt og deretter går ut av feltet, kan OnAfterChange-hendelsen validere dataene brukeren angav, eller kalle opp andre andre funksjoner som kan brukes til å oppdatere andre felt i skjemaet.
I Hendelser-eksempelskjemaet for utviklere brukes OnAfterChange-hendelsen til å kalle opp funksjonen CalculateTotalCampaignCost. Når en bruker angir en dato i et av datofeltene, enten ved å skrive den inn eller bruke Datovelger-kontrollen, og dataene er utført, inntreffer OnAfterChange-hendelsen, og skriptkoden den inneholder, kaller opp funksjonen CalculateTotalCampaignCost, som beregner de totale kampanjekostnadene og oppdaterer Kampanjekostnad-feltet. Følgende eksempel fra Hendelser-eksempelskjemaet for utviklere viser OnAfterChange-hendelsesbehandlingen for datofeltet Start for telefonkontakt:
function msoxd__ContactDates::OnAfterChange(eventObj)
{
if (eventObj.IsUndoRedo)
{
// An undo or redo operation has occurred and the DOM is read-only.
return;
}
CalculateTotalCampaignCost();
}
Obs! if-setningen som brukes til å kontrollere IsUndoRedo-egenskapen for DataDOMEvent-objektet, som er eventObj-argumentet som sendes til hendelsesbehandling, genereres automatisk i InfoPath når OnAfterChange-hendelsesbehandlingen opprettes. Denne setningen kan brukes til å håndtere et tilfelle der OnAfterChange-hendelsen inntreffer som et resultat av en angring eller omgjøring.