As part of our recent TSG Hack Day, a couple employees set out to prove out how Salesforce could leverage a separate content management system to act as a file store for Salesforce content that had already been through an approval workflow (and therefore was essentially read only to the users). Since Alfresco is an open source CMS, and TSG has had success deploying it in the cloud, it was a natural choice to complement Salesforce.
The sample workflow that we came up with was the idea of pushing a contract in the system once it had been approved. In this case, the user would create a contract record within the system, and (in our case) upload a PDF that represents the actual contract. The contract would get routed in a workflow to approvers, and would end up in a read only state in the system, where no one would make any further updates. To expedite development, we leveraged a trigger on the creation of an attachment on the contract to set a flag on the contract record denoting that the contract has an attachment. At this point, we took advantage of some custom APEX code and a small amount of Visualforce code to set up a component that allowed the user to manually push content to Alfresco. Once the content was in Alfresco, the contract record would have a custom attribute set to preserve the unique identifier to the document in Alfresco, which would allow the user to click on a separate action button to retrieve the content.
The integration with Alfresco allowed us to take advantage of some of the work that TSG has recently done with our mobile offerings. As part of the HPI mobile effort, OpenContent’s REST endpoints have been updated and allowed us to take advantage of authentication and retrieval of content in a very easy manner (and it was even embedded into Alfresco, so we didn’t even have to start up a separate instance of OpenContent!). Unfortunately, we had a slightly more different time leveraging Alfresco’s native REST API to upload content (our biggest mistake was not involving one of our Alfresco developers!), and were not able to finish the upload portion (which was set up to parse the response from Alfresco and store the ID).
Our endeavor gave us a chance to play around with integrating a separate system in with Salesforce, and we found that the integration could happen rather seamlessly with a minimal amount of coding. We are looking to further investigating this integration to see what else we can leverage to make Salesforce even more powerful in the future.