22
Automating Business Processes in Denver A Technical Case Study Eric Harper Zia Consulting [email protected] Paul Lungu City & County of Denver [email protected]

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

Embed Size (px)

DESCRIPTION

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.

Citation preview

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

Automating Business Processes in DenverA Technical Case Study"

" " "Eric Harper " " " "Zia Consulting" " "[email protected]"

" " "Paul Lungu " " "City & County of Denver " " [email protected]"

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

Who are we?"Eric Harper

•  Zia Consulting"•  Architect/PM/Developer"

Paul Lungu •  City & County of Denver"•  Associate Developer"

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

Who is Zia? A firm with deep technical expertise & strategic insight, coupled with our Agile software 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 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.  Zia's ECM offerings provide all of these benefits, and more, in a manner tailored to the client's business needs.

Enterprise 2.0 Solutions

Enterprise Mobile Applications

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.

Zia’s Agile Solution Methodology

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 Xpenser.com.

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.

Our  Partners  

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

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!

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

Denverʼs Many Content Management Systems"

Meager  search  capability  

Nightly  Server  Reboots  

14  disconnected  Doc  Mgmt    systems  

Poor  audi=ng  &  RM  capability    

Memory  Leaks    

Manual  load  of  metadata  

One  security  role    

Poor  UI    

Slow  Performance  

LiFle  Staff  Exper=se  

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

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"

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

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)"

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

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"

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

Demo"

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

Customizations"

Web Services •  Workflow Initiation"•  Other apps interfacing "

with Alfresco"

Workflow Features •  Action Classes"•  Delegation"•  Electronic Signature (PIN)"•  Rules-driven Assignment"•  PDF Generation"

UI Customizations •  Simple (& Non-Simple)

Filtered Association Gen"•  Content Upload"•  Wiring webscripts with JSF"

Custom Actions on Spaces

Custom Core Services

Testing •  Workflow Testing"•  Unit testing actions, web

services"

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

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?"

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

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="us.co.denver.webservice.FADWebServiceImpl">

<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) @WebService

public interface FADWebService{

public Object[] getDocumentInfo(Criteria [] c) throws FaultMsg;

public String removeDocument(String uuid) throws FaultMsg;

public String updateDocument(String uuid) throws FaultMsg;

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

Custom Workflow Wiring Example"web-client-application-custom-context.xml – define the web-client-config-custom-wf.xml

web-client-config-custom-wf.xml – defines the properties that will be displayed in your workflow

workflow_def.xml – defines the flow of your work flow

workflow_model.xml – defines the tasks in your workflow

workflow-messages.properties – defines labels in workflow

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

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="us.co.denver.repo.workflow.jbpm.GenerateContractAction"> <method>insertVendorSignatureTemplate</method> </action> <action class="us.co.denver.repo.workflow.jbpm.GenerateContractAction"> <method>insertCharterSignatureTemplate</method> </action>

</event> <task name="gawf:signatureGenerationTask">

<assignment class="us.co.denver.repo.workflow.jbpm.assignment.DelegatableAssignment"> <actor>#{ccdwf_attorney}</actor> </assignment>

</task> <transition name="done" to="generate-signature-draft"/>

</task-node>

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

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"•  FilteredAssociationGenerator.java – sets up the Component"•  UIFilteredAssociationEditor.java – 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"

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

Custom Core Services Example"Extending the service registry - Wiring up JDBC service

custom-web-context.xml Create the serivce

<bean id="CCDJDBCService" class="us.co.denver.repo.service.CCDJDBCServiceImpl">

<property name="workFlowNameMappingDAO" ref="workFlowNameMappingDAO" />

<property name="ServiceRegistry" ref="CCDServiceRegistry"/>

</bean>

Create DAO to use JDBC template

<bean id="workFlowNameMappingDAO" class="us.co.denver.repo.dao.WorkFlowNameMappingDAOImpl">

<property name="simpleJdbcTemplate" ref="simpleJdbcTemplate" />

</bean>

Extend the Alfresco service registry

<bean id="CCDServiceRegistry" class="us.co.denver.repo.service.CCDServiceDescriptorRegistry" parent="ServiceRegistry">

</bean>

Wire up Spring's simple JDBC template to query the DB

<bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">

<constructor-arg ref="defaultDataSource" />

</bean>

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

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"

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

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(){

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

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>

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

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!

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

It helps to know"Java, Javascript, Faces, Spring

Spring 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"

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

Q&A"