diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml
index 3b05142894..73adaab087 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml
@@ -389,6 +389,7 @@
+
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java
index f0be02b99a..062929f92f 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java
@@ -38,6 +38,8 @@ import java.util.Set;
import static org.alfresco.module.org_alfresco_module_rm.record.RecordUtils.generateRecordIdentifier;
import org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase;
+import org.alfresco.module.org_alfresco_module_rm.record.RecordServiceImpl;
+import org.alfresco.module.org_alfresco_module_rm.util.TransactionalResourceHelper;
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
@@ -72,13 +74,24 @@ public class DeclareRecordAction extends RMActionExecuterAbstractBase
/** check mandatory properties */
private boolean checkMandatoryPropertiesEnabled = true;
+ /** transactional resource helper */
+ private TransactionalResourceHelper transactionalResourceHelper;
+
/**
* @param checkMandatoryPropertiesEnabled true if check mandatory properties is enabled, false otherwise
*/
public void setCheckMandatoryPropertiesEnabled(boolean checkMandatoryPropertiesEnabled)
{
- this.checkMandatoryPropertiesEnabled = checkMandatoryPropertiesEnabled;
- }
+ this.checkMandatoryPropertiesEnabled = checkMandatoryPropertiesEnabled;
+ }
+
+ /**
+ * @param transactionalResourceHelper
+ */
+ public void setTransactionalResourceHelper(TransactionalResourceHelper transactionalResourceHelper)
+ {
+ this.transactionalResourceHelper = transactionalResourceHelper;
+ }
/**
* @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action, org.alfresco.service.cmr.repository.NodeRef)
@@ -92,8 +105,12 @@ public class DeclareRecordAction extends RMActionExecuterAbstractBase
{
if (!getRecordService().isDeclared(actionedUponNodeRef))
{
- // make sure the record identifier is set
- generateRecordIdentifier(getNodeService(), getIdentifierService(), actionedUponNodeRef);
+ // if the record is newly created make sure the record identifier is set before completing the record
+ Set newRecords = transactionalResourceHelper.getSet(RecordServiceImpl.KEY_NEW_RECORDS);
+ if(newRecords.contains(actionedUponNodeRef))
+ {
+ generateRecordIdentifier(getNodeService(), getIdentifierService(), actionedUponNodeRef);
+ }
List missingProperties = new ArrayList(5);
// Aspect not already defined - check mandatory properties then add
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java
index 80fb8b2a0b..37ba895c11 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java
@@ -274,8 +274,6 @@ public class RecordFolderType extends AbstractDisposableItem
throw new IntegrityException(I18NUtil.getMessage(MSG_CANNOT_CREATE_RECORD_FOLDER_CHILD, nodeService.getType(child)), null);
}
- generateRecordIdentifier(nodeService, identifierService, child);
-
behaviourFilter.disableBehaviour();
try
{
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java
index 3dc7c4ce99..a1517015ff 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java
@@ -196,18 +196,6 @@ public class RecordsManagementContainerType extends BaseBehaviourBean
setIdenifierProperty(child);
}
}
- else
- {
- NodeRef parentRef = childAssocRef.getParentRef();
- QName parentType = nodeService.getType(parentRef);
- boolean isContentSubType = dictionaryService.isSubClass(childType, ContentModel.TYPE_CONTENT);
- boolean isUnfiledRecordContainer = parentType.equals(RecordsManagementModel.TYPE_UNFILED_RECORD_CONTAINER);
- boolean isUnfiledRecordFolder = parentType.equals(RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER);
- if (isContentSubType && (isUnfiledRecordContainer || isUnfiledRecordFolder))
- {
- generateRecordIdentifier(nodeService, identifierService, child);
- }
- }
}
return null;
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java
index bbf8449374..4af92d28b5 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java
@@ -132,6 +132,7 @@ public class RecordServiceImpl extends BaseBehaviourBean
implements RecordService,
RecordsManagementModel,
RecordsManagementCustomModel,
+ NodeServicePolicies.OnAddAspectPolicy,
NodeServicePolicies.OnCreateChildAssociationPolicy,
NodeServicePolicies.OnRemoveAspectPolicy,
NodeServicePolicies.OnUpdatePropertiesPolicy,
@@ -421,6 +422,24 @@ public class RecordServiceImpl extends BaseBehaviourBean
onRecordDeclarationDelegate = policyComponent.registerClassPolicy(OnRecordDeclaration.class);
}
+ /**
+ * @see org.alfresco.repo.node.NodeServicePolicies.OnAddAspectPolicy#onAddAspect(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName)
+ */
+ @Override
+ @Behaviour
+ (
+ kind = BehaviourKind.CLASS,
+ type = "rma:record",
+ notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT
+ )
+ public void onAddAspect(NodeRef nodeRef, QName aspect)
+ {
+ if (nodeService.exists(nodeRef) && nodeService.hasAspect(nodeRef, ASPECT_RECORD))
+ {
+ generateRecordIdentifier(nodeService, identifierService, nodeRef);
+ }
+ }
+
/**
* @see org.alfresco.repo.node.NodeServicePolicies.OnRemoveAspectPolicy#onRemoveAspect(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName)
*/