Støtte for Human Workflow Services (HWS)
Human Workflow Services (HWS) er en tjeneste i Microsoft BizTalk Server 2004 som klientprogrammer kan bruke til å bygge og administrere personalrelatert arbeidsflyt. Microsoft Office InfoPath 2003 gir tilgang til denne tjenesten via Arbeidsflyt-oppgaveruten. I denne oppgaveruten kan brukere starte og spore HWS-handlinger og utføre HWS-oppgaver. InfoPath inneholder ikke et utviklergrensesnitt for å aktivere Arbeidsflyt-oppgaveruten. All HWS-funksjonalitet aktiveres ved å endre skjemadefinisjonsfilen (XSF).
Bruke Arbeidsflyt-oppgaveruten
Med Arbeidsflyt-oppgaveruten kan brukeren starte eller utvide en arbeidsflyt eller utføre en oppgave.
De tre delene i Arbeidsflyt-oppgaveruten er:
- Start arbeidsflyt Består av handlingsknapper som kan brukes til å starte en arbeidsflyt. Denne delen vises bare for skjemaer som er HWS-aktiverte og som ikke har en eksisterende arbeidsflyt knyttet til seg.
- Handling Sporer statusen for handlinger og deres tilknyttede oppgaver. Når en bruker starter en handling, kjører handlingen, og den spores av HWS-tjenesten. InfoPath viser statusen for handlingen og hvem som tilordnet oppgaven.
- Oppgave Tillater at brukeren arbeider med oppgaver. Når en oppgave er tilordnet til en bruker, viser InfoPath statusen for oppgaven, en knapp for å utføre oppgaven direkte, og én eller flere knapper for å starte nye handlinger.
Aktivere Arbeidsflyt-oppgaveruten
Hvis du vil aktivere Arbeidsflyt-oppgaveruten, endrer du skjemadefinisjonsfilen (XSF) slik at den inkluderer hwsWorkflow-elementet på følgende måte:
<hwsWorkflow taskpaneVisible=”yes”>
<location url="http://test/hwsservice/hwsservice.asmx"/>
<allowedActions>
<action name=”approval” actionTypeID=”{guid}” canInitiateWorkflow=”yes” caption=”Get Approval”/>
<action name=”delegate” actionTypeID=”{guid}” canInitiateWorkflow=”no” caption=”Delegate”/>
</allowedActions>
<allowedTasks>
<task name="getManagerApproval" taskTypeID="435" caption="Send Response"/>
<task name="getVPApproval" taskTypeID="436" caption ="Send Response"/>
<task name="delegateToManager" taskTypeID="420" caption="Respond"/>
</allowedTasks>
</hwsWorkflow>
Legge til tillatte handlinger i skjemaer
En HWS-tjeneste kan inneholde mange ulike handlinger, men skjemaet krever kanskje ikke hver handling fra tjenesten. Hver handling må være aktivert separat for skjemaet. Derfor kan skjemaet inneholde et delsett av handlingene som brukes i HWS-tjenesten.
Tilgjengelige handlinger vises i Arbeidsflyt-oppgaveruten som knapper, avhengig av statusen på dokumentet i arbeidsflyten og brukertillatelsene, slik de er definert i HWS-begrensningssystemet. I skjemadefinisjonsfilen (XSF) lister du opp de aktiverte handlingene, identifisert av sine actionTypeID-attributter. Hvis handlingen kan starte en arbeidsflyt, bør canInitiateWorkflow-attributtet settes til "yes". Bruk caption-attributtet til å angi et visningsnavn for handlingens knappeetikett.
Obs! InfoPath tillater bare at brukere starter én ny handling basert på gjeldende status. Arbeidsflyt-oppgaveruten tillater ikke at brukere starter flere handlinger fra en angitt status, på grunn av måten InfoPath sporer loggen for en forekomst på for et dokument. InfoPath knytter hver forekomst av et dokument til en arbeidsflyt ved hjelp av ett taskTypeID-attributt eller ett actionTypeID-attributt. Arbeidsflyten anses som fullført når aktivitetsflyten når statusen Inaktiv.
Oppgaver er minihandlinger som definerer arbeidet som må fullføres av en bruker. En oppgave er tilordnet til en bruker av HWS-tjenesten på bakgrunn av det logiske settet i handlingen og oppgaveparameterne. En handling kan utformes til å tilordne flere oppgaver, serielt eller parallelt. I de fleste tilfeller forventer handlingen et svar på en oppgave fra en bruker for å kunne fortsette arbeidsflyten. Hvis InfoPath-skjemaet er knyttet til en oppgave, viser Arbeidsflyt-oppgaveruten oppgaven som er tilordnet til brukeren, i form av en knapp. Hvis oppgavestatusen imidlertid er satt til Utsatt, Avslått eller Annullert, vises ikke oppgaveknappene, selv om aktivitetsflyten er aktiv. På samme måte som handlinger må hver oppgave aktiveres for skjemaet. taskTypeID-attributtet identifiserer navneområdet for oppgaven og er unikt for hver oppgave. caption-attributtet brukes til å definere et visningsnavn for oppgavens knappeetikett.
Obs! Siden Arbeidsflyt-oppgaveruten ikke tillater at du legger til flere egenskaper og tilpasser kontroller, bruker du en egendefinert oppgaverute til å vise mer informasjon om arbeidsflyten. Hvis du vil bruke hwsAdapter-elementet uten å vise Arbeidsflyt-oppgaveruten i InfoPath, setter du taskpaneVisible-attributtet til "no".
Bruke OnClick-hendelsen til å legge til handlinger og oppgaveknapper
Arbeidsflyt-oppgaveruten viser handlinger og oppgaver i form av knapper. Knappefunksjonalitet må defineres i skjemakoden ved å legge til en OnClick-hendelse for hver aktiverte handling og oppgave. Du kan for eksempel bruke koden til å bytte visninger, bytte oppgaveruter eller sende direkte til HWS-webtjenesten. Du kan bruke navnet på handlingen eller oppgaven slik det er definert i hwsWorkflow-elementet for skjemadefinisjonsfilen (XSF), som vist i eksemplet nedenfor:
function approval::OnClick(eventObj)
{
// Switch view that contains Action/Task parameters with submit button.
}
Opprette en HWS-adapter
Siden Arbeidsflyt-oppgaveruten ikke sender data til HWS-tjenesten automatisk, må du opprette en HWS-adapter for å sende skjemaet.
Det finnes ikke noe utviklergrensesnitt knyttet til sendeadapterne. Hvis du vil aktivere disse adapterne, endrer du skjemadefinisjonsfilen (XSF) slik at den inneholder hwsAdapter-elementet i dataAdapters-elementet.
På samme måte som andre InfoPath-webtjenesteadaptere må elementet inneholde et navn for adapteren og plasseringen for WSDL (Web Services Description Language), og det må angi om adapteren tillater sending og søk. Siden disse adapterne bare brukes til å sende data til en HWS-tjeneste, må submitAllowed-attributtet være satt til "yes". queryAllowed-attributtet kan utelates, som tilsvarer standardverdien "no", eller det kan inkluderes og settes til "no".
Som en del av utformingen av handlinger og oppgaver, kan du angi tilleggsparametere som er spesifikke for hver handling eller oppgave. Nedenfor vises det et eksempel på en adapter som starter en arbeidsflyt med en Approval-handling. Verdien som skal brukes for hwsOperation-elementtypen, er "addActionToNewActivityFlow". typeID-attributtet bruker actionTypeID-attributtverdien, som er GUID.
<xsf:hwsAdapter name="Start Approval" wsdlUrl="http://.../HWSService.asmx?WSDL" submitAllowed="yes" queryAllowed="no">
<xsf:hwsOperation type="addActionToNewActivityFlow" typeID=”{guid}” serviceUrl="http://.../HWSService.asmx">
<xsf:input source="HWSMessage1.xml">
<xsf:partFragment match="/ns1:HWSMessage/ActionSection/param1" replaceWith="/my:myFields/my:param1" />
<xsf:partFragment match="/ns1:HWSMessage/ActionSection/param2" replaceWith="/a:foo/b:bar" dataObject=”Aux1” />
</xsf:input>
</xsf:hwsOperation>
</xsf:hwsAdapter>
hwsAdapter-elementet har samme standardgrensesnitt som de andre sendeadapterne som støttes av InfoPath, men HWS-sendeadapterne vises ikke i grensesnittet. Hvis du vil starte en sendehandling, må du i stedet legge til handlingen i koden, som vist i eksemplet nedenfor:
XDocument.DataAdapters.Item("Start Approval").Submit();
Når sendeoperasjonen startes i kjøretid, vises det en knapp med teksten Hent status i Arbeidsflyt-oppgaveruten. Denne knappen kan brukerne bruke til å oppdatere oppgaveruten slik at den viser gjeldende arbeidsflytinformasjon.
Definere HWS-sendeoperasjoner for handlinger
InfoPath inneholder tre typer sendeoperasjoner som fungerer sammen med HWS-tjenesten:
- addActionToNewActivityFlow
- addActionToActivityFlow
- sendTaskResponse
Hvis du vil bruke HWS-sendeadapteren, må XML-forekomster defineres for hver handling. XML-forekomster defineres ved hjelp av BizTalk-redigeringsprogrammet slik at de eksporterer XML-forekomsten som aktiverer hver handling. XML-forekomsten bør gis et navn og legges til som en InfoPath-ressurs i skjemadefinisjonsfilen (XSF). Hvis HWS-sendeadapterne skal kunne vite hvilken XML-forekomst de skal bruke, må input-elementet oppdateres med navnet på XML-filen som skal brukes, som vist i forrige eksempel på en adapter. Denne oppdateringen kreves bare for elementene hwsOperation, addActionToNewActivityFlow og addActionToActivityFlow. Svar på oppgaver, definert av sendTaskResponse-verdien for type-attributtet, trenger ikke en XML-forekomst, fordi HWS-tjenesten returnerer XML-forekomsten som brukes til å svare på oppgaven, ved å sende en spørring til serveren ved hjelp av GetTaskInfo-mottaksoperasjonen. For oppgaver må source-attributtet for input-elementet være tomt.
Hver handling stemmer med et BizTalk-handlingsmeldingsskjema, som vist i eksemplet nedenfor. Skjemaet brukes til å kommunisere med HWS-tjenesten. Handlingen kan inkludere tilleggsparametere som er spesifikke for handlingen, for eksempel en prioritet og en forfallsdato. Disse parameterne lagres i ActionSection-elementet for handlingsmeldingsskjemaet, på følgende måte:
<ns0:HwsMessage xmlns:ns0="http://tempuri.org/Hws_Activate_SampleDoSomething">
<HwsSection HwsMessageType="Hws_Activate">
<ActivityFlowID>00000000-0000-0000-0000-000000000000</ActivityFlowID>
<InitiatingActor>Contoso\johndoe</InitiatingActor>
<ActionTypeID>00000000-0000-0000-0000-000000000000</ActionTypeID>
<ActionInstanceID>00000000-0000-0000-0000-000000000000</ActionInstanceID>
<ActionInstanceDescription>D</ActionInstanceDescription>
<ParentActionInstanceID>00000000-0000-0000-0000-000000000000</ParentActionInstanceID>
<ParentTaskID>00000000-0000-0000-0000-000000000000</ParentTaskID>
<ActivityModelTypeID>00000000-0000-0000-0000-000000000000</ActivityModelTypeID>
<ActivityModelInstanceID>00000000-0000-0000-0000-000000000000</ActivityModelInstanceID>
<ActivityModelStepID>10</ActivityModelStepID>
<IsDependentOnParent>false</IsDependentOnParent>
<ActivityFlowProperties>
<Property Name="Name_0" Description="Description_1" Type="Type_2">Property_0</Property>
<Property Name="Name_0" Description="Description_1" Type="Type_2">Property_1</Property>
<Property Name="Name_0" Description="Description_1" Type="Type_2">Property_2</Property>
</ActivityFlowProperties>
<ActionProperties>
<Property Name="Name_0" Description="Description_1" Type="Type_2">Property_0</Property>
<Property Name="Name_0" Description="Description_1" Type="Type_2">Property_1</Property>
<Property Name="Name_0" Description="Description_1" Type="Type_2">Property_2</Property>
</ActionProperties>
<HwsWebServiceUrl>http://localhost/HwsService/HwsService.asmx</HwsWebServiceUrl>
</HwsSection>
<ActionSection>
<priority>1</priority>
<dueDate>02/19/04</dueDate>
</ActionSection>
<Payloads>
<Payload ID="ID_0"></Payload>
</Payloads>
</ns0:HwsMessage>
Definere HWS-mottaksoperasjoner
InfoPath foretar kall til HWS-tjenesten for å hente gjeldende arbeidsflytinformasjon og fylle ut Arbeidsflyt-oppgaveruten. For hvert webtjenestekall InfoPath foretar, bør en sekundær datakilde angis for midlertidig lagring av de mottatte dataene.
HWS-tjenesten inneholder fire typer webmetoder som InfoPaths mottaksoperasjoner kan arbeide sammen med:
- GetTaskInfo
- GetActionInstance
- GetActivityList
- GetActivityFlowInfo
Obs! Bruk standardnavnet, som vist i listen, for sekundære datatilkoblinger. initOnLoad-attributtet bør alltid settes til "no."