Enable “remote” root object in Alfresco 3.4+

From the 3.3 version Alfresco is overriding the Spring Surf webscripts container bean removing the remote definition.

This modification also affects number of custom webscripts developed with previous releases. Let see, how to enable “remote” root object in current Alfresco installation;

1. Find your “web-scripts-application-context.xml” configuration file in alfresco webapp, or in shared classes.
2. Search for “webscripts.container”, and update “map” contents like this:


      Repository
      
         
           
              
           

           
           

         
      
...

3. Restart Alfresco server
4. Check custom configuration with following code:

var serviceUrl = (args.service === null) ? "/api/repository" : args.service;
var conn = remote.connect("alfresco");
var result = conn.get(stringUtils.urlEncodeComponent(serviceUrl));

Just another, non-remote solution: Nathan McMinn: Calling Web Services from the Alfresco Javascript API

Alfresco uploader with Curl

Let see a simple shell script example to upload content to Alfresco repository using RESTful API.

Requires Curl package to be installed on your system. Just set ALFRESCO_SERVER, USERNAME and PASSWORD variables in script before start it…

#!/bin/bash
#
# Alfresco upload script with CURL by LouiSe@louise.hu
#
# Usage: alfresco_uploader.sh    
#
# ./alfresco_uploader.sh /tmp/some.pdf someSite documentLibrary someDir
#

ALFRESCO_SERVER=http://localhost:8080/alfresco
USERNAME="admin"
PASSWORD="admin"

#CURL_VERBOSE=-v
CURL_VERBOSE=-s
CURL_METHOD=POST
FILENAME=`basename $1`
MIMETYPE=`file --brief --mime-type $1`
CONTENTTYPE="cm:content"
UPLOAD_SERVICE_URL=${ALFRESCO_SERVER}/service/api/upload

echo "Uploading: ${FILENAME} ($MIMETYPE) to ${ALFRESCO_SERVER}"

curl ${CURL_VERBOSE} -k -X ${CURL_METHOD} \
    --user "${USERNAME}":"${PASSWORD}" \
    -F filedata=@$1 -F siteid="$2" -F containerid="$3" \
    -F uploaddirectory="$4" \ -F filename="${FILENAME}" \
    -F contenttype=${CONTENTTYPE} "${UPLOAD_SERVICE_URL}" \
    | grep 'description' | cut -d ':' -f 2 | tr -d '\"'

Example:

$./alfresco_uploader.sh ~/Desktop/advanced-workflow-article.pdf demo documentLibrary someDir
Uploading: advanced-workflow-article.pdf (application/pdf) to http://localhost:8080/alfresco
 File uploaded successfully
 

FreeMarker tutorial

I’ve found a very interesting post about an interface to learn FreeMarker templating engine: FreeMarker sketchbook

FreeMarker sketchbook is a Java WebStart application with following features:
– realtime output processing and view
– page and tag view
– variable editor
– help and examples included

FreeMarker is a template engine and language which we are using in the content management system of our new application. For next week I have been preparing training material for web-developers and something I was missing, was a simple way for them to learn and try out FreeMarker. The best way to learn is by playing and experiencing something yourself, so I created a simple java application with an editor and FreeMarker renderer.
At the same time this has been a good exercise for me as well, as this is my first Swing and Java™ Web Start application. After I received some feedback, added a few more features and cleaned-up the code, I will probably release it as open source project. I think this is a handy little application for those who want to create FreeMarker templates. If you want to try it out, just click on the button below. You should have Java 1.5 or higher installed.

You can find another solution on site www.freemarkertool.com which offers similar functionality:

These interfaces are useful to know Alfresco templating, and Web Script interface customization…

Link: FreeMarker Manual: Learning by example

Alfresco Web Script egyszerűen

A Web Script-ek, illetve a Web Script-ekkel megvalósított szolgáltatások az Alfresco rendszer erőforrásainak, elemeinek és tartalmainak egyszerű, HTTP protokoll fölötti publikációjára készültek. Ez a lehetőség a 2.1-es verziótól kezdve használható mind az Enterprise, mind a Community kiadásokban.

Kapcsolódó linkek:

  • Web Script-ek használata
  • Web Script minták
  • FreeMarker az Alfresco-n belül
  • Freemarker template minták
  • Alfresco JavaScript API
  • Alfresco JavaScript API minták
  • Hogyan készítsünk Web Script-et?

    Alapvetően két kötelező elemre lesz szükségünk, az egyik egy XML file, mely leírja és regisztrálhatóvá teszi magát a Web Script-et az Alfresco rendszer számára, míg a másik egy, az outputot előállító FreeMarker (FTL) nyelven leírt űrlap. Összetettebb, programozást is igénylő funkciók esetén használható az Alfresco JavaScript API-ja is, melyet egy harmadik file-ban (JS) lehet elhelyezni.

    Mintánkban egy “mywebscript” lesz a megvalósítandó funkció neve, így az ehhez kapcsolódó, kötelező formátumú elnevezések:

    1. Leíró (XML): mywebscript.get.desc.xml
    2. Output (FTL): mywebscript.get.html.ftl
    3. Program (JS): mywebscript.get.js

    Magyarázatra szorulhat az használt név-konvenció; a szeparátor minden esetben a “.”, az első mező (”mywebscript”) tartalmazza a Web Script nevét, a második a használt HTTP protokollt (”get”, “post”, etc.). Itt érdemes megjegyezni, hogy egy szolgáltatásnak lehet többféle protokollja is, de minden esetben csak azo(ko)n lehet megszólítani, amely(ek)re regisztrálva lett – esetunkben “GET”, az URL-ben átadott paramétereket fogja értelmezni, “POST”-ra hibajelzés fog adni.

    A harmadik Web Script specifikus paraméter (mely csak az XML és az FTL file-oknál szükséges) az XML-nél kötelezően “desc” mint descriptor (leíró). Az FTL file-oknál viszont azt határozza meg, hogy milyen formátumú lesz a válasz. Ezt a formátumot a Web szerver mint content-type fogja közölni a klienssel, azaz “html” esetében más lesz mint “xml”, “atom”, vagy “json” esetében. Ha több válasz típus is létezik az adott szolgáltatáshoz, az XML-ben lehet default értéket adni (a “format” paraméterrel), illetve a kérésben is lehet specifikálni a várt formátumot: “GET /my/mywebscript.json

    Installáció

    A saját készítésű Web Script-eket az Alfresco-n belül a “/Data Dictionary/Web Scripts Extensions/” space alatt kell elhelyezni, célszerűen egy könyvtárba rendezve. Legyen ez esetünkben a “my” könyvtár melyet az Alfresco WEB-es felületén is létrehozhatunk, sőt akár ZIP file-ként ugyanott a teljes csomagot (my/*) importálhatjuk is.

    A Web Script-es fejlesztések egyik legnagyobb előnye, hogy nem igényel deploy-t (eltekintve az első installációtól és regisztrációtól), azaz az FTL vagy a JS file-okat módosítva azonnal érvényre jutnak a változtatások. Ezért érdemes a WebDav, vagy a CIFS felületen keresztül dolgozni, így az editorból közvetlenül szerkeszthető és menthető a kód. Ezáltal az installációt is célszerű így elvégezni, kedvenc Finder-ünk vagy file-kezelő programunk segítségével. A WebDav-os mount-hoz (ezt MacOSX-en a Finder-ben az ALMA+K gombkombináció megnyomása után lehet átadni) a következő URL-t lehet használni: http://localhost:8080/alfresco/webdav

    Installáció után az Alfresco-n belül (repository) a következő struktúrának kell előállnia:

    Könyvtár: /Data Dictionary/Web Scripts Extensions/my/
    File: mywebscript.get.desc.xml
    File: mywebscript.get.html.ftl
    File: mywebscript.get.js

    Hogy az új szolgáltatásunk elérhető is legyen, szükség van még egy Alfresco-n belüli Regisztrációra is.

    Regisztráció

    Ha az Installáción túl vagyunk, az Alfresco rendszer tudtára kell adni, hogy új szolgáltatása lett. Ehhez a beépített Web Script regisztrációt kell használni, mely a következő címen érhető el: http://localhost:8080/alfresco/service/

    A “Refresh List of Web Scripts” gomb által indított folyamat rekurzívan felolvassa a szkriptek tárolására szolgáló helyi és repository-n belüli könyvtárakat, majd az ott található XML-ek alapján frissíti az elérhető Web Script-ek listáját – illetve jelzi, ha valamelyik szkript definíciójával probléma adódott.

    Sikeres regisztráció után a saját szkriptünk is meg fog jelenni a listában, ehhez érdemes a “Browse by Web Script Package” link-en kiválasztani a “my” csomagot. Az itt megjelenő listában összefoglaló látható az adott csomagban található szkriptekről és azok szolgáltatásairól, paramétereiről. Az “Id” sorban megjelenő linkre kattintva megtekinthetők a szkript összetevői és azok forrása is.

    Az elkészített és regisztrált szkriptet a következő címen lehet elérni: http://localhost:8080/alfresco/service/my/mywebscript

    A mywebscript példa forrása

    A fent ismertetett alapismeretekkel a következő szkriptet állítottam össze:

    mywebscript.get.desc.xml

    
    Simple form filling test
    Just a simple form filling test example
    /my/mywebscript
    argument
    user
    required
    
    

    mywebscript.get.html.ftl

    Logged in user: ${person.properties.userName}
    
    Name: Country: ${countryList}

    mywebscript.get.js

    var countryList = '';
    // here is the code to generate country list:
    countryList += '' + '\n';
    countryList += '' + '\n';
    // pass value to FTL
    model.countryList = '";
    

    ExtAlf – Alfresco by ExtJS

    ExtAlf demo in Safari

    I’m working on a new ExtJS wrapper (ExtAlf) – inspired by Opsoro – for Alfresco document and workflow management functions (by webscripts), like foldertree, document properties, preview, etc. This is not an Opsoro or FlexSpaces alternative, rather than a developer toolkit or a simple SDK what supports embedding Alfresco backend functionality into Web2.0/AJAX portals and frontends.

    Link: Collaborative Editor

    ExtAlf in Aptana

    Planned features:

    • – folder tree panel with actions (show folder contents, create new folder, move folder)
    • – document grid panel with actions (preview, download, show properties, delete, rename, move to other folder, upload new document)
    • – property grid with editing fields
    • – content preview with document transformation
    • – task list and management (close, create, forward)
    • – user interface localization
    • – limit root nodeRef to browse (just like Customer Portal engines)
    • – simple search
    • – simple discussion forum
    • – different grids to show document in a folder with custom properties
    • – integrated document editor for plain text, html and form contents

    Search dialog and results with auto-preview:
    ExtAlf Search

    Login dialog:

    ExtAlf Login window

    Floating panels on UI:
    ExtAlf Demo2 - floating panels

    Continue reading ExtAlf – Alfresco by ExtJS

    Simple browser for Alfresco

    I’ve made a simple content and hierarchy browser for Alfresco – using the WebScript interface – inspired by Dr. Q’s Dead Simple UI (just try the iPhone Navigator too). This is a really quick browser, but has got a quick search input on the left-top corner. That’s all, no more.

    Installation:
    1. Download louise-folder.zip to your local storage
    2. Login to Alfresco, navigate into Company Home/Data Dictionary/Web Scripts Extensions space and select Import from Administration Console menu
    3. Import the downloaded zip file (import script will unpack into the space)
    4. Load the service browser by link http://127.0.0.1:8080/alfresco/service/
    5. Click on Refresh list of Web Script button to register new service
    6. Start browsing on this startup URL: http://127.0.0.1:8080/alfresco/service/louise/folder/Company%20Home/

    Download: louise-folder.zip