Letvægts PHP engine for BPEL baseret på XML omskrivning
|
|
- Sven Hansen
- 8 år siden
- Visninger:
Transkript
1 LetvægtsPHPengineforBPEL baseretpåxml omskrivning Afsluttendediplomprojektaf Skovhøjen1 7100Vejle E Mail:dkt@itu.dk Vejleder:Prof.ThomasHildebrandt Projektperiode Opgavestart:1.Februar2008 Afleveringafopgave:1.August2008
2 Indholdsfortegnelse Licens...i Indledning...1 Problemformuleringogmål...1 Metode...1 Struktur...1 Anerkendelseogtak...2 Kapitel1...3 Problemdomænet Workflow Systemtilworkflowhåndtering...4 Arkitektur Procesdefinition Sammenfatning...11 Kapitel Teknologierogstandarder BPEL...12 Variabler BPEL4PeopleogWS HumanTask BPEL4People WS HumanTask PHP XForms Sammenfatning...24 Kapitel Workflowmønstre WorkflowmønstreiBPEL Grundlæggendemønstre...27 Sekvens...27 Parallelopdeling(AND split)...28 Synkronisering(AND join)...28 Deadpathelimination...29 Eksklusivtvalg(XOR split)...30 Simpelfletning(XOR join) Avanceretforgrenings ogsynkroniseringsmønstre...31 Multivalg(OR split)...32 Synkronfletning(InklusivOR join) Strukturmønstre...32 Implicitafslutning Multipelinstansmønstre...32 Multipelinstanserudensynkronisering Tilstandsbaseretmønstre...33 Udskudtvalg(udskudtXOR split) Annulleringsmønstre...35 Annulleraktivitet...35 Annullercase Humanworkflowmønstre Sammenfatning...37
3 Kapitel Krav Tilstandsmaskinen Funktionellekrav Ikke funktionellekrav Aktører Usecase...40 Evalueredokument Sammenfatning...43 Kapitel Workflowmodel AktiviteterogDOM Strategiforafviklingen Flowkontrol Tilstandogvariabler...46 Afventesvar Manuelleaktiviteter Sammenfatning...47 Kapitel Designogimplementering Arkitektur Implementering Workflowvariabler...51 Synlighed Afviklingafetworkflow XML omskrivning BPELaktiviteter...56 sequence...56 if...57 While...60 wait...64 assign SM BPELaktiviteter...67 onchange...67 humanform Betingelser...69 Boolean...70 Duration...70 DateTime Sammenfatning...72 Kapitel Konklusionogfremtidigtarbejde Konklusion Fremtidigtarbejde Workflowmodel Udvidelseafdelt lager Arbejdsliste...76 AppendiksA...77 Tutorial...77 A.1Forudsætninger...77
4 A.2Konfiguration...78 A.3Struktur...78 A.4Definereetworkflow...79 A.4.1Procesdefinitionen...79 A.4.2Humanforms...80 A.5Starteetworkflow...86 AppendiksB...88 API'er...88 B.1BPELProcess&instancemodelAPI...88 BpelVariable.php...88 B.1.1activities...91 Activity.php...91 B.1.1.1bpel...92 BpelEmptyActivity.php...93 BpelAssignActivity.php...94 BpelExitActivity.php...97 BpelIfActivity.php...98 BpelSequenceActivity.php BpelThrowActivity.php BpelWaitActivity.php BpelWhileActivity.php BpelInvokeActivity.php B.1.1.2sm bpel OnChangeActivity.php HumanFormActivity.php B.1.2expressions BpelWfExpression.php BpelWfBooleanExpression.php BpelWfDurationExpression.php BpelWfDateTimeExpression.php B.2WorkflowExecutionAPI B.2.1executions BpelDOMNodeListIterator.php BpelWfExecution.php B.2.2exceptions BpelWfException.php BpelWfDefinitionStorageException.php BpelWfActivityNodeNotRemoveFromDOM.php BpelWfExplicitTerminationException.php BpelWfInternalFaultException.php BpelWfInvalidXPathExpressionException.php BpelWfNodeNotAppendedToDOM.php BpelWfNodeNotReplacedInDOM.php BpelWfVariableNotFoundException.php BpelWfUrlNotFoundException.php B.3ParsingAPI BpelWfUtils.php IDOMExporter.php B.4validationAPI XpathValidator.php...145
5 B.5PersistenceAPI BpelWfDefinitionStorage.php AppendiksC Bibliografi...152
6 Licens DetteafsluttendediplomprojekterpubliceretunderCreativeCommons Navngivelse Delpåsamme vilkår2.5danmark licensen. Duharfrihedtil: atfremstilleeksemplareroggøreværkettilgængeligtforalmenheden atfremstillebearbejdedeværker Påfølgendevilkår: Navngivelse:Duskalkreditereværketpådenmåde,dererangivetafrettighedshaverenog licensgiveren. Delpåsammevilkår.Hvisduændrer,bearbejderellerbyggerviderepådetteværk,mådu kunvideresprededetresulterendeværkunderenlicens,dereridentiskmeddenne. Iforbindelsemedalviderebrugogspredningskaldugørelicensvilkårenefordetteværk klartforandre. Alledissevilkårkanfrafaldes,hvisdufårtilladelseafrettighedshaveren. Nothinginthislicenseimpairsorrestrictstheauthor'smoralrights.
7 Indledning Problemformuleringogmål Detteprojektharsommålatdesigneogimplementereentilstandsmaskine(TM)implementereti PHPforudførselafBPELprocesserbaseretpåXML omskrivning. Dettemålharsinmotivationfradenvirkeligeverden,hvorjegtildagligt,iudviklingenafsoftware, igenogigenstøderpåworkflowogbusinessprocesser(bp),sommedfordelkunneunderstøttesaf ensådantm. Metode FremgangsmådenvilværeatimplementereenTM,derkanudføreetworkflowvedatfortolkeog omskrivetilstandefordeigangværendeprocesserrepræsenteretoggemtixmlformat. FormatetforXMLprocessernevilværeinspireretafBPEL,meniprojektetviljegundersøgehvilke ekstraelementerderernødvendigeforatrepræsenterekøretidsinformation. Dettevilværebaseretpårelevantlitteraturomkringworkflow,businessprocesmodellering,BPEL [BPEL4WS],herunderspecieltCosmoBiz forskningsprojektet[cosmobiz],relevantexml teknologierogdesignmønstrerelevantfordesignetaftm'en. TM'envilbliveevalueretvedtestpåenellerflereselvvalgteBPtagetfradenvirkeligverden.Det kanværebp,derudspringerframitarbejde. Struktur Kapitel1giverenintroduktiontilproblemdomænetomkringworkflowogworkflowhåndtering. Indledning 1
8 Kapitel2giverenintroduktiontildenstakafteknologier(BPEL,BPEL4People,WS HumanTask, PHPogXForms),dererrelevantforogerblevetanvendtafsoftwarekomponentenudvikletidette projekt.kapitel3præsentereretudplukafworkflowmønstre,derpånuværendetidspunkt understøttesdirekteibpel,samtenganskekortpræsentationafhumanworkflowmønstre. Kapitel4diskutererdefunktionelleogikke funktionellekrav,derertiltilstandsmaskinenog opstillerenusecase,somdenskalkunneudføre. Kapitel5præsenterersemantikkenforworkflowmodellen,somerfundamentetfor tilstandsmaskinen,derudviklessomendelafprojektet. Kapitel6diskutererdesignetogimplementeringenafsoftwarekomponenten,dererblevetudviklet somendelafdetteprojekt. Kapitel7konkludererpåopgaven,samtgiverenudsigttilfremtidigtarbejdeomkringden implementeredetilstandsmaskine. Anerkendelseogtak JegvilgerneretteenheltspecieltaktilProf.ThomasHildebrandtforatvilleværeminvejleder. Udenhansvejledningvilledetteprojektformentligaldrigværeblevettilnoget,dajegfleregange harovervejetatstoppeprojektet,dadethelesåhåbløstudimineøjne. JegvilgernehavelovattakkeIT universitetikøbenhavnogminnuværendearbejdsgiverpharma NordApSforatgivemigmulighedenforatskrivemitafsluttendediplomprojekt. EnstortaktilminforlovedeLisbethfordenekstraordinæreindsats,hunhargjort,påområderder egentligburdeværeetfællesprojekt,underheleudarbejdelsenafdetteprojekt. MineforældreTrineogKarlskalogsåhavetakforderesøkonomiskestøtteoginteressefor,hvad jegegentligtharknokletmeddetsidstehalveår,selvomdetofteikkesigerdemnoget. Afslutningsvisviljegudtrykkeminpåskønnelsetilalledemennesker,somerellerharværet involveretiudviklingenaffrisoftware(php,pear,firefox2,xformsudvidelsentilff2,eclipse PDT,Xdebug,PHPUnit),anvendtidetteprojekt,samtdeværktøjer(Dia,BOUML,GIMP, OpenOffice)anvendttiludarbejdelsenafdettedokument. Indledning 2
9 Kapitel1 Problemdomænet Dettekapitelgiverenintroduktiontilproblemdomænetomkringworkflowogworkflowhåndtering. Afsnit1.1giveretsvarpåhvadworkflower,afsnit1.2fortællerhvadetsystemtil workflowhåndteringerogafsnit1.3beskriverkorthvadenprocesdefinitioner. 1.1Workflow Derermereogmerebrugforatreducereomkostningernevedatlaveforretningogkontinuerligtat udviklenyeservicerogsoftwaretilathåndterenyeforretningsprocesserellerændringeri eksisterende.håndteringenafforretningsprocesserogsystemertilworkflowhåndteringleverer metodologierogsoftware,somhjælpermedatorganisereprocesser,deroperererpådetteområde indenforenorganisation. Tilbagei1996publicerede TheWorkflowManagementCoalition(WfMC) etglosarog terminologier,somindeholdervigtigebetingelser,derrelaterersigtilworkflow.idenseneste versionfrafebruar1999,defineresetworkflowsåledes: Theautomationofabusinessprocess,inwholeorpart,duringwhichdocuments, informationortasksarepassedfromoneparticipanttoanotherforaction,according Kapitel1 3
10 toasetofproceduralrules. 1[WfMC99]. Ordetworkflowstødermanpådagligt,måskeudenegentligattænkeoverdet.Føritidenbetød workflowatgiveetstykkepapirfraenpersontilanden.detklassiskeworkflowparadigmesigerat workflowerflowetafarbejde,deromfatterudvekslingenogberigelsenafinformationerog beskrivesafclient/serversurvivalguidesåledes. Theclassicalworkflowparadigmisariverthatcarriestheflowofworkfromportto portandalongthewayvaluegetsadded.workflowdefinestheoperationsthatmustbe visitedalongthewayandthatneedstobedonewhenexceptionsoccur. 2[CSSG99] Etworkflowinvolverernormaltetantalskridt,derskaltagesogsomhverisærerkendtsomen aktivitet.enaktivitetvilentenværeautomatisk,hvilketbetyderatdenudføresafetsystemtil workflowhåndtering,ellerdenkanværemanuel,hvordenunderudførelsenkanvælgeatinteragere medmenneskeligressourcer. 1.2Systemtilworkflowhåndtering Af TheWorkflowManagementCoalition(WfMC) defineresetsystemtilworkflowhåndtering således. Asystemthatdefines,createsandmanagestheexecutionofworkflowsthroughtheuse ofsoftware,runningononeormoreworkflowengines,whichisabletointerpretthe processdefinition,interactwithworkflowparticipantsand,whererequired,invokethe useofittoolsandapplications. 3[WfMC99]. 1 Oversat: Automatiseringenafenforretningsproces,ihelheldellerdele,hvordokumenter,informationelleropgaverafleveresfraendeltagertil andenforatfåforetagethandlingiht.regleromkringproceduren. 2 Oversat: Detklassiskeworkflowparadigmeerenflod,derbærerflowetafarbejdefrahavntilhavnogpåvejentilføjesderværdi.Workflow definererdeoperationer,derskalbesøgespådennevejogsomskaludføres,hvisundtagelseropstår. 3 Oversat: Etsystemderdefinerer,opretteroghåndtererudførelsenafworkflowsgennembrugenafsoftware,derkørerpåéntilflereworkflow engines,someristandtilatfortolkeprocesdefinitionen,interageremedworkflowdeltagereog,hvordeterpåkrævet,påkaldebrugenafit værktøjerogapplikationer.. Kapitel1 4
11 Systemertilworkflowhåndteringersoftware,dermuliggørogaktivererstyringenoghåndteringen afworkflow. Dereksisterertotyperafsystemertilworkflowhåndtering:demdererbaseretpåaktiviteterogdem dererbaseretpåentiteter4.førstnævnteharfokuspåetsætafaktiviteter,derskaludføresigennem heleworkflowet,sidstnævnteerderimodcentreretomkringenentitet,såsometdokument,som tilgåsfraetworkflow[fg02].detteprojektvilhavefokuspåworkflowbaseretpåaktiviteter. DokumentationenforOpenFlowworkflowhåndteringssystem[OPENFLOW]referererformåletmed etworkflowhåndteringssystembaseretpåaktivitetersomatsvarepåspørgsmålet Hvemskalgøre hvad,hvornåroghvordan? : Processenhvormandefinerersekvensenafaktiviteter,derskaludføresudspecificererhvad derskalgøres.definitionenafaktiviteter(repræsentererknuderienorienteretgraf)og transitioner(repræsentererkanterienorienteretgraf)fortællerhvornårdetskaludføres. Enaktivitet(hvaddelenafformålet)repræsenterernoget,derskaludføres:sendeen , udfyldeenform,placereenordre,aktivererenkontoetc. Transitioner(hvornårdelenafformålet)repræsenterersekvensenafaktiviteterienproces. Enhveraktivitetvilhaveenapplikationtilatudførejobbet,derafhvordandelen. Hvemdelenergenereltbrugerenellersystemet,derharfåettildeltrollentilafudføre aktivitetengennemdetsapplikation. Figur1.1visereteksempel,hvordetteerforsøgtillustreret:Degrønneknuderrepræsenterer aktiviteter,derskaludføresigennemheleworkflowet.derødekantermellemknuderneogselvede rødeknuderkontrollererflowet.nårbrugernemedderetterettigheder(blå)hargivetinddataene, foretagerknuden(parallelsplit)enopsplittelse,dersørgerforattreaktiviteterkankøreparallelt.to afdisseaktiviteterertildeltenapplikationforatfåjobbetudført(automatiskaktivitet),hvorimod deneneaktivitetertildeltenbrugermedrollen A tildelt(manuelaktivitet).nåralletreaktiviteter erudført,foretagerknuden(synkronisering)ensynkronisering,hvorefterworkfloweterudført. 4 Activity basedogentity based. Kapitel1 5
12 Figur1.1: Hvemskalgørehvad,hvornåroghvordan? Interaktionmedbrugeren,eksempelvisforatmodtageinddata,skergennemetinterfacetilen arbejdsliste.softwaresystemethvorisystemettilworkflowhåndteringerintegreretforespørger workflowsystemet,omenworkflowinstansafventerinddata,somkanforetagesafdenaktuelle bruger.erdettilfældetpræsenteresbrugerenforinterfacet,hvorigennemvedkommendekanoprette ogvideregiveinddata. Arkitektur Identid,hvorworkflowhareksisteret,erderfremsatforskelligemeningerom,hvadder kendetegnerengodworkflow/bpm(businessprocessmodelling)arkitektur. WfMCfremsætter,ideresworkflowreferencemodel[WfMC95],enworkflowarkitektursåledes: Kapitel1 6
13 Allworkflowsystemscontainanumberofgenericcomponentswhichinteractina definedsetofways;differentproductswilltypicallyexhibitdifferentlevelsofcapability withineachofthesegenericcomponents.toachieveinteroperabilitybetweenworkflow productsastandardisedsetofinterfacesanddatainterchangeformatsbetweensuch componentsisnecessary 5. WfMCbeskriverdissegeneriskekomponenteroginterfacesforenworkflowarkitekturtilat inkludereværktøjertilprocesdefinition,applikationertilarbejdslister,applikationertil administrationogovervågning,påkaldtapplikationer(somwebservices)ogworkflowmaskiner. MichaelHarveybeskriverisinbog EssentialBusinessProcessModelling [EBPM05],hvadhan mener,derkendetegnerengodworkflow/bpmarkitekturbaseretpåbpeltildefinitionog eksekveringafforretningsprocesser.dennearkitekturbyggerpåwfmcreferencemodellenoger vistifigur1.2. Figur1.2:Engodworkflow/BPMarkitekturafM.Harvey 5 Oversat: Alleworkflowsystemerbestårafetantalafgeneriskekomponenter,sominteragererudfradefineredemåderatgøredettepå; forskelligeprodukterviltypiskudstilleforskelligegraderafevnerindenforhverafdissegeneriskekomponenter.foratindfriinteroperabilitet mellemworkflowprodukter,skaletstandardiseretsætafgrænseflade ogdataudvekslingsformattermellemdissekomponenterværetilstede.. Kapitel1 7
14 Efterathavefåetetglimtaf,hvadderudgørengodworkflow /BPMarkitektur,erdeenkelte komponenter,derblevskitseretifigur1.2,kortbeskrevetitabel1.1. Komponent Beskrivelse Run timemaskine Ansvarligforatindlæseprocesdefinitionerogeksekvereinstanseraf dem.undereksekveringenerdenansvarligforatopfangehændelser (aktiviteter)ogbehandledem,samtsendeudgåendebeskeder(eks. eksternapplikation). Menneskeliginteraktion Ermanuellearbejdsopgaver,derudføresafbestemtebrugeremed bestemterollerisystemet. Nårenprocesinstanstiererensådanarbejdsopgave,gårdeni ventepositionindtil,dergivesbeskedom,atopgavenerudførteller annulleret.brugerneserogudførerderesarbejdsopgavergennemen grafiskkonsol.tilstandenfordenenkeltearbejdsopgaveskalgemmes (evt.idatabaseellerxml),dadisseofteleverlænge. Systeminteraktioner Erforbindelsertilinterne(andreapplikationerpådetfællesnetværk) ogeksterneapplikationer(typiskwebservicebaseretpartner processer). Administrationog overvågning Enadministrativkonsol,derhjælperadministratorermedatsporeog ændreobjekterstyretafrun timemaskinen,detteinkluderer procesdefinitioner,processer,aktiviteter,manuelleopgaver,brugereog brugerroller.anvenderenpassendedatamodeltilstyredette. Databasetil lagringafprocesser. Lagrerdeenkelteprocessersnuværendetilstand,såentilstandkan gendannesitilfældeafeventuellesystemnedbrud.datamodelerbedst modelleretsomennormaliseretrelationeldatabase.hvismanvælger atanvendeendatabase. Grafiskeditor Etværktøjtilgrafiskatmodellereenproces(eksempelvisBPEL) gennemennotationforgrafikmodellering(eksempelvisbpmneller UML). Exporter Anvendestilmapning(eksempelvisBPMNtilBPEL). WS CDLværktøj Beståraftoværktøjer: 1. Generator(generererenprocesmodeludfraetpåkrævetflow afhændelserogallekaldtilendeltagerimultideltager Kapitel1 8
15 koreografi). 2. Validering(validererenlokalprocesmodelopmoden multideltagerkoreografi). Tabel1.1:komponenteriengodWF/BPMarkitektur. 1.3Procesdefinition Enforretningsproces,derskaligennemetworkflowkræverenmådeatbliverepræsenteretpå,så denkanforståsogbearbejdesafworkflow håndteringssystemet.procesdefinitionenerkerneniat beskriveenforretningsproces,dergør,atetworkflow håndteringssystemkanlæseogforståden. TheWorkflowManagementCoalition(WfMC)definererenprocesdefinitionsåledes: Therepresentationofabusinessprocessinaformwhichsupportsautomated manipulation,suchasmodelling,orenactmentbyaworkflowmanagementsystem.the processdefinitionconsistsofanetworkofactivitiesandtheirrelationships,criteriato indicatethestartandterminationoftheprocess,andinformationabouttheindividual activities,suchasparticipants,associateditapplicationsanddata,etc. 6[WfMC99]. WfMChardefineretenreferencemodeltilworkflowtilbagei1995,sombestårafkomponenterog interfaces.idettedokumentetdefineresprocesdefinitionsåledes: Thecomputerisedrepresentationofaprocessthatincludesthemanualdefinitionand workflowdefinition. 7[WfMC95]. Procesdefinitionenerresultatafenproces,dereksempelviserblevetdefineretieteksterntværktøj, dervideregivesiinterface1.selvomwfmcikkeharspecificeretnogenstandardforengrafisk notationtilatdefinereprocesser,stillerdedogetsprogbaseretpåxml formattilrådighed,kaldet XMLProcessDefinitionLanguage(XPDL). 6 Oversat: Repræsentationenafforretningsproces. 7 Oversat: Endatamatiseretrepræsentationafenproces,derinkluderermanueldefinitionogworkflowdefinition. Kapitel1 9
16 Derfindesogsåandresprogtildefinitionafprocesser,somkananvendes.Etudpluktagetfrabogen omkringessentielmodelleringafforretningsprocesserafm.harvey[ebpm06]sesitabellen nedenfor: Standard Organisation Beskrivelse BusinessProcessExecution OASIS Detmestpopulæresprogtilmodelleringaf Language(BPEL) forretningsprocesser.enprocesrepræsenteressom XMLmedWebservicebindinger. BusinessProcessModelling BPMI EtsprogbaseretpåXMLsomBPEL. Language(BPML) XMLProcessDefinitionLanguage WfMC EtsprogbaseretpåXMLsomBPEL. (XPDL) XLANG Microsoft EttidligeresprogbaseretpåXML,somharhaft indflydelsepåbpel. WebServiceFlowLanguage (WSFL) IBM EttidligeresprogbaseretpåXML,somharhaft indflydelsepåbpel. BPELervalgtsomsprogettilprocesdefinitionfordenletvægtstilstandsmaskine,derskaludvikles somendelafdetteprojekt(læsmereombpelikapitel2).begrundelsenfor,atvalgeterfaldetpå BPELer,atsprogetbevægersigiretningenafblivetilende factostandardforforretningsprocesser. BPELunderstøtterikkemanuelleaktiviteter,somdogforsøgesløstgennemenudvidelsekaldet BPEL4People(B4PP).B4PPhardogenmangel,hvilketdeselvpåpeger: BPEL4Peopledoesnotstipulatehowthedataisrendered,butonlyprovidesadefault methodthatshowsthetopleveldataofthemessage,forexample,usinghtmlformsor XForms 8[BPEL4P]. Detteprojekthar,påbaggrundafdennemangeliB4P,valgtikkeatbenyttesigafB4Ptilatdefinere 8 Oversat: BPEL4Peoplefastsætterikke,hvordandatabliverrenderet,mengiverkunenstandardmetode,derviserdatafor beskedenpåtopniveau,f.eks.gennembrugenafhtml formsellerxforms. Kapitel1 10
17 manuelleaktiviteter.istedetvilderblivedefineretnyelementer(tilmanuelleaktiviteter),somvil kunneintegreresibpel. 1.4Sammenfatning Dettekapitelintroduceredelæserenforproblemdomænet,somdetteprojektbevægersigrundti.Vi harkiggetpåworkflow,deranvendestilatautomatisereforretningsprocesser.etsystemtil workflowhåndtering,derentenbaserespåetsætafaktiviteterellerentiteter,detteprojektvilhave fokuspåworkflowbaseretpåaktiviteter.desudensikreretsådansystem,atvifårsvarpådet essentiellespørgsmåletomkringworkflowhåndtering Hvemskalgørehvad,hvornårog hvordan?. Procesdefinitionenerkerneniatbeskriveenforretningsproces,dergør,atetworkflow håndteringssystemkanlæseogforståden.derfindesherforskelligesprogtilatdefinereenproces,i detteprojektblevbpeldetforetruknevalg,fordideterbevægersigiretningenafatbliveende factostandardforforretningsprocesser. ManuelleaktiviteterunderstøttesikkeafBPEL,menerdogforsøgtløstmedenudvidelsekaldet BPEL4People(B4PP).B4PPerfravalgtsomløsningtilmanuelleaktiviteteridetteprojekt,dervili stedetblivedefineretnyelementer(tilmanuelleaktiviteter),somvilkunneintegreresibpel. Kapitel1 11
18 Kapitel2 Teknologierogstandarder Dettekapitelgiverenkortintroduktiontildenstakafteknologier(BPEL,BPEL4People,WS HumanTask,PHPogXForms),dererrelevantforogerblevetanvendtafsoftwarekomponenten udvikletidetteprojekt. 2.1BPEL BPELerensammensmeltningafMicrosoft sxlangogibm swsfl. SomdefineretiabstraktetfraWebServicesBusinessProcessExecutionLanguageOASISStandard WS BPEL2.0[BPEL4WS],erBPELetsprogtilatbeskriveforretningsprocesser,derbaserersig påwebservices. BPELanvenderWSDLfilertilatspecificereinterfacestilwebservices(partnerlinktyper, egenskaber(properties),porttyperogoperationerogbeskeder),dererafinteresseforprocessen (webservicedererimplementeretafellerkaldtfraprocessen).wsdlerenvelkendtteknologi,der stillerenxml baseretmodeltilrådighedtilatbeskriveenwebservice[wsdl]. BPELlevereretsprog,derbådekanspecificereabstrakteogeksekverebareforretningsprocesser. Abstrakteprocesserspecificererudvekslingenafbeskedermellemforskelligeparter,udenatafsløre deninterneopførelseafnogleafdem.deeksekverbareprocesserderimod,modellererdenegentlige opførselafendeltagerienforretningsinteraktion.jegviludelukkendefokuserepådeeksekverebare processer,damitmålerenreelimplementeringafdisse. Kapitel2 12
19 EksekvarbareforretningsprocesseriBPELerbyggettilatkøreienprocesmaskine,som tilstandsmaskinenimplementeretsomendelafdetteprojekt.eneksekvarbarprocesibpel specificererpartnereinvolveretiprocessen,beskeder(messages),derudvekslesogetantal aktiviteter(aktivities),derudføresiprocessenslevetid.enaktivitetkanentenværeenprimitiveller enstrukturelaktivitet. Itabel2.1harjeglistetBPELsnuværende21aktiviteter[BPEL4WS]medenkortforklaringaf deresansvar. Navn Beskrivelse Type Assign Opdatererværdierivariabler. Primitiv Empty No op.udføreingenhandling. Primitiv Receive Afventersvarfraenbestemtbesked,ogudføresnårbeskeden modtages. Primitiv Reply Returnereretsynkronsvarpåetindgåendewebservicekald, dererudløstafenreceive. Primitiv Invoke Kalderenpartnerswebserviceentensynkronellerasynkron. Primitiv Throw Generererenfejlindefraforretningsprocessen. Primitiv Rethrow Kasterenfejligen,deroprindeligtvarblevetfangetafden omgivetfaulthandler. Primitiv Validate ValidererværdierivariableropmodderesassocieredeXMLog Primitiv WSDLdatadefinition. Wait Pauserprocessenforengivenvarighedellerindtiletbestemt tidspunkt. Primitiv Exit Afslutterenforretningsprocesomgående. Primitiv Compensate Starterkompensationforalleindrescopes,deralleredeer udførtkorrekt. Primitiv CompensateScope Starterkompensationforenspecificeretindrescope,der alleredeerudførtkorrekt. Primitiv ExtensionActivity UdviderBPELvedatintroducereennyaktivitetstype. Primitiv Sequence Udføreretsætafaktivitetersekventielt. Strukturel Kapitel2 13
20 If Vælgerénaktivitetfraetsætafmuligetiludførelse. Strukturel While Udførerdetsaktivitetsålængedenspecificeretbetingelseer sand. Strukturel RepeatUntil Udførerdetsaktivitetindtildenspecificeretbetingelsebliver Strukturel sand.tilforskelfrawhiletestesbetingelsen,nåraktivitetener blevetudført,detresultereri,ataktivitetenudføresmindstén gang. Pick Afventerétsvarudafadskillebeskederelleratderskeren time out. Strukturel Flow Udførerénellerflereaktivitetersideløbende.Aktivitetener udført,nåralledenssideløbendeaktivitetererudført(bpels supportforetgraforienteretflow). Strukturel ForEach GennemløberdensbarnscopeaktivitetpræcisN+1gange,hvor Strukturel Nerslutværdi startværdi.foreachkankøreparallelt,hvis detbliverangivet. Scope EnaktivitetmedegnepartnerLinks,handlers,variabler, correlationsetsogaktivitet. Strukturel Tabel2.1:BPELsaktivitetsmodel. SomtidligerenævnterBPELudtryktiXML.Alleprocesserstartermedet<process>element. Proceselementetindeholderaktiviteter,deklarationerafvariabler,partnerdeklarationer,partner linksdeklarationer,samtdeklarationeraffaulthandlerstilathåndterefejl. Variabler BPELunderstøtterbrugenafvariablertilatopbevareværdier.Tildelingafværdiertilvariablerkan skevedhjælpafaktiviterne<assign>,<invoke>og<receive>.variablerermedtilatbeskrive tilstandenforenprocesgennemdenslevetid.variablerkanerklæresglobaleellerlokaleiet specifiktscope.allevariablerertilgængeligeindenforenenkeltprocesinstans.globalevariabler erklæresindenielementetvariables.oversigt2.1visersemantikkenforhhv.<variables>og <variable>. Kapitel2 14
21 <variables> <variablename="bpelvariablename" messagetype="qname"? type="qname"? element="qname"?>+ from spec? </variable> </variables> Oversigt2.1:SemantikkenforBPELvariable EnBPELvariabelharattributterdernavngiverden,samtspecificererdenstype.Envariabelstype kanværeénafflg.tredeklarationer:wsdlbesked,xmlschematypeelleretxmlschema element.tilstandsmaskinen,implementeretsomendelafdetteprojekt,understøtterikkewsdl beskederellernogenformforskemavalideringpånuværendetidspunkt. Variablererikkeinstanstieret,nårenprocesinstanstieresogbliverdetførst,nårprocessenstartes. 2.2BPEL4PeopleogWS HumanTask DetteafsnitintroducererkortspecifikationerneBPEL4People[BPEL4P]ogWS HumanTask[WS HT].Dissespecifikationerharrelevans,daBPELspecifikationen[BPEL4WS]kunfokusererpå forretningsprocesser,derkommunikererviawebserviceudenyderligereforudsætninger.spektret forforretningsprocessererstørreenddet,damenneskeroftedeltageriudførelsenaf forretningsprocessen.dettemedføreretkravomatkunnehåndteremenneskeliginteraktionmellem enprocesogenbrugergrænseflade BPEL4People BPEL4People(B4P)erenudvidelsetilBPEL,dermuliggørmodelleringenafmenneskelige interaktioner,somkanstrækkesigfrasimplegodkendelsertilmerekomplekseadskillelseaf arbejdsopgaverbaseretpåroller. DennespecifikationintroducererenmenneskeligaktivitetpeopleActivity,somennybasisaktivitet, Kapitel2 15
22 dermuliggøratspecificereenmeredirektemådeatspecificeremenneskeliginteraktionpåien proces. Implementeringenafenmenneskeligaktivitetvilværeiformafeninlineopgaveellerenstandalone opgavedefineretiws HTspecifikationen. B4Perdefineretpåensådanmåde,atdetliggersometlagovenpåBPEL,sådetsegenskaberkan udgøresafbpelegenskaber.figur2.1viserhierarkietafwebservicestandarder,derindgåri BPEL,B4PogWS HT,somenlagdeltarkitektur. Figur2.1:Hierarkiafwebservicestandarder. Alleelementerintroduceretidenneudvidelseergjorttilgængeligeforbådeeksekverbareog abstrakteprocesseribpel. B4PudviderBPELsmekanisme,tilatimplementereudvidelserisproget,tilnuogsåatkunne indeholdeb4pelementerne.bpelkanudvidesgennemaktiviteten<extensionactivity>,hvilket medføreratattributterogelementerfraandrenamespaceskananvendesib4pelementerne. Oversigt2.2viserenuformelsyntaksforenBPELprocesogscope,derindeholderlogiske brugergrupper,menneskeligeinlineopgaverfraws HTogBP4aktiviteten<peopleActivity>. <bpel:process xmlns:b4p=" xmlns:htd=" HT">... <bpel:extensions> <bpel:extensionnamespace=" mustunderstand="yes"/> <bpel:extensionnamespace=" HT" mustunderstand="yes"/> Kapitel2 16
23 </bpel:extensions> <bpel:importimporttype=" HT" />... <b4p:humaninteractions>? <htd:logicalpeoplegroups/>? <htd:logicalpeoplegroupname="ncname">+... </htd:logicalpeoplegroup> </htd:logicalpeoplegroups> <htd:tasks>? <htd:taskname="ncname">+... </htd:task> </htd:tasks> <htd:notifications>? <htd:notificationname="ncname">+... </htd:notification> </htd:notifications> </b4p:humaninteractions> <b4p:peopleassignments>... </b4p:peopleassignments>... <bpel:extensionactivity> <b4p:peopleactivityname="ncname"...>... </b4p:peopleactivity> </bpel:extensionactivity>... </bpel:process> Oversigt2.2:UformelsyntaksforenBPELproces. EnB4PprocesskalanvendeB4PudvidelsenselementerogelementernefraWS HT specifikationen.derforskalelementerfrahhv.b4pogws HTnamespacesværekendtogforstås. Detvalgfrieelement<b4p:humanInteractions>indeholderdeklarationenafelementerne <htd:logicalpeoplegroups/>,<htd:tasks>og<htd:notifications>fraws HTnamespacet. Elementet<b4p:peopleAssignments>brugestilattildelepersonertilprocesrelaterederoller kaldet generichumanroles,somliggerudenfordetteprojekt.dennyeaktivitet <b4p:peopleactivity>brugestilatdefineremenneskeligeinteraktionerindenforbpelprocesser. DenneaktiviteterinkluderetiBPELaktiviteten<bpel:extensionActivity>,derudelukkende fungerersomen wrapper. BPEL<scope>kanogsåindeholderelementerfrahhv.B4PogWS HT,menkandogikke indeholdeelementet<b4p:peopleassignments>. Kapitel2 17
24 2.2.2WS HumanTask Menneskeligopgaverer services implementeretafpersoner.detilladerintegrationenaf menneskerienserviceorienteretarkitektur(soa).ws HTkanopdelesitodele,menneskelige opgaver(humantasks)ognotifikationer(notifications).førstnævntebeståraftointerfaces,etder eksponererservicentilbudtafopgavenogettilatadministreredisseopgaver(eks.tilat godkende/afviseenopgave). Menneskeligeopgaverkantildelespersoner,dersåanvenderinterfaceto,tilatadministreredisse. Menneskeligeopgaverkanendviderereagerepåtimeoutsogeksempelvistriggeren eskaleringshandling.notifikationersenderinformationeromkringrelevantehændelsertilenperson, denbenyttersigat fire and forgetmanner,hvilketbetyder,atafsenderenskubbernotifikationerud tilmodtagerenudenatventepåenkvitteringformodtagelsenframodtageren. WS HTanvenderandrespecifikationer,somdetfremgåraffigur2.1.Denoverordnetstrukturfor WS HTervistioversigt2.3 <?xmlversion="1.0"encoding="utf 8"?> <htd:humaninteractions xmlns:htd=" HT" xmlns:xsd=" xmlns:tns="anyuri" targetnamespace="anyuri" expressionlanguage="anyuri"? querylanguage="anyuri"?> <htd:extensions>? <htd:extensionnamespace="anyuri"mustunderstand="yes no"/>+ </htd:extensions> <htd:importnamespace="anyuri"? location="anyuri"? importtype="anyuri"/>* <htd:logicalpeoplegroups>? Kapitel2 18
25 <htd:logicalpeoplegroupname="ncname"reference="qname"?>+ <htd:parametername="ncname"type="qname"/>* </htd:logicalpeoplegroup> </htd:logicalpeoplegroups> <htd:tasks>? <htd:taskname="ncname">+... </htd:task> </htd:tasks> <htd:notifications>? <htd:notificationname="ncname">+... </htd:notification> </htd:notifications> </htd:humaninteractions> Oversigt2.3:overordnetstrukturforWS HumanTask. Elementet<htd:humanInteractions>harflg.egenskaber: AttributtenexpressionLanguageangiverhvilketsproget,deranvendestilatevaluere udtrykideomgivetelementer,somstandardanvendesxpath1.0[xpath]. AttributtenqueryLanguageangiverhvilketsprog,deranvendestilatdefinereforespørgseli deomgivetelementer,hererstandardenogsåxpath1.0. Elementet<htd:extensions>ervalgfrit,menhvisdeterdefineret,skaldetindeholde mindstet<htd:extension>element.heltkonkretangiverdet,hvilkenamespacews HT benyttersig.deresattributterogelementerkananvendesiws HT. Elementet<htd:import>erklærerenafhængighedtileneksternWS HTellerWSDL [WSDL].Derkanværeerklæret0 n<htd:import>elementerunder <htd:humaninteractions>. Elementer<htd:logicalPeopleGroups>angiverlogiskepersongrupper,deranvendesi menneskeligeopgaverognotifikationer.elementetervalgfrit,menhvisangivetskalden indeholdemindstet<htd:logicalpeoplegroup>element. Kapitel2 19
26 Elementet<htd:tasks>specificereretsætafmenneskeligeopgaver.Elementetervalgfrit, menhvisdeterspecificeret,skaldermindstværespecificeretet<htd:task>element. Elementet<htd:notifications>specificereretsætafnotifikationer.Elementetervalgfrit, menhvisdeterspecificeret,skaldermindstværespecificeretet<htd:notification> element. Yderligeredetajleringerafdeenkelteattributterogelementerliggerudenfordetprojektsrammer. 2.3PHP PHP(HypertextPreprocessor)9dukkedeførstegangoptilbagei1995.Nu13åreftererdetblevetet særdelesudbredtscriptsprog,derhovedsageligterfokuseretpåserver sidescripting.oprindeligtvar PHPdesignettilatlavedynamiskewebsider,menharmedtidenudvikletsigtiletmodent programmeringssprog,derbådesupportererproceduremæssig ogobjektorienteretprogrammering (OOP)10.Medudgivelsenafversion5,13.Juli2004,kunnePHPsprogetbydeenobjektmodel lignededenmankenderfrajavaogc#.phpergennemtidenblevetpåvirketafmangeandresprog (C,Perl,C++ogPython)ogregnesfortiden(Juli2008)fordetfemtemestpopulære programmeringssprog,kunovergåetaf(visual)basic,cogjava[tiobe]. Vigtigtfordetteprojekter,atPHPharmegetbrugbarefunktionertiltekstbehandling.Deterisær funktionernetilatparseogfåadgangtilxml dokumenter,somervigtigirelationtiludviklingen afworkflowmaskinen(sekapitel6). FraPHP4blevSAXogDOMstandarderneunderstøttet,mankanendvidereanvendeXSLT udvidelsernetilattransformerexmldokumenter.php5standardisererallexmludvidelserpå densolidebaseilibxml2ogudviderdettesætaffunktionervedattilføjesimplexmlog XMLReaderunderstøttelse. PHPernemtatlære,ogmestrermanførstsproget,erdenvigtigstefaktor enkeltheden,derefter minmeningkanoversættestilkorteudviklingscyklusser(dadenfortolkesdirekteafweb serveren ogikkekræverkompilering,hvilketgøratdukantesteon the fly),mindreudgiftertiloplæring, 9 Denofficiellehjemmeside: 10 Paradigmer:Imperativogobjektorienteret Kapitel2 20
27 nemtatvedligeholde,størrefleksibilitetognemtatudvide.enandenyderstvigtigmedspillererdet enormeogsærdelesaktivefællesskabomkringphp,derikkekungør,atphpheletidenudvikler sig,menogsåattusindeafopen sourceapplikationergørdet.applikationerdererligetilattage nedfrahyldenogbrugeellerkananvendessomreferencertilnyeapplikationer(såsomdineegne). [SB05]og[LWLT04]giverbeggeenrigtiggodtintroduktiontilPHP5,sombådeegnersigtil nybegyndereogøvedeindenforoop.[gs04]erfordemereøvede,dabogenprimærtkoncentrerer sigommereavanceredeemnerindenforphpprogrammering. 2.4XForms XFormsdukkedeførstegangoptilbageiapril2000,iformafenkladdemedtitlen Datamodelling ProposalforXForms11[XFORMSDM].KladdenblevudarbejdetafWorldWideWebConsortium (W3C)ogharfaktiskingenlighedermeddennuværendeXFormsanbefaling. XForms1.0erW3C'sforslagtildennæstegenerationafwebforms,derbetragtessomafløserenfor webformsbaseretpåhtml[xforms].xformserikkeenselvstændigdokumenttype,mener tiltænktatskulleintegreresiandremarkup sprog(somxhtml,wml,svgetc.)[xforms]. XFormskananvendeforskelligesprogtilatudformelayoutet,hvoriXFormsskalintegreres,typisk vildetværexhtml,wmlellersvg.oversigt2.4visereteksempelpåenxform. <?xmlversion="1.0"encoding="utf 8"?> <htmlxmlns=" xmlns:xf=" xmlns:ev=" events"> <head> <title>updatedraft</title> <metaname="author"content="danielk.theemann"/> <scripttype="text/javascript"> functionbuildactionurl(){ varparam_array=window.location.href.split("?"); varlocation="upddraftformsubmit.php"; 11 DatamodelleringsforslagtilXForms Kapitel2 21
28 if(param_array.length>1){ location="upddraftformsubmit.php?"+param_array[1]; document.getelementbyid('updatedraftform').setattribute('action',location); </script> <! thexforminstancemodel > <xf:model> <! thesubmittedresultwillbestoredinaxmldocumentwiththisstructure. > <xf:instanceid="result"xmlns=""> <draft> <title/> </draft> </xf:instance> <xf:instanceid="js"> <dataurl="javascript:buildactionurl()"/> </xf:instance> <! theinputfieldsareallrequired > <xf:bindnodeset="/draft/title"id="title"required="true()"/> <! submission > <xf:submissionid="updatedraftform"method="post"includenamespaceprefixes="" action=""/> <! messagesonsubmit > <xf:messageev:event="xforms submit error"level="modal"> Can'tsubmit! </xf:message> </xf:model> </head> <body> <h3>pleaseupdatethedraft.</h3> <! thexforminterfacemodel > <xf:inputref="title"> <xf:label>writeyourdraft'stitlehere:<br/></xf:label> Kapitel2 22
29 </xf:input> <br/><br/> <xf:trigger> <xf:label>submit</xf:label> <xf:actionev:event="domactivate"id="dynamicsubmission"> <xf:sendsubmission="updatedraftform"/> </xf:action> </xf:trigger> </body> </html> Oversigt2.4:Xformseksempel. SomenW3CstandardharXFormsogsådenintentionatskulleudviderepertoiretforteknologier baseretpååbnestandarder.detbetyder,atapplikationerbaseretpåxformsøgergenbrugligheden, reducereromkostningernetiloplæringoglettervedligeholdelsenaføvrigeteknologer. Figur2.2illustrererXFormsdokumentmodellenogdefundamentalestandarder,somdenbygger på.allestandarder,idetoøversteblokke,byggerpåxmlstandarden.xformsanvenderxpathtil atudtrykke,hvorledesinstansdataogformkontrolelementererbundetsammen,xml Schematil typevalidering(reducererantalserverbesøg),namespacestilatdefinerereferencertilandre standarderogxmleventssomafløserfordentættekoblingmellemhtmlformelementerog JavaScript(nårenhandlingernødvendig). Figur2.2:XFormsdokumentmodellenogfundamentalestandarder. Forbegynderegiver[XFE03]enrigtiggodintroduktiontilXForms.Delidtmereøvedefårmereud afatlæsedennuværendew3canbefaling[xforms],menkanfintanvendeførstnævntesom Kapitel2 23
30 opslagsværk. 2.5Sammenfatning Iudviklingenaftilstandsmaskinen(sekapitel6),dererendelafdetteprojekt,anvendesPHPs understøttelseafdomtilatparseogtilgåprocesdefinitionernedefineretibpel. JegvilidetteprojektsebortfrafølgendeBPELegenskaberogaktiviteter: Deleaffejlhåndtering.DetteindbefatteraktivitetenRethrowogbrugenaffaultHandlersog dertilhørendeelementer. Kompensation.DetteindbefatteraktiviteternecompensateogcompensateScope,samt brugenafcompensatehandlers. BrugenafWSDLporteogWSDLbeskeder.Detteindbefatterelementernemessage, partnerlink,samtbrugenafwsdlporttypes. GraforienteringenfraWSFL.Herunderhørerbrugenafaktivitetenflowtilatoprettelinks mellemaktiviteterne.detteindbefatterbrugenafelementernelinks,link,source,samt target. Beskedudvekslingviawebservices.Detteindbefatteraktiviteternereceive,invokeog reply,samtbrugenafpropertiesogcorrelationsets. Desudenaktiviteternescope,repeatUntil,forEach,pick,extensionActivityogvalidate. Ijuni2007publiceredeActiveEndpoints,Adobe,BEA,IBM,OracleogSAPspecifikationerne BPEL4People[BPEL4P]ogWS HumanTask[WS HT]somenopfølgningpåhvidbogen[WS BPEL1].Debeskriver,hvordanmenneskeliginteraktionkanudføresiBPELprocesser.Disse specifikationerblevganskekortintroduceretidettekapitel. Pådettidspunkthvordetteprojekterudarbejdet,erderingenafdeudbredteogmestanvendte browsere(ie,firefox,operaellersafari),somdirekteunderstøtterxforms.derfindesudvidelser tildeenkeltebrowsere,somskalinstalleres.idetteprojekterfirefoxvalgtsomdenforetrukne Kapitel2 24
31 browser,derforatkunnesupporterexforms,krævermozillaxformsudvidelsen[xformsff] installeret. Detteprojekteropensource,hvilketstøtterbrugenafetsprog(PHP),dersomomtaltharetstort opensourcesamfund. Kapitel2 25
32 Kapitel3 Workflowmønstre Dettekapitelerdeltopitoafsnit.Etderpræsentereretudplukafworkflowmønstre,derpå nuværendetidspunktunderstøttesdirekteibpel,samtetderganskekortpræsentererhuman workflowmønstre. 3.1WorkflowmønstreiBPEL Workflowmønstre(WM)beskriver,ligesomsoftwaredesignmønstre[GOF94],enløsningfor tilbagevendenogalmenkendteproblemstillinger.deerbåderelevantfordem,derimplementerer WM'eneogbrugerneafworkflowhåndteringssystemet.FørstnævnteanvenderWM'enesometfælles vokabular,menssidstnævnteanvenderdemibeskrivelsenafforretningprocesser. Ikapitel3afsinPhDafhandling[BK03],beskriverBartoszKiepuszewskikravenefor workflowsproggennemwm,somerdenpragmatiskemåde,atbeskrivedetpå. BaseretpåWM'enebeskrevetikapitel3,beskriverBartoszKiepuszewskiikapitel4enmådeat mappedissetilenformelmådeatbeskrivemodelleringenafworkflowprocesdefinitioner.han anvenderherpetri nets[petri],someretformeltmodelleringssprog,dergrafiskkangengive opførslenfor,eksempelvisdistribueredesystemerogworkflow,iformafenorienteretgraf. Petrinetsgraferbeståraftotyperafknuder,nemligpladser(places)ogovergange(transitions),hvor pladserkunmåværeforbundettilovergangeogovergangetilpladser.tilstandenisystemerer Kapitel3 26
33 beskrevetmedsåkaldtetokenspåpladser.figur3.1viserbasiselementerne,derudgøreretpetrinet. Figur3.1:BasiselementerneietPetrinet. Opførslenerbeskrevetveddenenkleregelatenovergangkan"fyre"(ellerudføres)hvisderer mindsténtokenpåalledepladser,hvorfradererpiletilovergangen ogfyringenbevirkeratder fjernesentokenfrahverafdissepladserogdertilføjesentokenpåallepladser,hvortildererenpil fraovergangen. IdetteafsnitbeskrivesdetudplukafkendteWM,sompånuværendetidspunktunderstøttesdirektei BPEL.BeskrivelsenafdeWM,somharderesoprindeligedefinitioni[WA03],afvigerikkefraden. ØvrigeWM'ertagerudgangspunktideWM'er,somBartoszKiepuszewskiforklarerikapitel3 [BK03] Grundlæggendemønstre Degrundlæggendemønstredækkeroverfundamentaleprocesaktiviteter,somatudføreaktiviteter sekventielt,opdeleogseneresamleaktiviteter,ogvælgeenaffleregrenebaseretpåetbetingetvalg. Defemgrundlæggendemønstreer:sekvens,parallelopdeling,synkronisering,eksklusivtvalgog simplefletning. Sekvens Sekvensworkflowmønstretrepræsentererensekventieludførselafaktiviteter:enhandlingiet workflowaktiveres(eksempelviscifigur3.2)efteratenanden(eksempelvisbifigur3.2)er udført. Kapitel3 27
34 Figur3.2:Sekvens BPELunderstøtterdettemønstergennemaktivitetensequence.Enimplementeringaffigur3.2i BPELkunnesesåledesud: <sequence> <invokename= A.../> <invokename= B.../> <invokename= C.../> </sequence> Oversigt3.1:SekvensiBPEL. Parallelopdeling(AND split) Workflowmønstretparallelopdelingforgrenerenenkeltrådunderudførelseifleretråde,somskal udføresparallelt(somnåraaktiveresifigur3.3).dettilladerataktiviteterudføressimultanelleri vilkårligrækkefølge. Figur3.3:Parallelopdeling Figur3.4:Synkronisering Synkronisering(AND join) Workflowmønstretsynkroniseringkonvergererfleretrådeunderudførelse(eksempelvisdemsom enderihhv.bogcifigur3.4)tiléntrådunderudførelse(eksempelvisdifigur3.4),derventerpå atallepåkrævedetrådeerudført.detkanforekomme,atikkeallepåkrævedetrådesforudsætninger opfyldt,hvilketrejserproblematikkenomkring deadpaths. Kapitel3 28
35 BPELunderstøtterparallelopdelinggennemaktivitetenflow.Synkroniseringerunderstøttet implicit,daparalleludførelseermodelleretsomenkontrolstrukturibpel,hvilketgør,atdenselv håndtererdenefterfølgendefletning,nåralleunderaktivitetererudført. Enimplementeringaffigur3.3og3.4iBPELkunnesesåledesud: <invokename= A.../> <flow> <invokename= B.../> <invokename= C.../> </flow> <invokename= D.../> Oversigt3.2:ParallelopdelingogsynkroniseringiBPEL. Deadpathelimination Deadpathelimination erenteknik,anvendtisprogsomnetopbpeltilatomledeaktiviteter,hvis forudsætningikkeeropfyldt.figur3.5aviseretscenario,hvoren deadpath kanoptræde. AktivitetenRejstilUSAventerpådeparallelleaktiviteterBookflyogFornypaserudført,ogvil kunbliveudført,hvisbeggeaktiviteterersande.erbareenafdemfalskbliverrejsentilusaikke tilnogetogkuffertenskalikkepakkes. Figur3.5a:Eksempelpåetdeadpatheliminationscenario. Figur3.5bviserenPetrinetrepræsentationafdeadpatheliminationforscenariofrafigur3.5a.De grønnepileindikereretsandtresultatogderødeetfalsk. Kapitel3 29
36 Figur3.5b:EksempelpåetdeadpatheliminationiPetrinet. Transitionerne(aktiviteterne)BookflyogFornypasforgreneriénudaftomuligegreneefterderes udførelse:etsandtresultatførertilstedett,etfalskresultatførertilf.defireanonyme(lambda) transitionerventerpåogsamlerresultatetafdetoaktiviteter:tteraktiveret,hvisbeggeaktiviteter levereretsandtresultat,ffhvisdebeggelevereretfalskresultat,tfhvisbookflyersandogforny paserfalskogendeligftsomerdetmodsatteaftf. TTtransitionensenderentokenvideretilstedetT,dersenderdenvidereaddenrigtigestimod aktiviteternerejstilusaogpakkufferten.tf,ftogffsenderdenvideretilstedetf.fsender tokenvidereadensti,derintetudfører. Eksklusivtvalg(XOR split) WorkflowmønstretEksklusivtvalgforgrenerenaktivitet(eksempelvisAifigur3.6)iflere aktiviteter(eksempelvisbogcifigur3.6),hvorkunéngren,idenneforgrening,udføresbaseret påevalueringenafenbetingelse(eksempelviscifigur3.6). Figur3.6:Eksklusivtvalg Kapitel3 Figur3.7:Simpelfletning 30
37 Simpelfletning(XOR join) Workflowmønstretsimpelfletninganvendestilatfletteforgreningerfraeteksklusivtvalg (eksempelvisbogcifigur3.7)tilénaktivitet(eksempelvisdifigur3.7).detantages,atkunén grenudafalleforgreningervælgesogatingensynkroniseringfindersted.ingenafforgreningerne udføresnogensindeparallelt. BPELunderstøttereksklusivtvalggennemaktivitetenif.Simpelfletningunderstøttesimplicit,da betingetbearbejdning(someteksklusivtvalg)ermodelleretsomenkontrolstrukturibpel,hvilket gør,atdenselvhåndtererdenefterfølgendefletning,nårdenif betingelsenerudført. Enimplementeringaffigur3.6og3.7iBPELkunnesesåledesud: <invokename= A.../> <ifname= evalvariabeli > <condition>$i=50</condition> <empty.../> <elseif> <condition>$i>50</condition> <sequencename=....../> </elseif> </if> <invokename= D... Oversigt3.3:EksklusivtvalgogsimpelfletningiBPEL Avanceretforgrenings ogsynkroniseringsmønstre Idetteafsnitvilfokusværepåmereavanceretmønstreforforgreningogsynkronisering.Disse mønstreharikke,somdeforrige,direktesupportideflesteworkflowmaskiner.derforerde stadigvækgængsei real life forretningsscenarier.deintroduceredemønstreer:multivalgog synkronfletning. Kapitel3 31
38 Multivalg(OR split) Multivalgdefinererfleremuligestier(eksempelvisBogCifigur3.8)foretworkflow,hvorensti ellerflerestiervælges(eksempelvisbellercellerbeggeifigur3.8).deterirealitetener generaliseringafparallelopdelingogeksklusivtvalg. Figur3.8:MultivalgogSynkronfletning Synkronfletning(InklusivOR join) Synkronfletninganvendestilatsynkronisereflereparallelleeksekveringstråde,somerblevet aktiveretafdetforegåendemultivalg(eksempelvisdem,derenderibogcifigur3.8). BPELunderstøtterbådemultivalgogsynkronfletninggennembrugenaflinksiaktivitetenflow Strukturmønstre Strukturelleworkflowmønstrebeskæftigersigmedforskelligerestriktioner,somworkflowmodeller kanpålægges. Implicitafslutning Implicitafslutningener,nåreksekveringenafetworkflowerafsluttetkorrekt,hvisderikkeerflere aktivitetertilbageellerkunaktiviteter,derikkekanaktiveres.detteworkflowmønsterunderstøttes gennemflow Multipelinstansmønstre Dissemønstreomhandlerflereeksekveringstrådesamtidigt.Hvilketbetyder,atenaktivitetiet workflowkanhaveflereaktiveinstanserkørendesamtidigt. Kapitel3 32
39 Multipelinstanserudensynkronisering Detteworkflowmønsteranvendestilatopretteflereaktiviteter(eksempelvisBogCifigur3.9), indenforsammeprocesinstans(eksempelvisaifigur3.9),derudføressamtidigt.dissetråde (aktiviteter)erfuldstændiguafhængigafhinandenogkørerparallelt.deterikkeetkrav,atdisse aktiviteterisidsteendebehøveratsynkroniseres. Figur3.9:Multipelinstanseru.synkronisering. DetteworkflowunderstøttesgennembrugenafaktiviteteninvokeindeienforEachaktivitet.En implementeringaffigur3.9ibpelkunnesesåledesud:... <foreach> <startcountervalue>1</startcountervalue> <finalcountervalue>5</startcountervalue> <invokename= A.../> </foreach>... Oversigt3.4:Multipelinstanseru.synk.iBPEL Tilstandsbaseretmønstre Detilstandsbaseretworkflowmønstrepræsentereretidennesektionharalletilfælles,atenaktivitets tilstand(typiskomhvorvidtdeneraktiveretellerdeaktiveret)dynamiskkanblivepåvirketafen andenaktivitetstilstandienworkflowproces. Kapitel3 33
40 Udskudtvalg(udskudtXOR split) Ietworkflowanvendesdettemønsterpåettidspunkthvorenaffleremuligegrene(eksempelvisB, CogDifigur3.10)skalvælges.Tilforskelfraeksklusivtvalg,blivervalgetikkeforetageteksplicit (dvs.baseretpådataellerenbeslutning),menderforkommerderimodetracemellemdeforskellige grene(eksempelvisb,cogdifigur3.10).efteratbeslutningenertagetvilaludførelseide alternativegrene(eksempelvisbogdifigur3.10)meldesigudafdetstartederace. Figur3.10:Udskudtvalg. Detteworkflowunderstøttesgennembrugenafaktivitetenpick.Enimplementeringaffigur3.10i BPELkunnesesåledesud:... Kapitel3 34
41 <pick> <onmessagepartnerlink="pl1">... </onmessage> <onmessagepartnerlink="pl2">... </onmessage> <! eksempelvissættealarmentilatstarte 3dageog10timerefterdensidsteordrelinie > <onalarm> <for>'p3dt10h'</for> <! eksempelvishåndteretimeoutforordreafslutning > </onalarm> </pick>... Oversigt3.5:UdskudtvalgiBPEL Annulleringsmønstre DensidstegruppeafBPELworkflowmønstre,somdervilblivepræsenteret,ermønstredergørdet muligtatannullereenprocespåethvilketsomhelsttidspunktundersinudførelse.havdemanikke dissemønstrevillemanskulletjekkepåomenprocesskulleannulleres,hvergang,detkunne forekomme.determerehensigtsmæssigtmedetenkelttjek.dervilherblivepræsenterettotyperaf annulleringsmønstreannulleraktivitetogannullercase. Annulleraktivitet Formåletmeddenneaktiviteterstoppeudførelsenafenprocesaktivitetmedentrigger,derforetager annulleringen.dettemønstereroftebrugbarttilatafbrydelangtidskørendeellersuspenderede processer,ellertilatomdirigereenprocesadeneskaleringssti.figur3.11viseretpetrinetfor annulleringenafenlangtidskørendeproces. Kapitel3 35
42 Figur3.11:Annulleraktivitetmønster(eksempel) MellemtransitionerneAogBerderenlangtidskørendeproces.Foratmuliggøreannulleringenaf netopdenneproces,erderblevetplaceretetudskudtvalgmellemdenlangtidskørendeprocesoget annulleringsevent.såsnartdetudskudtevalgfuldføres,startestransitionb. DetteworkflowunderstøttesgennembrugenaffaultHandlersogcompensateHandlers. Annullercase Formåletmeddettemønstereratstoppeenhelprocesvedhjælpafenannulleringstrigger.Nåren processtarteropdelesdenitoseparatestier,enmedprocessensprimæreforløbogenmedet annulleringsevent.hvissidstnævnteindtræder,imensprocessenprimæreforløberigangafsluttes heleprocessen.figur3.12visereteksempelpådettemønster. Figur3.12:Annullercasemønster(eksempel) Ioversigt3.6ervistenBPELimplementationafdettemønster. <process> <eventhandlers> <eventhandlername= cancelevent...> Kapitel3 36
43 <exit/> </eventhandler> </eventhandlers> <! primaerforløb. > <sequence>... </sequence>... </process> Oversigt3.6:AnnullercaseiBPEL(eksempel) Iprocesområdet,erderdefinereteneventHandler,derlytterpåhændelsen cancelevent,nårdet indtræder,afslutterhandlerenheleprocessengennembrugenafbpelaktivitetenexit. DettemønstererligAnnulleraktivitet,dogmedundtagelseafatannulleringshandlingenherkører paralleltmedprocessensprimæreforløb,istedetforienenkeltaktivitet. 3.2Humanworkflowmønstre NårmansnakkeromHumanworkflowmønstredukkerderoftetomønstreop,nemligeskaleringog prioritering. IPrioriteringsmønstrettildelesenmanuelaktivitetenstartprioritet.Denomprioriteresefterhånden somdenbliver ældre ellerafandrebetingelser.ieskaleringbliverenmanuelaktivitetoverdraget tilandenpersonellerrolle,nårdetbliverdikteret. 3.3Sammenfatning Dettekapitelpræsenteredeworkflow routing konstruktioneriformafworkflowmønstre.de introduceredemønstreerbaseretpåde,afbartoszkiepuszewski[bk03],beskrevetmønstremed henblikpåatdanneetoverblikoverdendirekteunderstøttelsefordisseibpel.udoverde introduceredeworkflowmønstre,understøttesflg.ogsåibpel: Struktureretløkker(whileerenstruktureretløkke) Kapitel3 37
44 Persistenttrigger(enpickderafventerenspecifikbeskedtype) Acyklisksynkronfletning(linksindeiflow ligesommultivalgogsynkrontvalg) Kritisksektionogindflettetruteplanlægning(serialiseredescopes) Desudenblevhumanworkflowmønstreneeskaleringogprioriteringganskekortintroduceret. Tilstandsmaskinen(kapitel6)understøtterpånuværendetidspunktetlilleudplukafde introduceredeworkflowmønstre,nemligsekvens,eksklusivtvalg,simpelfletning,multipleinstanser udensynkroniseringogannullercase. Kapitel3 38
45 Kapitel4 Krav Dettekapiteldiskutererdefunktionelleogikke funktionellekrav,somletvægtsphp tilstandsmaskinenskalopfylde,samtmuligeaktører,derkunneanvendetilstandsmaskinen.det sidsteafsnitbeskriverenusecase,somdenimplementeredetilstandsmaskineskalkunneudføre. 4.1Tilstandsmaskinen IsidsteinstansviltilstandsmaskinenbliveforsøgtintegreretoganvendtiPharmaNordApS,tilat udføreworkflows,derunderstøttesaftilstandsmaskinen Funktionellekrav Kravenederrelaterersigtildenfaktiskeimplementeringaftilstandsmaskinener: Skalkunneudføreetworkflow,hvorforretningsprocessendefineressomenBPELprocess. Tilladeenmanuelprocesatkoordinere(instantiereogsåafventefuldførelsen)med menneskeligeopgaver,deradministreresgennemenarbejdsliste(webapplikation) Ikke funktionellekrav Deikke funktionellekravinkluderer: Softwarekomponentenvilbliveimplementeretgennembrugenafversion5afPHP programmeringssproget,daminnuværendearbejdsgiverkræverdette,foratkunneintegrere denmeddeeksisterendesystemer. Kapitel4 39
46 Levereengodunderstøttelseafudvalgteworkflowmønstrenebeskrevetiafsnit3.1. Softwarekomponentenskalnemtkunneudvides. Simulationafworkflowudførelsentilatdebuggeogtesteskalværemuligt Aktører Dervilværeforskelligeaktører,derinteragerermedsystemet.Følgendeaktørererblevet identificeretiht.tilkravenebeskrevetiafsnit4.1.1og4.1.2: Procesadministratorer Brugere,deranvenderarbejdslisten 4.1.4Usecase Herbeskrivesusecasen.somskalsupporteresafdenimplementeredetilstandsmaskinen. Evalueredokument Somendelafetudviklingsteamerman,somudvikler,ofteidensituationatskulleskrive dokumentation,somskalkunneforståsafdeøvrigeiteamet.derforvilledetværehensigtsmæssigt, atenkladdeskalevalueresførdenbliverpubliseret,sometdokument,foratsikreenhøjkvalitetog ensartethedforalledokumenter.énmådeatkunneløsedetpå,erillustreretgennempetrinetteti figur4.1.processener: Enkladdeoprettes Kladdenevalueres,somenderudmedengodkendelseellerenafvisning. Godkendeskladden,vildenblivepubliseretsometdokument. Enafvisningenresultereri,atkladdenskaligennemendnuenevaluering,nårdenerblevet opdateret. Kapitel4 40
47 Figur4.1:Petrinetforusecase Evalueredokument. EnBPELimplementeringafovenståendefigurergivetioversigt4.1. <?xmlversion="1.0"?> <processname="reviewdocument" xmlns=" open.org/wsbpel/2.0/process/executable"> <variables> <variablename="draft"shared="yes"/> <variablename="reviewresult"shared="yes"/> <variablename="comment"/> <variablename="approved">n</variable> <variablename="publisheddocument"/> </variables> <onchangename="draftcreated"variable="draft"/> <sequence> <while> <condition>$approved="n"</condition> <sequence> <humanformname="reviewform"> <sequence> <invoke url=" <onchangename="updatereviewresult" variable="reviewresult"/> Kapitel4 41
48 <assign> <copy> <fromvariable="reviewresult"> <query>/review/comment</query> </from> <tovariable="comment"/> </copy> </assign> <assign> <copy> <fromvariable="reviewresult"> <query>/review/approved</query> </from> <tovariable="approved"/> </copy> </assign> </sequence> </humanform> <if> <condition>$approved="n"</condition> <humanformname="updatedraft"> <sequence> <invoke url=" <onchangename="draftupdated"variable="draft"/> </sequence> </humanform> </if> </sequence> </while> <assign> <copy> <fromvariable="draft"/> Kapitel4 42
49 <tovariable="publisheddocument"/> </copy> </assign> </sequence> </process> Oversigt4.1:BPELimplementeringafpetrinetfrafigur Sammenfatning Dettekapitelintroduceredelæserenfordefunktionelleogikke funktionellekrav,derertil tilstandsmaskinen(tm).måleternaturligvisatkunneopfyldedeopstilledekrav,samtpræsentere dette,vedatevaluereusecasen Evalueredokument meddenimplementeredetm. Usecasen Evalueredokument udspringerafmitdagligearbejde,hvordetkunnevære hensigtsmæssigtatindføreenevalueringaftekniskedokumenter,indendeblevfrigiveti organisationen.dervedsikresethøjereniveauogenensartethedfordokumenterne. FornærmeredetaljeromkringworkflowmodellenforogselveimplementeringenafTM'en,setil kapitel5og6. Kapitel4 43
50 Kapitel5 Workflowmodel Dettekapitelpræsenterersemantikkenforworkflowmodellen,somerfundamentetfor workflowmaskinen,somerudvikletsomendelafdetteprojekt. 5.1AktiviteterogDOM Workflowmodelleneraktivitetbaseretogunderstøtter,pånuværendetidspunkt,bådeetudplukaf BPELsaktivitetmodel(setabel2.1)ogprojektspecifikkeaktiviteter,kaldetSM BPEL(seafsnit ).WorkflowmodellenerrepræsenteretgennemetDOM træ,hvoraktiviteter,derudføres underworkflowetvilblivefortolket,sådekanhåndteresafworkflowmaskinen.oversigt5.1viser ensimpelprocesdefineretgennembrugenafbpelogprojektspecifikkeaktiviteter. <processxmlns=" open.org/wsbpel/2.0/process/executable" name="sequencetestfile" suppressjoinfailure="yes"> <variables> <variablename="input"/> <variablename="output"/> </variables> <sequencename="main"> <onchangename="receiveinput"variable="input"/> </sequence> </process> Oversigt5.1:Simpelforretningsproces. Figur5.1illustrererDOMrepræsentationafprocessendefineretioversigt5.1.Repræsentationeni figur5.1repræsentererenruntimedatamodel,somerenmodel,derbådeindeholder Kapitel5 44
51 procesinstansenogdenspersistensering. Figur5.1:DOMrepræsentationafprocessenfraoversigt Strategiforafviklingen Afviklingenafetworkflowstarter,nårdenførsteaktivitetifloweterudført.Alleaktiviteterkan fungeresomstartaktivitet. Efterhveraktiviteterblevetudført,fjernesdenfraDOM træetogdertraverserestilnæsteaktivitet. HverBPELaktivitetfortolkes,foratworkflowmaskinenkanforstådenogudføresdernæstgennem XML omskrivning(seafsnit6.2.3). IdéenoginspirationenomkringatanvendeXML omskrivningsommemorymodelforatgemme processenstilstandkommerfraforskningsprojektetcosmobiz[cosmobiz].efterhåndensomet workfloweksekveres,ændresdetstilstanditaktmedataktiviteterudføres.tilstandenændresvedat aktiviteteromskrivesløbendeellernåropdateringerafworkflowvariablergemmesumiddelbart Kapitel5 45
52 efteropdateringen. Sammenholdesmemorymodellen[COSMOBIZ]medruntimedatamodel,somMichaelHavey fremsætter[ebpm05],såerruntimedatamodellenenrepræsentationafinstansen,somegentliger detsammesommemorymodellensrepræsentationafprocessen.pointenerher,atmemory og persistensformatetnæstenerens. EnBPELproceskanhaveoptilflereslutaktiviteter,dereksplicit(<exit>)afslutterafviklingenaf workflowet.afviklingenafworkflowetbliverimplicitafsluttet,hvisderikkeerflereaktiviteterat udføre(seimplicitafslutningfraafsnit3.1.3). 5.3Flowkontrol Semantikkenforflowkontroliworkflowmodellenbyggerpådeunderstøttedeworkflowmønstre, somblevdiskuteretikapitel3,øvrigebpelaktiviteterogsm BPELaktiviteterne. 5.4Tilstandogvariabler Workflowmodellenunderstøttertilstandsformergennembrugenafworkflowvariabler<variable> (sekapitel2).workflowvariableropbevarerbeskederellerdata,derudvekslesmedpartnere(ikke endelafdetteprojekt)ellerkuninterntiforretningsprocessen. Internevariablerienforretningsproceskanværesynligeforandreforretningsprocesser,hvilket betyder,atworkflowmodelleneretsåkaldtdelt lager.etdeltlagerbetyderidennekontekst,atde kananvendedeltevariablerfraandreworkflows,dererstartetindenforsammebrowsersession.det angivespådenenkeltevariabel,omdenerdelt(seevt.afsnit6.2.1). Variablergemmertilstandeafdata,workflowmodellenunderstøtterogsåatkunnegemmetilstanden afselveafviklingenafetworkflow.detbetyder,atafviklingenafetworkflowaltid,eksempelvisi tilfældeafsystemnedbrud,kanforsættefradensidstgemtetilstand. Workflowvariablerkanbådeændresautomatisk(automatiskeaktiviteter)ogmanueltafbrugere Kapitel5 46
53 (manuelleaktiviteter). Afventesvar Sålængeaktiviteten<onChange>afventersvarpå,omenpågældendevariabelharændretværdi, sættesworkflowafviklingeniventepositionogforsættesførst,nårværdienerblevetændret. 5.5Manuelleaktiviteter Workflowmodellenunderstøtterogsåenaktivitet,derkaninterageremedmennesker(deraf manuelleaktiviteter).aktivitetsmodellenibpelunderstøtterikkemanuelleaktiviteter,derforer deriworkflowmodelleninkluderetennyaktivitet<humanform>(seafsnit ),somanvender etparafbpelsaktiviteterog<onchange>aktivitetenidetsstruktur. 5.6Sammenfatning Dettekapitelpræsenteredeworkflowmodellen,derliggertilgrundfordenimplementerede workflowmaskine.modellenhenterbpelogsm BPELelementernefraprocesdefinitionen,indi etdomtræ,somworkflowmaskinenparserogudfører.nårdenførsteaktiviteterblevetudført, ansesworkflowetsomstartet. Workflowmodellensupportererbådeautomatiskeogmanuelleaktiviteter.Deautomatiskeeret udplukafbpelsaktiviteter,samtsm BPELaktiviteten<onChange>.ISM BPELerderen aktivitet<humanform>,sommuliggørinteraktionenmedmenneskerviaxforms. DataietworkflowgemmesiBPELs<variable>element,somderkandefineres0..naf.Disse variablerkandefineressomglobalellerlokale.deglobaledefineresindenielementet <variables>,somerenbarnenodetil<process>elementet.lokalevariablerervariabler,der defineressomenbarnenodetilbpelaktiviteten<scope>.denneworkflowmodelunderstøtter ogsåatprocesinstanserindenforsammebrowsersessionkanbenytteandresdeltevariabler. SM BPEL<onChange>aktivitetenkansætteetworkflowiventepositionindtilengivenvariabel Kapitel5 47
54 fårtildeltennyværdi.denneaktivitetbrugesogsåi<humanform>strukturen,beggevilblive gennemgåetikapitel6. Kapitel5 48
55 Kapitel6 Designogimplementering Dettekapiteldiskutererdesignetogimplementeringenafsoftwarekomponenten,dererblevet udvikletsomendelafdetteprojekt. 6.1Arkitektur Tilstandsmaskinendererblevetudviklet,erdesignetogimplementeretsomenløskoblet komponent.workflowkomponentenlevererenobjekt orienteretmaskinetilateksekverebpel workflows. EtworkflowvilværedefineretsomenBPELproces,derbestårafbasis ogstrukturelleaktiviteter (setabel2.1).disseaktivitetervilbliveanalyseretafklasserneleveretmedparsingapi'etog fortolkettilobjekterafklasserneleveretmedbpelprocess&instancemodelapi'et.sidstnævnte APIlevererdesudenalfunktionalitettildeenkelteBPELogSM BPELaktivitetersudførelse,mens valideringafboolskeudtrykhåndteresafvalidationapi'et.persistenceapi'etlevererfunktionalitet tilatgemme(versionere)ogindlæseworkflowdefinitionerfraetdatalager.dererblevet implementeretétdatalager,somerbpelfiler.workflowexecutionapi'ethåndterer,atetworkflow kanstartes,afbrydesoggenoptagesefterbehov.deflesteapi'ergørbrugafforskelligexml teknologier,såsomxpathogxmlschemam.fl.,somdennederstekomponentillustrerer.se AppendiksBforenkompletreferenceoveralleAPI'erneiworkflowEnginepakken. Figur6.1viserdenkonceptuellearkitekturforworkflowmaskinen. Kapitel6 49
56 Figur6.1:Konceptuelarkitekturforworkflowmaskinen. Ovenpåworkflowkomponentenkanderimplementeresandrekomponenter,detkunnepassende værekomponenter,derendelafworkflow/bpmarkitekturen,præsenteretiafsnit1.2.1: Administrationogovervågning Arbejdslistetilstyringafmenneskeligeaktiviteter. Grafiskeditor standardnotation(sombpmn) Eksporter(BPMNtilBPELmapning) Hverafdissekomponentererkarakteriseretveddetsindkapslingafendesignbeslutning,somden skjulerfordeøvrigekomponenter[parnas].dissekomponenterkankonfigureresogerstattes. Idéenomkringatetworkflowsystemskalbeståafløstkobledekomponenterdiskutereseksempelvis i[mf01],hvormanolescufremsætterat Kapitel6 50
57 Anobject orientedworkflowarchitecturemustprovideabstractionsthatenable softwaredeveloperstodefineandenacthowtheworkflowsthroughthesystem.it shouldalsoallowthemtotailorthearchitectureinwaysspecifictoobjectsystems12. DenkomponentbaseretarkitekturiMicro Workflowindkapslerworkflowfunktioneriseparate komponenter.denminimalistiskekerneafmicro Workflowarkitekturenbeståraftrekomponenter, derlevererbasisfunktionalitet[mf01]. 1. Process komponenten,derimplementererenaktivitetbaseretworkflowmodel,derleverer deabstraktioner,dererbehovforforatbyggeworkflows. 2. Synchronization komponenten,dertilladerudviklereatdefinereafhængighederindenfor workflowdomænet. 3. Execution komponenten,derimplementererfunktionalitettilatudføreworkflows. DennearkitekturfølgerdesignmønstretMicrokernel. TheMicrokernelarchitecturalpatternappliestosoftwaresystemsthatmustbeableto adapttochangingsystemrequirements.itseparatesaminimalfunctionalcorefrom extendedfunctionalityandcustomer specificparts.themicrokernelalsoservesasa socketforpluggingintheseextensionsandcoordinatingtheircollaboration13 [FB96]. 6.2Implementering 6.2.1Workflowvariabler TilstandsmaskinenanvenderBPELs<variable>(seafsnit2.1)somworkflowvariabler.Disse variablerkanindeholdeværdier,somudgørenvigtigdelaf,hvilkentilstandetworkflowbefinder sigi.bpelanvendertredeklarationerforvariabler:wdslbeskedtyper,xmlschematyper 12 Enobjektorienteretworkflowarkitekturskallevereabstraktioner,dergørdetmuligtforsoftwareudviklereatdefinereogvedtage,hvordan arbejdetflydergennemsystemet.denskaldesudentilladedemattilpassearkitektureniretningaf,hvaddererspecifikforobjektsystemer. 13 ArktekturdesignmøsntretMicrokernelanvendesisystem,derskalkunnetilpassesigtilskiftesystemkrav.Detadskillerenminialfunktionelkerne fraudvidetfunktionalitetogkundespecifikkedele.microkernelerogsåvelegnetsomsokkeltilattilsluttedisseudvidelserogkoordinerederes samarbejde. Kapitel6 51
58 (simpelogkompleks)ogxmlschemaelementer,hvorkunxmlschemasimpletyper,på nuværendetidspunkt,understøttesafworkflowmaskinen. Synlighed DaBPELikke,pånuværendetidspunkt,understøtterenworkflowmodelbaseretpåetdelt lager, somdennetilstandsmaskine(seafsnit5.4)gør,er<variable>blevetudvidetmedenattribut shared=(yes no),derindikerersynlighedenforeksterneworkflowprocesserindenforsamme browsersession.erattributtensattil yes kandenlæsesogopdateresafandre,hvorimoddenalene ersynligforprocessenselv,nårdenersattil no.somstandardendensattil no. <variablename="input"type="xsd:string"shared="yes"/> Deltevariablerindlæsesoggemmesibrowserenssession,nåretBpelWfExecutionobjektet instansieres,somvistioversigt6.1.hvilketbetyderatvariablerp.t.kundelesmellem workflowinstanserisammebrowsersession. DeltevariablergemtibrowserenssessionkanafandreworkflowinstanserændresgennemsetValue metodenpåetobjektafklassenbpelvariable.variablerindenforsammeworkflowinstanskan ændresgennembpelaktivitetenassign(seafsnit )ogsetvalueinternalmetodenpåetobjekt afklassenbpelvariable.... $globalvars=$this >xpath foreach($globalvarsas$var){ $variablename=$var >getattribute('name'); $variablevalue=$var >nodevalue; $variableshare=$var >getattribute('shared'); $this >globalvariables[$variablename]= newbpelvariable($variablename,$variablevalue,$variableshare); } $_SESSION[$this >definitionname]['variables']=$this >globalvariables;... Oversigt6.1:Indlæsningoggemafdeltevariablerpåsession. Kapitel6 52
59 6.2.2Afviklingafetworkflow AfviklingenafetworkflowerimplementeretiklassenBpelWfExecution.Etobjektafdenne klasserepræsentereretworkflow,dereksekveres.afviklingsobjektetharreferencetilflg.objekter DOMDocument,DOMXPath,BpelWfDefinitionStorageog BpelDOMNodeListIterator.Figur6.2viseretobjektdiagramforetobjektafklassen BpelWfExecutionogdetsreferencer. Figur6.2:ObjektdiagramforetobjektafklassenBpelWfExecutionogdetsreferencer. Nåretnytworkflowstartes,bliverderskabtennyinstansafetobjektafklassen BpelWfExecution.Detteobjektindlæseroggemmer,isamarbejdemedetobjektafklassen BpelWfDefinitionStorage,enDOM repræsentationafprocesdefinitionen. AfviklingsobjektetgemmerDOM repræsentationietobjektafklassendomdocumentog anvenderdettilatnavigereietworkflow,hvortildetbenyttersigafobjekterafklasserne BpelDOMNodeListIteratorogDOMXPath. Erworkflowetikkealleredestartet,finderafviklingsobjektetdennæsteaktivitet,hvorefterden udføres.enstartaktiviteteribpelangivetmedattributten(createinstance= yes )påelementerne <receive>eller<pick>.dadenneworkflowmaskine,pånuværendetidspunkt,ikkeunderstøtter nogenafdem,fungereralledeunderstøttedeaktivitetersomstartaktivitet. Påaktiviteten<onChange>erderattributten createinstance,somsvarerlidttilden,vikenderfra <receive>og<pick>ibpel.hvisattributtenersatmedværdi,såopretter<onchange>enny Kapitel6 53
60 procesinstansafdefinitionsfilen,dererangivetiattributten.... //Mainloop do{ $currentactivity=bpelwfutils::parsedomnodetobpelwfnode( $this >domiterator >current()); //Onlyparsednodes(supportednodesrightnow)willbeexecuted. if(!is_null($currentactivity)){ $currentactivity >execute($this); if(!$this >started){ $this >started=true; if($this >dombookmark==0){ $this >domiterator >next(); while(!$this >suspended&&$this >domiterator >valid());... Overigt6.2:Tilstandsmaskinensprimæreloop Oversigt6.2visertilstandsmaskinensprimæreloop.Sålængeafviklingenafetworkflowikkeer bleveteksplicitafsluttet(afvikletfærdig),vildennæstenodeidom repræsentationblive analyseret,fortolketogudført,hvisdenkanblivefortolkettilobjektafenafklassernefrapakken activities.instanstieringenafdisseklasserskergennemdesignmønstretfactory[gof94]. AktivitetsobjekterudføreriformafXML omskrivning(seafsnit6.2.3),derestildelteopgavei relationtilworkflowet.nårenaktiviteterblevetudført,fjernesdensrespektivenodefradom repræsentationenogdennyedom repræsentationgemmes. Isituationerhvorenaktivitetikkeertom(indeholderenellerflereopgaver,derskaludføres),men ikkekanudføres(fordideneksempelvisventerpåinput),suspenderesafviklingenafworkflowet indtildenmodtagerdetventetinput.nårderikkeerflereaktiviteteratudføre,erworkflowet Kapitel6 54
61 afsluttetkorrekt(implicitafslutning). Idennekontekst,erprocessproget(somworkflowdefinitionssprogetBPEL)ikkeandetend implementeringerafetsætaktiviteter,dererkendtfortilstandsmaskinen.deimplementerer designmønstretcommand[gof94]ogindkapslerenhandlingogdetsparameter XML omskrivning DetofølgendeafsnitgiverenmeredeltaljeretbeskrivelseafXML omskrivningenforalle strukturelleaktiviteterogprimitiveaktiviteter(setabel2.1),der,pånuværendetidspunkt, understøttesafworkflowmaskinen. XML omskrivningenideenkelteaktivitetereropbyggetomkringdesignmønstretbuilder [GoF94],derheropbyggerderesDOM repræsentation. Dengrafiskenotation(sefigur6.3),entræstruktur,anvendttilatillustreredengenerelleXML omskrivningforudvalgtestrukturelleaktiviteter(whileogif),erinspireretafcosmobizprojektet [COSMOBIZ]. Figur6.3:GrafisknotationforXML omskrivning. Kapitel6 55
62 BPELaktiviteter sequence Sombeskrevetitabel2.1udfører<sequence>alledensaktivitetersekventieltidenrækkefølge,de erangivet.semantikkenfor<sequence>[bpel4ws]ervistioversigt6.3. <sequencestandard attributes> standard elements activity+ </sequence> Oversigt6.3:Semantikkenfor<sequence> Selveimplementeringeninspicererenbarneknudeadgangen,somforsøgesfortolkettiletobjektaf typenactivity.fortolkesdetkorrektudføresaktivitetenogxml omskrivningfjernerknudenefter udførelsen.xml omskrivningenresultereri,atdergemmesennydefinitionsfilmeddenopdateret DOM repræsentation.dettegøressålænge,dereraktiviteter,dermangleratbliveudført.når <sequence>ikkeharflerebørneknuder,erdenblevetudført,hvorefterdenfjernesogenny definitionsfilgemmes.oversigt6.4visereteksempelpåenxml omskrivning <sequencename="main"> <sequencename="main"> <onchangename= onchangeinput <empty/> variable= input /> </sequence> <empty/>... </sequence> <sequencename="main"/>... Oversigt6.4:XML omskrivningfor<sequence> aktiviteten. SeappendiksBforselveimplementeringenaffigur6.4. Kapitel6 56
63 if Sombeskrevetiafsnit3.1.1forgrenerenifaktivitettilflereaktiviteter,hvorafdeneneudføres. Betingelsererudtryktgennemetboolskudtryk,derevalueresmedXPath[XPATH].Derkan defineresenelse,derbevirker,athvisikkeifbetingelsenellerelseifbetingelserne(hvisnogen)er opfyldt,såudføresden.oversigt6.5visersemantikkenforif[bpel4ws]. <ifstandard attributes> standard elements <conditionexpressionlanguage="anyuri"?>bool expr</condition> activity <elseif>* <conditionexpressionlanguage="anyuri"?>bool expr</condition> activity </elseif> <else>? activity </else> </if> Oversigt6.5:Semantikkenfor<if> Implementeringenafdenneaktivitetitilstandsmaskinenstartermedatfortolkeoginstanstiereet objektaftypenbpelifactivity.opfyldesif betingelsen,udføresdenefterfølgendeaktivitet.opfyldes betingelsenderimodikke,findertilstandsmaskinendennæsteelseifellerelse,hvisderernogenog omskriverden.forenelseifgældersammeproceduresomforif,hvorimodelseingenbetingelse har,menkunudførerdensaktivitet(hvisnogen). Enifaktivitetansessomudført,hvis: 1. allebetingelserforhhv.ifogalleelseifevalueresfalskogderingenelseerdefineret. 2. Enbetingelseevalueressandogdensaktiviteterblevetudført. SelveXML omskrivningenforif konstruktionenskerløbendeunderudførelsen,hvorbetingelser, fjernesfradom træetumiddelbartefterevalueringen.evalueresenbetingelsefalskfjernesdens aktivitetsknude,udenatblivefortolketyderligereaftilstandsmaskinen,fradom træet.nåren aktivitetudføres,somfølgeafenopfyldtbetingelse,fjernesknudenefterudførelsen. Selveif aktivitetensknudefjernes,nårdenansesforudført.hvergangderskerenxml Kapitel6 57
64 omskrivning,gemmesderennyopdateretdefinitionsfil. Figur6.4viserdengenerelleomskrivningafif,baseretpåsemantikkenlistetioversigt6.5. Øverstetræafspejlerenifmeddensbetingelse(condition1)ogenukendtaktivitet(T1),T2afspejler enelseifmeddenukendtebetingelseogaktivitet.enifkanhave0 nelseifdefineret.t3afspejleren ukendtelseaktivitet.t2bafspejleretukendtantalelseif'er Midterstetræafspejleromskrivningenafdenførsteellerenesteelseifogdensbetingelseogaktivitet it2tilenif,fordievalueringenafcondition1varfalsk.idettetræafspejlert2enbetingelse,en ukendtaktivitetog,hvisflere,etukendtantalelseif.midterstetrævilforekommesålængeen betingelseit2evalueresfalskellertilt2ikkelængereeksisterer. Nederstetræafspejlerelseaktiviteten,dogudenenelsesomforældreknude. Figur6.4:Generelleomskrivningafif. Oversigterne viseretkonkreteksempelpåenifomskrivning.Førstevalueresif Kapitel6 58
65 betingelsen.omskrivningenskeriettrin,hvorbetingelsenomskrives(fjernes)ogeneventuelelseif omskrivestilenif.oversigterne6.6og <variablename= input shared= yes >234 <variablename= input shared= yes >234 </variable> </variable> <ifname= ifconditiona > <ifname= ifconditiona > <condition>$input<=225</condition> <! T2(condition,empty) > <! T1(sequence) > <conditon>$input>225</condition> <sequence>...</sequence> <empty/> <! T2(elseif) > <! T3(else) > <elseif> <else> <condition>$input>225</condition> <throwfaultname= UnknownVariable /> <empty/> </else> </elseif> </if> <! T3(else) >... <else> <throwfaultname= UnknownVariable /> </else> </if>... Oversigt6.6:Føreval.afif betingelsen Oversigt6.7:Eftereval.Afif betingelsen. Daif betingelsenvarfalsk,blevelseifomskrevetogevalueresefterfølgende.efteromskrivningen udføresdensomenganskealmindeligif.betingelsenerdennegangsandogdensaktivitet(empty) udføresogifaktivitetenansesforudført.oversigterne6.8og <variablename= input shared= yes >234 <variablename= input shared= yes >234 </variable> </variable> <! T2(empty) > <empty/>... Oversigt6.8:Eftereval.afif betingelsen Kapitel6 Oversigt6.9:Efterudførelseafempty. 59
66 Eteksempelpåenomskrivningafelseervisti[oversigt6.10og <variablename= input shared= yes >234 <variablename= input shared= yes >234 </variable> </variable> <ifname= ifconditiona > <! T3(throw) > <! T2(condition,empty) > <throwfaultname= UnknownVariable /> <conditon>$input>225</condition>... <empty/> <! T3(else) > <else> <throwfaultname= UnknownVariable /> </else> </if>... Oversigt6.10:Føromskriv.afelse betingelsen Oversigt6.11:Efteromskrivafelse betingelsen. SeAppendiksBforselveimplementeringen. While Sombeskrevetiafsnit2.1udførerenwhileaktivitetsinaktivitet,sålængedensbetingelseersand. Betingelserer,ligesomiif aktiviteten,udtryktgennemetboolskudtryk,derevalueresmedxpath [XPATH].Oversigt6.12visersemantikkenforwhile[BPEL4WS]. <whilestandard attributes> standard elements <conditionexpressionlanguage="anyuri"?>bool expr</condition> activity </while> Oversigt6.12:Semantikkenforwhile. Implementeringenafdenneaktivitetiworkflowmaskinenstartermedatfortolkeoginstanstiereet objektaftypenbpelwhileactivity.opfyldesbetingelsen,udføresdenefterfølgendeaktivitet,men opfyldesbetingelsenderimodikke,ansesaktivitetenforudført. Kapitel6 60
67 Figur6.5viserdengenerelleomskrivningafwhile,baseretpåsemantikkenlistetioversigt6.12. Øverstetræafspejlerenwhilemeddensbetingelse(condition1)ogenukendtaktivitet(T1). Midterstetræafspejlerenomskrevetwhile,nårdensbetingelseersand.Whileeromskrevettilenif, hvorif aktivitetenerensequencebeståendeaftoaktiviteter.whileaktivitetenogwhile konstruktionenselv.nederstetræafspejlerifomskrevet,nårbetingelsenersand. Kapitel6 61
68 Figur6.5:Generelleomskrivningafwhile. SelveXML omskrivningenafwhile konstruktionenskerløbendeunderudførelsen,hvordetførste skridteratomskriveselvewhile konstruktionentilenif konstruktion,somvistioversigt6.12og <variables> <variables> Kapitel6 62
69 <variablename="input" <variablename="input" shared="yes">10</variable> shared="yes">10</variable> </variables> </variables> <while> <if> <condition>$input<30</condition> <condition>$input<30</condition> <! T1(onChange) > <sequence> <onchangename="whilechange" <! T1(onChange) > variable="input"/> <onchangename="whilechange" </while> variable="input"/>... <while> <condition> $input<30 </condition> <! T1(onChange) > <onchangename="whilechange" variable="input"/> </while> </sequence> </if>... Oversigt6.12:while konstruktion Oversigt6.13:whileomskrevettilif. Hergenbrugeswhilebetingelsensomifbetingelse.Ifaktiviteteneromskrevettilensequence,hvor førsteaktiviteterwhileaktivitetenogdenandenaktiviteterwhilekonstruktionselv.næsteskridter atudføreif,sombeskrevettidligere.detspecielleherer,athvisbetingelsenersandomskrivesiftil ensequence,somvistioversigt <variables> <variablename="input"shared="yes">10</variable> </variables> <sequence> Kapitel6 63
70 <! T1(onChange) > <onchangename="whilechange"variable="input"/> <while> <condition>$input<30</condition> <! T1(onChange) > <onchangename="whilechange"variable="input"/> </while> </sequence>... Oversigt6.14:ifomskrevettilsequence. Sequenceudføressombeskrevettidligereidetteafsnit.Hvergangenwhileoptrædersker omskrivningenbeskrevetioversigterne6.12,6.13og6.14. EvalueresenwhilebetingelsefalskfjernesaktivitetensknudefraDOM træet,udenatblivefortolket yderligereaftilstandsmaskinen.hvergangderskerenxml omskrivning,gemmesderenny opdateretdefinitionsfil. SeAppendiksBforselveimplementeringen. wait Denneaktivitetbrugestilatudsætteeksekveringenietnærmerefastsattidsrum.Aktivitetenwait kanentenbrugeetduration udtrykelleretdatetime udtryk,somhhv.gørbrugafxml schema typerne duration eller datetime tiludsættelsen[schema],førstnævnteudsætter eksekveringenibestemttidsrum,hvorimodsidstnævnteindtilenbestemtdeadlineerpasseret. Oversigt6.15visersemantikkenforwait[BPEL4WS]. <waitstandard attributes> standard elements ( <forexpressionlanguage="anyuri"?>duration expr</for> Kapitel6 64
71 <untilexpressionlanguage="anyuri"?>deadline expr</until> ) </wait> Oversigt6.15:Semantikkenforwait. Implementeringenafdenneaktivitetitilstandsmaskinenstartermedatfortolkeoginstanstiereet objektaftypenbpelwaitactivity.derefterstarterudførelsen,somførsttjekkeromderanvendesen durationellerdatetimetype,sådenpåkorrektviskanudsætteworkfloweksekveringen.når udsættelseerafsluttet,ansesaktivitetensomudført. DenneaktiviteterkræverendvidereatPEARpakkenSOAP(læsmerepå installeretpåcomputerenforatkunneudførespåkorrektvis. SelveXML omskrivningenafwait konstruktionenkanskeietellertotrin.harmanvalgtatangive udsættelsenienuntil,skeromskrivningeniettrin,hvorwaitfjernes,nårdenerblevetudført.er udsættelsenangivetienfor,skeromskrivningenderimoditotrin,damanskalsikresig,atitilfælde afnedbrud,såforsættesudsættelsen,hvordengikned.detbetyder,atenforomskrivestilenuntil, daforvilstarteudsættelsenforfravednedbrud.hvorimoduntilangiverendeadline.omskrivningen affortiluntilervistioversigterne6.16og <variables> <variables> <variablename="fromvariable"> <variablename="fromvariable"> PHProcks PHProcks </variable> </variable> <variablename="tovariable"/> <variablename="tovariable"/> </variables> </variables> <sequencename="waittest"> <sequencename="waittest"> <wait> <wait> <! Waitfor15seconds > <until> T16:51:08+02:00</until> <for>pt15s</for> </wait> </wait> <empty/> <empty/> </sequence> </sequence> Oversigt6.16:forføromskrivningen. Kapitel6 Oversigt6.17:Trin1afomskrivningen. 65
72 SeAppendiksBforselveimplementeringen. assign Somnævntiafsnit6.2.1brugesdenneaktivitettilatoverføredatafraenvariabletilanden.Desuden tilladerdenneaktivitetogså,atmankanoverføreetudplukafenvariabelsindhold.nydatakan ogsåbliverkonstrueretogindsatgennembrugenafudtryk.oversigt6.18visersemantikkenfor <assign>[bpel4ws]. <assignvalidate="yes no"?standard attributes> standard elements ( <copykeepsrcelementname="yes no"?ignoremissingfromdata="yes no"?> from specto spec </copy> <extensionassignoperation> assign element of other namespace </extensionassignoperation> )+ </assign> Oversigt6.18:Semantikkenforwait. Assignaktivitetenharseksforskelligevarianteratdefinere from spec icopydelenafaktiviteten ogfemvarianteratdefinere to spec.varianternessemantikerlistetioversigterne6.19og6.20. <fromvariable="bpelvariablename"part="ncname"?> <queryquerylanguage="anyuri"?>? querycontent </query> </from> <frompartnerlink="ncname"endpointreference="myrole partnerrole"/> <fromvariable="bpelvariablename"property="qname"/> <fromexpressionlanguage="anyuri"?>expression</from> <from><literal>literalvalue</literal></from> <from/> Oversigt6.19:Semantikkenforfrom spec Kapitel6 66
73 og <tovariable="bpelvariablename"part="ncname"?> <queryquerylanguage="anyuri"?>? querycontent </query> </to> <topartnerlink="ncname"/> <tovariable="bpelvariablename"property="qname"/> <toexpressionlanguage="anyuri"?>expression</to> <to/> Oversigt6.20:Semantikkenforto spec. Implementeringenafdenneaktivitetunderstøtterpånuværendetidspunktkunvariabelvarianten (markeretmedkursivioversigterneovenfor)forhhv.from specogto spec,menudendevalgfrie delpart.desudenunderstøttesderkunéncopypr.assign,skullemanunderstøtteflerecopyien assignvilledetbetyde,atmanisinimplementeringskulletagehøjdeforsamtidighedsproblemer, fordienassignskaludføres,somomdeterdenenesteaktivitet,derudføresidenslevetid.itilfælde affejlundervejsiudførelsenafassign,skalallevariablerito specvendetilbagetilsammetilstand, somdevari,førstartenafassignaktiviteten(somvaraktivitetenatomar). SelveXML omskrivningenskerietenkelttrin,hvoraktivitetenfjernes,nårfrom specvariablens indholderkopierettilto specvariablen. SeAppendiksBforselveimplementeringen SM BPELaktiviteter onchange Somnævntiafsnit6.2.1afventerdenneaktivitet,atendeltvariabelændrerværdi.OnChange startersinudførelsemedatsuspendereworkflowetindtildenpågældendevariabelsværdierblevet ændret,nårværdienændres,genoptagesworkflowet.oversigt6.21visersemantikkenfor <onchange>. Kapitel6 67
74 <onchangename= QName?variable= BPELVariableName createinstance= definitionname /> Oversigt6.21:Semantikkenfor<onChange>. Attributten name angivernavnetforaktiviteten,hvisangivet.attributten variable angiver navnetpådenbpelvariable,derskalændreværdi.attributten createinstance opretterenny procesinstansafdenworkflowdefinition,dererangivetiattributten. SelveXML omskrivningenafdenneaktivitetforegåritotrin,førstgemmesdennyeværdiiden pågældendevariableogderfterfjernesonchangeaktivitetensdomknudefradom træet.detteer illustreretioversigterne6.22og <variables> <variables> <variablename="input"shared="yes"> <variablename="input"shared="yes"> </variable> </variable> </variables> </variables> <sequencename="init"> <onchangename="change" <sequencename="init"/> variable="input"/>... </sequence>... Oversigt6.22:Trin1:variablensværdiændres. Oversigt6.23:Trin2:onChangefjernet. SeAppendiksBforselveimplementeringen. humanform Somnævntiafsnit5.5understøtterBPELikkemanuelleaktiviteter.Hvilketgør,atdetkuner automatiseredeworkflows,derkanudføres.minnyeaktivitet<humanform>muliggør,at tilstandsmaskinenkaninterageremedmenneskerviawebformsdefineretsomxforms.denne aktivitetanvenderudvalgteaktiviteterfrabpelsaktivitetsmodel,samtsm BPELaktiviteten <onchange>.semantikkenfor<humanform>ervistioversigt6.24. <humanformname= QName?> <sequence> <invokeurl= URL /> Kapitel6 68
75 <onchangename= QName?variable= BPELVariableName createinstance= definitionname /> <assign>* <copy> <fromvariable= BPELVariableName > <query>querycontent</guery>? </from> <tovariable= BPELVariableName /> </copy> </assign> </sequence> </humanform> Oversigt6.24:Semantikkenfor<humanForm> Attributten name på<humanform>angivernavnetforaktiviteten,hvisangivet. Selvestrukturforaktivitetener,somfølger: En<sequence>,derindeholderdeaktiviteter,derskaludføresi<humanForm>levetid. En<invoke>derhenvisertillokationen,hvorXFormenskalvises.Attributten URL findesikkeidagibpel. En<onChange>dersuspendererworkflowetindtilengivenvariableændres.Deterher, manangiver,hvilkenvariabel,derkommertilatindeholdesubmittededatafraxformen. Nultilmange<assign>aktiviteter,derangiverhvordandataskalkopieresrundti workflowmaskinen. SelveXML omskrivningenforaktivitetenskerigennemdeenkelteunderaktivitet,nårderikkeer flere,fjernes<humanform>fraprocesdefinitionenogansesforafsluttet. 6.3Betingelser DebetingelsersomkanbrugesiaktivitetererudtryktgennemetudvalgafprimitiveXML schema typer[schema],pånuværendeunderstøttesboolean,durationogdatetime. Kapitel6 69
76 Boolean Etboolskudtrykeretudtryk,derresultererienboolskværdiiformaf TRUE eller FALSE. Udtrykafandretyperenbooleanskanblivekonverterettilbooleansomfølger: Numeriskeværdier:0erbehandletsomFALSE,altandetsomTRUE. Strengeværdier:tomstrengerbehandletsomFALSEogaltandetsomTRUE. Node sets:entomknudeerbehandletsomfalseogaltandetsomtrue. ValideringenogevalueringenafXPathboolskeudtrykerimplementeretiklassen BpelWfBooleanExpression. Duration Durationrepræsentererettidsinterval.Tidsintervalletkanspecificerespåflg.måde "PnYnMnDTnHnMnS"hvor: Pindikererperiode(påkrævet) nyindikererantalletafår nmindikererantalletafmåneder ndindikererantalletafdage Tindikererstartenaftidsektionen(påkrævethvismanspecificerertimer,minuttereller sekunder) nhindikererantalletaftimer nmindikererantalletafminutter nsindikererantalletafsekunder Oversigt6.25visereteksempelpå,hvordanetelementetkunneseudixmlstruktur,detindikereren periodepå15minutter.... <periode>pt15m</periode>... Kapitel6 70
77 Oversigt6.25:Durationeksempel. ValideringenogevalueringenafdurationerimplementeretiklassenBpelWfDurationExpression. DateTime DateTimerepræsentererendeadline,hvorderbådekanspecificeresdatoogtid.DateTime specificerespåflg.måde"yyyy MM DDThh:mm:ss"hvor: YYYYindikereråret MMindikerermåneden DDindikererdagen. Tindikererstartenafdenpåkrævettidssektion. hhindikerertimen. mmindikererminuttet. ssindikerersekundet. Alleovenståendeerpåkrævet. Oversigt6.26visereteksempelpå,hvordanetelementetixmlstrukturkunneseud,detindikereret sluttidspunkt,derhedder ,klokken16:56: <sluttid> T16:56:31</sluttid>... Oversigt6.26:DateTimeeksempel. DesudenkanmanopererepåtotyperaftidszoneriendateTime.Hvormanentenkanspecificereen datetimeiutcvedattilføjeet Z eftertiden(seoversigt6.27)ellermankanangiveetoffsetfra UTCtidenvedattilføjeenpositivellernegativtideftertiden(seoversigt6.28).... <sluttid> T16:56:31Z</sluttid>... Oversigt6.27:DateTimeeksempelmed Z. eller Kapitel6 71
78 ... <sluttid> T16:56:31+06:00</sluttid>... Oversigt6.28:DateTimeeksempelmedpositivtidtilføjet. ValideringenogevalueringenafdateTimeerimplementeretiklassen BpelWfDateTimeExpression. SeAppendiksBforfleredetaljeromkringselveimplementeringenafbetingelserne. 6.4Sammenfatning Dettekapitelpræsenteredetilstandsmaskinen,dererblevetudviklet.Tilstandsmaskinenerdesignet ogimplementeretsomenløskobletkomponent,hvorhverafdissekomponentererkarakteriseretved detsindkapslingafendesignbeslutning,somdenskjulerfordeøvrigekomponenter[parnas]. Dissekomponenterkankonfigureresogerstattes.InspirationtildennearkitekturerhentetfraMicro Workflow[MF01]. Denimplementeredetilstandsmaskinelevererensolidobjekt orienteretmaskinetilateksekvere BPELworkflows. BPELunderstøtterikkeetsåkaldtdelt lager,somgørdetmuligtatdelesinevariablermedandre kørendeworkflows.dennetilstandsmaskineharimplementeretenlightudgave,dergørdetmuligt atdelesinevariablermedkørendeworkflowsindeforsammebrowsersession.detgøresvedatsætte attributten shared til yes påbpels<variable>element. TilstandenforselveworkflowetsudførelsegemmesvedXML omskrivning,hvoraktiviteterløbende omskrivesunderderesudførelse.implementeringenafxml omskrivningerbaseretpåbuilder mønstret[gof94].inspirationentilatanvendedennemodelfremforenrelationeldatabaseerhentet fraforskningsprojektetcosmobiz[cosmobiz]. Shared ModelBPEL(SM BPEL)bestårindtilvidereaftoaktiviteter,somkanintegreresmed Kapitel6 72
79 BPELsnuværendeaktivitetsmodel.Dererdefineretenaktivitet(<onChange>)tilsuspendere udførelsenafetworkflowindtilengivenvariabelfårtildeltennyværdi,samtoprettenye procesinstanser.denandenaktivitet(<humanform>)gørdetmuligtforenbpelprocesat interageremedmenneskergennemxforms(læsmereombrugenafdenneaktivitetiappendiksa). Workflowmaskinenunderstøtterpånuværendetidspunkttretyperafbetingelser,somer: 1. Booleans 2. Duration 3. DateTime Kapitel6 73
80 Kapitel7 Konklusionogfremtidigtarbejde 7.1Konklusion Detteprojekthar,medudgangspunktikendtlitteraturindenforproblemdomænetogdetaktuelle forskningsprojektcosmobiz[cosmobiz],forførstegangkombineretdettetilatdesigneog implementereentilstandsmaskineudvikletiphp,deranvenderbpelsomdefinitionssprogfor workflows. Softwarekomponenten,dererblevetudvikletsomendelafdetteprojektertiltænktsomendonation tilphpfællesskabet(phpcommunity).detstillerenmaskine,tilateksekverebpelworkflows,til rådighed,somnemtkanindlejresiphpapplikationer,såledesatdekanbliveudvidetmed workflowfunktionalitet.tilstandsmaskinenkanskræddersysefterbehovognemtudvidesgennem sammensætningenafkomponenter.densworkflowmodelkanogsånemtskræddersysogudvides gennemdeklasser,deropbyggerkontrolflowet.denerikkebundettildenkonkreteapplikation, hvoridenerblevetindlejret,hvilketgør,atdererstørregradaffrihedforbrugenoggenbrugenaf tilstandsmaskinen.denunderstøtterdogikkepånuværendetidspunktbpelskommunikationvia webservice,menderimodetudplukafbpelsoverordnetobjekt ogaktivitetsmodel. TilforskelfraBPELanvenderdenneworkflowmodeletsåkaldtdelt lager.hvilketbetyderatbpel variablerkandelesmedandrekørendeworkflowinstanserindenforsammebrowsersession.denne delingmuliggørlæsningogopdateringafdissedeltevariabler. Kapitel7 74
81 Workflowmodellenanvenderenmemory modeltilatgemmeenproces'tilstand.idéenog inspirationenkommerfraforskningsprojektetcosmobiz[cosmobiz],somanvenderxml omskrivningtilatgemmeenproces'tilstand,hvilketdenneworkflowmodelligeledesgør.denne modelervalgtfremforenruntimedatamodel[ebpm05],somnæstenerdetsamme,mensomdog errepræsentationafinstansen.pointenerher,atmemory ogpersistensformatetnæstenerensfor memory modellen. Menneskeliginteraktionmedtilstandsmaskineneropnåetvedatdefinereetsætafaktiviteterkaldet SM BPELaktiviteter.VedatkombineredetoSM BPELaktivitetermedetudvalgafBPEL aktiviteter,erdetmuligtatinterageremedmenneskerviaxforms,samtatsætteenworkflowinstans iventepositionindtilenvariableopdateres.disseaktiviteterkanudenvidereintegreresibpel. 7.2Fremtidigtarbejde 7.2.1Workflowmodel WorkflowmodellenkannemtogbørudvidestilatunderstøttealleworkflowmønstreiBPEL.Det gøresvedatimplementeredemanglendeaktiviteterogrestenafbpelsobjektmodel.parallel udførelseerdogenstørreopgave,daphperenkelttrådet,hvilketbetyder,atderskaldesignesog implementeresenschedulerrutine Udvidelseafdelt lager Atworkflowmodellenpånuværendetidspunktkununderstøtteretdelt lagerindenforsamme browsersessionernogetafenbegrænsning.detdeltelagerbørudvidestilatkunnedelevariablerpå tværsafbrowsersessions.detgørdennemodelmereanvendeligogkraftfuld.detkunnepassende implementeresvedatbrugeendatabase,hvorallekørendeinstansersdeltevariablerogderes respektiveværdiergemmes,sålængederesworkflowikkeerafsluttet. Kapitel7 75
82 7.2.3Arbejdsliste Nårnuworkflowmodellenunderstøtterinteraktionmedmennesker,børderimplementeresen arbejdsliste,såbrugernekaninterageremeddeforskelligeworkflowinstanser.detkunnepassende væreetwebinterface,deranvenderxforms. Kapitel7 76
83 AppendiksA Tutorial Detteappendiksfungerersomenintroduktiontiltilstandsmaskinen(sefigur6.1).Dentutorial,som vilblivegennemgåetidetteappendikserbaseretpåusecasenfrakapitel4. A.1Forudsætninger Idetteafsnitbeskrivesdeforudsætninger,dererforatkunneintegrereogafvikleetworkflowpå denimplementeredetilstandsmaskine.forudsætningerersomfølger: Unixsystem(somlinux) PHP PEARchannelinstalleret Seneste(vers )PEARpakke SOAP installeret(sehttp://pear.php.net/). Apache2.2.8 MozillaFirefox MozillaFirefoxudvidelsenXForms0.8.5 Dennetutorialerblevettestetmedsuccespåtolinuxinstallationer:enMandriva2008.0medPHP 5.2.6,Apache2.2.8,Firefox ogXForms0.8.5installeretogenUbuntu8.04medPHP 5.2.4,Apache2.2.8,Firefox ogXForms AppendiksA 77
84 A.2Konfiguration Tilstandsmaskinenskalkonfigureres,sådenbliverkendtforapplikationen,deragteratanvende den.konfigurationskerifilenconfig.php,somliggerirodenaftilstandsmaskinen.idennefil skalmanangivestientiltilstandsmaskinen,eksempelvissomvistioversigta.1. define('wf_engine_dir', '/home/dkt/projects/diplomprojekt/softwarekomponent/trunk/src/'); OversigtA.1:Konfig.afstitilworkflowmaskinen. A.3Struktur FilerdererinvolveretidennetutorialervistifigurA.1.Udfradennestruktur,kanvise,atderskal tofilertilatdefinereen<humanform>,dermåtteværedefinereti.bpelfilen.en.xhtmlfil, hvorimodxformendefineresogetphpscript,derbehandlersubmittededatafraformen.der desudenbrugeretphpscripttilatinstanstiereogstarteetworkflow. FigurA.1:Strukturforfileritutorialen. AppendiksA 78
85 A.4Definereetworkflow IdetteafsnitdefinerervietworkflowgennembrugenafBPELogSM BPEL,somblevbeskreveti kapitel6. A.4.1Procesdefinitionen Vistartermedatoprettevoresprocesdefinitionoggemmerdenien.bpelfil.OversigtA.2viseren procesdefinitiongemtifilen reviewdocument.bpel. <?xmlversion="1.0"?> <processname="reviewdocument"xmlns=" open.org/wsbpel/2.0/process/executable"> <variables> <variablename="draft"shared="yes"/> <variablename="reviewresult"shared="yes"/> <variablename="comment"/> <variablename="approved">n</variable> <variablename="publisheddocument"/> </variables> <onchangename="draftcreated"variable="draft"/> <sequence> <while> <condition>$approved="n"</condition> <sequence> <humanformname="reviewform"> <sequence> <invoke url=" <onchangename="updatereviewresult"variable="reviewresult"/> <assign> <copy> <fromvariable="reviewresult"> <query>/review/comment</query> </from> <tovariable="comment"/> </copy> </assign> <assign> <copy> <fromvariable="reviewresult"> <query>/review/approved</query> </from> <tovariable="approved"/> </copy> </assign> </sequence> AppendiksA 79
86 </humanform> <if> <condition>$approved="n"</condition> <humanformname="updatedraft"> <sequence> <invoke url=" <onchangename="draftupdated"variable="draft"/> </sequence> </humanform> </if> </sequence> </while> <assign> <copy> <fromvariable="draft"/> <tovariable="publisheddocument"/> </copy> </assign> </sequence> </process> OversigtA.2:Procesdefinition. A.4.2Humanforms Dadenneprocesdefinitionindeholderflere<humanForm>elementer,kræverdetmenneskelig interaktion.derforskalderoprettesenxformforhver<humanform>element.<humanform name= reviewform >gemmesifilen reviewform.xhtml.vikanse,atmanfraxformenskal kunnekopieretotyperafdataenkaldet comment og approved,derforbørxformensom minimumkunnesendedissedata,nårdersubmittes.oversigta.3viserxformensklidekode,der ligeerblevetbeskrevet. AppendiksA 80
87 <?xmlversion="1.0"encoding="utf 8"?> <htmlxmlns=" xmlns:xf=" xmlns:ev=" events"> <head> <title>reviewdocument</title> <metaname="author"content="danielk.theemann"/> <scripttype="text/javascript"> functionbuildactionurl(){ varparam_array=window.location.href.split("?"); varlocation="reviewformsubmit.php"; if(param_array.length>1){ location="reviewformsubmit.php?"+param_array[1]; document.getelementbyid('reviewform').setattribute('action', location); </script> <! thexforminstancemodel > <xf:model> <! thesubmittedresultwillbestoredinaxmldocumentwiththisstructure. > <xf:instanceid="result"xmlns=""> <review> <comment/> <approved/> </review> </xf:instance> <xf:instanceid="js"> <dataurl="javascript:buildactionurl()"/> </xf:instance> <! theinputfieldsareallrequired > <xf:bindnodeset="/review/comment"id="comment"required="true()"/> <xf:bindnodeset="/review/approved"id="approved"required="true()"/> AppendiksA 81
88 <! submission > <xf:submissionid="reviewform"method="post"includenamespaceprefixes="" action=""/> <! messagesonsubmit > <xf:messageev:event="xforms submit"level="modal"> Submitting... </xf:message> <xf:messageev:event="xforms submit done"level="modal"> Submissioncompleted </xf:message> <xf:messageev:event="xforms submit error"level="modal"> Can'tsubmit! </xf:message> </xf:model> </head> <body> <h3>pleasefillinyourcommentandapprove/rejectthedraft.</h3> <! thexforminterfacemodel > <xf:textarearef="comment"> <xf:label>placeyourcommenthere:<br/></xf:label> </xf:textarea> <br/><br/> <xf:select1ref="approved"> <xf:label>state:<br/></xf:label> <xf:item> <xf:label>approve</xf:label> <xf:value>j</xf:value> </xf:item> <xf:item> <xf:label>reject</xf:label> <xf:value>n</xf:value> </xf:item> </xf:select1> <br/><br/> <xf:trigger> <xf:label>submit</xf:label> AppendiksA 82
89 <xf:actionev:event="domactivate"id="dynamicsubmission"> <xf:sendsubmission="reviewform"/> </xf:action> </xf:trigger> </body> </html> OversigtA.3:reviewFormXFormen(kildekoden). DenneXFormsenderindtastededatasomxmlstrukturen <review><comment>...</comment><approved>...</approved></review>.datafra <comment/>og<approved/>brugesiprocesdefinitiontilatfyldedataivariablerne comment og approved.helexmlstrukturengemmesidendeltevariabel reviewresult.figura.2viser XFormeniFirefoxbrowseren. FigurA.2:XFormen reviewform. Desubmittededatabehandlesifilen reviewformsubmit.php.filensindholdervistioversigta.4. <?php session_start(); include($_server['document_root'].'/workflowengine/config.php'); $wfdefinitionname=$_get['wf']; $variables=unserialize($_session[$wfdefinitionname]['variables']); AppendiksA 83
90 $variables['reviewresult'] >setvalue(htmlentities($http_raw_post_data, ENT_QUOTES)); serialize($_session[$wfdefinitionname]['variables']);?> OversigtA.4:reviewFormSubmit.php Denandenogsidste<humanFormname= updatedraft >gemmesifilen updatedraftform.xhtml.vikanse,atmanfradenneformikkeskalkopierenogendata,men derimodkunventetilvariablen draft blivertildeltdensubmittedeværdi.oversigta.5viser XFormenskildekode,derligeerblevetbeskrevet. <?xmlversion="1.0"encoding="utf 8"?> <htmlxmlns=" xmlns:xf=" xmlns:ev=" events"> <head> <title>updatedraft</title> <metaname="author"content="danielk.theemann"/> <scripttype="text/javascript"> functionbuildactionurl(){ varparam_array=window.location.href.split("?"); varlocation="upddraftformsubmit.php"; if(param_array.length>1){ location="upddraftformsubmit.php?"+param_array[1]; document.getelementbyid('updatedraftform'). setattribute('action',location); </script> <! thexforminstancemodel > <xf:model> <! thesubmittedresultwillbestoredinaxmldocumentwiththisstructure. > <xf:instanceid="result"xmlns=""> <draft> AppendiksA 84
91 <title/> </draft> </xf:instance> <xf:instanceid="js"> <dataurl="javascript:buildactionurl()"/> </xf:instance> <! theinputfieldsareallrequired > <xf:bindnodeset="/draft/title"id="title"required="true()"/> <! submission > <xf:submissionid="updatedraftform"method="post"includenamespaceprefixes="" action=""/> <! messagesonsubmit > <xf:messageev:event="xforms submit error"level="modal"> Can'tsubmit! </xf:message> </xf:model> </head> <body> <h3>pleaseupdatethedraft.</h3> <! thexforminterfacemodel > <xf:inputref="title"> <xf:label>writeyourdraft'stitlehere:<br/></xf:label> </xf:input> <br/><br/> <xf:trigger> <xf:label>submit</xf:label> <xf:actionev:event="domactivate"id="dynamicsubmission"> <xf:sendsubmission="updatedraftform"/> </xf:action> </xf:trigger> </body> </html> OversigtA.5:XFormen updatedraft kildekoden. AppendiksA 85
92 DenneXFormsenderogsåindtastetdatasomxmlistrukturen<draft><title>...</title></ draft>.helexmlstrukturengemmesidendeltevariabel reviewresult.figura.3viser XFormeniFirefoxbrowseren. FigurA.3:XFormen updatedraft. Desubmittededatabehandlesifilen upddraftformsubmit.php.filensindholdervistioversigt A.6. <?php session_start(); include($_server['document_root'].'/workflowengine/config.php'); $wfdefinitionname=$_get['wf']; $variables=unserialize($_session[$wfdefinitionname]['variables']); $variables['draft'] >setvalue(htmlentities($http_raw_post_data, ENT_QUOTES)); serialize($_session[$wfdefinitionname]['variables']);?> OversigtA.6:updDraftFormSubmit.php A.5Starteetworkflow Foratkunnestarteetworkflow,skalderopretteseninstansafklassenBpelWfExecution,der gøresietphpscript(her reviewdocwf.php ),somogsåindeholderenformtilatstarte workflowet.instanstieringenogstarteafudførelsenafworkflowetervistioversigta.7. AppendiksA 86
93 <?php session_start(); include($_server['document_root'].'/workflowengine/config.php'); //Startworkflow if(isset($_post['start']) isset($_get['newinst'])){ $definitionfile=$_server['document_root']. '/wfexamples/reviewdoc/reviewdocument'; $processinstance=newbpelwfexecution($definitionfile,true); $processinstance >executeworkflow();...?>... OversigtA.7:Instanstieringogstartafworkflow. AppendiksA 87
94 AppendiksB API'er B.1BPELProcess&instancemodelAPI BpelVariable.php <?php session_start(); AppendiksB 88
95 Themaintenanceofthestateofabusinessprocessrequirestheuseofstate variables, whichisrepresented bythe<variable>. Thisclassrepresentsthe<variable>elementfromtheWS BPEL2.0spec. classbpelvariable private$attlist=array(); Thevalueofthevariableifany private$value=null; publicfunction construct($name,$value,$shared=false){ $this >attlist['name']=$name; $this >attlist['shared']=$shared; $this publicfunction get($attname){ return$this publicfunction set($attname,$newvalue){ $this >attlist[$attname]=$newvalue; Getsthecurrentvalueofthisvariables. publicfunctiongetvalue(){ return$this >value; AppendiksB 89
96 Setsanewvaluetothisvariablefromanexternalsource,writesthenewvalueto the DOMdocument, savetonewdom treetoanewbpelprocessfileandresumetheexecutionofthe workflow. publicfunctionsetvalue($newvalue){ $execution=unserialize($_session['execution']); $domnode=$execution >xpath $this >attlist['name'].'"]'); $domnode >item(0) >nodevalue=$newvalue; $this >value=$newvalue; if(strtolower($this >attlist['shared'])=='yes'){ $this >updatesharedvariable($execution >getdefinitionname()); $execution >savenewdefinitionversion(); $execution >resume(); privatefunctionupdatesharedvariable($definitionname){ $variables=unserialize($_session[$definitionname]['variables']); $variables[$this >attlist['name']]=$this; serialize($variables); publicfunctionsetvalueinternal($execution,$newvalue){ $domnode=$execution >xpath $this >attlist['name'].'"]'); $domnode >item(0) >nodevalue=$newvalue; $this >value=$newvalue; $execution >savenewdefinitionversion();?> AppendiksB 90
97 B.1.1activities Activity.php @licensehttp:// 2008,DanielK.Theemann Thisclassmodelsthecommonapsectsofallconcreteactvities supportedbythisworkflowengine. abstractclassactivityimplementsidomexporter{ Thenameofthebpelnode. protected$name; protected$prefix; AppendiksB 91
98 protected$domnode; publicabstractfunctionexecute($execution);?> B.1.1.1bpel AppendiksB 92
99 BpelEmptyActivity.php ,DanielK.Theemann ThisclassrepresentstheemptyactivityfromtheBPELactivitymodelandis implemented aroundthe'nullobject'designpattern. classbpelemptyactivityextendsactivityimplementsidomexporter { publicfunction construct($domnode){ $this >domnode=$domnode; Thisrepresentsanullstatewhichisthesameasanactivenothing behaviour. publicfunctionexecute($execution){ //Activenothingbehaviour $execution publicfunctionexportasdomelement($domdocument){ $emptynode=$domdocument >createelement("empty"); return$emptynode;?> AppendiksB 93
100 BpelAssignActivity.php ,DanielK.Theemann ThisclassrepresentsWS BPELassignactivity,whichcantransferavarietyofdata betweenbpelvariables. Fornowthisclassonlyimplementsthefunctionalitytocopythedataofavariableto another. classbpelassignactivityextendsactivity @paramdomnode$domnode publicfunction construct($name,$prefix,$domnode){ $this >name=$name; $this >prefix=$prefix; $this >domnode=$domnode; Copiesavariablescontentfromthe<from>to<to> publicfunctionexecute($execution){ $execution >adddombookmark($execution >domiterator >getoffset()); $execution >domiterator >next(); $copynode=$execution >domiterator >current(); $childs=$copynode >childnodes; $variablevalue; AppendiksB 94
101 foreach($childsas$childnode){ if($childnode >nodetype!=xml_text_node&&$childnode >nodename!= 'documentation'){ $variablename=$childnode >getattribute("variable"); if($childnode >nodename=='from'){ $this >fromvariable=bpelwfutils::parsedomvariabletobpelvariable( $execution >xpath, $variablename); $variablevalue=$this >fromvariable >getvalue(); //Performqueryif<query>ispresent. $querynode=$this >hasquery($childnode); if($querynode!==false){ $queryexpr=$querynode >nodevalue; $variablevalue=$this >evalquery($queryexpr, $this >fromvariable >getvalue()); elseif($childnode >nodename=='to'){ $this >tovariable=bpelwfutils::parsedomvariabletobpelvariable( $execution >xpath,$variablename); $this >tovariable >setvalueinternal($execution,$variablevalue); $execution >cleardombookmark(); $execution >removenode($execution >domiterator publicfunctionexportasdomelement($domdocument){ //Createthe<assign>node. $assignelement=$domdocument >createelement("assign"); //Settheattribute"name"ifspecified. if(strlen(trim($this >name))>0){ $assignattname=sprintf("%s",$this >prefix,$this >name); $assignelement >setattribute("name",$assignattname); //loopthroughall<copy>elements. foreach($this >domnode >childnodesas$copynode){ $copyelement=$domdocument >createelement("copy"); foreach($copynode >childnodesas$copychild){ $childelement=$domdocument >createelement( $copychild >nodename); $childelement >setattribute('variable', $copychild >getattribute('variable')); if($copychild >haschildnodes()){ $queryelement=$domdocument >createelement('query', AppendiksB 95
102 $copychild >firstchild >nodevalue); $childelement >appendchild($queryelement); $copyelement >appendchild($childelement); $assignelement >appendchild($copyelement); return$assignelement; @returndomnodelistifthequeryisvalid,otherwisefalse. privatefunctionevalquery($queryexpression,$variablevalue){ $domdoc=domdocument::loadxml($variablevalue); if($domdoc!==false){ $xpath=newdomxpath($domdoc); if(xpathvalidator::validatexpathexpression($xpath,$queryexpression)!== false){ $querynodelist=$xpath >query($queryexpression); return$querynodelist >item(0) >nodevalue; otherwisefalseisreturned. privatefunctionhasquery($node){ if($node >haschildnodes()){ return$node >childnodes >item(0); returnfalse;?> AppendiksB 96
103 BpelExitActivity.php ,DanielK.Theemann Thisclassrepresentsthe<exit> activityfromthebpelactivitymodel. classbpelexitactivityextendsactivityimplementsidomexporter { publicfunction construct($name,$prefix,$domnode){ $this >name=$name; $this >prefix=strlen(trim($prefix))>0?sprintf("%s:",$prefix):""; $this >domnode=$domnode; @throwsbpelwfexplicitterminationexception publicfunctionexecute($execution){ $definitionname=$execution >getdefinitionname(); unset($_session[$definitionname]); $execution=null; thrownewbpelwfexplicitterminationexception( "Thisworkflowinstanceandallitsrunningactivitiesareimmediatelyended!"); AppendiksB 97
104 Createsanelement<exitname="QName"?/>. publicfunctionexportasdomelement($domdocument){ //Createthe<exit>nodewiththeattribute"name". $exitnode=$domdocument >createelement("exit"); //Setattributes. $exitnodeattname=sprintf("%s%s",$this >prefix,$this >name); $exitnode >setattribute("name",$exitnodeattname); return$exitnode;?> BpelIfActivity.php <?php ,DanielK.Theemann Thisclassrepresentstheif activityfromthebpelactivitymodel. classbpelifactivityextendsactivity { private$ifcondtionexpression; private$ifactivity; AppendiksB 98
105 @paramdomnode$domnode publicfunction construct($name,$prefix,$domnode){ $this >name=$name; $this >prefix=strlen(trim($prefix))>0?sprintf("%s:",$prefix):""; $this >domnode=$domnode; publicfunctionexecute($execution){ $execution >domiterator >next(); if($this >dobooleancondition($execution)){ $execution >domiterator >next(); $this >ifxmlrewrite($execution,true); else{ $this >ifxmlrewrite($execution,false); $foundactivity=$this >findnextelseiforelse($execution); if($foundactivity===true){ if($execution >domiterator >key()==='elseif'){ $this >elseifxmlrewrite($execution,$execution >domiterator >current()); elseif($execution >domiterator >key()==='else'){ $this >elsexmlrewrite($execution,$execution >domiterator >current()); else{ $execution >cleardombookmark(); $execution >removenode($this >domnode); privatefunctiondobooleancondition($execution){ $conditionnode=$execution >domiterator >current(); $exprvalue=$conditionnode >nodevalue; $boolcondition=newbpelwfbooleanexpression($exprvalue,$execution >xpath); if($boolcondition >evaluate()===true){ returntrue; returnfalse; XML rewriteanifnode. AppendiksB 99
106 Iftheconditionistrueitremovesallofthenodeitschilds, privatefunctionifxmlrewrite($execution,$conditionok){ if($conditionok){ $activitynode=$execution >domiterator >current(); $this >domnode >parentnode >insertbefore($activitynode,$this >domnode); $this >domnode >parentnode >removechild($this >domnode); $execution >cleardombookmark(); $execution >savenewdefinitionversion(); else{ $execution >domiterator >next(); $activitynode=$execution >domiterator >current(); $this >domnode >removechild($this >domnode >firstchild); $this >domnode >removechild($activitynode); XMLrewritestheelseifnode.Itremovetheelseifnode, privatefunctionelseifxmlrewrite($execution,$elseifnode){ $conditionnode=$elseifnode >firstchild; $activitynode=$elseifnode >lastchild; $this >domnode >insertbefore($conditionnode,$elseifnode); $this >domnode >insertbefore($activitynode,$elseifnode); $this >domnode >removechild($elseifnode); $execution >savenewdefinitionversion(); XMLrewritestheelsenode.Itremovetheelsenodeanditsparent(if). privatefunctionelsexmlrewrite($execution,$elsenode){ if($elsenode >haschildnodes()){ $activitynode=$elsenode >firstchild; $this >domnode >parentnode >insertbefore($activitynode,$this >domnode); $execution >cleardombookmark(); $execution >removenode($elsenode >parentnode); AppendiksB 100
107 Searchforthenextelseiforelse.Returnsthenext(ifany). privatefunctionfindnextelseiforelse($execution){ while($execution >domiterator >valid()){ if($execution >domiterator >key()==='elseif' $execution >domiterator >key()==='else'){ returntrue; $execution >domiterator >next(); publicfunctionexportasdomelement($domdocument){ $ifnode=$domdocument >createelement("if"); if($this >ifactivity!=null&&$this >ifcondtionexpression!=null){ $this >exportfromprogrammaticif($ifnode,$domdocument); else{ foreach($this >domnode >childnodesas$ifchild){ switch($ifchild >nodename){ case'elseif':$childelement=$domdocument >createelement('elseif'); break; case'else':$childelement=$domdocument >createelement('else'); break; case'condition':$childelement=$domdocument > createelement('condition',$ifchild >nodevalue); break; default:$childelement=$domdocument >createelement( $ifchild >nodename); break; if($ifchild >nodename!='condition'){ foreach($ifchild >childnodesas$ifchildactivity){ $activitynode= BpelWfUtils::parseDOMNodeToBpelWfNode($ifChildActivity); $activitynode= $activitynode >exportasdomelement($domdocument); $childelement >appendchild($activitynode); $ifnode >appendchild($childelement); return$ifnode; AppendiksB 101
108 privatefunctionexportfromprogrammaticif($ifnode,$domdoc){ //Addconditionnode $ifconditionnode=$this >ifcondtionexpression >exportasdomelement($domdoc); $ifnode >appendchild($ifconditionnode); //Addactivitynode $ifactivitynode=$this >ifactivity >exportasdomelement($domdoc); $ifnode >appendchild($ifactivitynode); return$ifnode; publicfunctionaddcondition($expression){ $this >ifcondtionexpression=$expression; publicfunctionaddactivity($activity){ $this >ifactivity=$activity;?> AppendiksB 102
109 BpelSequenceActivity.php ,DanielK.Theemann ThisclassrepresentsthesequenceactivityfromtheBPELactivitymodel. classbpelsequenceactivityextendsactivity { Holdsallactivitiesaddedtothissequence private$activitylist=array(); publicfunction construct($name,$prefix,$domnode){ $this >name=$name; $this >prefix=strlen(trim($prefix))>0?sprintf("%s:",$prefix):""; $this >domnode=$domnode; Performsallsubactivitiessequentially. WheneverasubactivityisfinisheditwillberemovedfromtheDOM. Ifthisactivitydon'tcontainsanyactivitiesithasfinishedand publicfunctionexecute($execution){ $execution >adddombookmark($execution >domiterator >getoffset()); $finished=false; $childs=$execution >domiterator >current() >childnodes >length; while(!$finished&&!$execution >issuspended()&& $execution >domiterator >getoffset()!=0){ if($childs==0){ $finished=true; if($execution >domiterator >getoffset()!=0){ $nodetoremove=$execution >domiterator >key()=="sequence"? $execution >domiterator >current():$this >domnode; $execution >cleardombookmark(); $execution >removenode($nodetoremove); AppendiksB 103
110 else{ $execution >domiterator >next(); if($execution >domiterator >current() >nodetype!=xml_text_node&& $execution >domiterator >key()!='documentation'){ $activity=bpelwfutils::parsedomnodetobpelwfnode( $execution >domiterator >current()); //Onlyparsednodes(supportednodesrightnow)willbeexecuted. if(!is_null($activity)){ $activity >execute($execution); $childs publicfunctionexportasdomelement($domdocument){ //Createthe<sequence>nodewitha"name"attribute. $sequencenode=$domdocument >createelement("sequence"); if(strlen(trim($this >name))>0){ $sequencenodeattname=sprintf("%s%s",$this >prefix,$this >name); $sequencenode >setattribute("name",$sequencenodeattname); //Appendallchildactivities if(count($this >activitylist)>0){ foreach($this >activitylistas$activity){ $activitynode=$activity >exportasdomelement($domdocument); $sequencenode >appendchild($activitynode); else{ foreach($this >domnode >childnodesas$activity){ $activity=bpelwfutils::parsedomnodetobpelwfnode($activity); $activitynode=$activity >exportasdomelement($domdocument); $sequencenode >appendchild($activitynode); return$sequencenode; publicfunctionaddsequenceactivity($activity){ array_push($this >activitylist,$activity); AppendiksB 104
111 }?> BpelThrowActivity.php <?php ,DanielK.Theemann Thisclassrepresentsthe<throw> activityfromthebpelactivitymodel. classbpelthrowactivityextendsactivityimplementsidomexporter { Ifspecified,itisthenameofthefaulttocatch. private$faultname; function construct($faultname,$faultvariable,$prefix,$domnode){ $this >faultvariable=$faultname; $this >faultvariable=$faultvariable; $this >prefix=$prefix; $this >domnode=$domnode; Seeifafaultvariableisspecified.Ifsoitthrowitsvalueasthefault @throwsbpelwfinternalfaultexception publicfunctionexecute($execution){ AppendiksB 105
112 $wfdefinitioname=$execution >getdefinitionname(); $bpelfaultvariable=null; if(strlen(trim($this >faultvariable))>0){ if(!is_null($_session[$wfdefinitioname]['variables'] [$this >faultvariable])){ $bpelfaultvariable=$_session[$wfdefinitioname]['variables'] [$this >faultvariable]; else{ $bpelfaultvariable=bpelwfutils::parsedomvariabletobpelvariable( $execution >xpath,$this >faultvariable); $faultmsg=!is_null($bpelfaultvariable)?$bpelfaultvariable >getvalue(): 'DEFAULTFAULTMESSAGE:Aninternalfaulthasbeenraised...'; publicfunctionexportasdomelement($domdocument){ $thrownode=$domdocument >createelement("throw"); //Setattributes. $thrownode >setattribute("faultname",$this >faultname); $thrownode >setattribute("faultvariable",$this >faultvariable); return$thrownode;?> BpelWaitActivity.php ,DanielK.Theemann ThisclassrepresentsthewaitactivityfromtheBPELactivitymodel. classbpelwaitactivityextendsactivityimplementsidomexporter { Thetimeindicatesforhowlongtheprocessinstancewillsleep, whenexecutingthisacitvity. AppendiksB 106
113 private$sleeptime; @paramdomnode$domnode publicfunction construct($name,$prefix,$domnode){ $this >name=$name; $this >prefix=$prefix; $this >domnode=$domnode; Firstitfindsoutifthewaitactivity'schildisa<for>or<until>. NextitdoesatestifthedataisgiveninsideaBPELvariableotherwiseitsaISO 8601durationogdateTimeinsidethechild. Ifitisan<until>aBpelWfDateTimeExpressionisusedtoevaluateitandgetthe datetimeasunixtime. Ifitisa<for>werewriteittoan<until>andalsoconvertsthedurationtounix publicfunctionexecute($execution){ $execution >adddombookmark($execution >domiterator >getoffset()); $waittimenode=$this >findfororuntil(); $this >setwaittimestring($waittimenode >nodevalue,$execution >xpath); if($waittimenode >nodename==='for'){ $durationexpression=newbpelwfdurationexpression($this >dtime, $execution >xpath); $durationasunixtime=$durationexpression >evaluate(); $datetimeunixtime=time()+$durationasunixtime; $datedatimeexpression=newbpelwfdatetimeexpression("",$execution >xpath); $datetimestring=$datedatimeexpression > convertunixtimetodatetime($datetimeunixtime); //XML rewriteto<until>. $this >xmlrewritewaitfortountil($execution,$waittimenode,$datetimestring); AppendiksB 107
114 elseif($waittimenode >nodename==='until'){ $datetimeexpression=newbpelwfdatetimeexpression($this >dtime, $execution >xpath); $datetimeunixtime=$datetimeexpression >evaluate(); //Onlydelayexecutionifthedelaytimeisnotpassedyet. $now=time(); if($now<$datetimeunixtime){ time_sleep_until($datetimeunixtime); $execution >adddombookmark($execution >domiterator >getoffset() 1); $execution >removenode($execution >domiterator >current()); Searchforthe<for>or<until>specified.Itwillreturnfalseif noneofthemisfound.that'sanerror. privatefunctionfindfororuntil(){ if($this >domnode >haschildnodes()){ foreach($this >domnode >childnodesas$child){ if($child >nodename==='for' $child >nodename==='until'){ return$child; returnfalse; privatefunctionisvariablename($value){ if(substr($value,0,1)=='$'){ returntrue; returnfalse; XML rewritea<for>toan<until>. @parammixed$datetimestring privatefunctionxmlrewritewaitfortountil($execution,$waitfornode,$datetimestring){ $domdoc=$execution >getdomdocument(); AppendiksB 108
115 $untilnode=$domdoc >createelement("until"); $untilnode >nodevalue=$datetimestring; $this >domnode >insertbefore($untilnode,$waitfornode); $this >domnode >removechild($waitfornode); $execution privatefunctionsetwaittimestring($value,$xpath){ if(substr($value,0,1)=='$'){ $variablename=trim(str_replace('$','',$value));//weremovethe'$'. $bpelvariable=bpelwfutils::parsedomvariabletobpelvariable($xpath, $variablename); if(is_null($bpelvariable)){ thrownewbpelwfvariablenotfoundexception("thevariable{$variablenamecould notbefoundintheprocesdefinition file."); else{ $this >dtime=$bpelvariable >getvalue(); else{ $this >dtime=$value;?> BpelWhileActivity.php ,DanielK.Theemann Thisclassrepresentsthe<while>activityfromtheBpeldefinitionlanguage. classbpelwhileactivityextendsactivity { AppendiksB 109
116 private$whilecondtionexpression; private$whileactivity; @paramdomnode$domnode publicfunction construct($name,$prefix,$domnode){ $this >name=$name; $this >prefix=strlen(trim($prefix))>0?sprintf("%s:",$prefix):""; $this >domnode=$domnode; publicfunctionexecute($execution){ $domdoc=$execution >getdomdocument(); $xpath=$execution >xpath; $ifactivity=$this >buildif($xpath); $newifactivitynode=$ifactivity >exportasdomelement($domdoc); $whileparentnode=$this >domnode >parentnode; $execution >cleardombookmark(); if($whileparentnode >parentnode >nodename==="if"){ //Iftheparentofthiswhileisa<sequence>,replacetheparentofthe //<sequence>withthe<sequence>itself. $execution >replacenode($whileparentnode >parentnode,$whileparentnode); else{ //ReplacethiswhilewithitsXML rewritted<if>. $execution >replacenode($this >domnode,$newifactivitynode); InstansiatesanewBpelSequenceActivityandexportsitasaDOMElement. AppendiksB 110
117 privatefunctionbuildsequence($xpath){ $sequenceactivity=newbpelsequenceactivity("","",null); //Buildthe<while>'sactivity. $this >whileactivity=bpelwfutils::parsedomnodetobpelwfnode( $this >domnode >lastchild); //Buildthe<while>itself. $whileactivtyitself=bpelwfutils::parsedomnodetobpelwfnode($this >domnode); $whileactivtyitself >addcondition(newbpelwfbooleanexpression( $this >domnode >firstchild >nodevalue,$xpath)); $whileactivtyitself >addactivity($this >whileactivity); //Addbuildedactivities $sequenceactivity >addsequenceactivity($this >whileactivity); $sequenceactivity >addsequenceactivity($whileactivtyitself); return$sequenceactivity; @returnbpelifactivity$ifactivity privatefunctionbuildif($xpath){ $ifactivity=newbpelifactivity("","",null); //Buildandaddthe<while>'scondition. $this >whilecondtionexpression=newbpelwfbooleanexpression( $this >domnode >firstchild >nodevalue,$xpath); $ifactivity >addcondition($this >whilecondtionexpression); //getandadd<sequence>activity. $ifactivity >addactivity($this >buildsequence($xpath)); publicfunctionexportasdomelement($domdocument){ $whilenode=$domdocument >createelement("while"); //Addconditionnode $this >whilecondtionexpression=newbpelwfbooleanexpression( $this >domnode >firstchild >nodevalue,$xpath); $whileconditionnode=$this >whilecondtionexpression > exportasdomelement($domdocument); $whilenode >appendchild($whileconditionnode); //Addactivitynode $whileactivitynode=$this >whileactivity >exportasdomelement($domdocument); $whilenode >appendchild($whileactivitynode); return$whilenode; AppendiksB 111
118 publicfunctionaddcondition($expression){ $this >whileconditionexpression=$expression; publicfunctionaddactivity($activity){ $this >whileactivity=$activity;?> BpelInvokeActivity.php ,DanielK.Theemann Thisclassrepresents,rightnowalimitedversion,oftheinvokeactivityfromthe BPEL activitymodel. Sincewebserivesisn'tsupportedathemoment,thisactivitystillservesasaan invoker,inthewaythatit invokesurlsfromthesm bpelactivity<humanform>. Infuturereleasesitwillalsosupportitrealintentionstowardsthews bpel2.0 specification. classbpelinvokeactivityextendsactivityimplementsidomexporter { AppendiksB 112
119 publicfunction construct($name,$prefix,$domnode,$url){ $this >name=$name; $this >prefix=$prefix; $this >domnode=$domnode; $this >url=$url; publicfunctionexecute($execution){ //Checkiftheurlspecifiedexists,otherwisethrowanexception. if(file_get_contents($this >url)===false){ thrownewbpelwfurlnotfoundexception("therequestedurl'{$this >url}'' couldnotbereach..."); $execution >removenode($execution >domiterator >current()); $location=sprintf("%s?wf=%s",$this >url,$execution >getdefinitionname()); header('location:'.$location); publicfunctionexportasdomelement($domdocument){ //Createthe<invoke>node. $invokenode=$domdocument >createelement("invoke"); //Settheattribute"name"ifspecified. if(strlen(trim($this >name))>0){ $invokenodeattname=sprintf("%s%s",$this >prefix,$this >name); $invokenode >setattribute("name",$invokenodeattname); //Settheattribute"inputVariable". $invokenode >setattribute("url",$this >url); return$invokenode; Apieceofjavascriptthatopentherequestedurlinanewbrowserwindow. privatefunctioninvokeurl(){ print"<scriptlanguage=\"javascript\">\n"; print"<! hidefromoldbrowser\n\n"; print"functioninvokeurl(){\n"; print"window.open(\"".$this >url."\");\n"; print"}\n\n"; AppendiksB 113
120 print"invokeurl();\n\n"; print" >\n"; print"</script>\n";?> AppendiksB 114
121 B.1.1.2sm bpel OnChangeActivity.php <?php @subpackagesm 2008,DanielK.Theemann Thisclassrepresentstheworkflowengineactivity"onChange".Thisactivitywait until acertainbpelvariablehasbeenchange.duringitswaitingtheworkflowwillbe suspended. Besidesitcanactastheinitiatorofnewprocessinstance,whentheattribute "createinstance"issetto"yes". Whencreatinganewprocessinstanceandthevariable"processDefinition"isset,it willcreateanewinstance ofthatprocessdef.,otherwiseitwillcreateanewinstanceofitsowntheprocess def. AppendiksB 115
122 classonchangeactivityextendsactivityimplementsidomexporter { private$variable; publicfunction construct($name,$variable,$prefix,$domnode, $createinstance=""){ $this >name=$name; $th is >variable=$variable; $this >createinstance=$createinstance; $this >prefix=$prefix; $this >domnode=$domnode; Findsthebpelvariabletogetdatafrom.Ifitdoesn'tcontainany data,thisactivitywilljustexecutebutnotmoveontothenextactivity (servesasa"waitstate"). Ifthevariablehasdataitremovesthisactivity'snodefromthedomdocument and definitionfile.anewversionofthedefinitionfilewillbesavedandthe iteratorgoestothenextnode. Ifitisthestartactivityitsetstheexecutiontostartedandsetsthe current publicfunctionexecute($execution){ $wfdefintionname=$execution >getdefinitionname(); $_SESSION[$wfDefintionName]['prevValues']= isset($_session[$wfdefintionname]['prevvalues'])? $_SESSION[$wfDefintionName]['prevValues']:array(); $variables=unserialize($_session[$wfdefintionname]['variables']); $bpelvariable=$variables[$this >variable]; $prevvalue=isset($_session[$wfdefintionname]['prevvalues'][$this >variable])? $_SESSION[$wfDefintionName]['prevValues'][$this >variable]:""; if($bpelvariable >getvalue()==$prevvalue){ AppendiksB 116
123 $execution >adddombookmark($execution >domiterator >getoffset()); $execution >suspend(); else{ $_SESSION[$wfDefintionName]['prevValues'][$this >variable]= $bpelvariable >getvalue(); //Createanewinstanceoftherequestedworkflow. if(strlen(trim($this >createinstance))>0){ $this >createprocessinstance(); $execution >cleardombookmark(); $execution >removenode($this publicfunctionexportasdomelement($domdocument){ //Createthe<onChange>nodewiththeattributes"name"and"variable". $onchangenode=$domdocument >createelement("onchange"); //Setattributes. $onchangeattname=sprintf("%s%s",$this >prefix,$this >name); $onchangenode >setattribute("name",$onchangeattname); $onchangenode >setattribute("variable",$this >variable); return$onchangenode; Openstherequestedworkflowinanewbrowserwindow.Therequestedfile instantiatesthenewprocessinstance(bpelwfexecution). privatefunctioncreateprocessinstance(){ print"<scriptlanguage=\"javascript\">\n"; print"<! hidefromoldbrowser\n\n"; print"functioncreatenewinstance(){\n"; print"window.open(\"".$this >createinstance."\",\"".time()."\");\n"; print"}\n\n"; print"createnewinstance();\n\n"; print" >\n"; print"</script>\n";?> AppendiksB 117
124 HumanFormActivity.php @subpackagesm 2008,DanielK.Theemann Classthatrepresentsthesm bpel<humanform>element.thisactivityisatryto integratehuman interactionintobpel,whereaformisincludedandthesubmitteddataisintegrated into thedefinitionfile. classhumanformactivityextendsactivityimplementsidomexporter @paramdomnode$domnode publicfunction construct($name,$prefix,$domnode){ $this >name=$name; $this >prefix=$prefix; $this >domnode=$domnode; Executesthe<humanForm>element.Itloopsthroughllitactivitesandexecutes them.oncetherearenochildsleft,itwillremoveitselffromdefinition publicfunctionexecute($execution){ $execution >adddombookmark($execution >domiterator >getoffset()); if($this >domnode >haschildnodes()){ foreach($this >domnode >childnodesas$childnode){ $activity=bpelwfutils::parsedomnodetobpelwfnode($childnode); if(!is_null($activity)){ $activity >execute($execution); else{ $execution >cleardombookmark(); $execution >removenode($this >domnode); AppendiksB 118
125 ExportstheinvokeobjecttoaDOMNoderepresentation. publicfunctionexportasdomelement($domdocument){ $humanformnode=null; if($this >domnode >haschildnodes()){ //Createthe<humanForm>node. $humanformnode=$domdocument >createelement("humanform"); //Settheattribute"name"ifspecified. if(strlen(trim($this >name))>0){ $humanformnodeattname=sprintf("%s%s",$this >prefix,$this >name); $humanformnode >setattribute("name",$humanformnodeattname); //Appendallchildactivities foreach($this >domnode >childnodesas$activity){ $activity=bpelwfutils::parsedomnodetobpelwfnode($activity); $activitynode=$activity >exportasdomelement($domdocument); $humanformnode >appendchild($activitynode); return$humanformnode;?> AppendiksB 119
126 B.1.2expressions BpelWfExpression.php @licensehttp:// 2008,DanielK.Theemann Interfaceforexpressionsinthisworkflowengine. abstractclassbpelwfexpression { AnobjectoftheclassDOMXPath, whichcanqueryandexaluatethecurrentdom protected$domxpath; Theexpressiontobevalidate,evaluatedorbuilded. AppendiksB 120
127 @varmixed protected$expressionstring; Validatestheexpression. protectedabstractfunctionvalidate(); protectedfunctionrewritebpelxpathvariablebinding($invalidoperatorlist){ $xpathexpr=$this >findvariablesinexpr($this >expressionstring); $xpathtolist=split('/',trim($xpathexpr)); $variablebinding=""; for($j=0;$j<count($strtmp);$j++){ if(!in_array($strtmp[$j],$invalidoperatorlist)&&!$varnamefound){ $variablename.=$strtmp[$j]; else{ $varnamefound=true; $tail.=$strtmp[$j]; publicabstractfunctionevaluate(); for($i=0;$i<count($xpathtolist);$i++){ if(strlen(trim($xpathtolist[$i]))==0){ $variablebinding.='/'; else{ if(substr($xpathtolist[$i],0,1)=='$'){ $strtmp=str_split($xpathtolist[$i]); $varnamefound=false; $variablename=""; $tail=""; $variablebinding.=$i==0? trim($variablename)): $variablebinding.=$tail; else{ $variablebinding.=$xpathtolist[$i]; AppendiksB if($xpathtolist[$i 1]!='/'&&$i<count($xpathToList) 1){ 121
128 $variablebinding.='/'; returnstr_replace('$','',$variablebinding); privatefunctionfindvariablesinexpr($expr){ $chars=str_split($expr); $returnstring=""; for($i=0;$i<count($chars);$i++){ if($chars[$i]==='$'&&$chars[$i 1]!=='/'){ $chars[$i]='//$'; $returnstring.=$chars[$i]; protectedfunctionbuildconditiondomelement($domdocument){ $conditionnode=$domdocument >createelement("condition",$this >expressionstring); return$conditionnode;?> BpelWfBooleanExpression.php @licensehttp:// 2008,DanielK.Theemann ThisclassevaluatesagivenbooleanexpressionwithXPath. classbpelwfbooleanexpressionextendsbpelwfexpressionimplementsidomexporter AppendiksB 122
129 { '>=', private$operator_list=array(' ','+',' ','div','=','!=','<','<=','>', 'mod','(',')','>','<'); publicfunction construct($expressionstring,$domxpath){ $this >expressionstring=$expressionstring; $this >domxpath=$domxpath; @returntrueifthews BPELexpressionevaluatestrue. publicfunctionevaluate(){ $evaluationvalue=false; $strpos=strpos($this >expressionstring,'$'); if($strpos!==false){ $this >expressionstring=$this >rewritebpelxpathvariablebinding( if($this >validate()!==false){ $query=sprintf("boolean(%s)",$this >expressionstring); $evaluationvalue=$this >domxpath >evaluate($this >expressionstring); protectedfunctionvalidate(){ returnxpathvalidator::validatexpathexpression($this >domxpath, $this >operator_list); AppendiksB 123
130 publicfunctionexportasdomelement($domdocument){ return$this >buildconditiondomelement($domdocument);?> BpelWfDurationExpression.php @licensehttp:// 2008,DanielK.Theemann ThisclassrepresentsthedurationexpressionusedincertainBPELactivities. xmlschema 2 */ require"soap/type/duration.php";//pear classbpelwfdurationexpressionextendsbpelwfexpression { publicfunction construct($expressionvalue,$domxpath){ $this >domxpath=$domxpath; $this >expressionstring=$expressionvalue; it Validatesthe#durationexpressionandreturnsitasunixtime,ifvalid. Otherwiseitwillthrowanexception. */ publicfunctionevaluate(){ if(!$this >validate($this >expressionstring)){ thrownewbpelwfinvalidxpathexpressionexception( 'Invaliddurationexpression.('.$this >expressionstring.')'); returnsoap_type_duration::duration_to_unix($this >expressionstring); protectedfunctionvalidate(){ AppendiksB 124
131 if(!soap_type_duration::is_duration($this >expressionstring)){ returnfalse;?> returntrue; BpelWfDateTimeExpression.php @licensehttp:// 2008,DanielK.Theemann ThisclassrepresentstheDateTimeexpressionusedincertainBPELactivities. Sofarin: wait TheDateTimeexpressionmustbevalidXMLschematype(DateTime). require"soap/type/datetime.php";//pear classbpelwfdatetimeexpressionextendsbpelwfexpression { publicfunction construct($expressionvalue,$domxpath){ $this >domxpath=$domxpath; $this >expressionstring=$expressionvalue; Validatesthe#dateTo,eexpressionandreturnsitasunixtime,ifvalid. Otherwiseitwillthrowanexception. @throwsbpelwfinvalidxpathexpressionexception publicfunctionevaluate(){ if(!$this >validate()){ thrownewbpelwfinvalidxpathexpressionexception('invaliddatetime expression.'); returnstrtotime($this >expressionstring); AppendiksB 125
132 ?> TODOsupportvalidationofthedateTimeISO protectedfunctionvalidate(){ returntrue; @seesoap_type_datetime::tostring publicfunctionconvertunixtimetodatetime($unixtime){ returnsoap_type_datetime::tostring($unixtime); AppendiksB 126
133 B.2WorkflowExecutionAPI B.2.1executions AppendiksB 127
134 BpelDOMNodeListIterator.php @licensehttp:// 2008,DanielK.Theemann RecursiveIteratorisaclassinthePHPclasshierarchi. classbpeldomnodelistiterator { private$nodes; private$offset; publicfunction construct(domnodelist$nodes,$bookmark){ if($bookmark>0){ $this >offset=$bookmark; return$this >nodes=$nodes; publicfunctionrewind(){ return$this >offset=0; publicfunctiongetoffset(){ return$this >offset; publicfunctioncurrent(){ return$this >nodes >item($this >offset); publicfunctionparentnode(){ return$this >nodes >item($this >offset) >parentnode; Returnsthenodenameofthecurrentelement. AppendiksB 128
135 @returnstring publicfunctionkey(){ return$this >current() >nodename; publicfunctionnext(){ return$this >offset++; publicfunctionvalid(){ return$this >offset<$this >nodes >length; publicfunctionhaschildren(){ returnisset($this >current() >childnodes >length)&& $this >current() >childnodes >length>0; publicfunctiongetchildren(){ returnnewself($this >current() FindsaspecificnodeintheDOMrepresentation. publicfunctionfindnode($node){ while($this >valid()){ if($this >current()instanceofdomelement&&$this >current()=== $node){ returntrue; $this >next(); returnfalse; AppendiksB 129
136 publicfunctionremovenode($node){ $parentnode=$node >parentnode; $oldnode=$parentnode >removechild($node); if($oldnode!=$node){ thrownewbpelwfactivitynodenotremovefromdom( sprintf('couldnotremoveactivitynode(tagname"%s")from DOM', $node >tagname) ); publicfunctionreplacenode($oldnode,$newnode){ $parentnode=$oldnode >parentnode; $oldnodereplaced=$parentnode >replacechild($newnode,$oldnode); if($oldnodereplaced!=$oldnode){ thrownewbpelwfnodenotreplacedindom( sprintf('couldnotreplacenode(tagname"%s")with(tagname%s)in ); $oldnode >tagname,$newnode publicfunctionappendnode($node,$parent){ $oldnode=$parent >appendchild($node); if($oldnode!=$node){ thrownewbpelwfnodenotappendedtodom( sprintf('couldnotappendnode(tagname"%s")todom',$node >tagname) );?> AppendiksB 130
137 BpelWfExecution.php <?php @licensehttp:// Thisclassrepresentsaworkflowinstansandhandlestheexecutionofaworkflow, whichinvolvessuspend,resumeandtraversing. classbpelwfexecution private$bpeldomdocument; private$definitionname; public$xpath; falseiftheworkflowhasnotbeenstartedyet. public$started; AppendiksB 131
138 @varboolean private$suspended=false; private$finished=false; Holdsthecurrentpositioninthedom,sothatwheninitanewiterator, private$dombookmark; Holdsallvariableswithintheglobalscope. public$globalvariables=array(); Indicatesifanewinstanceofthedefinitionfileshall theabsolutepaththedefinitionfiletobe loaded. publicfunction construct($bpeldefinitionfile,$createinstance){ $this >definitionfile=$bpeldefinitionfile; $this >createinstance=$createinstance; $this >setupdomdocument(); $this >started=$this >definitionstorage >isstarted(); Calledwhentheexecutionisunserializedagain,beforecontinuing theworkflowexecution. publicfunction wakeup(){ $this >setupdomdocument(); SetsuptheBpeldefinitionstoragetooperateon. privatefunctionsetupdomdocument(){ AppendiksB 132
139 $this >definitionstorage=newbpelwfdefinitionstorage($this >definitionfile, $this >createinstance); $this >bpeldomdocument=$this >definitionstorage >loadbyname(); $this >createinstance=false; $this >definitionfile=$this >definitionstorage >getdefinitionfile(); $this >definitionname=$this >definitionstorage >getdefinitionname(); $this >setupxpath(); $this >setupdomiterator(); $this >findglobalbpelvariables(); SetuptheDOMXPathobjecttousefromtheloadedDOMDocument. privatefunctionsetupxpath(){ $this >xpath=newdomxpath($this >bpeldomdocument); //RegisterthedefaultnamespaceforexecutableBPELprocessinstances. $this >xpath >registernamespace("bpel", ' open.org/wsbpel/2.0/process/executable'); InstantiatesanewDOMIteratorforthecurrentDOMDocument.Willbecalledevery timeanodeiremovedfromthedomdocument. privatefunctionsetupdomiterator(){ $nodelist=$this >xpath >query('//bpel:*'); $this >domiterator=newbpeldomnodelistiterator($nodelist,$this >dombookmark); then Themainexecutionloopintheworkflowengine. IttraversestheDOMDocumentrepresentationofthe.bpelfilecurrentbeing processed. AllchildnodeswillbeparsedintoanobjectfromthewfProcessComponentand executed. publicfunctionexecuteworkflow(){ //Mainloop do{ $currentactivity=bpelwfutils::parsedomnodetobpelwfnode( $this >domiterator >current()); //Onlyparsednodes(supportednodesrightnow)willbeexecuted. if(!is_null($currentactivity)){ $currentactivity >execute($this); if(!$this >started){ $this >started=true; AppendiksB 133
140 if($this >dombookmark==0){ $this >domiterator >next(); while(!$this >suspended&&$this >domiterator >valid()); if(!$this >suspended){ print"workflowsuccesfullycompleted."; Suspendstheworkflowuntilitisresumedagain. publicfunctionsuspend(){ $this >suspended=true; $_SESSION['execution']=serialize($this); Resumesthesuspendedworkflow. publicfunctionresume(){ $this >suspended=false; $this >executeworkflow(); UseXPathtofindallglobalvariablesintheprocessdefinitionfile. (Selectall<variable>elementsthatchildrenofthe<process>element.) Storesanyvariablesfoundonsession. privatefunctionfindglobalbpelvariables(){ $globalvars=$this >xpath foreach($globalvarsas$var){ $variablename=$var >getattribute('name'); $variablevalue=$var >nodevalue; $variableshare=$var >getattribute('shared'); $this >globalvariables[$variablename]=new BpelVariable($variableName, $variablevalue, $variableshare); $_SESSION[$this >definitionname]['variables']=serialize($this >globalvariables); >savenewversion publicfunctionsavenewdefinitionversion(){ $this >bpeldomdocument=$this >definitionstorage >savenewversion( AppendiksB 134
141 $this >bpeldomdocument); $this >setupdomdocument(); RemovesthecurrentnodeinspecifiedDOMNodeListIteratorand savesanewversionofthedefinitionfile. publicfunctionremovenode($node){ $this >domiterator >removenode($node); $this @seebpeldomnodelistiterator::replacenode publicfunctionreplacenode($oldnode,$newnode){ $this >domiterator >replacenode($oldnode,$newnode); $this publicfunctionappendnode($node,$parent){ $this >domiterator >appendnode($node,$parent); $this >savenewdefinitionversion(); Addsabookmarktotheiterator.Theiteratorwillstartfromthis publicfunctionadddombookmark($domindex){ $this >dombookmark=$domindex; Removesthebookmarkcurrentlyset. publicfunctioncleardombookmark(){ $this >dombookmark=0; publicfunctionissuspended(){ return$this >suspended; AppendiksB 135
142 publicfunctiongetdomdocument(){ return$this >bpeldomdocument; publicfunctiongetdefinitionname(){ return$this >definitionname; PrintsoutthecurrentDOMDocumentrepresentationtothescreen. publicfunctiontostringdomdocument(){ $this >bpeldomdocument >formatoutput=true; var_dump($this >bpeldomdocument >savexml());?> B.2.2exceptions AppendiksB 136
143 BpelWfException.php @licensehttp:// 2008,DanielK.Theemann GeneralexceptionfortheBPELworkflowcomponent abstractclassbpelwfexceptionextendsexception{?> BpelWfDefinitionStorageException.php @licensehttp:// 2008,DanielK.Theemann Thisexceptionwillbethrownwhenanerroroccursduring loadingorsavingabpeldefinitionorwhenanerroroccursinconditionsets. classbpelwfdefinitionstorageexceptionextendsbpelwfexception{?> BpelWfActivityNodeNotRemoveFromDOM.php @licensehttp:// 2008,DanielK.Theemann Thisexceptionwillbethrownifitfailstoremoveaactivity(DOMNode)from thedomdocument. AppendiksB 137
144 classbpelwfactivitynodenotremovefromdomextendsbpelwfexception{?> BpelWfExplicitTerminationException.php @licensehttp:// 2008,DanielK.Theemann Thisexceptionwillbethrownwhentheworkflowinstanceisendedwiththe<exit> activity. classbpelwfexplicitterminationexceptionextendsbpelwfexception{?> BpelWfInternalFaultException.php @licensehttp:// 2008,DanielK.Theemann Thisexceptionwillbethrownwhentheworkflowinstancegetsaninternalfault. classbpelwfinternalfaultexceptionextendsbpelwfexception{?> BpelWfInvalidXPathExpressionException.php <?php AppendiksB 138
145 2008,DanielK.Theemann ThisexceptionwillbethrownwhenXPathexpressionisinvalid. classbpelwfinvalidxpathexpressionexceptionextendsbpelwfexception{?> BpelWfNodeNotAppendedToDOM.php @licensehttp:// 2008,DanielK.Theemann ThisexceptionwillbethrownifitfailstoappendanewnodetotheDOMDocument. classbpelwfnodenotappendedtodomextendsbpelwfexception{?> BpelWfNodeNotReplacedInDOM.php @licensehttp:// 2008,DanielK.Theemann Thisexceptionwillbethrownifitfailstoreplaceagivennodewithanewnodein the DOM. classbpelwfnodenotreplacedindomextendsbpelwfexception{?> AppendiksB 139
146 BpelWfVariableNotFoundException.php @licensehttp:// 2008,DanielK.Theemann Thisclassrepresentsanexceptionthatwillbethrownwhenevertheenginesearchfor a BPELvariable intheprocesdefinitionfileandnotfindit. classbpelwfvariablenotfoundexceptionextendsbpelwfexception{?> BpelWfUrlNotFoundException.php ,DanielK.Theemann Thisexceptionwillbethrownwhenanerroroccurstryingtoredirecttoagivenurl. classbpelwfurlnotfoundexceptionextendsbpelwfexception{?> AppendiksB 140
147 B.3ParsingAPI BpelWfUtils.php @licensehttp:// BPELworkflowutilitymethods. abstractclassbpelwfutils { @returnactivity$activity publicstaticfunctionparsedomnodetobpelwfnode($domnode,$startnode=false){ $activity=null; $namespaceprefix=strlen($domnode >prefix)>0? sprintf("%s:",$domnode >prefix):""; AppendiksB switch($domnode >nodename){ case$namespaceprefix.'sequence': $activity=newbpelsequenceactivity( 141
148 $domnode >attributes >getnameditem("name") >nodevalue, $namespaceprefix,$domnode); break; case$namespaceprefix.'empty':$activity=new BpelEmptyActivity($domNode); break; case$namespaceprefix.'if':$activity=newbpelifactivity( $domnode >attributes >getnameditem("name") >nodevalue, $namespaceprefix,$domnode); break; case$namespaceprefix.'onchange':$activity=newonchangeactivity( $domnode >attributes >getnameditem("name") >nodevalue, $domnode >attributes >getnameditem("variable") >nodevalue, namespaceprefix,$domnode, $domnode >attributes >getnameditem("createinstance") >nodevalue); break; case$namespaceprefix.'throw':$activity=newbpelthrowactivity( $domnode >attributes >getnameditem("faultname") >nodevalue, $domnode >attributes >getnameditem("faultvariable") >nodevalue, $namespaceprefix,$domnode); break; case$namespaceprefix.'exit':$activity=newbpelexitactivity( $domnode >attributes >getnameditem("name") >nodevalue, $namespaceprefix,$domnode); break; case$namespaceprefix.'while':$activity=newbpelwhileactivity( $domnode >attributes >getnameditem("name") >nodevalue, $namespaceprefix,$domnode); break; case$namespaceprefix.'humanform':$activity=newhumanformactivity( $domnode >attributes >getnameditem("name") >nodevalue, $namespaceprefix,$domnode, $domnode >attributes >getnameditem("inputvariable") >nodevalue); break; case$namespaceprefix.'wait':$activity=newbpelwaitactivity( $domnode >attributes >getnameditem("name") >nodevalue, $namespaceprefix,$domnode); break; case$namespaceprefix.'assign':$activity=newbpelassignactivity( $domnode >attributes >getnameditem("name") >nodevalue, $namespaceprefix,$domnode); break; case$namespaceprefix.'invoke':$activity=newbpelinvokeactivity( $domnode >attributes >getnameditem("name") >nodevalue, $namespaceprefix,$domnode, $domnode >attributes >getnameditem("url") >nodevalue); break; default:$activity=null; break; return$activity; Splitsthe$filePathintothreechunksandreturnsthemasanarraylikethis: AppendiksB 142
149 array("dirname"=>string,"filename"=>string,"currentversion"=>boolean); publicstaticfunctionsplitdefinitionfilepath($filepath){ $splitpositiondirfile=strrchr($filepath,'/'); $currentversion=preg_match("^._[0 9]+[.bpel]$",$filePath)===false? true:false; returnarray( "dirname"=>substr($filepath,0,$splitpositiondirfile), "filename"=>substr($filepath,$splitpositiondirfile+1), "currentversion"=>$currentversion @returnmixed(bpelvariableornullifnotfound). publicstaticfunctionparsedomvariabletobpelvariable($xpathobj,$variablename){ $variablenodelist=$xpathobj $variablename.'"]'); $bpelvariable=null; if($variablenodelist >length==1){ $bpelvariable=newbpelvariable($variablename, $variablenodelist >item(0) >nodevalue, $variablenodelist >item(0) >getattribute('shared')); } return$bpelvariable;?> IDOMExporter.php ,DanielK.Theemann ThisinterfacerepresentsallcommonmethodsforexportingBpelActivityobjectto adomelement. interfaceidomexporter { ExportsthecurrentobjectasanDOMElement. AppendiksB 143
150 publicfunctionexportasdomelement($domdocument); AppendiksB 144
151 B.4validationAPI XpathValidator.php @licensehttp:// 2008,DanielK.Theemann ThisclassconsistsofstaticfunctionstovalidateXPathexpressionstowardsthe workflowengine. classxpathvalidator { Itonlyconsistsofstaticfunction,sowedon'tneed toinitializenewinstancesofthisclass. privatefunction construct(){ @throwsbpelwfinvalidxpathexpressionexception staticfunctionvalidatexpathexpression($xpath,$expr){ if($xpath >query($expr)===false){ thrownewbpelwfinvalidxpathexpressionexception( sprintf("invalidxpathbooleanexpression:%s",$expr)); returntrue;?> AppendiksB 145
152 B.5PersistenceAPI BpelWfDefinitionStorage.php @licensehttp:// 2008,DanielK.Theemann Thisclasshandlesloadingandsavingadefinitionfile.Itdoesalltheversioning ofthedefinitionfiles. Italsohandlescreatingnewinstancesofthesamedefinitionfilebyplacingaunix timestamp attheendofthefilename(likenewemployee_ bpel) classbpelwfdefinitionstorage { AppendiksB 146
Chapter 17 - Web Service Composition
Prof. Dr.-Ing. Stefan Deßloch AG Heterogene Informationssysteme Geb. 36, Raum 329 Tel. 0631/205 3275 dessloch@informatik.uni-kl.de Chapter 17 - Web Service Composition Motivation Complex web services Need
Læs merePHP Crash course. Databaser
PHP Crash course Databaser PHP Intro PHP er et server scripting sprog der kan bruges til at lave aktivt indhold på hjemme sider. Der er to betingelser som skal opfyldes for at serveren fortolker PHP koden.
Læs mereNintex Workflow UK/DK
Nintex Workflow UK/DK Når Nintex Workflows anvendes i et Dansk sproget SharePoint miljø, er der lidt forskel på hvad de forskellige elementer kaldes, såvel som rækkefølgen på disse. Noget er oversat, noget
Læs mereDesign Diaries.
Design Diaries http://blog.lykkeeilert.dk/ Patricia Gambula Larsen Patrick Lykke Eilert Ninette Andersen cph-pl130@cphbusiness.dk cph-pe58@cphbusiness.dk cph-na96@cphbusiness.dk INDHOLD Use case model
Læs mereA Declarative Framework for Enterprise Information Systems
A Declarative Framework for Enterprise Information Systems Qualification Report Christian Stefansen cstef@diku.dk NEXT August 2005 Dagens workflow Workflowmønstre Kodning SMAWL Intro Kontrakter CDL Arkitektur
Læs mereComponent based software enginering Diku 2005 Kritikopgave
Component based software enginering Diku 2005 Kritikopgave Nicolas Møller Henschel 17. april 2005 1 Indhold 1 Indledning 3 2 Indhold 3 2.1 Introduktionen.......................... 3 2.1.1 Mangler..........................
Læs mereIndholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen...
Modul 2 Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen... 6 Opgave... 6 POST/GET og formular... 6 Opgaver...
Læs mere"# $%$ " # $ % $ $ " & ( ) *+!,! Sum_Cost >= 5000SirName = Beltov Continue = %!- + ( ( - True) Continue *! If Antal <= 20 Then EnhedsOmk = 1.
"# $$ " # $ && & ' $ $ " & ) *+, Sum_Cost >= 5000SirName = Beltov Continue = True) Continue *, + If Antal
Læs merePHP 3 UGERS FORLØB PHP, MYSQL & SQL
PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at
Læs mereLektion 3. Grundlæggende programmering i VR
Lektion 3 Grundlæggende programmering i VR Plan for i dag UML Usecase diagrammer Aktivitets diagrammer Klasse diagrammer Udforskning af forskelligt VR og andre måder at udvide virkeligheden på Cardboard
Læs mereTerese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/11-2012
Server side Programming Wedesign Forelæsning #8 Recap PHP 1. Development Concept Design Coding Testing 2. Social Media Sharing, Images, Videos, Location etc Integrates with your websites 3. Widgets extend
Læs mereDagens program. Domæner. change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog. Hvad er widgets.
Dagens program Har alle fået? Har nogen betalt for meget? Hav jeres koder klar Domæner change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog Hvad er widgets Hvad er
Læs mereHassansalem.dk/delpin User: admin Pass: admin BACKEND
Hassansalem.dk/delpin User: admin Pass: admin BACKEND 1/10 Indledning Dette projekt er den afsluttende del af web udvikling studiet på Erhvervs Lillebælt 1. semester. Projektet er udarbejdet med Del-pin
Læs mereDatabaseadgang fra Java
Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,
Læs mereFoto-Applikation Dokumentation. Et Kod-i-Ferien projekt
Foto-Applikation Dokumentation Et Kod-i-Ferien projekt 1 Indholdsfortegnelse Systemets generelle opsætning... 3 Systemets elementer... 4 iphone applikation... 4 PHP-script... 4 Wordpress-plugin... 4 Website...
Læs mereProgrammering I Java/C#
Programmering I Java/C# Dit første projekt Datatekniker Intro to C# C# (C Sharp) Et enkelt, moderne, generelt anvendeligt, objektorienteret programmeringssprog Udviklet af Microsoft, ledet af danskeren
Læs mereData load og udtræk. 2. iteration: implmentation (test af backend) PHP mysql. Loade og parse XML (SimpleXML, Xpath) Filhåndtering i PHP JSON
Data load og udtræk 2. iteration: implmentation (test af backend) 1 PHP mysql Loade og parse XML (SimpleXML, Xpath) Filhåndtering i PHP JSON 2 Data udtræk PHP mysql: Processen 1. Forbind til MySQL server
Læs mereIndholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:...
Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:... 9 Nogle HTML tags... 9 Databaser og PHP Når vi snakker
Læs merePHP guide af Daniel Pedersen
PHP guide af Daniel Pedersen Side 1 af 12 Indholdsfortegnelse PHP guide af Daniel Pedersen Side 2 af 12 Indledning I dette hæfte finder du forklaringer til PHP funktioner, løkker, variabler samt en række
Læs mere3C03 Concurrency: Model-based Design
3C03 Concurrency: Model-based Design Wolfgang Emmerich 1 Outline Role of Modelling in System Development Refining Models into Designs FSP Actions and Operations FSP Processes and Threads FSP Processes
Læs mereIndholdsfortegnelse. Rasmus R. Sørensen, Christina Svenstrup og Lasse Bager 1
Indholdsfortegnelse Indholdsfortegnelse... 1 Projekt Lægehuset... 2 Fordele ved det nye system... 2 Klassifikation af forandring... 3 Problemstillinger i forbindelse med forandringerne... 4 Modstand mod
Læs mereØvelse Slides må ikke deles uden godkendelse fra Anne Holmbæck
Øvelse Design af governancemodel Hvem giver øverste mandat og den man eskalerer til i yderste konsekvens Hvem giver mandat og prioriterer indenfor mandat Hvem er udførende og skal følge principper og metoder
Læs mereÅben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser
3/10/96 Seminaret den 26/10 vil omhandle den sidste fase af analysen og de første skridt i kodegenereringen. Det drejer sig om at finde betydningen af programmet, nu hvor leksikalsk og syntaktisk analyse
Læs mereIBM Software Group. SOA v akciji. Srečko Janjić WebSphere Business Integration technical presales IBM Software Group, CEMA / SEA IBM Corporation
IBM Software Group SOA v akciji Srečko Janjić Business Integration technical presales IBM Software Group, CEMA / SEA Service Oriented Architecture Design principles and technology for building reusable,
Læs mereNavision Stat (NS 9.2)
Side 1 af 7 Navision Stat 9.1.002 (NS 9.2) ØSY/NS/RASEG Dato 21.06.2018 Installationsvejledning til NS Web API Invoker Overblik Introduktion Installationsvejledningen beskriver, hvordan man installerer
Læs mereHTML, PHP, SQL, webserver, hvad er hvad??
Dagens menu HTML og PHP: Baglæs fra output til input PHP: Variable, strenge og arrays Funktioner, oprettelse og kald (og variable på tværs af funktioner) echo vs return? if-else konstruktioner MySQL: Hvad
Læs mereReeksamen, DSDS, forår 2008
Reeksamen, DSDS, forår 2008 Introduktion til Scripting, Databaser og Systemarkitektur Jonas Holbech IT Universitetet i København 22. august 2008 Alle hjælpemidler er tilladte, dog ikke computer og kommunikationsmidler.
Læs mereSoftware Construction 1 semester (SWC) Spørgsmål 1
Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /
Læs mereVÆR EFFEKTIV SOM SAS PROGRAMMØR MED SAS ENTERPRISE GUIDE 7.12 GEORG MORSING
VÆR EFFEKTIV SOM SAS PROGRAMMØR MED SAS ENTERPRISE GUIDE 7.12 GEORG MORSING Copyr i g ht 2013, SAS Ins titut e Inc. All rights res er ve d. Livet som SAS-programmør er blevet lettere med SAS Enterprise
Læs mereWebkorpora: Yahoo API og perl
Webkorpora: Yahoo API og perl Jakob Halskov jh.id@cbs.dk Ph.d.-studerende Terminologi og korpuslingvistik den 21. februar 2006 1. Hvad er et API? 2. Hent din egen udviklernøgle! 3. Gennemgang af koden
Læs mereFBS for praktikere Fyn. Notifikation og print skabeloner
FBS for praktikere Fyn Notifikation og print skabeloner 1.Velkomst v/anton Helms 2.Introduktion til HTML/CSS/Freemarker v/kent Gottschalk Hansen. 3.Skabeloner i Cicero v/kent Gottschalk Hansen. 4.Erfaringsudveksling
Læs mereDynamiske Billeder, Image Map & XY coordinater. ASP.NET og Access Databasen.
Dynamiske Billeder, Image Map & XY coordinater. ASP.NET og Access Databasen. Tutorial lavet af Jákup W. Hansen TSU 2006 22. april 2008 Hvorfor denne tutorial: Denne tutorial er ikke direkte pensum på datamatikkerskolen,
Læs merePython programmering. Per Tøfting. MacFest
Python programmering MacFest 2005 Per Tøfting http://pertoefting.dk/macfest/ Indhold Måder at afvikle Python program på Variabler Data typer Tal Sekvenser Strenge Tupler Lister Dictionaries Kontrolstrukturer
Læs mereParallelle algoritmer
Parallelle algoritmer 1 Von Neumann s model John von Neumann 1903-57 Von Neumanns model: Instruktioner og data er lagret i samme lager, og én processor henter instruktioner fra lageret og udfører dem én
Læs mereCentOS 7. Lavet af Ali Sarac og Andreas Jensen
CentOS 7 Lavet af Ali Sarac og Andreas Jensen 3.8.2017 Indholdsfortegnelse Konklusion... 3 Installer CentOS 7 i VMware... 3 Installation af Apache, PHP5 og vores HTML side... 7 2.4 spørgsmål... 12 Kildekoder...
Læs mereDenne artikel gennemgår kort nogle mulighederne for brug af XML i ASP. Det sker ved brug af eksempler. Eksemplerne vil være i VBS.
Denne guide er oprindeligt udgivet på Eksperten.dk XML i ASP Denne artikel gennemgår kort nogle mulighederne for brug af XML i ASP. Det sker ved brug af eksempler. Eksemplerne vil være i VBS. Den forudsætter
Læs mereDokumentering af umbraco artikeleksport:
Dokumentering af umbraco artikeleksport: Lav en artikel side 2-3. Installationsguide side 3-5. Opsættelse af databasen og web.config side 5-8. Umbraco: templates side 8. Umbraco: borger.dk tab side 8.
Læs mereXML webservice for pensionsordninger. Version 1.0 Draft A
XML webservice for pensionsordninger Version 1.0 Draft A Dokumentoplysninger Titel: Projekt: Webservice for pensionsordninger EDI kontorets branchekoordinerede dataudveksling Forfatter: Bidragsydere til
Læs mereStart på javascript. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 03. Feb 2009 af webstuff I kategorien Programmering / JavaScript
Denne guide er oprindeligt udgivet på Eksperten.dk Start på javascript En begynder artikel til javascript som vil gennemgå: 1: Intro 2: Variabler 3: Arrays 4: Matematik 5: Betingelser 6: Løkker 7: Funktioner
Læs mereProgrammering i C. Lektion september 2009
Programmering i C Lektion 1 8. september 2009 Målgruppe Motivation Indhold Form Materiale 2 / 47 Kursusintroduktion 1 Målgruppe 2 Motivation 3 Indhold 4 Form 5 Materiale Målgruppe Motivation Indhold Form
Læs meresoftware bricks & glue for system integration
Produktet: Denva Service Alert Infrastructure (DSAI) AlertServiceTest DSAI løsning giver mulighed for at løbende at overvåge processer & services på Windows computer. Optimerer: Løsninger giver mulighed
Læs mereUndervisningsbeskrivelse
Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Skoleåret 2016/17 Institution Hansenberg Gymnasium Uddannelse Fag og niveau Lærer Hold htx Programmering,
Læs mereIDENTIFON. Emil Hauberg, Jakob Christoffersen, Ninette Nielsen og Senia Lundberg
Emil Hauberg, Jakob Christoffersen, Ninette Nielsen og Senia Lundberg 1 Indholdsfortegnelse side nr. 1. Forside. 2. Indholdsfortegnelse og indledning. 3. Problemformulering og afgræsning. 4. Tidsplan projektplan
Læs mereWS-Architecture, forretningsprocesser og sikkerhed
Husk at bestille Arkitektur for digital forvaltning på danmark.dk http://danmark.dk/portal/page?_pageid=3 4,733336&_dad=portal&_schema=PORTAL (c) SOA Network, 2004 1 WS-Architecture, forretningsprocesser
Læs mereUndervisningsbeskrivelse
Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Maj-juni 12/15 Institution Uddannelse Fag og niveau Lærer(e) Hold Campus Vejle HHX Informationsteknologi niveau
Læs mereSoftware Construction 1. semester (SWC) januar 2014 Spørgsmål 1
Spørgsmål 1 Grundlæggende objektorienterede begreber o Klasse (class) o Objekt (object) o Metode (method), herunder return type og parametre o Instansvariable (instance variables) & egenskaber (properties),
Læs mereI mit script tager jeg højde for det problem ved, at gemme et unikt tal mellem 0-9 på 6 cifre og derved vil de så blive vist som 2 online.
Denne guide er oprindeligt udgivet på Eksperten.dk Hvem er online? Online script, som tager højde for at der kan være flere personer, som har den samme IP-adresse. Scriptet viser hvor lang tid brugeren
Læs mereInstallationsvejledning SAS Foundation 9.2 SAS Enterprise Guide 4.2. Windows Vista
Installationsvejledning SAS Foundation 9.2 SAS Enterprise Guide 4.2 Windows Vista Oversigt Inden installationen... 3 Udpakning af softwaren... 4 Kopiér licensen ind... 6 Installationen... 7 Yderligere
Læs merePortal Registration. Check Junk Mail for activation . 1 Click the hyperlink to take you back to the portal to confirm your registration
Portal Registration Step 1 Provide the necessary information to create your user. Note: First Name, Last Name and Email have to match exactly to your profile in the Membership system. Step 2 Click on the
Læs mereEksamen, DSDS, efterår 2007
Eksamen, DSDS, efterår 2007 Introduktion til Scripting, Databaser og Systemarkitektur Jonas Holbech og Martin Elsman IT Universitetet i København 7. januar 2008 Alle hjælpemidler er tilladte, dog ikke
Læs mereSYSTEMDOKUMENTATION AF POC
DIGITALISERINGSSTYRELSEN POC PÅ ORKESTRERINGSKOMPONENTEN SYSTEMDOKUMENTATION AF POC Version: 1.1 Status: Endelig Godkender: Forfatter: Copyright 2019 Netcompany. All rights reserved Dokumenthistorik Version
Læs mereModern Concurrency Abstractions for C#
Modern Concurrency Abstractions for C# Nick Benton Luca Cardelli Cédric Fournet Presenter: Henrik Kragh-Hansen September 27, 2007 Motivation for concurrency Forbedring af concurrency Baggrundsinformation
Læs mereOpgaven fortsat. Opfølgning på Opgave 2 og Use Cases. Opgaven. Trin 1: Væsentlige begreber. Resultatliste: 100 bryst, herrer
Opfølgning på Opgave 2 og Use Cases originally by Michael R. Hansen modified/extended by Anne E. Haxthausen Informatics and Mathematical Modelling Technical University of Denmark Opgaven fortsat Efter
Læs mereUndervisningsbeskrivelse
Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin August - juni 17/19 Institution Uddannelse Fag og niveau Lærer(e) Hold Campus Vejle HHX Informatik B Anders
Læs mere! "# $$ &'()*"* +*, & &"*0* & "# % %- %
!"! "# $$ & &'()*"* +*, &- & &"./+0 & &"*0* & & & 1 2 ()))))$$" "# - " # $!&!!" 34 3((5(4 6()))))5 3((5# 7())))) 4 3((58 43((58 3((5#9! 3((5#4 3((584 6 9 # '"!&()!" * " 49 9-3 :; & Private Sub Workbook_Open()
Læs mereEksamens spørgsmål Software Construction. Objekter. Spørgsmål 1: Januar Giv en beskrivelse af Objekt-begrebet og deres brug
Spørgsmål 1: Objekter Giv en beskrivelse af Objekt-begrebet og deres brug Under eksaminationen forventes du at forklare: Hvad er en type og en variabel? Hvordan erklæres en variabel? Hvad forstås ved en
Læs mereKIS Kvalitet I Skolerne
KIS Kvalitet I Skolerne Formålet med arbejdet i Børn- og Ungeforvaltningen er at medvirke til at sikre børn og unge i Odense Kommune gode opvækstvilkår, herunder sikre at børn og unge udvikler erkendelse,
Læs mereEmner. Baggrund Flash s historie, udbredelse, scene og anvendelse.
Flash crash course Emner Baggrund Flash s historie, udbredelse, scene og anvendelse. Flash IDE Et kig på Flash udviklingsmiljøet. (stage, timeline, symboler, paneler, tools) Demo: Textfields Demo: Animation
Læs mereIBM WebSphere Operational Decision Management
IBM WebSphere Operational Decision Management 8 0 49., WebSphere Operational Decision Management 8, 0, 0. Copyright IBM Corporation 2008, 2012. ........... 1 :......... 1 Miniloan........ 3 1:........
Læs mereBilag 3 - Designspecifikation Bistand til administration og udvikling af Dynamisk Database. November 2018
Bilag 3 - Designspecifikation Bistand til administration og udvikling af Dynamisk Database November 2018 Designspecifikation DYNDBMonitor Sopra Steria Group 2015 INDHOLD INDHOLD... 2 1. Ændringshistorik...
Læs mereKontrol-strukturer i PHP
Denne guide er oprindeligt udgivet på Eksperten.dk Kontrol-strukturer i PHP Denne artikel gennemgår kontrolstrukturer i PHP. 'if', 'switch', 'while' og 'for' bliver gennemgået. Den forudsætter lidt grundlæggende
Læs mereVærktøjer fra værktøjskassen. Søren Breddam, Stevns Kommune
Værktøjer fra værktøjskassen Søren Breddam, Stevns Kommune sb@stevns.dk 1stevns kommune Mapbasic i Stevns Kommune Data Kørsel af planlagte opgaver, så data altid er opdaterede. Logfil til overvågning Dagligt
Læs mereDokumentation. Karen-Louise Fejerskov
Dokumentation Grafisk Workflow Et af produkterne, jeg skulle lave, var et redesign af FreQuence s info hjemmeside. A B Punkt 1 Ansvar: Jeg har selv stået for opsætningen af hjemmeside og selv bestemt,
Læs mereLoginsystem (med MySQL)
Denne guide er oprindeligt udgivet på Eksperten.dk Loginsystem (med MySQL) Dette er en guide til, hvordan man kan lave et loginsystem med php og muligvis også med sessioner og MySQL Skrevet den 02. Feb
Læs mereKlik på linket her for en beskrivelse af hvordan du installerer CIP 4.3 opdateringen.
CIP 4.3 er på gaden! Opdateringen til CIP 4.3 er på gaden med en lang række nye forbedringer, der giver CIP endnu mere værdi for brugeren. Forbedringerne er centreret omkring præsentation af data i web
Læs mereKIH Database. Systemdokumentation for KIH Databasen. 1. maj 2013. Side 1 af 13
KIH Database Systemdokumentation for KIH Databasen 1. maj 2013 Side 1 af 13 Indholdsfortegnelse Indholdsfortegnelse... 2 Indledning... 3 Systemoverblik... 3 KIH Database applikationsserver... 5 Forudsætninger
Læs mereOrdbøgerne.dk. Navne: Andreas Foldager og Rasmus Bjerring Pedersen Fag: IT B Lærer: Karl Bjarnason Afleveringsdato: 17-11-06.
Ordbøgerne.dk Navne: Andreas Foldager og Rasmus Bjerring Pedersen Fag: IT B Lærer: Karl Bjarnason Afleveringsdato: 17-11-06 Side 1 af 35 Indholdsfortegnelse Indledning:...3 Design...4 Visuelt design:...4
Læs mereTredjepart webservices
Tredjepart webservices 4. juni 2015 USS Dok. Klik her for at angive tekst. 1/12 Indholdsfortegnelse Introduktion... 3 Miljøer... 3 Adgang... 3 API kald... 4 GET: /authorizations... 4 Input 4 Output 4 Output
Læs mereUndervisningsbeskrivelse
Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Maj-juni 2019 Institution VUC Skive-Viborg, Viborg afdl. Uddannelse Fag og niveau Lærer(e) Hf Programmering
Læs mereCurriculum Vitae for Søren Brønsted
Curriculum Vitae for Søren Brønsted Person oplysninger Søren Brønsted Kirkebjergvej 2 4623 Lille Skensved Tlf: 52 19 14 10 email: soren@bronsted.dk Født: 1963 Profilbeskrivelse Jeg er er en senior Java/J2EE
Læs mereEksamen, DSDS, efterår 2008
Eksamen, DSDS, efterår 2008 Introduktion til Scripting, Databaser og Systemarkitektur Jonas Holbech IT Universitetet i København 6. januar 2009 Alle hjælpemidler er tilladte, dog ikke computer og kommunikationsmidler.
Læs mereDe 10 JavaScript eksamensspørgsmål
De 10 JavaScript eksamensspørgsmål I det nedenstående præsenteres de 10 JavaScript spørgsmål der sammen med relevante dele af kursets pensum vil udgøre udgangspunktet for den del af den mundtlige eksamen
Læs mereParallelisering/Distribuering af Genetiske Algoritmer
Parallelisering/Distribuering af Genetiske Algoritmer Hvorfor parallelisere/distribuere? Standard GA algoritme Modeller Embarassing parallel Global (fitness evaluering) Island (subpopulation) Grid/Cellular
Læs mereI denne arktikle går jeg gennem Slet, Ret og Opret data i en MySQL database. der er også en lille del i den hvor den postere datanen ud i en løkke
Denne guide er oprindeligt udgivet på Eksperten.dk MySQL for nybegynder I denne arktikle går jeg gennem Slet, Ret og Opret data i en MySQL database. der er også en lille del i den hvor den postere datanen
Læs mereEksempel: et ordresystem note 5 Lagdeling s. 1
Eksempel: et ordresystem note 5 Lagdeling s. 1 Eksempel: et ordre-system NiceHair er et firma, som sælger udstyr, inventar og frisørartikler til frisørsaloner over hele landet. Det er ejet af et ægtepar
Læs mereReferencemodeller for løsninger i Statens It s standarddriftsplatform. Aftalekompleksets bilag 11 Statens It s standarddriftsplatform Underbilag A
Referencemodeller for løsninger i Statens It s standarddriftsplatform Aftalekompleksets bilag 11 Statens It s standarddriftsplatform Underbilag A Indhold 1 Referencemodeller 3 1.1 Eksternt rettede løsninger
Læs mereI denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.
Denne guide er oprindeligt udgivet på Eksperten.dk Grundlæggende PHP I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.
Læs mereIndhold. Senest opdateret : 30. juli 2010. Side 1 af 5
Indhold Introduktion... 2 Scenarier hvor API et kan benyttes... 2 Scenarie 1 Integration til lagerhotel... 2 Scenarie 2 Integration til økonomi system... 2 Webshop2 API Model... 3 Brugen af API et... 4
Læs mereResultmaker Online Consultant
Resultmaker Online Consultant Presentation for PhD seminar 2008-04-02 Copyright 2007. All rights reserved. Resultmaker A/S Presentation Overview Resultmaker profile references research activities The Online
Læs mereNetværksværktøj til BUPL s medlemmer. Mikkel Flindt Heisterberg, IntraVision Brian Andersen, BUPL
Netværksværktøj til BUPL s medlemmer Mikkel Flindt Heisterberg, IntraVision Brian Andersen, BUPL Om mig Udvikler: Notes / Domino / Sametime / Java / DB2 / WebSphere / web / plug-ins Design Partner for
Læs mereLØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4
LØKKER METODER C S HISTORIE Grundlæggende programmering Lektion 4 1 LEKTIER UML struktur diagrammer om biler 2 OPERATORER Syntaks til at udføre forskellige beregninger og handlinger Booleans og hvorfor
Læs mereBegrynder til at lave log ind system
Denne guide er oprindeligt udgivet på Eksperten.dk Begrynder til at lave log ind system Hej Vil jeg gerne lave en lille programmering forklare til hvordan du laver din helt egen lille start på at log ind
Læs mereSporbarhed og Rapportering i Quality Center. Kim Stenbo Nielsen NNIT Application Management Services
Sporbarhed og Rapportering i Quality Center Kim Stenbo Nielsen NNIT Application Management Services Indhold INTRODUKTION Hvem er jeg Hvad vil jeg fortælle om QC std. rapporteringsfaciliteter EXCEL RAPPORTER
Læs mereProjekt 3: Interaktionsudvikling 11/04.14
Projekt 3: Interaktionsudvikling 11/04.14 Gruppe 5 http://kostecki.dk/cph/cupcakes/v2/opskrifter.php Christina Juulmann www.chrissycreations.dk Jacob Kostecki www.kostecki.dk Jayne Alice www.jaynealice.com
Læs mereDTU 02335 Net Teknologi A Webprogrammering og Datakommunikation Eksamensprojekt Krav til rapport September 2008 KRAV TIL RAPPORTEN
KRAV TIL RAPPORTEN Eksamensprojektet i Web-programmering og Datakommunikation skal afleveres som en rapport. Rapporten skal afleveres, i 2 eksemplarer (kopier). Endvidere skal være angivet URL, for emner
Læs mereVANSEnvelope TESTPROTOKOL FOR DEN GODE VANSENVELOPE. Namespace: urn:oio:medcom:vans-envelope: VANS
VANSEnvelope TESTPROTOKOL FOR DEN GODE VANSENVELOPE VANS 12.05.2011 Namespace: urn:oio:medcom:vans-envelope:1.0.4 DOKUMENT HISTORIK Version Forfatter Dato Beskrivelse 1.0 JAG 12.05.2011 Start på dokument
Læs mereGoogle Maps og SAS/GRAPH software
Google Maps og SAS/GRAPH software Jens Dahl Mikkelsen, Business Advisor, Information Management Agenda Formål Introduktion til geografisk visning af data SAS/GRAPH software Google Maps, Google Earth Geokodning
Læs mereMiniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav.
Miniprojekt2011 Projektbeskrivelse Der skal fremstilles en lille java application på PC, hvor brugeren kan foretage interaktioner med en simpel database på disken via et grafisk brugerinterface. Formålet
Læs mereMSI pakke til distribution af AutoPilot komponenter.
MSI pakke til distribution af AutoPilot komponenter. Hermed følger en basal dokumentation for installation af AutoPilot msi pakken. Der vil i det følgende blive forklaret brugen af 4 programmer fra Microsoft,
Læs mereEksamen, DSDS, forår 2008
Eksamen, DSDS, forår 2008 Introduktion til Scripting, Databaser og Systemarkitektur Jonas Holbech IT Universitetet i København 3. juni 2008 Alle hjælpemidler er tilladte, dog ikke computer og kommunikationsmidler.
Læs mere1.1 Formål Webservicen gør det muligt for eksterne parter, at fremsøge informationer om elevers fravær.
EfterUddannelse.dk FraværService - systemdokumentation BRUGERDOKUMENTATION: WEB-SERVICE Af: Logica Indhold 1. Indledning... 1 1.1 Formål... 1 1.2 Webservice version... 1 1.3 Historik... 1 2. Absence Webservice...
Læs mereTCP & UDP. - de transportansvarlige på lag 4. Netteknik 1
TCP & UDP - de transportansvarlige på lag 4 Netteknik 1 TCP & UDP TCP og UDP er begge netværksprotokoller til transport, med hver deres header-information i pakken (segmentet): TCP: 0 8 16 31 bit Sequence
Læs merePHP Snippets. De små korte. Skrevet af Daniel Pedersen
PHP Snippets De små korte Skrevet af Daniel Pedersen Indhold PHP Snippets De små korte er en samling af små og praktiske kode eksempler med kort forklaring, som med formål at kunne benyttes til opsalgsværk
Læs mereDa beskrivelserne i danzig Profile Specification ikke er fuldt færdige, foreslås:
NOTAT 6. juni 2007 J.nr.: 331-3 LEA Bilag A danzig-møde 15.6.2007 Opdatering af DAN-1 og danzig Profile Specification Forslag til opdatering af Z39.50 specifikationerne efter udgivelse af Praksisregler
Læs mereIndhold. Senest opdateret:03. september 2013. Side 1 af 8
Indhold Introduktion... 2 Scenarier hvor API et kan benyttes... 2 Scenarie 1 Integration til lagerhotel... 2 Scenarie 2 Integration til økonomi system... 2 API Modeller... 2 Webshop2 API Model v1... 3
Læs mereProgrammering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale
Programmering i C Lektion 1 16. september 2008 Målgruppe Indhold Form Materiale Kursusintroduktion 1 Målgruppe 2 Indhold 3 Form 4 Materiale 2 / 21 Målgruppe Indhold Form Materiale Folk der har styr på
Læs mereIBM WebSphere Operational Decision Management
IBM WebSphere Operational Decision Management 8 0 45., WebSphere Operational Decision Management 8, 0, 0. Copyright IBM Corporation 2008, 2012. ........... 1 1:........ 2....... 3 Event Runtime...... 11...........
Læs mereKFileReplace-håndbogen. Emiliano Gulmini Oversætter: Rune Rønde Laursen
Emiliano Gulmini Oversætter: Rune Rønde Laursen 2 Indhold 1 Indledning 5 2 At bruge KFileReplace 6 2.1 Værktøjslinjen........................................ 6 2.2 Resultatliste.........................................
Læs mereByggebasen Javascript
EG Data Inform Byggebasen Javascript Implementering af ansvarsperioder og produktdata på eget site Jens Karsø 2013 Indhold Byggebasen javascript-plugin til DB12-site... 2 DB12-site kommunikationsmodel...
Læs mereUndervisningsbeskrivelse
Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Skoleåret 2015/16 Institution Hansenberg Gymnasium Uddannelse Fag og niveau Lærer Hold htx Programmering,
Læs mere