SlideShare une entreprise Scribd logo
1  sur  115
Télécharger pour lire hors ligne
WebWorkFlow
An Object-Oriented Workflow
    Modeling Language

      Zef Hemel, Ruben Verhaaf, Eelco Visser
  Delft University of Technology, The Netherlands
WebWorkFlow




coordination
BPEL
BPEL

       Petri nets
BPEL                YAWL

       Petri nets
BPEL                      YAWL

          Petri nets


✘ do not describe full applications
✘ separate language, not nicely integrated
✘ ignore user interface
✘ all or nothing
WebWorkFlow


3 design principles
Linguistic integration
abstraction layers
Process Expressions


Procedural Workflow


     WebDSL
concise          Process Expressions
  (less flexible)



                   Procedural Workflow


more verbose            WebDSL
 (more flexible)
Full application generation
JBoss Seam




 Google        Java
AppEngine     Servlet
Scenario
hank
his employees
preparation
meeting
manager

          write report
write report




employee

           approve              comment
write report




          approve              comment


manager
                     finalize
sue
WebWorkFlow
concise          Process Expressions
  (less flexible)



                   Workflow Procedures


more verbose            WebDSL
 (more flexible)
...

                    WebDSL

Data Model      User Interface     Access Control




             Core WebDSL
  Core Data Model           Core User Interface




             Web Application
Data models   User Interface   Logic   Access control
entity User   {
  username    ::   String
  password    ::   Secret
  name        ::   String
  manager     ->   User
  employees   ->   Set<User>
}
define page editUser(u : User) {
  form {
    table {
      row { "Name: "       input(u.name) }
      row { "Manager: "    input(u.manager) }
      row { "Employees: " input(u.employees) }
    }
    action("Save", save())

        action save() {
          u.save();
          return home();
        }
    }
}
define page editUser(u : User) {
  derive editPage from u
    for (name, manager, employees)
}
access control rules
  page editUser(u : User) {
     principal == u.manager
  }
Data models   User Interface   Logic   Access control
Data models   User Interface   Logic   Access control   Workflow
Workflows revolve around objects

       entity Meeting   {
         employee       ->   User
         employeeView   ::   Text
         managerView    ::   Text
         report         ::   Text
         approved       ::   Bool
         comment        ::   Text
       }
Workflows revolve around objects

                    entity Meeting   {
employeePrepare       employee       ->   User
managerPrepare        employeeView   ::   Text
writeReport           managerView    ::   Text
approveReport
                      report         ::   Text
commentReport
finalizeReport         approved       ::   Bool
                      comment        ::   Text
                    }




                  and operations (procedures)
                      performed on them
module workflow

 procedure writeReport(m : Meeting) {
   who { principal == m.employee.manager }
   view {
     derive procedurePage from m for (report)
   }
 }
part of a WebDSL module
module workflow

 procedure writeReport(m : Meeting) {
   who { principal == m.employee.manager }
   view {
     derive procedurePage from m for (report)
   }
 }
part of a WebDSL module
module workflow

 procedure writeReport(m : Meeting) {
   who { principal == m.employee.manager }
   view {
     derive procedurePage from m for (report)
   }
 }


access control expression language
part of a WebDSL module
module workflow

 procedure writeReport(m : Meeting) {
   who { principal == m.employee.manager }
   view {
     derive procedurePage from m for (report)
   }
 }


access control expression language
view page language
concise          Process Expressions
  (less flexible)



                   Procedural Workflow


more verbose            WebDSL
 (more flexible)
procedure procedureName(o : Entity) {
  who { who can perform }
  when { additional condition }
  view { view page }
  enabled { action code }
  disabled { action code }
  do { action code }
  done { action code }
}
actor
who { principal == m.employee }
condition
when { now() > m.startDate }
user interface
view { derive procedurePage from m
        for (employeePreparation) }
action
do {
  email(organizeMeetingMail(m));
}
events
done {
  m.writeReport.enable();
}




  enabled
  disabled
  done
concise          Process Expressions
  (less flexible)



                   Workflow Procedures


more verbose            WebDSL
 (more flexible)
procedure meetingWorkflow(m : Meeting) {
  process {
    (employeePrepare(m) and managerPrepare(m));
    repeat {
      writeReport(m);
      (approveReport(m) xor commentReport(m))
    } until finalizeReport(m)
  }
}
sequence ;
sequence ;

parallel and
sequence ;

parallel and


deferred choice +
sequence ;

parallel and                parallel xor


deferred choice +
sequence ;

parallel and                parallel xor


deferred choice +     repeat ... until loops
sequence ;

parallel and                  parallel xor


deferred choice +        repeat ... until loops



          conditional if ... else
Transforming
 Procedures
WebWorkFlow
                User          Access       Procedure Process
Data Model
              Interface       Control       Events Expressions




             Procedural WebWorkFlow
                                        Access        Procedure
 Data Model     User Interface
                                        Control        Events




                          WebDSL

   Data Model             User Interface          Access Control




                   Core WebDSL
      Core Data Model                   Core User Interface




                  Web Application
concise                           WebWorkFlow
                (high-level)                   User          Access       Procedure Process
                               Data Model
                                             Interface       Control       Events Expressions




                                            Procedural WebWorkFlow
                                                                       Access        Procedure
                                Data Model     User Interface
                                                                       Control        Events



compilation
by                                                       WebDSL

normalization                     Data Model             User Interface          Access Control




                                                  Core WebDSL
                                     Core Data Model                   Core User Interface




                verbose                          Web Application
                (low-level)
concise                           WebWorkFlow
                (high-level)                   User          Access       Procedure Process
                               Data Model
                                             Interface       Control       Events Expressions




                                            Procedural WebWorkFlow
                                                                       Access        Procedure
                                Data Model     User Interface
                                                                       Control        Events



compilation
by                                                       WebDSL

normalization                     Data Model             User Interface          Access Control




                                                  Core WebDSL
                                     Core Data Model                   Core User Interface




                verbose                          Web Application
                (low-level)
concise                           WebWorkFlow
                (high-level)                   User          Access       Procedure Process
                               Data Model
                                             Interface       Control       Events Expressions




                                            Procedural WebWorkFlow
                                                                       Access        Procedure
                                Data Model     User Interface
                                                                       Control        Events



compilation
by                                                       WebDSL

normalization                     Data Model             User Interface          Access Control




                                                  Core WebDSL
                                     Core Data Model                   Core User Interface




                verbose                          Web Application
                (low-level)
state
user interface
access control
Example

procedure writeReport(m : Meeting) {
  who { principal == m.employee.manager }
  view {
    derive procedurePage from m for (report)
  }
  done {
    m.approveReport.enable();
    m.commentReport.enable();
  }
}
procedure writeReport(m : Meeting) {
           who { principal == m.employee.manager }
           view {
             derive procedurePage from m for (report)
           }
           done {
             m.approveReport.enable();
             m.commentReport.enable();
           }
         }




Procedure (=workflow) state is kept
extend entity Meeting {
  writeReport     -> WriteReportProcedureStatus
}


     in the object it operates on
entity WriteReportProcedureStatus : ProcedureStatus {
  ...
}




                entity ProcedureStatus {
                  isEnabled :: Bool
                  function enable() {
                    isEnabled := true;
                  }
                  function disable() {
                    isEnabled := false;
                  }
                }
procedure writeReport(m : Meeting) {
           who { principal == m.employee.manager }
           view {
             derive procedurePage from m for (report)
           }
           done {
             m.approveReport.enable();
             m.commentReport.enable();
           }
         }




define page writeReport(m : Meeting) {
  derive procedurePage from m for (employeeView)
}




                user interface
procedure writeReport(m : Meeting) {
           who { principal == m.employee.manager }
           view {
             derive procedurePage from m for (report)
           }
           done {
             m.approveReport.enable();
             m.commentReport.enable();
           }
         }




access control rules
  rule page writeReport(m : Meeting) {
    principal == m.employee.manager &&
    m.writeReport.isEnabled
  }



                access control
procedure writeReport(m : Meeting) {
            who { principal == m.employee.manager }
            view {
              derive procedurePage from m for (report)
            }
            done {
              m.approveReport.enable();
              m.commentReport.enable();
            }
          }




extend entity WriteReportProcedureStatus {
  m -> Meeting

    function done() {
      m.approveReport.enable();
      m.commentReport.enable();
    }
}


                   control logic
WebWorkFlow
                User          Access       Procedure Process
Data Model
              Interface       Control       Events Expressions




             Procedural WebWorkFlow
                                        Access        Procedure
 Data Model     User Interface
                                        Control        Events




                          WebDSL

   Data Model             User Interface          Access Control




                   Core WebDSL
      Core Data Model                   Core User Interface




                  Web Application
WebWorkFlow
                User          Access       Procedure Process
Data Model
              Interface       Control       Events Expressions




             Procedural WebWorkFlow
                                        Access        Procedure
 Data Model     User Interface
                                        Control        Events




                          WebDSL

   Data Model             User Interface          Access Control




                   Core WebDSL
      Core Data Model                   Core User Interface




                  Web Application
encode control flow
encode control flow
in procedure events
      enabled
      disabled
      done
procedure p(o : O) {
  process {
    a(o);
    b(o)
  }
}
procedure p(o : O) {
   process {
     a(o);
     b(o)
   }
 }




extend procedure a(o : O) {
  done {
    o.b.enable();
  }
}
procedure p(o : O) {
   process {
     a(o);
     b(o)
   }
 }




extend procedure a(o : O) {
  done {
    o.b.enable();
  }
}


         ...right?
procedure p(o : O) {
  process {
    a(o);
    b(o);
    a(o)
  }
}
procedure p(o : O) {
      process {
        a(o);
        b(o);
        a(o)
      }
    }




extend procedure a(o : O) {
  done {
    ??
  }
}
procedure p(o : O) {
    process {
      a(o)[1];
      b(o)[2];
      a(o)[3]
    }
  }



+ transition function
procedure p(o : O) {
         process {
           a(o)[1];
           b(o)[2];
           a(o)[3]
         }
       }


   p(o)                 state     next
                          0     a.enable(this, 1)


                          1     b.enable(this, 2)


                          2     a.enable(this, 3)


a(o)    b(o)              3           done
procedure p(o : O) {
         process {
           a(o)[1];
           b(o)[2];
           a(o)[3]
         }
       }


   p(o)                 state     next
                          0     a.enable(this, 1)


                          1     b.enable(this, 2)


                          2     a.enable(this, 3)


a(o)    b(o)              3           done
procedure p(o : O) {
          process {
            a(o)[1];
            b(o)[2];
            a(o)[3]
          }
        }


       p(o)              state     next
                           0     a.enable(this, 1)

 [1]
                           1     b.enable(this, 2)


                           2     a.enable(this, 3)


a(o)      b(o)             3           done
procedure p(o : O) {
         process {
           a(o)[1];
           b(o)[2];
           a(o)[3]
         }
       }


      p(o)              state     next
                          0     a.enable(this, 1)


                          1     b.enable(this, 2)


                          2     a.enable(this, 3)


a(o)     b(o)             3           done
[1]
procedure p(o : O) {
          process {
            a(o)[1];
            b(o)[2];
            a(o)[3]
          }
        }


   p(o)                  state     next
                           0     a.enable(this, 1)


       [1]
                           1     b.enable(this, 2)


                           2     a.enable(this, 3)


a(o)         b(o)          3           done
procedure p(o : O) {
         process {
           a(o)[1];
           b(o)[2];
           a(o)[3]
         }
       }


   p(o)                 state     next
                          0     a.enable(this, 1)


       [2]
                          1     b.enable(this, 2)


                          2     a.enable(this, 3)


a(o)     b(o)             3           done
procedure p(o : O) {
         process {
           a(o)[1];
           b(o)[2];
           a(o)[3]
         }
       }


   p(o)                 state     next
                          0     a.enable(this, 1)


                          1     b.enable(this, 2)


                          2     a.enable(this, 3)


a(o)    b(o)              3           done
          [2]
procedure p(o : O) {
         process {
           a(o)[1];
           b(o)[2];
           a(o)[3]
         }
       }


   p(o)                 state     next
                          0     a.enable(this, 1)


                          1
          [2]
                                b.enable(this, 2)


                          2     a.enable(this, 3)


a(o)    b(o)              3           done
procedure p(o : O) {
          process {
            a(o)[1];
            b(o)[2];
            a(o)[3]
          }
        }


       p(o)              state     next
                           0     a.enable(this, 1)

 [3]
                           1     b.enable(this, 2)


                           2     a.enable(this, 3)


a(o)      b(o)             3           done
procedure p(o : O) {
         process {
           a(o)[1];
           b(o)[2];
           a(o)[3]
         }
       }


      p(o)              state     next
                          0     a.enable(this, 1)


                          1     b.enable(this, 2)


                          2     a.enable(this, 3)


a(o)
[3]
         b(o)             3           done
procedure p(o : O) {
           process {
             a(o)[1];
             b(o)[2];
             a(o)[3]
           }
         }


   p(o)                   state     next
                            0     a.enable(this, 1)


       [3]
                            1     b.enable(this, 2)


                            2     a.enable(this, 3)


a(o)         b(o)           3           done
procedure p(o : O) {
         process {
           a(o)[1];
           b(o)[2];
           a(o)[3]
         }
       }


   p(o)                 state     next
                          0     a.enable(this, 1)


                          1     b.enable(this, 2)


                          2     a.enable(this, 3)


a(o)    b(o)              3           done
next function for sequencing
                       entity SeqProcedureStatus : ... {
                         o -> O
                         function next(state : Int) {
                           if(state == 0) {
procedure p(o : O) {         o.a.enable(this, 1);
  process {                }
    a(o)[1];               if(state == 1) {
    b(o)[2];                 o.b.enable(this, 2);
    a(o)[3]                }
  }                        if(state == 2) {
}                            o.a.enable(this, 3);
                           }
                           if(state == 3) {
                             processed();
                           }
                         }
                       }
next function for parallel and
                          entity ParProcedureStatus : ... {
                            o       -> O
                            counter :: Int
                            function next(state : Int) {
                              if(state == 0) {
                                o.a.enable(this, 1);
                                o.b.enable(this, 2);
procedure par(o : O) {        }
  process {                   if(state == 1) {
    a(o)[1] and b(o)[2]         counter := counter + 1;
                                if(counter == 2) {
  }                               processed();
}                               }
                              }
                              if(state == 2) {
                                counter := counter + 1;
                                if(counter == 2) {
                                  processed();
                                }
                              }
                            }
                          }
Encoding
Patterns
concise          Process Expressions
  (less flexible)



                   Procedural Workflow


more verbose            WebDSL
 (more flexible)
concise          Process Expressions
  (less flexible)



                   Procedural Workflow


more verbose            WebDSL
 (more flexible)
WebWorkFlow

linguistic integration
WebWorkFlow

linguistic integration

 abstraction layers
WebWorkFlow

 linguistic integration

   abstraction layers

full application generation
WebWorkFlow

   linguistic integration

     abstraction layers

  full application generation

compilation by normalization
www.webdsl.org
www.strategoxt.org
state tracking
state tracking   task pages
state tracking   task pages   navigation
state tracking   task pages   navigation




  task lists
state tracking     task pages     navigation




  task lists     workflow status
state tracking     task pages     navigation




  task lists     workflow status access control
                                    rules
state tracking     task pages     navigation




  task lists     workflow status access control
                                    rules




                  the rest

Contenu connexe

En vedette

Frontrow conf
Frontrow confFrontrow conf
Frontrow confzefhemel
 
Cloud9 IDE Talk at meet.js Poznań
Cloud9 IDE Talk at meet.js PoznańCloud9 IDE Talk at meet.js Poznań
Cloud9 IDE Talk at meet.js Poznańzefhemel
 
Understanding the Docker ecosystem
Understanding the Docker ecosystemUnderstanding the Docker ecosystem
Understanding the Docker ecosystemKiratech
 
PIL - A Platform Independent Language
PIL - A Platform Independent LanguagePIL - A Platform Independent Language
PIL - A Platform Independent Languagezefhemel
 
Understanding docker networking
Understanding docker networkingUnderstanding docker networking
Understanding docker networkingLorenzo Fontana
 
“Containerizing” applications with Docker: Ecosystem and Tools
“Containerizing” applications with Docker: Ecosystem and Tools“Containerizing” applications with Docker: Ecosystem and Tools
“Containerizing” applications with Docker: Ecosystem and ToolsFrancisco Javier Ramírez Urea
 
Docker ecosystem
Docker ecosystemDocker ecosystem
Docker ecosystemzefhemel
 
Tracxn Research — Docker Ecosystem Startup Landscape, September 2016
Tracxn Research —  Docker Ecosystem Startup Landscape, September 2016Tracxn Research —  Docker Ecosystem Startup Landscape, September 2016
Tracxn Research — Docker Ecosystem Startup Landscape, September 2016Tracxn
 
Docker networking Tutorial 101
Docker networking Tutorial 101Docker networking Tutorial 101
Docker networking Tutorial 101LorisPack Project
 
Docker networking basics & coupling with Software Defined Networks
Docker networking basics & coupling with Software Defined NetworksDocker networking basics & coupling with Software Defined Networks
Docker networking basics & coupling with Software Defined NetworksAdrien Blind
 
Docker Networking Deep Dive
Docker Networking Deep DiveDocker Networking Deep Dive
Docker Networking Deep DiveDocker, Inc.
 
The Docker ecosystem and the future of application deployment
The Docker ecosystem and the future of application deploymentThe Docker ecosystem and the future of application deployment
The Docker ecosystem and the future of application deploymentJérôme Petazzoni
 

En vedette (12)

Frontrow conf
Frontrow confFrontrow conf
Frontrow conf
 
Cloud9 IDE Talk at meet.js Poznań
Cloud9 IDE Talk at meet.js PoznańCloud9 IDE Talk at meet.js Poznań
Cloud9 IDE Talk at meet.js Poznań
 
Understanding the Docker ecosystem
Understanding the Docker ecosystemUnderstanding the Docker ecosystem
Understanding the Docker ecosystem
 
PIL - A Platform Independent Language
PIL - A Platform Independent LanguagePIL - A Platform Independent Language
PIL - A Platform Independent Language
 
Understanding docker networking
Understanding docker networkingUnderstanding docker networking
Understanding docker networking
 
“Containerizing” applications with Docker: Ecosystem and Tools
“Containerizing” applications with Docker: Ecosystem and Tools“Containerizing” applications with Docker: Ecosystem and Tools
“Containerizing” applications with Docker: Ecosystem and Tools
 
Docker ecosystem
Docker ecosystemDocker ecosystem
Docker ecosystem
 
Tracxn Research — Docker Ecosystem Startup Landscape, September 2016
Tracxn Research —  Docker Ecosystem Startup Landscape, September 2016Tracxn Research —  Docker Ecosystem Startup Landscape, September 2016
Tracxn Research — Docker Ecosystem Startup Landscape, September 2016
 
Docker networking Tutorial 101
Docker networking Tutorial 101Docker networking Tutorial 101
Docker networking Tutorial 101
 
Docker networking basics & coupling with Software Defined Networks
Docker networking basics & coupling with Software Defined NetworksDocker networking basics & coupling with Software Defined Networks
Docker networking basics & coupling with Software Defined Networks
 
Docker Networking Deep Dive
Docker Networking Deep DiveDocker Networking Deep Dive
Docker Networking Deep Dive
 
The Docker ecosystem and the future of application deployment
The Docker ecosystem and the future of application deploymentThe Docker ecosystem and the future of application deployment
The Docker ecosystem and the future of application deployment
 

Similaire à WebWorkFlow

ASP.NET MVC as the next step in web development
ASP.NET MVC as the next step in web developmentASP.NET MVC as the next step in web development
ASP.NET MVC as the next step in web developmentVolodymyr Voytyshyn
 
MVC Demystified: Essence of Ruby on Rails
MVC Demystified: Essence of Ruby on RailsMVC Demystified: Essence of Ruby on Rails
MVC Demystified: Essence of Ruby on Railscodeinmotion
 
Jsp (java server page)
Jsp (java server page)Jsp (java server page)
Jsp (java server page)Chitrank Dixit
 
WebRatio BPM: a Tool for Designing and Deploying Business Processes on the Web
WebRatio BPM: a Tool for Designing and Deploying Business Processes on the WebWebRatio BPM: a Tool for Designing and Deploying Business Processes on the Web
WebRatio BPM: a Tool for Designing and Deploying Business Processes on the WebMarco Brambilla
 
A guide to ADF fusion development
A guide to ADF fusion developmentA guide to ADF fusion development
A guide to ADF fusion developmentDataNext Solutions
 
Spring MVC introduction HVA
Spring MVC introduction HVASpring MVC introduction HVA
Spring MVC introduction HVAPeter Maas
 
Spring as a Cloud Platform (Developer Summit 2011 17-C-5)
Spring as a Cloud Platform (Developer Summit 2011 17-C-5)Spring as a Cloud Platform (Developer Summit 2011 17-C-5)
Spring as a Cloud Platform (Developer Summit 2011 17-C-5)Kazuyuki Kawamura
 
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...Svetlin Nakov
 
Build java-ee-applications-with-adf
Build java-ee-applications-with-adfBuild java-ee-applications-with-adf
Build java-ee-applications-with-adfAmit Sharma
 
Oracle Fusion Development, May 2009
Oracle Fusion Development, May 2009Oracle Fusion Development, May 2009
Oracle Fusion Development, May 2009Jaime Cid
 
Rest API and Client OM for Developer
Rest API and Client OM for DeveloperRest API and Client OM for Developer
Rest API and Client OM for DeveloperInnoTech
 
Special Purpose Role-Based Clients for PLM using Aras
Special Purpose Role-Based Clients for PLM using ArasSpecial Purpose Role-Based Clients for PLM using Aras
Special Purpose Role-Based Clients for PLM using ArasAras
 

Similaire à WebWorkFlow (20)

Dot net training bangalore
Dot net training bangaloreDot net training bangalore
Dot net training bangalore
 
Grottarossa:Why?
Grottarossa:Why?Grottarossa:Why?
Grottarossa:Why?
 
ASP.NET MVC as the next step in web development
ASP.NET MVC as the next step in web developmentASP.NET MVC as the next step in web development
ASP.NET MVC as the next step in web development
 
MVC Demystified: Essence of Ruby on Rails
MVC Demystified: Essence of Ruby on RailsMVC Demystified: Essence of Ruby on Rails
MVC Demystified: Essence of Ruby on Rails
 
Asp.net.
Asp.net.Asp.net.
Asp.net.
 
Asp.net basic
Asp.net basicAsp.net basic
Asp.net basic
 
Aspnet
AspnetAspnet
Aspnet
 
Jsp (java server page)
Jsp (java server page)Jsp (java server page)
Jsp (java server page)
 
WebRatio BPM: a Tool for Designing and Deploying Business Processes on the Web
WebRatio BPM: a Tool for Designing and Deploying Business Processes on the WebWebRatio BPM: a Tool for Designing and Deploying Business Processes on the Web
WebRatio BPM: a Tool for Designing and Deploying Business Processes on the Web
 
A guide to ADF fusion development
A guide to ADF fusion developmentA guide to ADF fusion development
A guide to ADF fusion development
 
Spring MVC introduction HVA
Spring MVC introduction HVASpring MVC introduction HVA
Spring MVC introduction HVA
 
Industrial training in .net
Industrial training in .netIndustrial training in .net
Industrial training in .net
 
Spring as a Cloud Platform (Developer Summit 2011 17-C-5)
Spring as a Cloud Platform (Developer Summit 2011 17-C-5)Spring as a Cloud Platform (Developer Summit 2011 17-C-5)
Spring as a Cloud Platform (Developer Summit 2011 17-C-5)
 
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...
Architectural Patterns and Software Architectures: Client-Server, Multi-Tier,...
 
Unit 07: Design Patterns and Frameworks (3/3)
Unit 07: Design Patterns and Frameworks (3/3)Unit 07: Design Patterns and Frameworks (3/3)
Unit 07: Design Patterns and Frameworks (3/3)
 
Build java-ee-applications-with-adf
Build java-ee-applications-with-adfBuild java-ee-applications-with-adf
Build java-ee-applications-with-adf
 
Asp.net
Asp.netAsp.net
Asp.net
 
Oracle Fusion Development, May 2009
Oracle Fusion Development, May 2009Oracle Fusion Development, May 2009
Oracle Fusion Development, May 2009
 
Rest API and Client OM for Developer
Rest API and Client OM for DeveloperRest API and Client OM for Developer
Rest API and Client OM for Developer
 
Special Purpose Role-Based Clients for PLM using Aras
Special Purpose Role-Based Clients for PLM using ArasSpecial Purpose Role-Based Clients for PLM using Aras
Special Purpose Role-Based Clients for PLM using Aras
 

Plus de zefhemel

Expand your horizons
Expand your horizonsExpand your horizons
Expand your horizonszefhemel
 
mobl presentation @ IHomer
mobl presentation @ IHomermobl presentation @ IHomer
mobl presentation @ IHomerzefhemel
 
Abstractie (Dutch)
Abstractie (Dutch)Abstractie (Dutch)
Abstractie (Dutch)zefhemel
 
Internal DSLs Scala
Internal DSLs ScalaInternal DSLs Scala
Internal DSLs Scalazefhemel
 

Plus de zefhemel (6)

Expand your horizons
Expand your horizonsExpand your horizons
Expand your horizons
 
mobl presentation @ IHomer
mobl presentation @ IHomermobl presentation @ IHomer
mobl presentation @ IHomer
 
mobl
moblmobl
mobl
 
Abstractie (Dutch)
Abstractie (Dutch)Abstractie (Dutch)
Abstractie (Dutch)
 
Internal DSLs Scala
Internal DSLs ScalaInternal DSLs Scala
Internal DSLs Scala
 
WebDSL
WebDSLWebDSL
WebDSL
 

Dernier

UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 

Dernier (20)

UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 

WebWorkFlow

  • 1. WebWorkFlow An Object-Oriented Workflow Modeling Language Zef Hemel, Ruben Verhaaf, Eelco Visser Delft University of Technology, The Netherlands
  • 4. BPEL Petri nets
  • 5. BPEL YAWL Petri nets
  • 6. BPEL YAWL Petri nets ✘ do not describe full applications ✘ separate language, not nicely integrated ✘ ignore user interface ✘ all or nothing
  • 7.
  • 12. concise Process Expressions (less flexible) Procedural Workflow more verbose WebDSL (more flexible)
  • 14. JBoss Seam Google Java AppEngine Servlet
  • 16. hank
  • 20. manager write report
  • 21. write report employee approve comment
  • 22. write report approve comment manager finalize
  • 23. sue
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 32. concise Process Expressions (less flexible) Workflow Procedures more verbose WebDSL (more flexible)
  • 33. ... WebDSL Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface Web Application
  • 34. Data models User Interface Logic Access control
  • 35. entity User { username :: String password :: Secret name :: String manager -> User employees -> Set<User> }
  • 36. define page editUser(u : User) { form { table { row { "Name: " input(u.name) } row { "Manager: " input(u.manager) } row { "Employees: " input(u.employees) } } action("Save", save()) action save() { u.save(); return home(); } } }
  • 37. define page editUser(u : User) { derive editPage from u for (name, manager, employees) }
  • 38. access control rules page editUser(u : User) { principal == u.manager }
  • 39. Data models User Interface Logic Access control
  • 40. Data models User Interface Logic Access control Workflow
  • 41. Workflows revolve around objects entity Meeting { employee -> User employeeView :: Text managerView :: Text report :: Text approved :: Bool comment :: Text }
  • 42. Workflows revolve around objects entity Meeting { employeePrepare employee -> User managerPrepare employeeView :: Text writeReport managerView :: Text approveReport report :: Text commentReport finalizeReport approved :: Bool comment :: Text } and operations (procedures) performed on them
  • 43. module workflow procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } }
  • 44. part of a WebDSL module module workflow procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } }
  • 45. part of a WebDSL module module workflow procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } } access control expression language
  • 46. part of a WebDSL module module workflow procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } } access control expression language view page language
  • 47. concise Process Expressions (less flexible) Procedural Workflow more verbose WebDSL (more flexible)
  • 48. procedure procedureName(o : Entity) { who { who can perform } when { additional condition } view { view page } enabled { action code } disabled { action code } do { action code } done { action code } }
  • 49. actor who { principal == m.employee }
  • 50. condition when { now() > m.startDate }
  • 51. user interface view { derive procedurePage from m for (employeePreparation) }
  • 52. action do { email(organizeMeetingMail(m)); }
  • 53. events done { m.writeReport.enable(); } enabled disabled done
  • 54. concise Process Expressions (less flexible) Workflow Procedures more verbose WebDSL (more flexible)
  • 55. procedure meetingWorkflow(m : Meeting) { process { (employeePrepare(m) and managerPrepare(m)); repeat { writeReport(m); (approveReport(m) xor commentReport(m)) } until finalizeReport(m) } }
  • 59. sequence ; parallel and parallel xor deferred choice +
  • 60. sequence ; parallel and parallel xor deferred choice + repeat ... until loops
  • 61. sequence ; parallel and parallel xor deferred choice + repeat ... until loops conditional if ... else
  • 63. WebWorkFlow User Access Procedure Process Data Model Interface Control Events Expressions Procedural WebWorkFlow Access Procedure Data Model User Interface Control Events WebDSL Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface Web Application
  • 64. concise WebWorkFlow (high-level) User Access Procedure Process Data Model Interface Control Events Expressions Procedural WebWorkFlow Access Procedure Data Model User Interface Control Events compilation by WebDSL normalization Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface verbose Web Application (low-level)
  • 65. concise WebWorkFlow (high-level) User Access Procedure Process Data Model Interface Control Events Expressions Procedural WebWorkFlow Access Procedure Data Model User Interface Control Events compilation by WebDSL normalization Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface verbose Web Application (low-level)
  • 66. concise WebWorkFlow (high-level) User Access Procedure Process Data Model Interface Control Events Expressions Procedural WebWorkFlow Access Procedure Data Model User Interface Control Events compilation by WebDSL normalization Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface verbose Web Application (low-level)
  • 68. Example procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } done { m.approveReport.enable(); m.commentReport.enable(); } }
  • 69. procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } done { m.approveReport.enable(); m.commentReport.enable(); } } Procedure (=workflow) state is kept extend entity Meeting { writeReport -> WriteReportProcedureStatus } in the object it operates on
  • 70. entity WriteReportProcedureStatus : ProcedureStatus { ... } entity ProcedureStatus { isEnabled :: Bool function enable() { isEnabled := true; } function disable() { isEnabled := false; } }
  • 71. procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } done { m.approveReport.enable(); m.commentReport.enable(); } } define page writeReport(m : Meeting) { derive procedurePage from m for (employeeView) } user interface
  • 72. procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } done { m.approveReport.enable(); m.commentReport.enable(); } } access control rules rule page writeReport(m : Meeting) { principal == m.employee.manager && m.writeReport.isEnabled } access control
  • 73. procedure writeReport(m : Meeting) { who { principal == m.employee.manager } view { derive procedurePage from m for (report) } done { m.approveReport.enable(); m.commentReport.enable(); } } extend entity WriteReportProcedureStatus { m -> Meeting function done() { m.approveReport.enable(); m.commentReport.enable(); } } control logic
  • 74. WebWorkFlow User Access Procedure Process Data Model Interface Control Events Expressions Procedural WebWorkFlow Access Procedure Data Model User Interface Control Events WebDSL Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface Web Application
  • 75. WebWorkFlow User Access Procedure Process Data Model Interface Control Events Expressions Procedural WebWorkFlow Access Procedure Data Model User Interface Control Events WebDSL Data Model User Interface Access Control Core WebDSL Core Data Model Core User Interface Web Application
  • 77. encode control flow in procedure events enabled disabled done
  • 78. procedure p(o : O) { process { a(o); b(o) } }
  • 79. procedure p(o : O) { process { a(o); b(o) } } extend procedure a(o : O) { done { o.b.enable(); } }
  • 80. procedure p(o : O) { process { a(o); b(o) } } extend procedure a(o : O) { done { o.b.enable(); } } ...right?
  • 81. procedure p(o : O) { process { a(o); b(o); a(o) } }
  • 82. procedure p(o : O) { process { a(o); b(o); a(o) } } extend procedure a(o : O) { done { ?? } }
  • 83. procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } + transition function
  • 84. procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • 85. procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • 86. procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) [1] 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • 87. procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done [1]
  • 88. procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) [1] 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • 89. procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) [2] 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • 90. procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done [2]
  • 91. procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 [2] b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • 92. procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) [3] 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • 93. procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) [3] b(o) 3 done
  • 94. procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) [3] 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • 95. procedure p(o : O) { process { a(o)[1]; b(o)[2]; a(o)[3] } } p(o) state next 0 a.enable(this, 1) 1 b.enable(this, 2) 2 a.enable(this, 3) a(o) b(o) 3 done
  • 96. next function for sequencing entity SeqProcedureStatus : ... { o -> O function next(state : Int) { if(state == 0) { procedure p(o : O) { o.a.enable(this, 1); process { } a(o)[1]; if(state == 1) { b(o)[2]; o.b.enable(this, 2); a(o)[3] } } if(state == 2) { } o.a.enable(this, 3); } if(state == 3) { processed(); } } }
  • 97. next function for parallel and entity ParProcedureStatus : ... { o -> O counter :: Int function next(state : Int) { if(state == 0) { o.a.enable(this, 1); o.b.enable(this, 2); procedure par(o : O) { } process { if(state == 1) { a(o)[1] and b(o)[2] counter := counter + 1; if(counter == 2) { } processed(); } } } if(state == 2) { counter := counter + 1; if(counter == 2) { processed(); } } } }
  • 99.
  • 100.
  • 101.
  • 102. concise Process Expressions (less flexible) Procedural Workflow more verbose WebDSL (more flexible)
  • 103. concise Process Expressions (less flexible) Procedural Workflow more verbose WebDSL (more flexible)
  • 106. WebWorkFlow linguistic integration abstraction layers full application generation
  • 107. WebWorkFlow linguistic integration abstraction layers full application generation compilation by normalization
  • 110. state tracking task pages
  • 111. state tracking task pages navigation
  • 112. state tracking task pages navigation task lists
  • 113. state tracking task pages navigation task lists workflow status
  • 114. state tracking task pages navigation task lists workflow status access control rules
  • 115. state tracking task pages navigation task lists workflow status access control rules the rest