Sharepoint Workflow modificēšanas formas izveide ar InfoPath

Iesākumam

Workflow modificēšanas formas jāveido kā InfoPath XSN formas, nevis kā ASPX formas. InfoPath ir dabūjams pilnajā MSOffice paketē, oficiāli tas piederas pie “Microsoft Office Suites and Applications 2007” pakas

Pašas formas izveide

Jāveido jauna forma, to veidojot uzreiz vēlams uzstādīt ķeksi “hide features that do not work in InfoPath Forms Services” (saucas kaut kā citādi, bet ideja ir tā).

Svarīgi ir uzlikt sekojošus atribūtus iekš “Tools->Form options”:

Browser
  • Izvācam ķeķšus pie “Show toolbar at top of form; show toolbar at bottom of form.
    Modifikācijas formā šie toolbari nav būtiski, jo formas submitošanai visticamāk izmantosim pogu. Savukārt “Save”, “Update” utt darbības vispār šeit ir liekas.
Security and trust
  • Security level: Domain (neļaujam automātiski noteikt)
  • Security and trust -> Sign this form template. Ja ir administratoru piešķirts sertifikāts, var parakstīt ar to, bet šīm vajadzībām pietiek arī ar “Create certificate” (pats priekš sevis izveidos sertifikātu)
Compatibility
  • Design a form template that can be opened in a browser or InfoPath

Datu submitēšanai jāizveido datu konekcija, kas nodos atpakaļ informāciju uz “hosting environment” (mūsu gadījumā – sharepoint workflow-am). To dara zem Tools->Data Connections. Jāspiež “Add”, jāizvēlas “Create new connection to: Submit data”. Nākamajā logā – “To the hosting environment…” un jāiedod konekcijai vārds.

Tai pogai, kas būs kā “submit” attiecīgi jāiekonfigurē, ka vai nu:

  • tā ir submit poga – tad prasīs, pa kuru datu konekciju sazināties ar formu. Tad jāuzstāda, ka pie submitēšanas lietotājam nerāda paziņojumu, ka submits ir veiksmīgs un pēc submitēšanas aizver formu
  • tā ir parasta poga, kas darbojas uz likumu (rules) pamata. Tad jāizveido likums, kas uzstāda formas vērtības un beigās nosubmitē formu un to aizver

Formas datu shēmai būtu vēlams iedot sakarīgu nosaukumu, pēc noklusējuma tas ir “myFields” – ja negribam ar tādu turpmāk strādāt, jāpārsauc un jāizveido normāli.

Kad viss gatavs, dodamies File->Publish. * Izvēlamies “To a network location”. Norādām vietu uz c:, kur vēlamies formu “publicēt”, norādām formas nosaukumu vai, ja apmierina piedāvātais, atstājam to pašu. * Pēc tam wizardā ir jautājums “If all form users can access the location that you entered in the previous step, Click next”. Šeit ir svarīgi atstāt to teksta lauku TUKŠU, citādi forma nestrādās worklfowā! * Izmetīs warningu, ka tas var būt slikti – spiežam OK.

Paņemam File->Properties un apskatāmies/nokopējam automātiski noģenerēto “ID” lauka vērtību, kas izskatās apmēram kā “urn:schemas-microsoft-com:office:infopath:ReviewModForm:-myXSD-2007-08-22T06-32-52”

Formas lietošana worklfowā

Lai formu piesaistītu workflovam, kas aprakstīts kā Sharepoint Feature.

Iekopējam publicēto XSN failu blakus feature.xml failam. Instalējot featuri, šim XSN jānokļūst zem c:\program files….\12\template\features\ManaFeature

Feature.XML:
  • Feature tagā:
    svarīgas ir šādas rindas (<Feature> taga iekšpusē, To rezultātā, pie feature aktivizēšanas, izpildīsies kods, kas aktivizē arī workflow-am piesaistītās formas):
    ReceiverAssembly=”Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c” ReceiverClass=”Microsoft.Office.Workflow.Feature.WorkflowFeatureReceiver”

  • ElementManifests tagā:
    Visi XSN faili jāpiemin arī ElementManifests tagā. Manā gadījumā bija:
    <ElementFile Location=”ReviewModForm.xsn”/>

  • Properties tagā:
    Lai tiktu aktivizētas šīs formas, papildus vēl arī <Properties> tagā jāieliek šāda rinda:
    <Property Key=”RegisterForms” Value=”*.xsn” />

Workflow.xml (vai kā nu saucas XMLs, kas apraksta workflowu:
  • Workflow tagā:
    Uztādām noklusēto WorkflowModifications:
    ModificationUrl=”_layouts/ModWrkflIP.aspx”

  • MetaData tagā:
    Jāveido jauns modifikācijas apraksts, kas atsaucas uz formu. Manā gadījumā bija:
    <Modification_d03867f5-99f7-469e-94af-7fcefe476a22_FormURN>
    urn:schemas-microsoft-com:office:infopath:ReviewModForm:-myXSD-2007-08-22T06-32-52
    </Modification_d03867f5-99f7-469e-94af-7fcefe476a22_FormURN>
    <Modification_d03867f5-99f7-469e-94af-7fcefe476a22_Name>
    Atsaukt saskaņošanu
    </Modification_d03867f5-99f7-469e-94af-7fcefe476a22_Name>

Ar slīprakstu atzīmēju tās vietas, kas katram gadījumam ir citādi. Kā redzams, šeit FormURN tagā iekšpusē esošais sakrīt ar to formas ID, kas tika nokopēts InfoPath-ā. Jaunu GUID ģenerējam ar GuidGen, UZMANĪGI – tam guidgen uzģenerēs ar lielajiem burtiem. VisualStudio izmantojot, tas automātiski pārtaisa uz mazajiem burtiem. Tāpēc ērtāk būs arī šeit izmantot ar mazajiem, jo citādi tas netiks atpazīts.

Pašā workflowā, vietā, kur šāda modifikācija ir pieļaujama, jāievieto EnableModification aktivitāte, kurai ModificationID uzstāda uz iepriekšējā solī ģenerēto GUIDu (ar mazajiem burtiem). Pēc tam vēlams ieveitot “EventHandlingScope”, kur normālajā zarā veic normālo darbu, bet eventu ķērājā ieliek EventDriven aktivitāti, kas gaida OnWorkflowModified notikumu (šeit atkal sasaiste notiek pēc ModificationID).

Šajā brīdī vēl nekas nestrādās, jo nav izveidota datu apmaiņa starp InfoPath formu un Workflow. No WF puses tā tiek nodrošināta, izmantojot ContextData atribūtu – tur tiek sagaidīts XMLs kas atbilst InfoPath formas aprakstītajai shēmai. Tieši tādu pašu ContextData piedāvā arī OnWorkflowModified aktivitāte, tikai šeit saņemam no formas atpakaļ pienākušos datus.

XMLu, protams, var sacerēt pats, bet var arī iegūt automātiski.

XSD shēmas ģenerēšana

InfoPath formu atveram dizainēšanas režīmā, izvēlamies tai “Save as Source files” un izvēlas, kur saglabās. Izvēlētajā folderī uzradīsies vairāki faili, no kuriem svarīgākais: myschema.xsd – tas satur mūsu InfoPath formas shēmu.

Pēc tam no šīs shēmas var uzģenerēt VB vai C# klasi, kas “apkalpo” šādu shēmu. To darām ar komandrindas rīku “xsd.exe”:

  cd c:\manataka
  xsd.exe myschema.xsd /C /o:.\ /L:VB

Uzģenerējas fails myschema.vb, kurā iekšā klase ar nosaukumu tādu, kā iedevām savam datasetam 1. solī. Manā gadījumā – ReviewModDataSet

Šo klases failu iekļaujam savā projektā. Lai sagatavotu aktivitātei nepieciešamo XML stringu, var lietot šādu koda fragmentu:

        Dim oFormData As New ReviewModDataSet
        Using stream As New IO.MemoryStream
            Dim serializer As New Xml.Serialization.XmlSerializer(GetType(ReviewModDataSet))
            serializer.Serialize(stream, oFormData)
            Me.enableRecall_ContextData = Encoding.UTF8.GetString(stream.GetBuffer())
        End Using

Ar slīprakstu iezīmēju atribūtu, kurā nepieciešams uzstādīt iegūto XML vērtību.