Introducing the User Script Console

The Alfresco JavaScript Console is really popular among Alfresco administrators and developers to easy automate tasks around Alfresco. This leads to more and more requests from users to have their problems fixed and tasks automated and keeps developers and administrators from more important tasks.

With the new User Script Console extension for Alfresco Share the users finally can access the powerful JavaScript API directly by themselves without needing a specialist. It integrates as a page in a Share site:

Of cause it can not be expected of end users to know JavaScript or the Alfresco APIs right away. That is why the User Script Console slowly introduces the users to the capabilities of the API using a Gamification approach. Users start out as novices and can gain experience (XP) while using the JavaScript API.

User “Experience”

API access gradually changes with increased experience:

  • 0 XP = No Alfresco API access
  • 10 XP = Read properties and permissions, only document root object
  • 1000 XP = Add comments, add Tags to any node
  • 5000 XP = Write properties and add tags, Site API, full ScriptNode api
  • 10000 XP = Groups API (Add/Remove people from sites)
  • 20000 XP = Full Alfresco Javascript API
  • 50000 XP = runas admin, access beans using Packages.java

A new user starting out as a novice must first write a syntactically correct JavaScript using given examples. He receives 1 XP for each successful transaction and will soon gain access to some parts of the Alfreco API (XP of 10 or more). Commands above his experience level are not available:

Examples

To help users find their way around, there are examples in the “Examples” menu that are adjusted to the users experience level. It starts out with a list of simple JavaScript examples for “for”-loops and “if”-clauses.

Badges

Additionally users can earn badges for special achievements (each earns 500 XP):

  • Unlocker: Unlocked more than 10 documents that were locked by the Sharepoint API.
  • Tagmaster: Added 100 different tags to documents
  • Ninja: more than 10 “hidden” property changes with behaviourfilter.disableBehaviour()
  • Shapeshifter: More than 100 calls of the transformDocument/transformImage
  • JsGuru: Run 10 consecutive scripts that all JsLint without any warnings
  • Loadtester: Your last 10 scripts have all run longer than 30s
  • MrClean: Purge the archive store (nodeArchiveService)
  • Reporter: Generation of more than 10000 lines of print output
  • Bouncer: Removed at least 100 people from groups/sites
  • Hacker: Usage of Packages.java to access Spring beans directly

The new User Script Console will help to empower the savvy user to automate Alfresco in an unprecedented way and lets administrators focus on more important tasks like backup and restore of the Alfresco repository.

Available today for Alfresco 4.1.

Integrating Freemind documents into Alfresco

I’m currently trying out the open source document management system Alfresco. I anticipate Alfresco becoming a widely used open source product in the field of enterprise document management much like typo3 is currently for web CMSes. To get to know it I decided to run it on a debian server and throw some of my documents on it. The CIFS (a integrated samba server) makes it easy to access the files over the windows network while still being versioned and access controlled in the repository.

The main reason I’m writing this post though is, that I’d like to share how I integrated freemind mindmaps into Alfresco. The freemind mindmaps are .mm-files which can already be stored in alfresco but are "unknown binary" files. What we have to do is tell alfresco what .mm-files are by defining them as mime-types. The Alfresco wiki describes how to add a mime-type so I did this accordingly:


<alfresco-config area="mimetype-map">
<config condition="Mimetype Map" evaluator="string-compare">
  <mimetypes>
    <mimetype display="Freemind"
      mimetype="application/x-freemind">
      <extension>mm</extension>
    </mimetype>
  </mimetypes>
</config>
</alfresco-config>    

The result of including the preceding xml files as tomcat\shared\classes\alfresco\mimetype\mimetype-custom-extensions.xml is that the new content type Freemind appears in the Add Content Dialog.

alfresco_freemind_1_small.png

The next step would be adding the icons for the freemind documents. To achieve this you simply have to copy a file named mm.gif into the alfresco/images/filetypes (16×16 pixels) and alfresco/images/filetypes32 (32×32 pixels) folder in the web application. The new file is automatically recognized after a restart of the web-app and the new icon is available.

alfresco_freemind_2_small.png 

Then I thought it would be nifty to have a preview of the mindmap right in the web interface. Fortunately freemind provides a java applet and a flash viewer. I decided to use the flash viewer and found the alfresco templates as a extremely easily way to integrate custom display logic. For my viewer I would only have to include the html code to open the flash object in a freemaker template. Alfresco provides a template directory within the data dictionary (a space in the repository) where I included the following code in the file freemind.fts:


<#if document?exists>
<div id="flashcontent" style="height: 500px;">
         Flash plugin or Javascript are turned off.
         Activate both  and reload to view the mindmap
</div>
<script type="text/javascript" src="/alfresco/custom/freemind/flashobject.js"> </script>
<script type="text/javascript">
        var fo = new FlashObject("/alfresco/custom/freemind/visorFreemind.swf", "visorFreeMind", "100%", "100%", 6, "#9999ff");
        fo.addParam("quality", "high");
        fo.addParam("bgcolor", "#ffffff");
        fo.addVariable("openUrl", "_blank");
        fo.addVariable("initLoadFile", "/alfresco${document.url}");
        fo.addVariable("startCollapsedToLevel","5");
        fo.write("flashcontent");
    </script>
<#else>
   No document found!
</#if>

This is basically the code that freemind generates when exporting to flash. More information on templates can also be found in the alfresco wiki in the Template Guide. The template can be easily edited right from the web interface:

alfresco_freemind_5_small.png

This templates refers to a javascript and the flash viewer which I stored in the web application under alfresco/custom/freemind. The fixed height of 500px, which I included, is not the best to solution but is needed to prevent the window from collapsing to a very small area.

Using this template as a custom view in the details page of the mindmap file, which we added earlier, produces this interactive preview of the mindmap:

alfresco_freemind_4_small.png

Using "Preview in Template" the viewer can also be used without the menu on the right:

alfresco_freemind_6_small.png

This little customization has took me not much longer than writing this post which is pretty amazing. Most if the impressiveness of the result is due to the ready-to-use functionality of the freemind flash viewer though ;-)

Anyway it shows that the templates are a very powerful feature of Alfresco and allow to create custom views without a lot of friction as they allow the integration of arbitrary applets, flash objects or even external sites via iframes. For now I’m pretty happy with alfresco and look into deploying it more solidly on my home-server and look into backup options.

Our online pharmacy is the perfect resource for people to get their drugs without any hassles or awkwardness. buy cialis We work hard to make sure you save money every time you shop with us. buy levitrabuy soma At our online store, you pay less and get more. buy viagra