Skriptbasert validering i Datavalidering-eksempelskjemaet for utviklere
Skriptbasert validering angis i skriptfilen for bedriftslogistikk som er knyttet til et Microsoft Office InfoPath 2003-skjema, og det gir mer fleksibilitet enn egendefinert eller skjemabasert validering. Ved å bruke skriptbasert validering kan du angi når et felt skal valideres (for eksempel når brukeren skriver inn data i et felt for første gang, etter at brukeren går ut av et felt, eller etter at data er validert via skjemaet). Du kan også skrive skript som kjøres når et skjema åpnes, eller når brukeren bytter visninger. Skriptet du skriver, kan utføre mange forskjellige funksjoner, inkludert sammenligne felt, beregne verdier, vise feilmeldinger, oppdatere verdier og revidere andre felt.
Obs! InfoPath støtter skriving av skript i Microsoft VBScript og Microsoft JScript. Du kan imidlertid ikke blande skriptspråkene i ett enkelt skjema.
Når du skal opprette skriptbasert datavalidering, bruker du utformingsmodus i InfoPath til å opprette en hendelsesbehandling (kalles også en hendelsesfunksjon), og deretter skriver du skriptkode for hendelsesbehandlingen ved hjelp av Microsoft Skriptredigering. For hver hendelsesbehandling du oppretter, plasseres en oppføring i skjemadefinisjonsfilen (XSF-fil) som inneholder navnet på hendelsesbehandlingen og XML-noden Document Object Model (DOM) som er tilknyttet hendelsesbehandlingen.
Siden det er referert til hendelsesbehandlingen i XSF-filen, kan du ikke opprette en ny hendelsesbehandling helt fra Microsoft Skriptredigering – du må først opprette hendelsesbehandlingen i utformingsmodus i InfoPath. Siden InfoPath brukes til å opprette deklarasjonen av hendelsesbehandlingen, kan du ikke endre navnet eller argumentene for denne når den først har blitt opprettet.
Hendelsesbehandlinger i
skjemadefinisjonsfilen
I Datavalidering-eksempelskjemaet for utviklere opprettes et domEventHandler-element i domEventHandlers-inndelingen i XSF-filen for hver hendelsesbehandling. Nedenfor vises et eksempel på hendelsesbehandlinger opprettet i XSF-filen for Datavalidering-eksempelskjemaet for utviklere:
<xsf:domEventHandlers>
<xsf:domEventHandler handlerObject="msoxd__itemB_quantityListB"
match="/sampleData/listB/itemB/quantityListB">
</xsf:domEventHandler>
<xsf:domEventHandler handlerObject="msoxd__shippingDates"
match="/sampleData/shippingDates">
</xsf:domEventHandler>
<xsf:domEventHandler handlerObject="msoxd__total"
match="/sampleData/listB/total">
</xsf:domEventHandler>
<xsf:domEventHandler handlerObject="msoxd__creditLimit"
match="/sampleData/creditCardInfo/creditLimit">
</xsf:domEventHandler>
<xsf:domEventHandler handlerObject="msoxd__creditCardInfo"
match="/sampleData/creditCardInfo">
</xsf:domEventHandler>
</xsf:domEventHandlers>
Som vist i dette eksemplet ble det for hver hendelsesbehandling opprettet i utformingsmodus i InfoPath, opprettet et domEventHandler-element i XSF-filen. Hvert av disse elementene inneholder et handlerObject-attributt som angir navnet på hendelsesbehandlingen og et match-attributt som angir XML DOM-noden som er knyttet til hendelsesbehandlingen.
Vise hendelsesbehandlinger i
skjemadefinisjonsfilen
Hvis du vil vise hendelsesbehandlingene som ble brukt til å implementere de skriptbaserte valideringsbegrensningene i Datavalidering-eksempelskjemaet for utviklere, gjør du følgende:
- Åpne Datavalidering-eksempelskjemaet for utviklere i utformingsmodus.
- Hvis Datakilde-oppgaveruten ikke vises, klikker du Datakilde på Vis-menyen.
- I Datakilde-oppgaveruten høyreklikker du feltet du vil vise eller endre validering for, og deretter klikker du Egenskaper for å åpne dialogboksen Egenskaper for felt eller gruppe.
- Klikk kategorien Validering og skript.
- I Hendelser-boksen velger du hendelsen du vil redigere, og deretter klikker du Rediger for å åpne Microsoft Skriptredigering. Skriptkoden for den valgte hendelsen vises i koderedigeringsvinduet.
Obs! Selv om det er nødvendig å opprette hendelsesbehandlinger i utformingsmodus ved hjelp av disse trinnene, kan du, så snart du har opprettet en hendelsesbehandling, åpne Microsoft Skripteredigering fra InfoPath ved å klikke Verktøy-menyen, velge Skript og klikke Microsoft Skriptredigering eller ved å trykke ALT+SKIFT+F11.
Skriptbaserte hendelsesbehandlinger og funksjoner
I Datavalidering-eksempelskjemaet for utviklere brukes mange hendelsesbehandlinger og funksjoner til skriptbasert validering. I tabellen nedenfor vises hver av disse hendelsesbehandlingene og en beskrivelse av hvordan de brukes.
Funksjon | Beskrivelse |
---|---|
msoxd__shippingDates::OnBeforeChange | En hendelsesbehandling som brukes til å validere leveringsdatoer. Den returnerer True eller False avhengig av om datoene er gyldige i henhold til bedriftsreglene, og egenskapene ReturnMessage og ReturnStatus for DataDOMEventobjektet settes til å returnere en feilmelding til brukeren. |
msoxd__itemB_quantityListB::OnValidate | En hendelsesbehandling som brukes til å validere mengdeverdiene i hver blokk. Den bruker ReportError-metoden for DataDOMEvent-objektet til å returnere en feilmelding til brukeren. |
msoxd__itemB_quantityListB::OnAfterChange | En hendelsesbehandling som brukes til å oppdatere Totalt-feltet basert på antallet angitte blokkmengder. Denne hendelsen inntreffer etter at dataene har blitt validert i OnValidate-hendelsen. Den kaller opp den generelle GetTotal-funksjonen for å utføre beregningene. |
msoxd__total::OnValidate | En hendelsesbehandling som brukes til å validere verdien i Totalt-feltet. Den bruker ReportError-metoden for DataDOMEvent-objektet til å returnere en feilmelding til brukeren. |
msoxd__creditCardInfo::OnValidate | En hendelsesbehandling som brukes til å validere kredittkortgrensene for hver kredittkorttype. Den kaller opp den generelle funksjonen ValidateCreditInformation for å utføre valideringen. |
msoxd__creditLimit::OnBeforeChange | En hendelsesbehandling som brukes til å validere verdien for kredittkortgrensen. Den bruker egenskapene ReturnMessage og ReturnStatus for DataDOMEvent-objektet til å returnere en feilmelding til brukeren. |
ValidateCreditInformation | En generell funksjon som brukes til å validere kredittkortgrensene for hver kredittkorttype. Den bruker ReportError-metoden for DataDOMEvent-objektet til å returnere en feilmelding til brukeren. |
GetTotal | En generell funksjon som brukes til å legge sammen alle mengdeverdiene. Den returnerer den totale verdien av alle mengdene. |
BtnSubmitShipDates::OnClick | En hendelsesbehandling som brukes til å simulere tilkoblingen til et bakenforliggende program som validerer bestillingen og leveringsdatoene angitt i skjemaet. Den bruker varsel-metoden for UI-objektet til å oppgi informasjon for brukeren. |
msoxd__itemB_quantityListB::OnValidate
til å validere antallet blokker angitt i
Antall-feltet. Det returnerer en feilmelding til
brukeren hvis dataene ikke overholder de angitte kriteriene, som i dette tilfellet er en
numerisk verdi som er større enn 50 eller mindre enn 0.
Site-egenskapen
for DataDOMEvent-objektet brukes til å returnere en peker til XML DOM-noden
for Antall-feltet, og
nodeTypeValue-egenskapen for
XML DOM brukes til å få tilgang til verdien i feltet. Hvis verdien i
feltet ikke samsvarer med datavalideringskriteriene, brukes
ReportError-metoden for DataDOMEvent-objektet til å
returnere en feilmelding til brukeren. Nedenfor vises JScript-koden som brukes til å
implementere hendelsesbehandlingen
msoxd__itemB_quantityListB::OnValidate
:
function msoxd__itemB_quantityListB::OnValidate(eventObj)
{
if (parseInt(eventObj.Site.nodeTypedValue, 10) > 50)
eventObj.ReportError(eventObj.Site, "Invalid quantity. The total number
of each type of block cannot exceed 50.", false);
if (parseInt(eventObj.Site.nodeTypedValue, 10) < 0)
eventObj.ReportError(eventObj.Site, "Invalid quantity. The total number
of each type of block cannot be less than 0.", false);
}
Som vist i dette eksemplet kan flere datavalideringsbegrensninger kontrolleres mot ett enkelt felt, og du kan lage en egendefinert feilmelding for så mange valideringsbegrensninger du har behov for.