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