Letvægts PHP engine for BPEL baseret på XML omskrivning

Størrelse: px
Starte visningen fra side:

Download "Letvægts PHP engine for BPEL baseret på XML omskrivning"

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

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 mere

PHP Crash course. Databaser

PHP 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 mere

Nintex Workflow UK/DK

Nintex 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 mere

Design Diaries.

Design 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 mere

A Declarative Framework for Enterprise Information Systems

A 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 mere

Component based software enginering Diku 2005 Kritikopgave

Component 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 mere

Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen...

Indholdsfortegnelse 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 <= 20 Then EnhedsOmk = 1. "# $$ " # $ && & ' $ $ " & ) *+, Sum_Cost >= 5000SirName = Beltov Continue = True) Continue *, + If Antal

Læs mere

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP 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 mere

Lektion 3. Grundlæggende programmering i VR

Lektion 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 mere

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/11-2012

Terese 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 mere

Dagens program. Domæner. change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog. Hvad er widgets.

Dagens 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 mere

Hassansalem.dk/delpin User: admin Pass: admin BACKEND

Hassansalem.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 mere

Databaseadgang fra Java

Databaseadgang 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 mere

Foto-Applikation Dokumentation. Et Kod-i-Ferien projekt

Foto-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 mere

Programmering I Java/C#

Programmering 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 mere

Data 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) 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 mere

Indholdsfortegnelse 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:... 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 mere

PHP guide af Daniel Pedersen

PHP 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 mere

3C03 Concurrency: Model-based Design

3C03 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 mere

Indholdsfortegnelse. Rasmus R. Sørensen, Christina Svenstrup og Lasse Bager 1

Indholdsfortegnelse. 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 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

Å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 mere

IBM 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ć 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 mere

Navision Stat (NS 9.2)

Navision 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 mere

HTML, PHP, SQL, webserver, hvad er hvad??

HTML, 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 mere

Reeksamen, DSDS, forår 2008

Reeksamen, 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 mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software 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 mere

VÆ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 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 mere

Webkorpora: Yahoo API og perl

Webkorpora: 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 mere

FBS for praktikere Fyn. Notifikation og print skabeloner

FBS 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 mere

Dynamiske Billeder, Image Map & XY coordinater. ASP.NET og Access Databasen.

Dynamiske 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 mere

Python programmering. Per Tøfting. MacFest

Python 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 mere

Parallelle algoritmer

Parallelle 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 mere

CentOS 7. Lavet af Ali Sarac og Andreas Jensen

CentOS 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 mere

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.

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. 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 mere

Dokumentering af umbraco artikeleksport:

Dokumentering 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 mere

XML webservice for pensionsordninger. Version 1.0 Draft A

XML 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 mere

Start på javascript. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 03. Feb 2009 af webstuff I kategorien Programmering / JavaScript

Start 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 mere

Programmering i C. Lektion september 2009

Programmering 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 mere

software bricks & glue for system integration

software 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 mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse 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 mere

IDENTIFON. Emil Hauberg, Jakob Christoffersen, Ninette Nielsen og Senia Lundberg

IDENTIFON. 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 mere

WS-Architecture, forretningsprocesser og sikkerhed

WS-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 mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse 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 mere

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Software 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 mere

I 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.

I 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 mere

Installationsvejledning SAS Foundation 9.2 SAS Enterprise Guide 4.2. Windows Vista

Installationsvejledning 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 mere

Portal Registration. Check Junk Mail for activation . 1 Click the hyperlink to take you back to the portal to confirm your registration

Portal 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 mere

Eksamen, DSDS, efterår 2007

Eksamen, 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 mere

SYSTEMDOKUMENTATION AF POC

SYSTEMDOKUMENTATION 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 mere

Modern Concurrency Abstractions for C#

Modern 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 mere

Opgaven fortsat. Opfølgning på Opgave 2 og Use Cases. Opgaven. Trin 1: Væsentlige begreber. Resultatliste: 100 bryst, herrer

Opgaven 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 mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse 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 & &"*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 mere

Eksamens spørgsmål Software Construction. Objekter. Spørgsmål 1: Januar Giv en beskrivelse af Objekt-begrebet og deres brug

Eksamens 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 mere

KIS Kvalitet I Skolerne

KIS 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 mere

Emner. Baggrund Flash s historie, udbredelse, scene og anvendelse.

Emner. 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 mere

IBM WebSphere Operational Decision Management

IBM 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 mere

Bilag 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 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 mere

Kontrol-strukturer i PHP

Kontrol-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 mere

Værktøjer fra værktøjskassen. Søren Breddam, Stevns Kommune

Væ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 mere

Dokumentation. Karen-Louise Fejerskov

Dokumentation. 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 mere

Loginsystem (med MySQL)

Loginsystem (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 mere

Klik på linket her for en beskrivelse af hvordan du installerer CIP 4.3 opdateringen.

Klik 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 mere

KIH 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 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 mere

Ordbø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. 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 mere

Tredjepart webservices

Tredjepart 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 mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse 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 mere

Curriculum Vitae for Søren Brønsted

Curriculum 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 mere

Eksamen, DSDS, efterår 2008

Eksamen, 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 mere

De 10 JavaScript eksamensspørgsmål

De 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 mere

Parallelisering/Distribuering af Genetiske Algoritmer

Parallelisering/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 mere

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 ud i en løkke

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 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 mere

Eksempel: et ordresystem note 5 Lagdeling s. 1

Eksempel: 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 mere

Referencemodeller 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 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 mere

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.

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. 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 mere

Indhold. Senest opdateret : 30. juli 2010. Side 1 af 5

Indhold. 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 mere

Resultmaker Online Consultant

Resultmaker 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 mere

Netvæ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 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 mere

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4

LØ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 mere

Begrynder til at lave log ind system

Begrynder 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 mere

Sporbarhed 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 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 mere

Projekt 3: Interaktionsudvikling 11/04.14

Projekt 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 mere

DTU 02335 Net Teknologi A Webprogrammering og Datakommunikation Eksamensprojekt Krav til rapport September 2008 KRAV TIL RAPPORTEN

DTU 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 mere

VANSEnvelope TESTPROTOKOL FOR DEN GODE VANSENVELOPE. Namespace: urn:oio:medcom:vans-envelope: VANS

VANSEnvelope 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 mere

Google Maps og SAS/GRAPH software

Google 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 mere

Miniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav.

Miniprojekt2011. 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 mere

MSI pakke til distribution af AutoPilot komponenter.

MSI 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 mere

Eksamen, DSDS, forår 2008

Eksamen, 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 mere

1.1 Formål Webservicen gør det muligt for eksterne parter, at fremsøge informationer om elevers fravær.

1.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 mere

TCP & UDP. - de transportansvarlige på lag 4. Netteknik 1

TCP & 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 mere

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

PHP 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 mere

Da beskrivelserne i danzig Profile Specification ikke er fuldt færdige, foreslås:

Da 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 mere

Indhold. Senest opdateret:03. september 2013. Side 1 af 8

Indhold. 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 mere

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale

Programmering 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 mere

IBM WebSphere Operational Decision Management

IBM 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 mere

KFileReplace-håndbogen. Emiliano Gulmini Oversætter: Rune Rønde Laursen

KFileReplace-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 mere

Byggebasen Javascript

Byggebasen 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 mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse 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