diff --git a/product/ERP5Workflow/Document/Workflow.py b/product/ERP5Workflow/Document/Workflow.py index 3e0c8cdc9063ab2ccd9fb24dcfe9d47befef011d..c500b018f5c7d599ac40e366bbb996ad681d8087 100644 --- a/product/ERP5Workflow/Document/Workflow.py +++ b/product/ERP5Workflow/Document/Workflow.py @@ -747,14 +747,14 @@ class Workflow(IdAsReferenceMixin("workflow_", "prefix"), XMLObject): # workflow as XML, need to rename DC workflow's portal_type before comparison. workflow = SubElement(root, 'workflow', - attrib=dict(id=self.getReference(), + attrib=dict(reference=self.getReference(), portal_type=self.getPortalType())) for prop_id in sorted(workflow_prop_id_to_show): # In most case, we should not synchronize acquired properties if prop_id not in ('uid', 'workflow_history', 'id', 'portal_type',): if prop_id == 'permissions': - value = self.getProperty('workflow_managed_permission_list') + value = tuple(self.getProperty('workflow_managed_permission_list')) prop_type = self.getPropertyType('workflow_managed_permission_list') sub_object = SubElement(workflow, prop_id, attrib=dict(type=prop_type)) elif prop_id == 'initial_state': @@ -826,27 +826,37 @@ class Workflow(IdAsReferenceMixin("workflow_", "prefix"), XMLObject): local_group_node = SubElement(workflow, 'local_group', attrib=dict(id=group_role[0], type='tokens')) local_group_node.append(marshaller(group_role[1])) - + """ # 1. State as XML state_reference_list = [] state_list = self.objectValues(portal_type='State') # show reference instead of id - state_prop_id_to_show = ['reference', 'title', 'description', - 'categories_list', 'is_selected', 'state_permission_roles'] + state_prop_id_to_show = ['title', 'description', + 'transitions', 'permission_roles'] for sdef in state_list: state_reference_list.append(sdef.getReference()) states = SubElement(workflow, 'states', attrib=dict(state_list=str(state_reference_list), number_of_element=str(len(state_reference_list)))) for sdef in state_list: - state = SubElement(states, 'state', attrib=dict(reference=sdef.getReference())) + state = SubElement(states, 'state', attrib=dict(reference=sdef.getReference(), portal_type=sdef.getPortalType())) for property_id in sorted(state_prop_id_to_show): - property_value = sdef.getProperty(property_id) - if property_value is None: - # do not register if not defined. - continue + if property_id == 'permission_roles': + property_value = sdef.getProperty('state_permission_roles') + property_type = sdef.getPropertyType('state_permission_roles') + sub_object = SubElement(state, property_id, attrib=dict(type='string')) + elif property_id == 'transitions': + property_value = sdef.getDestinationValueList() + property_type = sdef.getPropertyType('categories_list') + sub_object = SubElement(state, property_id, attrib=dict(type='multiple selection')) else: - property_type = sdef.getPropertyType(property_id) - sub_object = SubElement(state, property_id, attrib=dict(type=property_type)) + property_value = sdef.getProperty(property_id) + if property_value is None: + # do not register if not defined. + continue + else: + property_type = sdef.getPropertyType(property_id) + sub_object = SubElement(state, property_id, attrib=dict(type=property_type)) + if property_type in ('object',): # We may have very long lines, so we should split property_value = aq_base(property_value) @@ -865,9 +875,16 @@ class Workflow(IdAsReferenceMixin("workflow_", "prefix"), XMLObject): else: raise ValueError("XMLExportImport failed, the data is undefined") elif property_type in ('lines', 'tokens',): - property_value = [word.decode('utf-8').encode('ascii','xmlcharrefreplace')\ - for word in property_value] - sub_object.append(marshaller(property_value)) + if property_id == 'transitions': + value_list = property_value + value_reference_list = [] + for value in value_list: + value_reference_list.append(value.getReference()) + sub_object.text = str(tuple(value_reference_list)) + else: + property_value = [word.decode('utf-8').encode('ascii','xmlcharrefreplace')\ + for word in property_value] + sub_object.append(marshaller(property_value)) elif property_type in ('text', 'string',): if type(property_value) in (tuple, list, dict): sub_object.text = str(property_value) @@ -875,7 +892,7 @@ class Workflow(IdAsReferenceMixin("workflow_", "prefix"), XMLObject): sub_object.text = unicode(escape(property_value), 'utf-8') elif property_type != 'None': sub_object.text = str(property_value) - + """ # 2. Transition as XML transition_reference_list = [] transition_list = self.objectValues(portal_type='Transition')