As we transition to the new Hyland Community, some post links may be temporarily disrupted as we finalize redirects. We apologize for the inconvenience and are working to resolve this as quickly as possible. Details.
Company Home/SomeFolder/SomeOtherFolderEtc/SomeFileName.txt Company Home/SomeFolder/SomeOtherFolderEtc/SomeFileName.xml Company Home/SomeFolder/SomeOtherFolderEtc/SomeFileName.eps Company Home/SomeFolder/SomeOtherFolderEtc/SomeFileName.ai Company Home/SomeFolder/SomeOtherFolderEtc/SomeFileName.log Company Home/SomeFolder/SomeOtherFolderEtc/SomeFileName.etc
<task-node name="Create"> <task name="myCompanywf:createTask" swimlane="artist" /> <transition name="Complete Job" to="Approved"> <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript"> <script> <expression> var completedHome = companyhome.childByNamePath("Completed"); var completeDate = new Date(); var jobSpace = myCompanywf_orderNum + "_" + completeDate.getFullYear() + utils.pad(completeDate.getMonth()+1,2) + utils.pad(completeDate.getDate(),2); jobSpace += "_" + utils.pad(completeDate.getHours(),2) + utils.pad(completeDate.getMinutes(),2) + utils.pad(completeDate.getSeconds(),2); var completedSpace = completedHome.createFolder(jobSpace); var doneFileContents = jobSpace + "\r\n"; doneFileContents += myCompanywf_orderNum + ".log\r\n"; doneFileContents += myCompanywf_orderNum + "_job.txt\r\n"; for (var i = 0; i < bpm_package.children.length; i++) { bpm_package.children[i].move(completedSpace); doneFileContents += bpm_package.children[i].name + "\r\n"; } var jobFile = companyhome.childByNamePath(myCompanywf_studio + "/" + myCompanywf_team + "/" + myCompanywf_orderNum + "_job.txt"); jobFile.move(completedSpace); var completeLine = completeDate.getFullYear() + "-" + utils.pad(completeDate.getMonth()+1,2) + "-" + utils.pad(completeDate.getDate(),2); completeLine += " " + utils.pad(completeDate.getHours(),2) + ":" + utils.pad(completeDate.getMinutes(),2) + ":" + utils.pad(completeDate.getSeconds(),2); completeLine += " : Artist Completed Advert "; completeLine += "(" + myCompanywf_orderNum; completeLine += ", " + person.properties.userName; completeLine += ", " + myCompanywf_studio; completeLine += ", " + myCompanywf_team + ")\r\n"; var completeFileName = myCompanywf_orderNum + ".log"; var completeFile = completedHome.childByNamePath(completeFileName); if (completeFile == null) { completeFile = completedHome.createFile(completeFileName); } if (completeFile != null) { completeFile.content += completeLine; } completeFile.move(completedSpace); var triggerFileName = myCompanywf_orderNum + "_done.txt"; var triggerFile = completedSpace.childByNamePath(triggerFileName); if (triggerFile == null) { triggerFile = completedHome.createFile(triggerFileName); } if (triggerFile != null) { triggerFile.content += doneFileContents; } triggerFile.move(completedSpace); pinlog.info(person.properties.userName + " completed " + myCompanywf_orderNum + " : Into folder Completed/" + jobSpace); </expression> </script> </action> </transition> </task-node>
import java.io.FileOutputStream; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.alfresco.model.ContentModel; import org.alfresco.repo.action.ParameterDefinitionImpl; import org.alfresco.repo.action.executer.ActionExecuterAbstractBase; import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.ParameterDefinition; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class MyCompanyImportExportExecuter extends ActionExecuterAbstractBase { /** CVS tagging information. */ @SuppressWarnings("unused") private final String __version = "@(#) $Id: MyCompanyImportExportExecuter.java,v 1.1 2008/02/20 10:16:27 jimc Exp $"; /** log4j logger handle. */ private static final Log logger = LogFactory.getLog(MyCompanyImportExportExecuter.class); public static final String PARAM_TAGS = "tags"; public static final String PARAM_WORKFLOW_NAME = "workflowName"; public static final String PARAM_END_START_TASK = "endStartTask"; public static final String PARAM_START_TASK_TRANSITION = "startTaskTransition"; public static final String HOME_MIGRATION = "Migration"; /** The node service */ private NodeService nodeService; /** The content service */ private ContentService contentService; /** * On startup creates a NodeService handle. * * @param nodeService */ public void setNodeService(NodeService nodeService) { logger.debug("setNodeService"); this.nodeService = nodeService; } /** * On startup creates a ContentService handle. * * @param contentService */ public void setContentService(ContentService contentService) { logger.debug("setContentService"); this.contentService = contentService; } @Override protected void addParameterDefinitions(List<ParameterDefinition> paramList) { // Specify the parameters paramList.add(new ParameterDefinitionImpl(PARAM_TAGS, DataTypeDefinition.TEXT, true, getParamDisplayLabel(PARAM_TAGS))); paramList.add(new ParameterDefinitionImpl(PARAM_WORKFLOW_NAME, DataTypeDefinition.TEXT, false, getParamDisplayLabel(PARAM_WORKFLOW_NAME))); paramList.add(new ParameterDefinitionImpl(PARAM_END_START_TASK, DataTypeDefinition.BOOLEAN, false, getParamDisplayLabel(PARAM_END_START_TASK))); paramList.add(new ParameterDefinitionImpl(PARAM_START_TASK_TRANSITION, DataTypeDefinition.TEXT, false, getParamDisplayLabel(PARAM_START_TASK_TRANSITION))); // Comfort boot message. logger.info("*** Initialising MyCompany Import and Export action. ***"); System.out.println("*** Initialising MyCompany Import and Export action. ***"); } /** * Find company home location. * @param storeRef * @return */ private NodeRef getCompanyHomeNode(StoreRef storeRef) { NodeRef rootNodeRef = nodeService.getRootNode(storeRef); List<ChildAssociationRef> rootChildren = nodeService.getChildAssocs(rootNodeRef); int nbRootChildren = rootChildren.size(); int iRootChild; NodeRef rootChild = null; NodeRef companyHomeNode = null; String nodeId; for (iRootChild = 0; iRootChild < nbRootChildren; iRootChild++) { rootChild = rootChildren.get(iRootChild).getChildRef(); nodeId = rootChild.getId(); Serializable prop = nodeService.getProperty(rootChild, ContentModel.PROP_NAME); logger.debug(prop.toString() + " = " + nodeId); if ("Company Home".equals(prop.toString()) || HOME_MIGRATION.equals(prop.toString())) { companyHomeNode = rootChild; break; } } if (companyHomeNode == null) { logger.error("Company home is null"); } else { logger.debug("Company home = " + rootChild.toString()); } return companyHomeNode; } /** * Export a single file to the file system. * @param folder the files will be in this folder on Alfresco. * @param epsFileName the file name of the eps file to export. * @param xmlFileName the file name of the xml data (this may be changed for export). */ private void exportSingleTarFile(StoreRef storeRef, String folder, String epsFileName, String xmlFileName) { logger.info("Exporting file: " + folder + "/" + epsFileName + " using xml data in " + folder + "/" + xmlFileName); // Walk down folder tree to the files. NodeRef companyHomeNode = getCompanyHomeNode(storeRef); NodeRef completedRef = nodeService.getChildByName(companyHomeNode, ContentModel.ASSOC_CONTAINS, "Completed"); NodeRef folderRef = nodeService.getChildByName(completedRef, ContentModel.ASSOC_CONTAINS, folder); NodeRef epsFileRef = nodeService.getChildByName(folderRef, ContentModel.ASSOC_CONTAINS, epsFileName); NodeRef xmlFileRef = nodeService.getChildByName(folderRef, ContentModel.ASSOC_CONTAINS, xmlFileName); // Try and get their content? ContentReader xmlContentsNode = this.contentService.getReader(xmlFileRef, ContentModel.PROP_CONTENT); ContentReader epsContentsNode = this.contentService.getReader(epsFileRef, ContentModel.PROP_CONTENT); if (xmlContentsNode != null && epsContentsNode != null) { // Write the XML file. try { FileOutputStream out = new FileOutputStream("C:\\foo.xml"); xmlContentsNode.getContent(out); out.close(); } catch (IOException e) { logger.error("Unable to write XML file: " + e.getMessage()); return; } // Write the EPS file. try { FileOutputStream out = new FileOutputStream("C:\\foo.eps"); epsContentsNode.getContent(out); out.close(); } catch (IOException e) { logger.error("Unable to write EPS file: " + e.getMessage()); return; } // Tar the file. } } /** * Called by Alfresco to perform the action. * @param ruleAction details of the action. * @param actionedUponNodeRef The associated file. */ @Override protected void executeImpl(Action ruleAction, NodeRef actionedUponNodeRef) { logger.info("—– Starting EXPORT Action."); ContentReader readerCurNode = this.contentService.getReader(actionedUponNodeRef, ContentModel.PROP_CONTENT); if (readerCurNode != null) { // Get the file list from the current node. String contentString = readerCurNode.getContentString(); String[] fileList = contentString.split("\\n"); ArrayList<String> filesToExport = new ArrayList<String>(); String xmlFile = null; String folder = null; // Parse actioned file for list of files to export. for (int x = 0; x < fileList.length; x++) { fileList[x] = fileList[x].trim(); if (x == 0) { logger.debug("Folder to export is : " + fileList[x]); folder = fileList[x]; } else { if (fileList[x].endsWith(".eps")) { filesToExport.add(fileList[x]); } else if (fileList[x].endsWith(".xml")) { xmlFile = fileList[x]; } else { logger.debug("Not exporting this file : " + fileList[x]); } } } StoreRef storeRef = actionedUponNodeRef.getStoreRef(); // Export each eps file using the data within the XML file. for (int x = 0; x < filesToExport.size(); x++) { exportSingleTarFile(storeRef, folder, filesToExport.get(x), xmlFile); } } logger.info("—– Action complete."); } }