©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
Document Generation With
M2Doc
Romain Guider
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
WHY SHOULD I GENERATE DOC
FROM MY MODELS?
At some point, you will
need to reach people
who are not using your
modeling workbench
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
Use Case 1: Data Exchange Standard
Data Exchange Standard
workbench
Message
validator
Standard developper
Payroll employee/
Payroll software developper
Standard
documentaton
Payroll
software
Payroll
data
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
Use Case 2 : Enterprise Informaton System
modeling
Enterprise Informaton
System modeling workbench
Specificaton Doc Data Dictonary
Database
Business
Analyst
Applicaton
developper
Database
Administrator
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
HOW DO I GENERATE DOCS FROM
MY MODELS?
Let’s mix some open XML template and our models.
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
Adopt a template based approach
M2Doc
template model
document
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
What’s in a template?
• Regular open XML
• Fields to insert generaton directves :
Regularcontent
Field
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
What’s in a template?
• Regular open XML
• Fields to insert generaton directves :
M2Docprefix
Regularcontent
Field
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
What’s in a template?
• Regular open XML
• Fields to insert generaton directves :
M2Docprefix
AQLexpression
Regularcontent
Field
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
How is it processed?
• Regular open XML : reproduced as is
• Fields : replaced by the result of their
evaluaton
Resultofthe
Fieldevaluaton
Regularcontent
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
How is it processed?
• Regular open XML : reproduced as is
• Fields : replaced by the result of their
evaluaton
Resultofthe
Fieldevaluaton
Regularcontent
Notethestyle!
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
Can you Repeate please?
Field’scode
Closingtag
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
Can you Repeate please?
Field’scode
Iteratonvar
Closingtag
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
Can you Repeate please?
Field’scode
Iteratonvar
Iteratonexpr
Closingtag
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
What else?
Field’scode
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
What else?
Field’scode
expression
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
What else?
Field’scode
expression
Closingtag
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
And, Sirius representatons!
Field’scode
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
And, Sirius representatons!
Field’scode
Descripton
specificaton
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
And, Sirius representatons!
Field’scode
Descripton
specificaton
Targetobject
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
And, Sirius representatons!
Field’scode
Descripton
specificaton
Targetobject
Imagesize
specificaton
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
A word about services
{m:for talk |conf->tracks.talks->select(t|
t.name.contains(‘Sirius’))}
– {m:talk.name}
{m:endfor}
{m:for talk|conf->siriusTalks()}
- {m:talk.name}
{m:endfor}
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
Bring your own services
• Develop AQL services in POJO
• Contribute them through an extension point
• Document them for your end user
• Use the services in your templates
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
Let’s see what we can do so far!
Demo!
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
M2Doc has an open architecture
M2Doc
EMFPOI
M2Doc.UI :
m2doc.ui
m2doc.ui.edit
m2doc.ui.editor
diagramProviders services
treeProviders
Sirius
Integraton
AQL
tableProviders
database
org.obeonetwork.database
org.obeonetwork.database.edit
org.obeonetwork.database.design
org.obeonetwork.database.m2doc
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
What’s coming next?
• Currently cooking :
– Inserton of Sirius tables
– Management of user content
in generated docs
• Next steps :
– Template indentaton control
– Unified tables
– Better user experience
• Wizard for template creaton,
• Dialog for template
configuraton,
• etc
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
M2Doc
Contributions
CASID/DGSIC
(Ministère de la
defense)
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.
Where’s the code?
https://github.com/ObeoNetwork/M2Doc/
©copyrightObeo2016
CedocumentestlapropriétédeObeoetnesauraitêtrecommuniquéàunterssanssonautorisaton.

SiriusCon2016 - Document Generation with M2Doc