Hi Community,I was trying to setup an advanced workflow on 1.4 Community Edition. Deploying the workflow works fine using the jPBM Plugin for eclipse. In the web client, the advanced workflow shows up in the list of available workflows and the workflow can be selected.But after trying to start the workflow in the advanced workflow wizard, there is no way to proceed since the finish button never gets activated in the workflow options.When comparing with the predefined workflows, the property "Identifier" seems to be mandatory (see screenshot). This is not the case for the predefined workflow.[img]http://www.sookie.de/temp/workflow-options.jpg[/img]Commenting out the property in the web client configuration enables the finish button. When assigning the task to admin, the task does not show up in the admin's task list.Could anybody advise please? I am sure I missed something, but I don't know what.Some comment on the advanced workflow integration: I appreciate its flexibility - but setup and customization is pretty error prone and time consuming due to manual synchronization between process definition, task model and web client configuration. This basically also applies to adding a custom content model in general. What are the plans for administrative GUIs taking care of that automatically?Regards,Oliver.Process Definition:
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1"
name="lwf:PostkorbEingangRechnungenLS">
<swimlane name="initiator" />
<start-state name="start">
<task name="lwf:startPostkorbEingangRechnungenLS"
swimlane="initiator" />
<transition name="PostkorbEingang" to="PostkorbEingangRechnungenLS"></transition>
</start-state>
<swimlane name="Sachbearbeiter">
<assignment
actor-id="#{bpm_assignee.properties['cm:userName']}" />
</swimlane>
<task-node name="PostkorbEingangRechnungenLS">
<task name="lwf:PostkorbEingangRechnungenLS" />
<transition name="Postenkontrolle" to="Postenkontrolle"></transition>
</task-node>
<task-node name="Postenkontrolle">
<task name="lwf:Postenkontrolle" />
<transition name="Rechnungsfreigabe" to="Rechnungsfreigabe"></transition>
<transition name="LSgeprueft" to="LSgeprueft"></transition>
</task-node>
<task-node name="Rechnungsfreigabe">
<task name="lwf:Rechnungsfreigabe" />
<transition name="" to="FiBuErfassung"></transition>
<transition name="UnbezahlteLastschriften" to="UnbezahlteLastschriften"></transition>
</task-node>
<task-node name="LSgeprueft">
<task name="lwf:LSgeprueft" />
<transition name="" to="end"></transition>
</task-node>
<task-node name="FiBuErfassung">
<task name="lwf:FiBuErfassung" />
<transition name="ZuzahlendeUeberweisung" to="ZuzahlendeUeberweisung"></transition>
</task-node>
<task-node name="ZuzahlendeUeberweisung">
<task name="lwf:ZuzahlendeUeberweisung" />
<transition name="UnbezahlteUeberweisung" to="UnbezahlteUeberweisung"></transition>
</task-node>
<task-node name="UnbezahlteUeberweisung">
<task name="lwf:UnbezahlteUeberweisung" />
<transition name="UeberweisungenBezahlteRechnungen" to="BezahlteRechnungen"></transition>
</task-node>
<task-node name="BezahlteRechnungen">
<task name="lwf:BezahlteRechnungen" />
<transition name="" to="end"></transition>
</task-node>
<task-node name="UnbezahlteLastschriften">
<task name="lwf:UnbezahlteLastschriften" />
<transition name="LastschriftenBezahlteRechnungen" to="BezahlteRechnungen"></transition>
</task-node>
<end-state name="end"></end-state>
</process-definition>
customWorkflowModel.xml:
<?xml version="1.0" encoding="UTF-8"?>
<model name="lwf:levigoworkflowmodel" xmlns="http://www.alfresco.org/model/dictionary/1.0">
<imports>
<import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
<import uri="http://www.alfresco.org/model/bpm/1.0" prefix="bpm"/>
<import uri="http://www.alfresco.org/model/workflow/1.0" prefix="wf"/>
</imports>
<namespaces>
<namespace uri="http://www.levigo.de/model/workflow/1.0" prefix="lwf"/>
</namespaces>
<types>
<type name="lwf:startPostkorbEingangRechnungenLS">
<parent>bpm:startTask</parent>
<mandatory-aspects>
<aspect>bpm:assignee</aspect>
</mandatory-aspects>
</type>
<type name="lwf:PostkorbEingangRechnungenLS">
<parent>bpm:workflowTask</parent>
<overrides>
<property name="bpm:packageActionGroup">
<default>add_package_item_actions</default>
</property>
<property name="bpm:packageItemActionGroup">
<default>edit_package_item_actions</default>
</property>
</overrides>
</type>
<type name="lwf:Postenkontrolle">
<parent>bpm:workflowTask</parent>
</type>
<type name="lwf:Rechnungsfreigabe">
<parent>bpm:workflowTask</parent>
</type>
<type name="lwf:LSgeprueft">
<parent>bpm:workflowTask</parent>
</type>
<type name="lwf:FiBuErfassung">
<parent>bpm:workflowTask</parent>
</type>
<type name="lwf:ZuzahlendeUeberweisung">
<parent>bpm:workflowTask</parent>
</type>
<type name="lwf:UnbezahlteUeberweisung">
<parent>bpm:workflowTask</parent>
</type>
<type name="lwf:BezahlteRechnungen">
<parent>bpm:workflowTask</parent>
</type>
<type name="lwf:UnbezahlteLastschriften">
<parent>bpm:workflowTask</parent>
</type>
</types>
</model>
web-client-config-custom.xml
<alfresco-config>
<!– Example of adding languages to the list in the login page –>
<config evaluator="string-compare" condition="Languages">
<languages>
<language locale="ca_ES">Catalan</language>
<language locale="da_DK">Danish</language>
<language locale="de_DE">German</language>
<language locale="es_ES">Spanish</language>
<language locale="el_GR">Greek</language>
<language locale="fr_FR">French</language>
<language locale="it_IT">Italian</language>
<language locale="ja_JP">Japanese</language>
<language locale="du_NL">Dutch</language>
<language locale="pt_BR">Portuguese (Brazilian)</language>
<language locale="ru_RU">Russian</language>
<language locale="fi_FI">Finnish</language>
<language locale="tr_TR">Turkish</language>
<language locale="zh_CN">Simplified Chinese</language>
</languages>
</config>
<config evaluator="node-type" condition="lwf:startPostkorbEingangRechnungenLS" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<!– <show-property name="bpm:taskId" /> –>
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="false"/>
<show-property name="bpm:dueDate" read-only="false" />
<show-property name="bpm:priority" read-only="false" />
<show-property name="bpm:status" />
<show-association name="bpm:assignee" display-label-id="lwf_Sachbearbeiter" />
</property-sheet>
</config>
<config evaluator="node-type" condition="lwf:Postenkontrolle" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<!– <show-property name="bpm:taskId" /> –>
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="true"/>
<show-property name="bpm:dueDate" read-only="true" />
<show-property name="bpm:priority" read-only="true" />
<show-property name="bpm:status" />
</property-sheet>
</config>
<config evaluator="node-type" condition="lwf:Rechnungsfreigabe" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<!– <show-property name="bpm:taskId" /> –>
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="true"/>
<show-property name="bpm:dueDate" read-only="true" />
<show-property name="bpm:priority" read-only="true" />
<show-property name="bpm:status" />
</property-sheet>
</config>
<config evaluator="node-type" condition="lwf:LSgeprueft" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<!– <show-property name="bpm:taskId" /> –>
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="true"/>
<show-property name="bpm:dueDate" read-only="true" />
<show-property name="bpm:priority" read-only="true" />
<show-property name="bpm:status" />
</property-sheet>
</config>
<config evaluator="node-type" condition="lwf:FiBuErfassung" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<!– <show-property name="bpm:taskId" /> –>
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="true"/>
<show-property name="bpm:dueDate" read-only="true" />
<show-property name="bpm:priority" read-only="true" />
<show-property name="bpm:status" />
</property-sheet>
</config>
<config evaluator="node-type" condition="lwf:ZuzahlendeUeberweisung" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<!– <show-property name="bpm:taskId" /> –>
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="true"/>
<show-property name="bpm:dueDate" read-only="true" />
<show-property name="bpm:priority" read-only="true" />
<show-property name="bpm:status" />
</property-sheet>
</config>
<config evaluator="node-type" condition="lwf:UnbezahlteUeberweisung" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<!– <show-property name="bpm:taskId" /> –>
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="true"/>
<show-property name="bpm:dueDate" read-only="true" />
<show-property name="bpm:priority" read-only="true" />
<show-property name="bpm:status" />
</property-sheet>
</config>
<config evaluator="node-type" condition="lwf:BezahlteRechnungen" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<!– <show-property name="bpm:taskId" /> –>
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="true"/>
<show-property name="bpm:dueDate" read-only="true" />
<show-property name="bpm:priority" read-only="true" />
<show-property name="bpm:status" />
</property-sheet>
</config>
<config evaluator="node-type" condition="lwf:UnbezahlteLastschriften" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<!– <show-property name="bpm:taskId" /> –>
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="true"/>
<show-property name="bpm:dueDate" read-only="true" />
<show-property name="bpm:priority" read-only="true" />
<show-property name="bpm:status" />
</property-sheet>
</config>
</alfresco-config>
customWorkflow-messages.properties
# Postkorb Eingang: Rechnungen, LS Workflow
lwf_PostkorbEingangRechnungenLS.workflow.title = Postkorb Eingang: Rechnungen, LS
lwf_PostkorbEingangRechnungenLS.workflow.description = Rechnungen und Lieferscheine im Posteingang bearbeiten
# Task Definitions
lwf_levigoworkflowmodel.type.lwf_startPostkorbEingangRechnungenLS.title = Postkorb Eingang: Rechnungen und Lieferscheine
lwf_levigoworkflowmodel.type.lwf_startPostkorbEingangRechnungenLS.description = Rechnungen und Lieferscheine im Posteingang bearbeiten
lwf_levigoworkflowmodel.type.lwf_PostkorbEingangRechnungenLS.title = Postkorb Eingang: Rechnungen und Lieferscheine
lwf_levigoworkflowmodel.type.lwf_PostkorbEingangRechnungenLS.description = Rechnungen und Lieferscheine im Posteingang bearbeiten
lwf_levigoworkflowmodel.type.lwf_Postenkontrolle.title = Postenkontrolle
lwf_levigoworkflowmodel.type.lwf_Postenkontrolle.description = Postenkontrolle durchführen
lwf_levigoworkflowmodel.type.lwf_Rechnungsfreigabe.title = Rechnungsfreigabe
lwf_levigoworkflowmodel.type.lwf_Rechnungsfreigabe.description = Rechnungsfreigabe durchführen
lwf_levigoworkflowmodel.type.lwf_LSgeprueft.title = Lieferschein geprüft
lwf_levigoworkflowmodel.type.lwf_LSgeprueft.description = Lieferschein geprüft
lwf_levigoworkflowmodel.type.lwf_FiBuErfassung.title = FiBu Erfassung
lwf_levigoworkflowmodel.type.lwf_FiBuErfassung.description = Erfassung in Finanzbuchhaltung
lwf_levigoworkflowmodel.type.lwf_ZuzahlendeUeberweisung.title = Zu zahlende Überweisung
lwf_levigoworkflowmodel.type.lwf_ZuzahlendeUeberweisung.description = Zu zahlende Überweisung
lwf_levigoworkflowmodel.type.lwf_UnbezahlteUeberweisung.title = Unbezahlte Überweisung
lwf_levigoworkflowmodel.type.lwf_UnbezahlteUeberweisung.description = Unbezahlte Überweisung
lwf_levigoworkflowmodel.type.lwf_UnbezahlteUeberweisung.title = Unbezahlte Überweisung
lwf_levigoworkflowmodel.type.lwf_UnbezahlteUeberweisung.description = Unbezahlte Überweisung
lwf_levigoworkflowmodel.type.lwf_BezahlteRechnungen.title = Bezahlte Rechnungen
lwf_levigoworkflowmodel.type.lwf_BezahlteRechnungen.description = Bezahlte Rechnungen
lwf_levigoworkflowmodel.type.lwf_UnbezahlteLastschriften.title = Unbezahlte Lastschriften
lwf_levigoworkflowmodel.type.lwf_UnbezahlteLastschriften.description = Unbezahlte Lastschriften
# Process Definitions
lwf_PostkorbEingangRechnungenLS.workflow.node.start.title=Start
lwf_PostkorbEingangRechnungenLS.workflow.node.start.description=Start
lwf_PostkorbEingangRechnungenLS.workflow.node.PostkorbEingangRechnungenLS.title=Postkorb Eingang - Rechnungen, LS
lwf_PostkorbEingangRechnungenLS.workflow.node.PostkorbEingangRechnungenLS.description=Postkorb Eingang - Rechnungen, LS bearbeiten
lwf_PostkorbEingangRechnungenLS.workflow.node.PostkorbEingangRechnungenLS.transition.Postenkontrolle.title=Postenkontrolle
lwf_PostkorbEingangRechnungenLS.workflow.node.PostkorbEingangRechnungenLS.transition.Postenkontrolle.description=Postenkontrolle
lwf_PostkorbEingangRechnungenLS.workflow.node.Postenkontrolle.title=Postkorb Eingang - Rechnungen, LS
lwf_PostkorbEingangRechnungenLS.workflow.node.Postenkontrolle.description=Postkorb Eingang - Rechnungen, LS bearbeiten
lwf_PostkorbEingangRechnungenLS.workflow.node.Postenkontrolle.transition.Rechnungsfreigabe.title=Rechnungsfreigabe
lwf_PostkorbEingangRechnungenLS.workflow.node.Postenkontrolle.transition.Rechnungsfreigabe.description=Rechnungsfreigabe
lwf_PostkorbEingangRechnungenLS.workflow.node.Postenkontrolle.transition.LSgeprueft.title=LS geprüft
lwf_PostkorbEingangRechnungenLS.workflow.node.Postenkontrolle.transition.LSgeprueft.description=LS geprüft
lwf_PostkorbEingangRechnungenLS.workflow.node.Rechnungsfreigabe.title=Postkorb Eingang - Rechnungen, LS
lwf_PostkorbEingangRechnungenLS.workflow.node.Rechnungsfreigabe.description=Postkorb Eingang - Rechnungen, LS bearbeiten
lwf_PostkorbEingangRechnungenLS.workflow.node.Rechnungsfreigabe.transition.FiBuErfassung.title=FiBu Erfassung
lwf_PostkorbEingangRechnungenLS.workflow.node.Rechnungsfreigabe.transition.FiBuErfassung.description=FiBu Erfassung
lwf_PostkorbEingangRechnungenLS.workflow.node.LSgeprueft.title=LS geprüft
lwf_PostkorbEingangRechnungenLS.workflow.node.LSgeprueft.description=LS geprüft
lwf_PostkorbEingangRechnungenLS.workflow.node.FiBuErfassung.title=FiBu Erfassung
lwf_PostkorbEingangRechnungenLS.workflow.node.FiBuErfassung.description=FiBu Erfassung
lwf_PostkorbEingangRechnungenLS.workflow.node.FiBuErfassung.transition.ZuzahlendeUeberweisung.title=Zu zahlende Überweisung
lwf_PostkorbEingangRechnungenLS.workflow.node.FiBuErfassung.transition.ZuzahlendeUeberweisung.description=Zu zahlende Überweisung
lwf_PostkorbEingangRechnungenLS.workflow.node.FiBuErfassung.transition.UnbezahlteLastschriften.title=Unbezahlte Lastschriften
lwf_PostkorbEingangRechnungenLS.workflow.node.FiBuErfassung.transition.UnbezahlteLastschriften.description=Unbezahlte Lastschriften
lwf_PostkorbEingangRechnungenLS.workflow.node.ZuzahlendeUeberweisung.title=Zu zahlende Überweisung
lwf_PostkorbEingangRechnungenLS.workflow.node.ZuzahlendeUeberweisung.description=Zu zahlende Überweisung
lwf_PostkorbEingangRechnungenLS.workflow.node.ZuzahlendeUeberweisung.transition.UnbezahlteUeberweisung.title=Unbezahlte Überweisung
lwf_PostkorbEingangRechnungenLS.workflow.node.ZuzahlendeUeberweisung.transition.UnbezahlteUeberweisung.description=Unbezahlte Überweisung
lwf_PostkorbEingangRechnungenLS.workflow.node.UnbezahlteUeberweisung.title=Unbezahlte Überweisung
lwf_PostkorbEingangRechnungenLS.workflow.node.UnbezahlteUeberweisung.description=Unbezahlte Überweisung
lwf_PostkorbEingangRechnungenLS.workflow.node.UnbezahlteUeberweisung.transition.UeberweisungenBezahlteRechnungen.title=Bezahlte Rechnungen
lwf_PostkorbEingangRechnungenLS.workflow.node.UnbezahlteUeberweisung.transition.UeberweisungenBezahlteRechnungen.description=Bezahlte Rechnungen
lwf_PostkorbEingangRechnungenLS.workflow.node.BezahlteRechnungen.title=Bezahlte Rechnungen
lwf_PostkorbEingangRechnungenLS.workflow.node.BezahlteRechnungen.description=Bezahlte Rechnungen
lwf_PostkorbEingangRechnungenLS.workflow.node.UnbezahlteLastschriften.title=Unbezahlte Lastschriften
lwf_PostkorbEingangRechnungenLS.workflow.node.UnbezahlteLastschriften.description=Unbezahlte Lastschriften
lwf_PostkorbEingangRechnungenLS.workflow.node.UnbezahlteLastschriften.transition.LastschriftenBezahlteRechnungen.title=Bezahlte Rechnungen
lwf_PostkorbEingangRechnungenLS.workflow.node.UnbezahlteLastschriften.transition.LastschriftenBezahlteRechnungen.description=Bezahlte Rechnungen
lwf_PostkorbEingangRechnungenLS.workflow.node.end.title=Ende
lwf_PostkorbEingangRechnungenLS.workflow.node.end.description=Ende
bootstrap-context.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<!–
Repository Bootstrap Sequence.
This file specifies the initialisation (and order of initialisation) to perform during Repository startup.
The pattern for adding new initialisation to the bootstrap sequence is as follows:
1) Develop a bean that implements the Spring interface ApplicationListener
2) Place the initialisation logic in the method onApplicationEvent(ApplicationEvent event)…
public void onApplicationEvent(ApplicationEvent event)
{
if (event instanceof ContextRefreshedEvent)
{
// initialisation logic here
}
}
3) Add the bean definition to this file - Note: the beans are initialised in the order they are specified.
–>
<beans>
<!– ensure that the schema is bootstrapped –>
<bean id="schemaBootstrap" class="org.alfresco.repo.domain.schema.SchemaBootstrap" >
<property name="localSessionFactory">
<ref bean="&sessionFactory"></ref> <!– inject the actual factory, not a session –>
</property>
<property name="updateSchema">
<value>${db.schema.update}</value>
</property>
<property name="postCreateScriptUrls">
<list>
<value>classpath:alfresco/dbscripts/create/1.4/${db.script.dialect}/post-create-indexes.sql</value>
</list>
</property>
<property name="validateUpdateScriptPatches">
<list>
</list>
</property>
<property name="applyUpdateScriptPatches">
<list>
<ref bean="patch.schemaUpdateScript-V1.4-1" />
<ref bean="patch.schemaUpdateScript-V1.4-2" />
</list>
</property>
</bean>
<!– Bootstrap Files –>
<bean id="systemInfoBootstrap" parent="systemInfoImporter">
</bean>
<bean id="userBootstrap" parent="userStoreImporter">
<property name="bootstrapViews">
<list>
<props>
<prop key="path">/</prop>
<prop key="location">alfresco/bootstrap/alfrescoUserStore.xml</prop>
</props>
<props>
<prop key="path">/${alfresco_user_store.system_container.childname}</prop>
<prop key="location">alfresco/bootstrap/alfrescoAuthorityStore.xml</prop>
</props>
</list>
</property>
</bean>
<bean id="systemBootstrap" parent="systemStoreImporter">
<property name="bootstrapViews">
<list>
<props>
<prop key="path">/</prop>
<prop key="location">alfresco/bootstrap/descriptor.xml</prop>
</props>
</list>
</property>
</bean>
<bean id="versionBootstrap" parent="versionStoreImporter">
<property name="bootstrapViews">
<list>
<props>
<prop key="path">/</prop>
<prop key="location">alfresco/bootstrap/lightWeightVersionStore.xml</prop>
</props>
</list>
</property>
</bean>
<bean id="spacesArchiveBootstrap" parent="spacesArchiveStoreImporter">
<property name="bootstrapViews">
<list>
<props>
<prop key="path">/</prop>
<prop key="location">alfresco/bootstrap/spacesArchive.xml</prop>
</props>
</list>
</property>
</bean>
<bean id="spacesBootstrap" parent="spacesStoreImporter">
<property name="bootstrapViews">
<list>
<props>
<prop key="path">/</prop>
<prop key="location">alfresco/bootstrap/spaces.xml</prop>
<prop key="messages">alfresco/messages/bootstrap-spaces</prop>
</props>
<props>
<prop key="path">/</prop>
<prop key="location">alfresco/bootstrap/system.xml</prop>
</props>
<props>
<prop key="path">/</prop>
<prop key="location">alfresco/bootstrap/categories.xml</prop>
</props>
<props>
<prop key="path">/${spaces.company_home.childname}/${spaces.guest_home.childname}</prop>
<prop key="location">alfresco/bootstrap/tutorial.xml</prop>
<prop key="messages">alfresco/messages/bootstrap-tutorial</prop>
</props>
<props>
<prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.templates.childname}</prop>
<prop key="location">alfresco/templates/software_engineering_project.xml</prop>
<prop key="messages">alfresco/messages/bootstrap-templates</prop>
</props>
<props>
<prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.templates.content.childname}</prop>
<prop key="location">alfresco/templates/content_template_examples.xml</prop>
</props>
<props>
<prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.templates.email.childname}</prop>
<prop key="location">alfresco/templates/email_templates.acp</prop>
</props>
<props>
<prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.templates.rss.childname}</prop>
<prop key="location">alfresco/templates/rss_templates.acp</prop>
</props>
<props>
<prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.scripts.childname}</prop>
<prop key="location">alfresco/bootstrap/example_javascripts.acp</prop>
</props>
</list>
</property>
</bean>
<bean id="workflowBootstrap" parent="workflowDeployer">
<property name="workflowDefinitions">
<list>
<props>
<prop key="engineId">jbpm</prop>
<prop key="location">alfresco/workflow/review_processdefinition.xml</prop>
<prop key="mimetype">text/xml</prop>
<prop key="redeploy">false</prop>
</props>
<props>
<prop key="engineId">jbpm</prop>
<prop key="location">alfresco/workflow/adhoc_processdefinition.xml</prop>
<prop key="mimetype">text/xml</prop>
<prop key="redeploy">false</prop>
</props>
</list>
</property>
<property name="models">
<list>
<value>alfresco/workflow/workflowModel.xml</value>
<value>alfresco/workflow/customWorkflowModel.xml</value>
</list>
</property>
<property name="labels">
<list>
<value>alfresco/workflow/workflow-messages</value>
<value>alfresco/workflow/customWorkflow-messages</value>
</list>
</property>
</bean>
<!– Bootstrap any extensions –>
<import resource="classpath*:alfresco/extension/bootstrap/*-context.xml" />
<!– Descriptor Service –>
<bean id="descriptorComponent" class="org.alfresco.repo.descriptor.DescriptorServiceImpl">
<property name="descriptor">
<value>classpath:alfresco/version.properties</value>
</property>
<property name="systemBootstrap">
<ref bean="systemBootstrap"/>
</property>
<property name="transactionService">
<ref bean="transactionComponent"/>
</property>
<property name="namespaceService">
<ref bean="namespaceService"/>
</property>
<property name="nodeService">
<ref bean="nodeService"/>
</property>
<property name="searchService">
<ref bean="searchService"/>
</property>
</bean>
<!– This component ensures that patches get applied on startup –>
<bean id="patchExecuter" class="org.alfresco.repo.admin.patch.PatchExecuter">
<property name="patchService">
<ref bean="PatchService" />
</property>
</bean>
<!– CIFS Server –>
<bean id="fileServerConfiguration" class="org.alfresco.filesys.server.config.ServerConfiguration" parent="fileServerConfigurationBase">
<property name="configService">
<ref bean="fileServersConfigService"/>
</property>
</bean>
<bean id="cifsServer" class="org.alfresco.filesys.CIFSServer" destroy-method="stopServer">
<constructor-arg>
<ref local="fileServerConfiguration"/>
</constructor-arg>
</bean>
<!– FTP Server –>
<bean id="ftpServer" class="org.alfresco.filesys.FTPServer" destroy-method="stopServer">
<constructor-arg>
<ref local="fileServerConfiguration"/>
</constructor-arg>
</bean>
<!– Startup Message –>
<bean id="startupLog" class="org.alfresco.repo.descriptor.DescriptorStartupLog">
<property name="descriptorService">
<ref local="descriptorComponent"/>
</property>
</bean>
</beans>