Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Proteus SDK


Published on

Andy Keller and Dave Shepperton, Traction Software. Traction User Group, Oct 15 2010, Newport RI. TUG 2010 Newport slides, agenda and more see

Published in: Technology, Business
  • Login to see the comments

  • Be the first to like this

Proteus SDK

  1. 1. Proteus SDK <ul><li>Andy Keller Director of Engineering </li></ul>Dave Shepperton Senior Software Engineer
  2. 2. What’s new in 5.x? <ul><li><join> tag </li></ul><ul><li>Proteus skin framework </li></ul><ul><li>Tabbed navigation </li></ul><ul><li>Entry types </li></ul><ul><li>Entry decorators </li></ul><ul><li>Entry labels </li></ul><ul><li>XML forms </li></ul>
  3. 3. <join> tag <ul><li>Adds separators between chunks of output </li></ul><ul><ul><li>Doesn’t print at the beginning or end </li></ul></ul><ul><ul><li>Doesn’t repeat separators </li></ul></ul><ul><ul><li>Works through tags and functions </li></ul></ul><ul><li>Used for entry details, line breaks, sql query operators, and more </li></ul><join separator=”,”> __join.separator__ A __join.separator__ <compare.equals a=”1” b=”2”> D </compare.equals> __join.separator__ <compare.equals a=”1” b=”1”> B </compare.equals> __join.separator__ C __join.separator__ </join> A,B,C
  4. 4. Proteus Skin Framework <ul><li>The Proteus skin is like browser within a browser. It uses the GWTRPC skin to generate the components of the page: </li></ul>
  5. 5. Proteus Skin Framework (cont’d) <ul><li>gwt.rpc.view SDL Tags Produce a Tree of ViewData objects: </li></ul>
  6. 6. Customizing Proteus Navigation: Configurable Tabs <ul><li>tabs#main-allprojects -> view.tabsjson SDL Tag -> Tab::evalJSONData -> tasks tab configuration -> tabs#server-tasks -> JSON rendering </li></ul>
  7. 7. Handling JavaScript Installation for Widgets in Proteus Widgets in Proteus <ul><li>Problem: Some widgets require JavaScript which use document.write to install their own additional JavaScript. You can’t do this in an already closed HTML document! (Symptom: page goes blank, spinner spins forever...) </li></ul><ul><li>Solution: Don’t let external JavaScript ruin the current document. Instead, render an IFrame with a link to a view that is its own HTML document that includes the JavaScript. </li></ul>
  8. 8. Handling JavaScript Installation for Widgets in Proteus (cont’d) Widgets in Proteus (cont’d) <ul><li>e.g., googlemap token (in plugins/com.traction.googlemap): </li></ul><ul><li>token -> token configuration -> SDL renderer ->IFrame tag -> type=googlemap View via view configuration -> HTML rendering (with SCRIPT tag) </li></ul>
  9. 9. Entry Decorators <ul><li>Provide custom, context-sensitive renderings for different kinds of entries </li></ul><ul><li>Based upon the “custom entry type” of the Entry, same as: com.traction.sdk.Entry::getCustomEntryType() __entry.customentrytype__ </li></ul><ul><li>Decorators are per token renderer set; currently supported for the Proteus skin only (via the GWTRPC render). </li></ul>
  10. 10. Entry Decorators (cont’d) <ul><li>entry.content tag -> Entry::decorate method -> milestone decorator configuration -> SDL renderer -> HTML rendering </li></ul>
  11. 11. Entry Labels <ul><li>An entry with a corresponding label </li></ul><ul><ul><li>Encoded as ::Project:-e:[entry#] </li></ul></ul><ul><ul><li>Considered system labels </li></ul></ul><ul><ul><li>Typically hidden from the interface </li></ul></ul><ul><li>Used for grouping entries with another entry, e.g. tasks with a milestone and/or project, milestones with a project </li></ul><ul><li>Added/removed with reclassifications </li></ul><ul><ul><li>References would require an edit </li></ul></ul><ul><ul><li>Label history tracks changes </li></ul></ul>
  12. 12. Entry Labels: used for PM Task Project Milestone Milestones have Project Tasks have Project and Milestone
  13. 13. Entry Labels: new Java SDK methods <ul><li>Entry and TractionId </li></ul><ul><ul><ul><li>LabelName getLabelName () </li></ul></ul></ul><ul><li>LabelName </li></ul><ul><ul><ul><li>String getDisplayName ( CJournalRequest ) </li></ul></ul></ul><ul><ul><li>Item </li></ul></ul><ul><ul><ul><li>LabelIterator getSystemLabels () </li></ul></ul></ul>
  14. 14. Entry Labels: new SDL tags <ul><li>Entry </li></ul><ul><ul><ul><li>__ entry. labelname__ </li></ul></ul></ul><ul><li>LabelName </li></ul><ul><ul><ul><li>__ labelname. displayname__ </li></ul></ul></ul><ul><li>Item </li></ul><ul><ul><ul><li>< item. labels system=true> </ item .labels> </li></ul></ul></ul>
  15. 15. Entry Labels: retrieving labeled content <ul><li>Just like any other labeled entries </li></ul><ul><li>SDK - Journal </li></ul><ul><ul><ul><li>EntryIterator getLabeledEntries ( ... ) </li></ul></ul></ul><ul><li>SDL </li></ul><ul><ul><ul><li>< entries type=cat cat=”__entry.labelname__”> </ entries > </li></ul></ul></ul>
  16. 16. Entry Labels: special PM tags <ul><ul><ul><li>< goal .milestones> </li></ul></ul></ul><ul><ul><ul><li>< goal .tasks> </li></ul></ul></ul><ul><ul><ul><li>< milestone .goal> </li></ul></ul></ul><ul><ul><ul><li>< milestone .tasks> </li></ul></ul></ul><ul><ul><ul><li>< task .goal> </li></ul></ul></ul><ul><ul><ul><li>< task .milestone> </li></ul></ul></ul>These all put an entry or entries in scope