Jul 09 2013
Jul 09

If views of my presentations on SlideShare are any indication, a whole lot of you are interested in integrating Drupal and Alfresco. Despite the fact that the presentation is four years old, it consistently makes the “most viewed” list out of my uploads. If you are considering Drupal but need something a bit more document-centric to serve up your files as part of that Drupal site, take a look:

With over 12,000 views, it is safe to say there is definitely something to the combination of Alfresco and Drupal.

Another apparent classic is:

Which is kind of scary given its age and brevity. I think the popularity of this is due to the seemingly inexhaustible demand for “getting started” resources for new Alfresco developers.

This one has similar info, but with more details, and is probably a better choice for developers trying to get an extremely high-level overview:

The CMIS API is now the preferred way to interact with the Alfresco repository remotely, and many people use this presentation to get a quick overview:

In fact, I’ll have a CMIS powerhouse panel on Tech Talk Live tomorrow (July 10, 2013). So if you are just getting started with CMIS, please join us.

If you like CMIS but you don’t want to fool around with your own server, you can use Alfresco in the Cloud. This deck gives a CMIS overview and discusses the Alfresco API at a high-level with links to sample code and screencasts:

Thanks to everyone who has made use of these presentations!

Sep 07 2012
Sep 07

Back when I was at Optaros and CMIS was first showing up in Alfresco in draft form, we developed the Drupal CMIS module. We had a few customers interested in combining the two technologies but I think we were a few years ahead of our time. Now it seems I come across people wanting to combine the two nearly every week in IRC, the forums, or in internal discussions. Alfresco has contributed additional modules for Drupal integration. And multiple partners have full-fledged solutions or service offerings built on top of both.

Optaros has changed their web site a bit since those days and a couple of screencasts I recorded back then have been removed. Because so many people are still interested in this topic, I’ve posted them on YouTube, with Optaros’ permission (thanks!).

So, if you want to see some examples of Drupal and Alfresco working together, here are a couple of screencasts from the archive…

Drupal Plus Alfresco (Original post, 4/7/2009)

[embedded content]

Open Atrium Plus Alfresco (Original post, 10/13/2009)

[embedded content]

Drupal, Open Atrium, the CMIS modules, and Alfresco have all progressed since then, but the general gist is the same.

Thanks to Optaros for letting me make these available!

Jun 28 2012
Jun 28

Alfresco Activiti Workflow Automation

Posted on: Thursday, June 28th 2012 by Victor

Last time I blogged about how to start a workflow explicitly via webscript. In our Canopy solution, if desired, the workflow can be started automatically upon a document submission from Drupal to Alfresco as well. The document upload is usually done via CMIS Alfresco. This approach will enable the workflow automation between CMIS client such as Drupal, Joomla etc and Alfresco.

How to set up a rule inside Alfresco Share

Please check out an example of rule for workflow.

How to start a workflow programmatically

Please install the following script run_js.wf in Alfresco's /Data Dictionary/scripts. The script will start Alfresco's out of box Review and Approve workflow when the new document is uploaded to Alfresco. The highlights are:

  • Read a custom property "canopy:reviewer" via document.properties.The value of "canopy:reviewer" should be set by CMIS client upon document upload.
  • Set the bpm:assingee attribute of the workflow to the reviewer with JavaScript API people.getPerson() so that the reviewer will process the workflow accordingly.


var workflow = actions.create("start-workflow");
workflow.parameters.workflowName = "activiti$activitiReview";
workflow.parameters["bpm:workflowDescription"] = "Please assign approvers for "+document.name;
var reviewer=document.properties["canopy:reviewer"];
logger.debug("canopy:reviewer="+reviewer);
workflow.parameters['bpm:assignee']=people.getPerson(reviewer);
workflow.parameters["sendEMailNotifications"] = false;
workflow.execute(document);

Drupal document upload via CMIS

Drupal CMIS module can be enhanced to support the custom property for document upload.

Apr 13 2012
kso
Apr 13

New Feature in Canopy - Taxonomy

Posted on: Friday, April 13th 2012 by Ken So

Do you know what Canopy is? If not click here to find out more.

Canopy by Appnovation integrates a world class Open Source document repository application with the highly scalable and popular Open Source website development tool allowing for the best of both worlds. Alfresco compliments Drupal by providing a feature rich UI for managing web assets, as well as providing full document and knowledge management for entire organizations. Drupal as the frontend provides Alfresco with a highly flexible presentation layer that can be used to build websites that would be more or less impossible with Alfresco alone.

We have been expanding Canopy's features and today I will be talking about categorisation.

Both Drupal and Alfresco are great individually with categorisation, but together they're even better. We needed a way to sync taxonomy terms for Drupal and Categories in Alfresco. We achieve this by providing RESTful API between the applications so that each will know when there are new terms to be added in the system.

In Drupal, we provided hooks to pre-existing taxonomy functions by adding submit handlers that, when triggered, will send the data to a custom Alfresco webscript.

Here is a small snapshot of the code

Drupal

/**
 * Implementation of hook_form_alter
 */
function alfresco_taxonomy_form_alter(&$form, &$form_state, $form_id) {
  switch ($form_id) {
    case 'taxonomy_form_vocabulary':
    $form['#submit'][] = 'alfresco_taxonomy_form_vocabulary';
    break;
  case 'taxonomy_vocabulary_confirm_delete':
    $form['#submit'][] = 'alfresco_taxonomy_vocabulary_confirm_delete_submit';
    break;
  case 'taxonomy_form_term':
    $form['#submit'][] = 'alfresco_taxonomy_form_term';
    break;
  }
}
/**
 * Alfresco taxonomy submit function
 */
function alfresco_taxonomy_form_term(&$form, $form_state = array()) {
  module_load_include('inc', 'alfresco_connector', 'includes/alfresco_connector.alfresco_api');
  module_load_include('inc', 'alfresco_connector', 'includes/alfresco_connector.helpers');
  $values = $form_state['values'];
  $alfresco_endpoint = variable_get(AFRESCO_CONNECTOR_ENDPOINT_KEY, '');
  $alf_ticket = alfresco_connector__alfresco_api_get_api_ticket();
  if(empty($alf_ticket)) {
    return NULL;
  }
  switch ($values['op']) {
    case 'Save':
      $path = ALFRESCO_TAXONOMY_CATEGORY_URL;
      break;
  }
  $url = $alfresco_endpoint . $path . "?alf_ticket=$alf_ticket";
  $boundary = 'A0sFSD';
  $method = 'POST';
  $headers = array(
    "Content-Type" => "multipart/form-data; boundary=$boundary",
  );
  $params = array(
    'tagName' => $values['name'],
  );
  $data = wl_alfresco_connector__helpers_multipart_encode($boundary, $params);
  $response = drupal_http_request($url, $headers, $method, $data);
}

Alfresco

// See if the tag already exists
tagExists = taxonomyCheckTagExist(store, tagName);
if (!tagExists) {
  tag = taggingService.createTag(store, tagName);
  if (tag == null) {
    model.result = FAILURE_MESSAGE;
  }
} else {
  tag = tagName;
  model.response = ERROR_1000_DUPLICATE;
}
// Put the created tag into the model
model.tag = tag;
model.tagExists = (tagExists) ? "TRUE" : "FALSE";
model.tags = taggingService.getTags(store);

This just one of the neat features that we are working on with Appnovation's Canopy. We are always updating and creating new features that will benefit our clients.

Happy Coding!

Mar 22 2012
Mar 22

A hands-on learning tool for CMIS with Alfresco

Posted on: Thursday, March 22nd 2012 by Victor

In our Canopy solution, one of the core features is the ability to synchronize the content and its metadata change upon request between Drupal and Alfresco. A typical use case is called R-R (Repository to Repository): publishing content from one repository to another. A common scenario is publishing content from Alfresco directly to Drupal systems for publication to the Intra/Internet. The solution needs to provide two essential functions:

  • be able to provide bidirectional document and metatadata read and write between Drupal and Alfresco. It is vital to support custom content type from Drupal, as well as Alfresco custom content model.
  • be able to receive change notification between Drupal and Alfresco so that each document can be made aware of what changes (document, metadata upload, update and deletion) have happened in other repositories.

    In order for support bidirectional data synchronization, one option is to employ CMIS Alfresco, as I love learning by hands on, my intuition is: why not try it to see what it can accomplish first. cmislib is developed by Jeff Potts (Chief Community Officer at Alfresco) and comes in handy. The beauty of cmislib is a developer can try all sorts of things from command line or favorite IDE and Python is just that elegant to read and write. Even you program in other languages such as PHP/Ruby/Java, the CMIS concepts such as Repository,Document,Folder,Query etc are about the same. Open Chemistry has listed CMIS client for Java, PHP, Python and .NET.

    I have written some demo code based on an Alfresco out of the box installation.The source code is located at bitbucket. "git clone [email protected]:pythonrocks/alfresco.git" will get the source code cmis.py.

    Alfresco Version: 4.0 Enterprise
    Python: 2.7+
    Python add on: cmislib, cmislibalf

    The code above will use the out of box demo data is installed as part of : /Sites/swsdp/documentLibrary/Agency Files/Contracts/
    As you can play with the above source code, you can learn the following:

  • how to create a CMISClient with login credential. For example, cmisClient = cmislib.CmisClient('http://localhost:8080/alfresco/s/cmis', 'admin', 'admin') will get us the entry point for Alfresco Repository.
  • how to get the folder and navigate among its children in CMIS
  • how to retrieve the document and its properties (metadata) in CMIS.
  • how to check out and check in the document in CMIS.
  • how to create and query custom content in CMIS. This is nontrivial for integrating with Alfresco's custom content model. It enables Alfresco 's custom content with automated discovery. The custom content mdoel uses what Jeff has shown in Custom Content type. This method can enable not only Drupal integration without Java code changes due to metadata change, also it can be used for any other Repository to Repository (R2R) integration as long as one of the Repository is CMIS compliant. To name but a few, Drupal to Oracle UCM, Joomla to Alfresco or Oracle UCM.
  • how to perform search on custom content in CMIS.

    To install cmislib is pretty easy with "pip install cmislib". If you don't have pip installed, "sudo apt-get install pip" will install it on debian/ubuntu linux, otherwise please consult PIP install

    cmislib References

  • Mar 22 2012
    Mar 22

    Hands on CMIS with Alfresco

    Posted on: Thursday, March 22nd 2012 by Victor

    Canopy Solution

    In our Canopy solution, one of the core features is the ability to synchronize the content and its metadata change upon request between Drupal and Alfresco. A typical use case is called R-R (Repository to Repository): publishing content from one repository to another. A common scenario is publishing content from Alfresco directly to Drupal systems for publication to the Intra/Internet. In case of performance of document retrieval is a requirement, a solution needs to provide two essential functions:

    • Be able to provide bidirectional document/metatadata synchronization between Drupal and Alfresco. It is vital to support custom content type from Drupal, as well as Alfresco custom content model.
    • Be able to receive change notification between Drupal and Alfresco so that each document can be made aware of what changes (document, metadata upload, update and deletion) have happened in other repositories.

    CMIS

    In order for support bidirectional data synchronization, one option is to employ CMIS Alfresco, as I love learning by hands on, my intuition is: why not try it to see what it can accomplish first. cmislib is developed by Jeff Potts (Chief Community Officer at Alfresco) and comes in handy. The beauty of cmislib is a developer can try all sorts of things from command line or favorite IDE and Python is just that elegant to read and write. Even you program in other languages such as PHP/Ruby/Java, the CMIS concepts such as Repository,Document,Folder,Query etc are about the same. Open Chemistry has listed CMIS client for Java, PHP, Python and .NET.

    Demo code

    I have written some demo code based on an Alfresco out of the box installation.The source code is located at github. "git clone [email protected]:victordude/alfresco.git" will get the source code cmis.py.

    Alfresco Version: 4.0 Enterprise
    Python: 2.7+
    Python CMIS libs: cmislib, cmislibalf

    The code above will use the out of box demo data is installed as part of : /Sites/swsdp/documentLibrary/Agency Files/Contracts/
    As you can play with the above source code, you can learn the following:

  • how to create a CMISClient with login credential. For example, cmisClient = cmislib.CmisClient('http://localhost:8080/alfresco/s/cmis', 'admin', 'admin') will get us the entry point for Alfresco Repository.
  • how to get the folder and navigate among its children in CMIS
  • how to retrieve the document and its properties (metadata) in CMIS.
  • how to check out and check in the document in CMIS.
  • how to create and query custom content in CMIS. This is nontrivial for integrating with Alfresco's custom content model. It enables Alfresco 's custom content with automated discovery. The custom content mdoel uses what Jeff has shown in Custom Content type. This method can enable not only Drupal integration without Java code changes due to metadata change, also it can be used for any other Repository to Repository (R2R) integration as long as one of the Repository is CMIS compliant. To name but a few, Drupal to Oracle UCM, Joomla to Alfresco or Oracle UCM.
  • how to perform search on custom content in CMIS.
  • how to add/remove contributor role for a group calld "demogrp" for /demo folder.

    To install cmislib is pretty easy with "pip install cmislib". If you don't have pip installed, "sudo apt-get install pip" will install it on debian/ubuntu linux, otherwise please consult PIP install

    References

  • Feb 14 2012
    Feb 14

    Requirements and Planning Resources

    Posted on: Tuesday, February 14th 2012 by Sonja Farrell

    OmniGraffle UX Template by Konigi
    http://konigi.com/tools/omnigraffle-ux-template
    This is an awesome template if you use OmniGraffle for your wireframes or requirements documents like I do - page templates are created for almost every process or deliverable, from site maps and mental models to persona. If you are nitpicky like me, it also saves your time and heartache trying to make sure all your page elements line up perfectly so that he document is just as lovely to look at as the wireframes.

    GraffleTopia
    http://graffletopia.com/
    Again, another resource for OmniGraffle users. Download all sorts of different OmniGraffle stencils here, from architecture to networks to UI. Some of my favorites are:

    WeeNudge
    http://weenudge.com/
    WeeNudge is a great place to find resources that will help you guide and educate your client during the design process. It's full of topics that address oft-occurring issues (such as providing non-helpful feedback), why they happen and what can be done to fix them. Each topic also contains links to articles online that can help bolster your opinion and ideas, or that you can send to the client for a quick read if you are trying to sway their opinion.

    Patterntap and other pattern websites can not only provide inspiration during the design phase, but can also help you make sure you are implementing best practices.

    More (Mobile) Patterns
    http://www.mobiledesignpatterngallery.com/mobile-patterns.php
    This website by Theresa Neil contains patterns for mobile apps or websites. There is also a section for "anti-patterns", which can help you identify a pitfall in your design, or insure that you never fall into one.

    Oct 06 2011
    Oct 06

    Drupal Alfresco Integrated Solution - Canopy

    Posted on: Thursday, October 6th 2011 by Isabel da Costa

    Canopy logo

    Canopy seamlessly integrates the power of Drupal and Alfresco delivering a web and intranet platform that can handle both web and document management requirements. It combines the flexibility of Drupal as a front end web development platform with the power of Alfresco as an Enterprise content management and workflow system.

    On September 14th we, along with our partners Acquia and Alfresco, conducted a webinar introducing Canopy by Appnovation: a Drupal/Alfresco Integrated Solution. The webinar recording is below featuring speakers James Heise (Appnovation), Bryan House (Acquia) and Peter Monks (Alfresco) and covers:

    An introduction to WCM
    An introduction to Acquia
    An introduction to Alfresco
    Advantages to integrating Drupal and Alfresco
    A live demo of several common use cases where this integration provides an elegant and simple solution for:

    • From a single, integrated interface edit content and initiate workflows
    • Easily update your web or intranet with batch loading HTML files and documents into Alfresco and publishing them in Drupal
    • Track and manage content better by uploading documents inside a Drupal intranet and having them be stored inside of Alfresco

    An explanation of the mechanics behind Canopy

    Here is the full recording of the webinar

    For more information on Canopy contact us today!

    Oct 03 2011
    kso
    Oct 03

    Alfresco Google Doc Integration in Canopy (Drupal-Alfresco)

    Posted on: Monday, October 3rd 2011 by Ken So

    For the current version of Canopy, a Drupal-Alfresco integration, has been extended to also integrate with Google Docs. It is important in some cases to share document but want to avoid the hassle of registering an account in Alfresco to view/edit one document. One way could be integrating the document to be edited in Google docs.

    Configuration Notes
    The two configuration files that require modification are:
    1. Share Properties Files
    /tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml
    make sure you have set to true
    2. Google Docs Properties
    /tomcat/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/googledocs/default/googledocs.properties
    You will need to set the account info and the application to be true.

    After that, you will be able to add an aspect to any document called "google-editable" and will be able to checkout documents onto Google for Editing. You can also set a custom rule that will automatically do this whenever a document is uploaded.

    If you have any questions, please drop a comment down below.

    Apr 27 2011
    Apr 27

    Check out this screencast we just posted outlining the advantages of Drupal/Alfresco integration! The example we use in the video is the job applicant tracking system we use here at Appnovation and how easy and efficient it makes our work flow and organization. This is the first in a series of screencasts we will be posting showing you examples of how we can help your business!

    read more

    Jul 07 2010
    Jul 07

    Alfresco wants to be a best-in-class repository for you to build your content-centric applications on top of. Interest in NOSQL repositories seems to be growing, with many large well-known sites choosing non-relational back-ends. Are Alfresco (and, more generally, nearly all ECM and WCM vendors) on a collision course with NOSQL?

    First, let’s look at what Alfresco’s been up to lately. Over the last year or so, Alfresco has been shifting to a “we’re for developers” strategy in several ways:

    • Repositioning their Web Content Management offering not as a non-technical end-user tool, but as a tool for web application developers
    • Backing off of their mission to squash Microsoft SharePoint, positioning Alfresco Share instead as “good enough” collaboration. (Remember John Newton’s slide showing Microsoft as the Death Star and Alfresco as the Millenium Falcon? I think Han Solo has decided to take the fight elsewhere.)
    • Making Web Scripts, Surf, and Web Studio part of the Spring Framework.
    • Investing heavily in the Content Management Interoperability Services (CMIS) standard. The investment is far-reaching–Alfresco is an active participant in the OASIS specification itself, has historically been first-to-market with their CMIS implementation, and has multiple participants in CMIS-related open source projects such as Apache Chemistry.

    They’ve also been making changes to the core product to make it more scalable (“Internet-scalable” is the stated goal). At a high level, they are disaggregating major Alfresco sub-systems so they can be scaled independently and in some cases removing bottlenecks present in the core infrastructure. Here are a few examples. Some of these are in progress and others are still on the roadmap:

    • Migrating away from Hibernate, which Alfresco Engineers say is currently a limiting factor
    • Switching from “Lucene for everything” to “Lucene for full-text and SQL for metadata search”
    • Making Lucene a separate search server process (presumably clusterable)
    • Making OpenOffice, which is used for document transformations, clusterable
    • Hiring Tom Baeyens (JBoss jBPM founder) and starting the Activiti BPMN project (one of their goals is “cloud scalability from the ground, up”)

    So for Alfresco it is all about being an internet-scalable repository that is standards-compliant and has a rich toolset that makes it easy for you to use Alfresco as the back-end of your content-centric applications. Hold that thought for a few minutes while we turn our attention to NOSQL for a moment. Then, like a great rug, I’ll tie the whole room together.

    NOSQL Stores

    A NOSQL (“Not Only SQL”) store is a repository that does not use a relational database for persistence. There are many different flavors (document-oriented, key-value, tabular), and a number of different implementations. I’ll refer mostly to MongoDB and CouchDB in this post, which are two examples of document-oriented stores. In general, NOSQL stores are:

    • Schema-less. Need to add an “author” field to your “article”? Just add it–it’s as easy as setting a property value. The repository doesn’t care that the other articles in your repository don’t have an author field. The repository doesn’t know what an “article” is, for that matter.
    • Eventually consistent instead of guaranteed consistent. At some point, all replicas in a given cluster will be fully up-to-date. If a replica can’t get up-to-date, it will remove itself from the cluster.
    • Easily replicate-able. It’s very easy to instantiate new server nodes and replicate data between them and, in some cases, to horizontally partition the same database across multiple physical nodes (“sharding”).
    • Extremely scalable. These repositories are built for horizontal scaling so you can add as many nodes as you need. See the previous two points.

    NOSQL repositories are used in some extremely large implementations (Digg, Facebook, Twitter, Reddit, Shutterfly, Etsy, Foursquare, etc.) for a variety of purposes. But it’s important to note that you don’t have to be a Facebook or a Twitter to realize benefits from this type of back-end. And, although the examples I’ve listed are all consumer-facing, huge-volume web sites, traditional companies are already using these technologies in-house. I should also note that for some of these projects, scaling down is just as important as scaling up–the CouchDB founders talk about running Couch repositories in browsers, cell phones, or other devices.

    If you don’t believe this has application inside the firewall, go back in time to the explosive growth of Lotus Notes and Lotus Domino. The Lotus Notes NSF store has similar characteristics to document-centric NOSQL repositories. In fact, Damien Katz, the founder of CouchDB, used to work for Iris Associates, the creators of Lotus Notes. One of the reasons Notes took off was that business users could create form-based applications without involving IT or DBAs. Notes servers could also replicate with each other which made data highly-available, even on networks with high latency and/or low bandwidth between server nodes.

    Alfresco & NOSQL

    Unlike a full ECM platform like Alfresco, NOSQL repositories are just that–repositories. Like a relational database, there are client tools, API’s, and drivers to manage the data in a NOSQL repository and perform administrative tasks, but it’s up to you to build the business application around it. Setting up a standalone NOSQL repository for a business user and telling them to start managing their content would be like sticking them in front of MySQL and doing the same. But business apps with NOSQL back-ends are being built. For ECM, projects are already underway that integrate existing platforms with these repositories (See the DrupalCon presentation, “MongoDB – Humongous Drupal“, for one example) and entirely new CMS apps have been built specifically to take advantage of NOSQL repositories.

    What about Alfresco? People are using Alfresco and NOSQL repositories together already. Peter Monks, together with others, has created a couple of open source projects that extend Alfresco WCM’s deployment mechanism to use CouchDB and MongoDB as endpoints (here and here).

    I recently finished up a project for a Metaversant client in which we used Alfresco DM to create, tag, secure, and route content for approval. Once approved, some custom Java actions deploy metadata to MongoDB and files to buckets on Amazon S3. The front-end presentation tier then queries MongoDB for content chunks and metadata and serves up files directly from Amazon S3 or Amazon’s CloudFront CDN as necessary.

    In these examples, Alfresco is essentially being used as a front-end to the NOSQL repository. This gives you the scalability and replication features on the Content Delivery tier with workflow, check-in/check-out, an explicit content model, tagging, versioning, and other typical content management features on the Content Management tier.

    But why shouldn’t the Content Management tier benefit from the scalability and replication capabilities of a NOSQL repository? And why can’t a NOSQL repository have an end-user focused user interface with integrated workflow, a form service, and other traditional DM/CMS/WCM functionality? It should, it can and they will. NOSQL-native CMS apps will be developed (some already exist). And existing CMS’s will evolve to take advantage of NOSQL back-ends in some form or fashion, similar to the Drupal-on-Mongo example cited earlier.

    What does this mean for Alfresco and ECM architecture in general?

    Where does that leave Alfresco? It seems their positioning as a developer-focused, “Internet-scale” repository ultimately leads to them competing directly against NOSQL repositories for certain types of applications. The challenge for Alfresco and other ECM players is whether or not they can achieve the kind of scale and replication capabilities NOSQL repositories offer today before NOSQL can catch up with a new breed of Content Management solutions built expressly for a world in which content is everywhere, user and data volumes are huge and unpredictable, and servers come and go automatically as needed to keep up with demand.

    If Alfresco and the overwhelming majority of the rest of today’s CMS vendors are able to meet that challenge with their current relational-backed stores, NOSQL simply becomes an implementation choice for CMS vendors. If, however, it turns out that being backed by a NOSQL repository is a requirement for a modern, Internet-scale CMS, we may see a whole new line-up of players in the CMS space before long.

    What do you think? Does the fundamental architecture prevalent in today’s CMS offerings have what it takes to manage the web content in an increasingly cloud-based world? Will we see an explosion of NOSQL-native CMS applications and, if so, will those displace today’s relational vendors or will the two live side-by-side, potentially with buyers not even knowing or caring what choice the vendor has made with regard to how the underlying data is persisted?

    Mar 22 2010
    Mar 22

    A lot of people have been asking for the files we used to integrate Alfresco CMIS with Drupal Open Atrium (See ecmarchitect.com blog post). I’ve happily mailed those to whomever asked. I’ve had the intention of testing them with the latest version, cleaning them up, and putting somewhere more appropriate like the Open Atrium feature server, or at the very least, Google Code or GitHub. But it hasn’t happened yet so I figured I’d make them available here and appeal to the Community to give them a good home.

    The zip includes a readme file with (very) rough install/config directions.

    Good luck!

    Feb 16 2010
    Feb 16

    Fellow Optaros colleague, Chris Fuller, and I want to present on the Alfresco-Drupal integration at Drupalcon in San Francisco (April 19-21). If you’re interested in Alfresco, Drupal, and CMIS (any or all of the above), please vote for our session.

    Oct 13 2009
    Oct 13

    UPDATE: Screencast now lives here:

    [embedded content]

    I recorded a quick screencast of a simple integration we did to show Open Atrium leveraging Alfresco as a formal document repository via CMIS. This leverages the CMIS Alfresco module we developed and released on Drupal.org.

    As I point out in the screencast, there’s not much to the integration from a technical standpoint. Open Atrium is Drupal and the CMIS module already has a CMIS repository browser. So, all we had to do was expose the module as a “feature”, which is something Open Atrium uses to bundle modules together that create a given chunk of functionality.

    Readers familiar with Alfresco Share will instantly recognize the Open Atrium concepts. Instead of “sites” Atrium uses “groups”. Instead of “pages” or “tools”, Atrium uses “features”. The overall purpose, self-provisioned team-based collaboration, is the same and many of the tools/features are the same (blog, calendar, member directory). I’m not advocating using one over the other–as usual, what works best for you depends on a lot of factors. I just thought Atrium provided a nice way to show yet another example of Drupal and Alfresco together (post).

    Sep 15 2009
    Sep 15

    People want intranets that are fun and easy to use, full of compelling content relevant to their job, and enabled with social and community features to help them discover connections with other teams, projects, and colleagues. IT wants something that’s lightweight and flexible enough to respond to the needs of the business that won’t cost a fortune.

    That’s why Drupal + Alfresco is a great combination for things like intranets like the one Optaros built for Activision and why we had a record-breaking turnout for the Drupal + Alfresco webinar Chris Fuller and I did today. Thanks to everyone who came and asked good questions. I’ve posted the slides. Alfresco recorded the webinar so they’ll make it available soon, I’m sure. When that happens, I’ll update the post with a link. Until then, enjoy the slides.

    [UPDATE: Fixed the slideshare link (thanks, David!) and added the links to the webinar recording below]

    1. Streaming recording link:
    https://alfresco.webex.com/alfresco/lsr.php?AT=pb&SP=TC&rID=42774837&act=pb&rKey=b44130d69cc9ec5f

    2. Download recording link:
    https://alfresco.webex.com/alfresco/ldr.php?AT=dw&SP=TC&rID=42774837&act=pf&rKey=c50049ac82e1220a

    Apr 28 2009
    Apr 28

    I’ll be in Chicago tomorrow for the Alfresco Meetup. I’ll be speaking during the Barcamp on Alfresco and Drupal integration with CMIS (module, screencast). I’ll also have the Alfresco-Django integration running on my laptop. I may not have time to show Alfresco-Django during my slot, but I’ll be happy to stick around and do informal demos and talk about either integration if you’re interested because I’d like your feedback on it.

    Apr 20 2009
    Apr 20

    People often need to build a custom user interface on top of the Alfresco repository and I see a lot of people asking general questions about how to do it. There are lots of options to consider. Here are four options for creating a user interface on top of Alfresco, at a high level:

    Option 1: Use your favorite programming language and/or framework to talk to Alfresco via REST or Web Services. PHP? Python? Java? Flex? Whatever, it’s up to you. The REST API is nice because if you can’t find a URL that does what you need it to out-of-the-box, you can always roll-your-own with the web script framework. This option offers the most flexibility and creative freedom, but of course you might end up building constructs or components that you may have gotten “for free” from a higher-level framework. Optaros‘ streamlined web client, DoCASU, built on Ext-JS, is one freely-available example of a custom UI on top of Alfresco but there are others.

    Option 2: Use Alfresco’s Surf framework. Alfresco’s Surf framework is just that–it’s a framework. Don’t confuse it with Alfresco Share which is a team-centric collaboration client built on top of Surf. And, don’t assume that just because a piece of functionality is in Share it is available to you in the lower-level Surf framework. You may have to do some extra work to get some of the cool stuff in Share to work in your pure Surf app. Also realize that Surf is brand new and still maturing. You’ll be quickly disappointed if you hold it to the same standard as a more widely-used, well-established framework like Seam or Django. Surf is a good option for quick, Alfresco-centric solutions, especially if you think you might want to leverage Alfresco’s browser-based site assembly tool, Web Studio, at some point in the future. (See Do-it-yourself Alfresco Surf Code Camp).

    Option 3: Customize the Alfresco “Explorer” web client. There are varying degrees to which you can customize the web client. On one end of the spectrum you’ve got Freemarker “presentation templates” followed closely by XML configuration. On the other end of the spectrum you’ve got more elaborate enhancements you can make using JavaServer Faces (JSF). Customizing the Alfresco Explorer web client should only be considered if you can keep your enhancements to an absolute minimum because:

    1. Alfresco is moving away from JSF in favor of Surf-based clients. The Explorer client will continue to be around, but I wouldn’t expect major efforts to be focused on that client going forward.
    2. JSF-based customizations of the web client can be time-consuming and potentially complex, particularly if you are new to JSF.
    3. For most solutions, you’ll get more customer satisfaction bang out of your coding buck by building a purpose-built, eye-catching, UI designed with your specific use cases in mind than you will by starting with the general-purpose web client and extending from there.

    Option 4: Use a portal, community, or WCM platform. This includes PHP-based projects like Drupal (Drupal CMIS Screencast) or Joomla as well as Java-based projects like Liferay and JBoss Portal. This is a good option if you have requirements that match up well with the built-in (or easily added-on) capabilities of those platforms.

    It’s worth talking about Java portal servers specifically. I think people are struggling a bit to find The Best Way to integrate Alfresco with a portal. Of course there probably is no single approach that will fit every situation but I think Alfresco (with help from the community) could do more to provide best practices.

    Here are the options you have when integrating with a portal:

    Portal Option 1: Configure Alfresco to be the replacement JSR-170 repository for the portal. This option seems like more trouble than it is worth. If all you need is what you can get out of JSR-170, you might as well use the already-integrated Jackrabbit repository that most open source portals ship with these days unless you have good reasons not to. I’m open to having my mind changed on this one, but it seems like if you want to use Alfresco and a portal, you’ve got bigger plans that are probably going to require custom portlets anyway.

    Portal Option 2: Run Alfresco and the portal in the same JVM (post). This is NOT recommended if you need to scale beyond a small departmental solution and, really, I think with the de-coupling of the web script engine we should consider this one deprecated at this point.

    Portal Option 3: Run the Alfresco web script engine and the portal in the same JVM. Like the previous option, this gives you the ability to write web scripts that are wrapped in a portlet but it cuts down on the size of the web app significantly and it frees up your portal to scale independently of the Alfresco repository tier. It’s a fast development cycle once you get it set up. But I haven’t seen great instructions for setting it up yet. Alfresco should document this on their wiki if they are going to support this pattern.

    Portal Option 4: Write your own portlets that make services calls. This is the “cleanest” approach because it treats Alfresco like any other back-end you might want to integrate with from the portal. You write custom portlets and have them talk to Alfresco via REST or SOAP. You’ll have to decide how you want to handle authentication with Alfresco.

    What about CMIS?

    CMIS fits under the “Option 1: Use your favorite programming language” and “Portal Option 4: Write your own portlets” categories. You can make CMIS calls to Alfresco using both REST and SOAP from your own custom code, portlet or otherwise. The nice thing about CMIS is that you can use it to abstract the underlying repository so that (in theory) your front-end code will work with different CMIS-compliant back-ends. Just realize that CMIS isn’t a fully-ratified standard yet and although a CMIS implementation is in the Enterprise version of Alfresco, it isn’t clear to me whether or not you’d be supported if you had a problem. (The last response I saw on this specific question was a Peter Monks tweet saying, “I don’t think so”).

    The CMIS standard should be approved by the end-of-the-year and if Alfresco’s past performance is an indicator of the future, they’ll be the first to market with a production-ready, fully-supported CMIS implementation based on the final spec.

    Pick your poison

    Those are the options as I see them. Each one has trade-offs. Some may become more or less attractive over time as languages, frameworks, and the state of the art evolve. Ultimately, you’re going to have to evaluate which one fits your situation the best. You may have a hard time making a decision, but you have to admit that having to choose from several options is a nice problem to have.

    Apr 07 2009
    Apr 07

    7 Apr 2009

    Posted by jpotts

    UPDATE: Screencast now lives here:

    http://youtu.be/xYgUcpwnDYM

    I’ve created a new screencast that shows the Alfresco-Drupal CMIS integration in action over at Optaros Labs. The screencast shows content moving back-and-forth between Alfresco and Drupal, content being displayed in a Drupal site that lives in Alfresco, and a CMIS CQL query being executed against the Alfresco repository from Drupal.

    The Drupal CMIS module and the CMIS Alfresco module are available at Drupal.org.

    Feb 23 2009
    Feb 23

    23 Feb 2009

    Posted by jpotts

    As I’ve mentioned here and on twitter, we posted our Alfresco-Drupal integration on Drupal.org on Friday. I did a short write-up on it over at Optaros.com that gives the why and the what so I’ll not repeat it here.

    We split the integration into two modules: CMIS API has nothing Alfresco-specific–it just knows how to make RESTful CMIS calls to an arbitrary CMIS repository. The Alfresco CMIS module has the Alfresco-specific logic. You need both to make the integration work. If you’ve got Alfresco 3 (Enterprise or Labs) you don’t need to do anything to your Alfresco install to enable the integration because it’s already CMIS compliant.

    There is still a lot of work to do on this integration. For example, right now we’re only moving plain text content back-and-forth between Drupal and Alfresco. And we use a “single account” approach so that to Alfresco, every request appears to come from one user instead of passing through the authenticated Drupal credentials. But this is an imporant integration to us so I expect it to evolve substantially in the coming months.

    I got good feedback on the recent screencasts I put together for Share (Part 1, Part 2) so if I get some time this week I’ll do one that gives a quick tour of the Drupal integration.

    About Drupal Sun

    Drupal Sun is an Evolving Web project. It allows you to:

    • Do full-text search on all the articles in Drupal Planet (thanks to Apache Solr)
    • Facet based on tags, author, or feed
    • Flip through articles quickly (with j/k or arrow keys) to find what you're interested in
    • View the entire article text inline, or in the context of the site where it was created

    See the blog post at Evolving Web

    Evolving Web