Bringing real-word relations to life
Plone as an organization manager
who are we?


          Andrew Mleczko
          Plone archaeologist
          andrzej.mleczko@redturtle.net


          M...
The general picture


✓ This talk is about
  “Carneade”

✓ It’s the core of a DMS
  Plone based: Ercole


✓ Customer:
  Pr...
Ercole project

Ercole I d'Este

Duke of Ferrara
(26 October 1431 – 15 June 1505)




               http://it.wikipedia.o...
http://www.flickr.com/photos/emraya/2929959881




At the very beginning there was Lotus
At the beginning there was Lotus


✓ in 2003 RedTurtle developed a first release of this DMS using
  Lotus Domino

✓ in 200...
Plone as a DMS

‣ on-line form

‣ document generation

‣ pdf conversion

‣ storing

‣ cataloging & archiving

‣ security &...
Plone as a DMS

‣ on-line form

‣ document generation

‣ pdf conversion

‣ storing

‣ cataloging & archiving

‣ security &...
Plone as a DMS

‣ on-line form

‣ document generation

‣ pdf conversion

‣ storing

‣ cataloging & archiving

‣ security &...
Plone as a DMS

‣ on-line form

‣ document generation

‣ pdf conversion

‣ storing

‣ cataloging & archiving

‣ security &...
Plone as a quality
management
system
✓ citizen registry

✓ process definitions

✓ dossier management

✓ integration with th...
Plone as an enterprise intranet
                    ‣ 800 authenticated users (editors)

                    ‣ >200 000 do...
http://www.flickr.com/photos/wynnie/1885037521




Customer needs ‘real   life’ relations
charts / graphs
charts / graphs
charts / graphs
how it was
1. add user in Lotus
2. Add to several DB’s ACL
3. Add it to “Organigramma”
4. Manage it on AS/400
Plone
what you get out of the box



✓ User and group
  management


✓ Sharing - local roles
  management


✓ PAS




    ...
Plone
what you get with add-ons

✓ Membrane
  supports Members as content
  types in Plone


✓ plone.app.memberschema
  ex...
Plone
what we missed

✓ relation should provide
  additional metadata and
  security


✓ easy way for developers to
  regi...
Plone
what we missed

✓ relation should provide
  additional metadata and
  security


✓ easy way for developers to
  regi...
other demands




                http://www.flickr.com/photos/bennyrosso/2485681355
creating
customized
vocabularies
✓ all the “project managers”

✓ all the Office A members

✓ signers for a given dept.
requirements
grow during
development
✓ once you start you can’t
  stop
✓ specialized offices:
  ‣ accountancy
  ‣ protocol
...
http://www.flickr.com/photos/wynnie/1885037521




carneade blueprint
http://www.flickr.com/photos/oscarmota/1155257083




See it in action
managing person and office
managing person and office
adding relations
adding relations
adding relations
adding relations
adding relations
adding relations


class ISalesOffer(Interface):
  """ Sales offer. """
  first_discount = schema.Int(
      title=u'First...
using extjs interface
using extjs interface
http://www.flickr.com/photos/wynnie/1885037521




How we built it
ZCA engine

  ✓ easy to extend for developers

  ✓ pluggable using ZCML

  ✓ intuitive and simple interface:
ZCA engine

  ✓ easy to extend for developers

  ✓ pluggable using ZCML

  ✓ intuitive and simple interface:


        >>>...
Relations provides security

  ✓ using PAS localrole plugin from carneade
    we can extend Plone security

  ✓ every rela...
Relations provides security

  ✓ using PAS localrole plugin from carneade
    we can extend Plone security

  ✓ every rela...
Create new relations with ZCML registration

✓ using custom   meta.zcml we can
 make relations registration quite easy
Create new relations with ZCML registration

✓ using custom    meta.zcml we can
  make relations registration quite easy

...
User interface: extjs




                        http://www.extjs.com
User interface: extjs

 ✓ cross-browser JavaScript library for building rich
   internet applications

 ✓ redturtle.extjs ...
http://www.flickr.com/photos/jillbazeley/1375857324




Relation provider plone.relations
Relation provider: plone.relations

  ✓ build on zc.relationship and five.intid

  ✓ highly optimized for simple relationsh...
extend it
integrate it
Extend existing relations
Extend existing relations

✓ We can subclass more generic relations to create real-life relation
  chain:

  ‣ Project man...
Extend existing relations

✓ Relations can be filtered by interface they are providing:
Extend existing relations

✓ Relations can be filtered by interface they are providing:




>>> carneade.listWorksFor(offic...
Integrate with existing packages



  ✓ Class needs to implement IRelationEnable
Integrate with existing packages



  ✓ Class needs to implement IRelationEnable



<class class="my.app.Folder">
   <impl...
integrating with
existing packages


✓ That's it!
✓ You can also use predefined
  vocabularies, like:

  ‣ list of all offic...
what’s next?




     http://www.flickr.com/photos/vermininc/2337307518
membrane
integration

✓ allow carneade Person to
  become Plone member
✓ better integration with Plone
  PAS




         ...
enhance
performance
✓ separate catalog for search

✓ refactor vocabularies

✓ use zope.catalog or
  Products.ZCatalog




...
http://www.sxc.hu/profile/boonna




drag and drop
local roles like rules
provide a simplied
(like rules vs code are)
version of the local roles
management we showed




   ...
local roles like rules

1. apply the role choosen from a set,


2. to actual user,


3. if he has a given relation


4. wi...
releasing software
✓ The project is going to be
  shared with another public
  administration

✓ Provincia of Ferrara is
 ...
✓ It is starting growing


✓ Provincia of Ferrara is a
  early subscriber


✓ more members on
  www.plonegov.it
how carneade
can be useful

for




                Nekorin 2008
how carneade
can be useful

for




                Nekorin 2008
Questions!?
Andrew Mleczko
andrzej.mleczko@redturtle.net


Massimo Azzolini
massimo@redturtle.net




          http://www...
Grazie. Thank you. Dziękujemy za uwage.
Upcoming SlideShare
Loading in...5
×

Bringing "real life" relations to Plone

1,957

Published on

How often did you need to profile company's users, and relations among them, relying just on groups and local roles? Right now you can design, manage and query you entire organization in Plone, using new, rich user interface and integrate it with your existing add-ons.

(all slides has been "grafically refactored" by nekorin, thanks for that!)

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,957
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
35
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • tell that carneade is just &amp;#x201C;describing&amp;#x201D; and the use belongs to applications
    next Andrew!!!
  • mettere il movie fatto in provincia
  • mettere il movie fatto in provincia
  • next Massimo
  • simplify the human interface
    let the &amp;#x201C;humans&amp;#x201D; deal with the real life relations
    we don&amp;#x2019;t need an administrator to deal with real life.
  • Bringing "real life" relations to Plone

    1. 1. Bringing real-word relations to life Plone as an organization manager
    2. 2. who are we? Andrew Mleczko Plone archaeologist andrzej.mleczko@redturtle.net Massimo Azzolini RedTurtle’s co-founder and project manager massimo@redturtle.net
    3. 3. The general picture ✓ This talk is about “Carneade” ✓ It’s the core of a DMS Plone based: Ercole ✓ Customer: Provincia of Ferrara http://www.flickr.com/photos/mleczko/3518027412/
    4. 4. Ercole project Ercole I d'Este Duke of Ferrara (26 October 1431 – 15 June 1505) http://it.wikipedia.org/wiki/File:Ercole_I_d’Este.jpg
    5. 5. http://www.flickr.com/photos/emraya/2929959881 At the very beginning there was Lotus
    6. 6. At the beginning there was Lotus ✓ in 2003 RedTurtle developed a first release of this DMS using Lotus Domino ✓ in 2005 the quality management part was added ✓ in 2007 the project needed a more “open source” soul ✓ in 2008 the Plone age started
    7. 7. Plone as a DMS ‣ on-line form ‣ document generation ‣ pdf conversion ‣ storing ‣ cataloging & archiving ‣ security & permissions
    8. 8. Plone as a DMS ‣ on-line form ‣ document generation ‣ pdf conversion ‣ storing ‣ cataloging & archiving ‣ security & permissions
    9. 9. Plone as a DMS ‣ on-line form ‣ document generation ‣ pdf conversion ‣ storing ‣ cataloging & archiving ‣ security & permissions
    10. 10. Plone as a DMS ‣ on-line form ‣ document generation ‣ pdf conversion ‣ storing ‣ cataloging & archiving ‣ security & permissions
    11. 11. Plone as a quality management system ✓ citizen registry ✓ process definitions ✓ dossier management ✓ integration with the DMS
    12. 12. Plone as an enterprise intranet ‣ 800 authenticated users (editors) ‣ >200 000 documents ‣ 2 Data.fs separated ‣ Yearly growth ca 30.000 documents ‣ Peak traffic: 20 concurrent write transactions per second
    13. 13. http://www.flickr.com/photos/wynnie/1885037521 Customer needs ‘real life’ relations
    14. 14. charts / graphs
    15. 15. charts / graphs
    16. 16. charts / graphs
    17. 17. how it was
    18. 18. 1. add user in Lotus
    19. 19. 2. Add to several DB’s ACL
    20. 20. 3. Add it to “Organigramma”
    21. 21. 4. Manage it on AS/400
    22. 22. Plone what you get out of the box ✓ User and group management ✓ Sharing - local roles management ✓ PAS http://www.flickr.com/photos/gadgetgirl70/201696636
    23. 23. Plone what you get with add-ons ✓ Membrane supports Members as content types in Plone ✓ plone.app.memberschema extend default memberdata with custom schema ✓ plone.relations define and query complex relationships between objects http://www.flickr.com/photos/phploveme/3375142156
    24. 24. Plone what we missed ✓ relation should provide additional metadata and security ✓ easy way for developers to register new relations http://www.flickr.com/photos/freddy/69234689/
    25. 25. Plone what we missed ✓ relation should provide additional metadata and security ✓ easy way for developers to register new relations ✓ user friendly interface for managing them http://www.flickr.com/photos/freddy/69234689/
    26. 26. other demands http://www.flickr.com/photos/bennyrosso/2485681355
    27. 27. creating customized vocabularies ✓ all the “project managers” ✓ all the Office A members ✓ signers for a given dept.
    28. 28. requirements grow during development ✓ once you start you can’t stop ✓ specialized offices: ‣ accountancy ‣ protocol ✓ extra roles http://www.sxc.hu/profile/bizior
    29. 29. http://www.flickr.com/photos/wynnie/1885037521 carneade blueprint
    30. 30. http://www.flickr.com/photos/oscarmota/1155257083 See it in action
    31. 31. managing person and office
    32. 32. managing person and office
    33. 33. adding relations
    34. 34. adding relations
    35. 35. adding relations
    36. 36. adding relations
    37. 37. adding relations
    38. 38. adding relations class ISalesOffer(Interface): """ Sales offer. """ first_discount = schema.Int( title=u'First level discount', readonly=False, required=False) second_discount = schema.Int( title=u'Second level discount', readonly=False, required=False) total_amount = schema.Int( title=u'Total amount', readonly=False, required=True)
    39. 39. using extjs interface
    40. 40. using extjs interface
    41. 41. http://www.flickr.com/photos/wynnie/1885037521 How we built it
    42. 42. ZCA engine ✓ easy to extend for developers ✓ pluggable using ZCML ✓ intuitive and simple interface:
    43. 43. ZCA engine ✓ easy to extend for developers ✓ pluggable using ZCML ✓ intuitive and simple interface: >>> carneade = getUtility(ICarneade) >>> carneade.belongTo(office2, office1) >>> carneade.addEmployee(john, office2) >>> carneade.listEmployees(office1) [<john CarneadePerson>]
    44. 44. Relations provides security ✓ using PAS localrole plugin from carneade we can extend Plone security ✓ every relation could provide plone role:
    45. 45. Relations provides security ✓ using PAS localrole plugin from carneade we can extend Plone security ✓ every relation could provide plone role: >>> member = getAuthenticatedMember() >>> member.getRolesInContext(office1) ['Member'] >>> carneade.addBoss(member, office1) >>> member.getRolesInContext(office1) ['Member','Manager']
    46. 46. Create new relations with ZCML registration ✓ using custom meta.zcml we can make relations registration quite easy
    47. 47. Create new relations with ZCML registration ✓ using custom meta.zcml we can make relations registration quite easy <carnede:relation for=".interfaces.ISimpleRelation" name="office_manager" relation_title="Office manager" plone_role="Manager" /> ✓ and help separate core engine from customer specific implementation
    48. 48. User interface: extjs http://www.extjs.com
    49. 49. User interface: extjs ✓ cross-browser JavaScript library for building rich internet applications ✓ redturtle.extjs (http://pypi.python.org/pypi/redturtle.extjs) to easily use it in Plone ✓ JSON-RPC to integrate with Plone
    50. 50. http://www.flickr.com/photos/jillbazeley/1375857324 Relation provider plone.relations
    51. 51. Relation provider: plone.relations ✓ build on zc.relationship and five.intid ✓ highly optimized for simple relationship queries across large data-sets ✓ plone.app.relations - content centric API for defining and querying relationships
    52. 52. extend it integrate it
    53. 53. Extend existing relations
    54. 54. Extend existing relations ✓ We can subclass more generic relations to create real-life relation chain: ‣ Project manager → Works for → Belong to class IBelongTo(Interface): """ Very generic relation marker interface. """ class IWorksFor(IBelongTo): """ Some specific relation marker interface. """ class IProjectManage(IWorksFor): """ A very specific relation marker interface. """
    55. 55. Extend existing relations ✓ Relations can be filtered by interface they are providing:
    56. 56. Extend existing relations ✓ Relations can be filtered by interface they are providing: >>> carneade.listWorksFor(office21) [<projectmanager CarneadePerson>, <normal_employee CarneadePerson>, ...]
    57. 57. Integrate with existing packages ✓ Class needs to implement IRelationEnable
    58. 58. Integrate with existing packages ✓ Class needs to implement IRelationEnable <class class="my.app.Folder"> <implements interface="carneade...IRelationEnable" /> </class>
    59. 59. integrating with existing packages ✓ That's it! ✓ You can also use predefined vocabularies, like: ‣ list of all office responsibilities ‣ list of all contract employees ‣ list of all freelancers
    60. 60. what’s next? http://www.flickr.com/photos/vermininc/2337307518
    61. 61. membrane integration ✓ allow carneade Person to become Plone member ✓ better integration with Plone PAS http://www.flickr.com/photos/monkeyrivertown/2314032302
    62. 62. enhance performance ✓ separate catalog for search ✓ refactor vocabularies ✓ use zope.catalog or Products.ZCatalog http://www.flickr.com/photos/luciano_meirelles/3461046001/sizes/o/
    63. 63. http://www.sxc.hu/profile/boonna drag and drop
    64. 64. local roles like rules provide a simplied (like rules vs code are) version of the local roles management we showed Nekorin 2008
    65. 65. local roles like rules 1. apply the role choosen from a set, 2. to actual user, 3. if he has a given relation 4. with a selectable object http://beatqs.deviantart.com/art/eggs-105415135
    66. 66. releasing software ✓ The project is going to be shared with another public administration ✓ Provincia of Ferrara is evaluating releasing it using a GPL-like licence http://www.flickr.com/photos/mleczko/3335493624
    67. 67. ✓ It is starting growing ✓ Provincia of Ferrara is a early subscriber ✓ more members on www.plonegov.it
    68. 68. how carneade can be useful for Nekorin 2008
    69. 69. how carneade can be useful for Nekorin 2008
    70. 70. Questions!? Andrew Mleczko andrzej.mleczko@redturtle.net Massimo Azzolini massimo@redturtle.net http://www.flickr.com/photos/seandreilinger/2326448445
    71. 71. Grazie. Thank you. Dziękujemy za uwage.
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×