CASE-4 Automating Business Processes in Denver: A Technical Case Study


Published on

In 2010, the City and County of Denver turned to Zia Consulting to implement Alfresco to store contract and financial records and used CMIS to integrate with PeopleSoft Financials. Then the city wanted to fully automate the process for requesting, writing and approving contracts. Zia augmented their Fresh Workflow Alfresco solution, adding a workflow initiation web service, connected workflows, rules-driven task assignment, digital signatures and a management dashboard. Explorer and Share user interface customizations also streamline workflow tasks. This presentation reviews in depth the tools and technologies that were used to implement the solution, covers lessons learned and previews additional features on Zia’s roadmap.

Published in: Technology, Business
  • Be the first to comment

  • Be the first to like this

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

CASE-4 Automating Business Processes in Denver: A Technical Case Study

  1. 1. Automating Business Processes in Denver
 A Technical Case Study" " " "Eric Harper " " " "Zia Consulting" " "" " " "Paul Lungu " " "City & County of Denver " ""
  2. 2. Who are we?"Eric Harper •  Zia Consulting" •  Architect/PM/Developer"Paul Lungu •  City & County of Denver" •  Associate Developer"
  3. 3. Who is Zia?
A firm with deep technical expertise & strategic insight, coupled with our Agilesoftware methodology, provides numerous benefits to our customers" Enterprise Content Management (ECM) An ECM is a cultivation of knowledge -- one of the most valuable assets to any Our  Partners   organization. A proper ECM system ensures content has integrity through proper version control, allows producers to easily create content and publish it to a variety of mediums, and it automates processes, streamlining the review, approval and distribution of content across an organization.  Zias ECM offerings provide all of these benefits, and more, in a manner tailored to the clients business needs. Enterprise 2.0 Solutions The focus of technology should always be on people. Zia enables our customers to gain tremendous competitive advantage by allowing their team to collaborate more effectively, respond more quickly to changes, and make better decisions. Adopters of Enterprise 2.0 solutions will find they have a more productive, engaged and informed team. Enterprise Mobile Applications Mobile workforce enablement is an increasing trend for Zia s enterprise customers. Zia s Fresh Docs ECM application is available for iPhone, iPad and Android platforms. The newly released Fresh Xpense application is a simple expense and receipt capture tool for the iPhone that integrates with Zia s Agile Solution Methodology At its heart, our Agile-based methodology is centered on a close collaborative approach to maximizing value for our customers. Constant client communication is necessary to ensure that each development iteration addresses features with the highest business value, even if those features were unknown at the launch of the project.
  4. 4. Some Facts about Denver " The City" •  Founded in 1858! •  Strong Mayor form of government, consolidated City-County! •  Population of 600,000! •  16th largest metro area in the United States! •  10th largest central business district in the United States! •  250,000 households! •  One of the fittest and most highly educated cities in the nation! •  11,000 city employees! •  $1+ billion annual budget! Denver Technology Services" •  Formed in 2005! •  Previously federated organizational model! •  300 IT employees! •  $48M yearly budget!
  5. 5. Denverʼs Many Content ManagementSystems" Poor  UI     Meager  search  capability   Manual  load  of  metadata   Slow  Performance   Memory  Leaks     Nightly  Server  Reboots   One  security  role     14  disconnected   Doc  Mgmt    systems   Poor  audi=ng  &   RM  capability     LiFle  Staff  Exper=se  
  6. 6. Turned to Alfresco + Zia Consulting"Phase 1: Scanned Documents (2010) •  Contracts & Financial Records" •  Migrated off Liberty IMS to Alfresco + KOFAX" •  Implemented rules-based workflow"Phase 2: CMIS Integrations (2010) •  Document Repository for PeopleSoft CRM and Financials" •  iOS App for City 311 Help Center"Phase 3: Automated Contracting Process (2011) •  Customized Advanced Workflow" •  Web Service integration with PeopleSoft" •  Supports full lifecycle of contracting process"Phase 4: Human Services Case Management (2011) •  Ephesoft Imaging front end" •  Repository Integration with custom apps"
  7. 7. Contracting Workflow Process"Lifecycle •  RFP or Contract Request" •  Staff Reviews" •  Contract Drafting" •  Vendor Negotiation & Signature" •  City Council Ordinance Process" •  City Signatures"Integration •  PeopleSoft Financials (Requisition/Purchase Order)" •  SIRE Legislative Information System (Ordinance)" •  Oracle OBIEE (Reporting)"
  8. 8. Contracting Workflow Process"Customized Features •  SOAP Web Service for workflow initiation" •  Task Email Notification" •  Delegation" •  “Connected” Workflow" •  Rules-driven task assignment" •  Automated PDF transformation/generation" •  UI Customizations" •  Electronic Signature" •  Management Dashboard"
  9. 9. Demo"
  10. 10. Customizations"Web Services UI Customizations •  Workflow Initiation" •  Simple (& Non-Simple) •  Other apps interfacing " Filtered Association Gen" with Alfresco" •  Content Upload" •  Wiring webscripts with JSF"Workflow Features •  Action Classes" Custom Actions on Spaces •  Delegation" Custom Core Services •  Electronic Signature (PIN)" •  Rules-driven Assignment" Testing •  PDF Generation" •  Workflow Testing" •  Unit testing actions, web services"
  11. 11. Web Service example"Things you may want to do with web services(Some of this can be done using CMIS WS API) •  Search the repo for docs and meta-data" •  Initiate workflow" •  Put docs into repo" •  Why not just use CMIS API?"
  12. 12. Web Service example (continued)
Exposing servlet-based web services using JAX-WS"Spring Wiring<jaxws:endpoint id="fadService" address="/ccd/FadWebService" implementor="#fadWebService"></jaxws:endpoint><bean name="fadWebService" class=""> <property name="nodeService" ref="NodeService" /> <property name="searchService" ref="SearchService" /> <property name="fileFolderService" ref="FileFolderService" /> <property name="namespaceService" ref="NamespaceService" /> <property name="transactionService" ref="TransactionService" /> <property name="repositoryHelper" ref="repositoryHelper"/></bean>Java Code (Annotation Driven)@WebServicepublic interface FADWebService{ public Object[] getDocumentInfo(Criteria [] c) throws FaultMsg; public String removeDocument(String uuid) throws FaultMsg; public String updateDocument(String uuid) throws FaultMsg;
  13. 13. Custom Workflow Wiring Example"web-client-application-custom-context.xml – define the web-client-config-custom-wf.xmlweb-client-config-custom-wf.xml – defines the properties that will be displayed in your workflowworkflow_def.xml – defines the flow of your work flowworkflow_model.xml – defines the tasks in your – defines labels in workflow
  14. 14. Workflow Action Example"Inserting page templates into the workflow<task-node name="signature-generation"> <event type="node-enter"> <script> <variable name="contractStage" access="write" /> <expression><![CDATA[contractStage = "stage4";]]></expression> </script> <action class=""> <method>insertVendorSignatureTemplate</method> </action> <action class=""> <method>insertCharterSignatureTemplate</method> </action> </event> <task name="gawf:signatureGenerationTask"> <assignment class=""> <actor>#{ccdwf_attorney}</actor> </assignment> </task> <transition name="done" to="generate-signature-draft"/></task-node>
  15. 15. Filtered Association Generator Example"Avoid this sort of thing. It is convoluted and complicated. Every time I look at it, I think how did I do this?This is an good example of why Share is better •  Faces" •  faces-config-custom.xml - to configure the managed bean – the bean that is controlled by faces frame work" •  " web-client-config-custom-wf.xml - to configure UI property sheet" •  Workflow" • – sets up the Component" • – does heavy lifting with alfresco API (associates groups with UI component)" •  " workflow_model.xml" •  Spring" •  " web-client-application-custom-context.xml – tell spring from where to load the faces config property sheet"
  16. 16. Custom Core Services Example"Extending the service registry - Wiring up JDBC servicecustom-web-context.xmlCreate the serivce<bean id="CCDJDBCService" class=""><property name="workFlowNameMappingDAO" ref="workFlowNameMappingDAO" /><property name="ServiceRegistry" ref="CCDServiceRegistry"/></bean>Create DAO to use JDBC template<bean id="workFlowNameMappingDAO" class=""><property name="simpleJdbcTemplate" ref="simpleJdbcTemplate" /></bean>Extend the Alfresco service registry<bean id="CCDServiceRegistry" class="" parent="ServiceRegistry"></bean>Wire up Springs simple JDBC template to query the DB<bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"><constructor-arg ref="defaultDataSource" /></bean>
  17. 17. Workflow Testing Example"Base Test •  Initialize Spring! new ClassPathXmlApplicationContext("classpath:alfresco/application-context.xml"); serviceRegistry = (ServiceRegistry) _context.getBean(ServiceRegistry.SERVICE_REGISTRY);Abstract Workflow Test •  Set up workflow" •  EndAssignedTaskByName"Workflow Test •  Define path for workflow test" •  Task Completion Methods – update properties and end task" •  Start with the happy path, incorporate revision paths incrementally"
  18. 18. Unit Testing Example"Dependencies •  Not easy to mock dependencies" •  Easy to load Spring container" new ClassPathXmlApplicationContext("classpath:alfresco/application-context.xml");You can also use the context config annotation "@ContextConfiguration(locations={"classpath:alfresco/application-context.xml","classpath:us/co/denver/fads/ webservice/fad-service-test-context.xml"}) Don’t use @RunWith (SpringJUnit4ClassRunner.class)Get Service Registry and then test classes serviceRegistry = (ServiceRegistry) context.getBean(ServiceRegistry.SERVICE_REGISTRY);Setup and Create tests @Before public void setup(){ @Test public void testGetDocumentInfoWhenYEqualsX(){
  19. 19. Jetty Embedded"We use Jetty for development •  Allows projects in workspace to run without building war •  Starts fast, less restarts •  Set up projects to build as AMPS •  Easy to configure new projects to use Jetty •  Easy to configure different startup setups depending on projects •  Point jetty at config and classes dir in your project <Set name="extraClasspath"> <Call class="org.apache.commons.lang.StringUtils" name="join"> <Arg> <Array type="java.lang.String"> <Item>../CCDCore/build/classes</Item> <Item>../CCDCore/config</Item> <Item>../ContractingAutomation/build/classes</Item> <Item>../ContractingAutomation/config</Item>
  20. 20. Lessons Learned" •  Long workflows difficult to get right (both design and implement) •  Better to start simple and build incrementally •  Testing is difficult (build infrastructure as you go) •  Use web scripts when possible for UI modifications •  J2EE servers can be difficult •  Indexing Clustering issues •  Alfresco configs •  LDAP •  JODConverter •  Fileservers •  Don’t forget Zero Day config •  Test Performance!
  21. 21. It helps to know"Java, Javascript, Faces, SpringSpring Framework • Spring patterns - DI/IoC, Interface, Marker, Factory" • Spring initialization life-cycle"Alfresco API • Service based architecture" • Not very intuitive" • Consider getting properties from a node. You would expect to be able to get properties with a noderef. Instead you must use the node service."Xpath • For complex queries use xpath and searchservice" • For simple queries use FileFolderService and simpleSearch"
  22. 22. Q&A"