0% found this document useful (0 votes)
187 views

Using The Javascript Console For Development and Administration

This document summarizes Florian Maul's presentation on using the Javascript Console for Alfresco development and administration. The Javascript Console allows developers to [1] easily test and develop Javascript code for Alfresco by providing features like code completion, loading scripts from the repository, and importing code. It also [2] provides access to the Alfresco Javascript API and custom functions to help with tasks like recursively iterating nodes, logging output, and more. The presentation demonstrates how to [3] use the Javascript Console for tasks like managing users, tagging content, reporting on permissions, and creating webscripts.

Uploaded by

pmrreddy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
187 views

Using The Javascript Console For Development and Administration

This document summarizes Florian Maul's presentation on using the Javascript Console for Alfresco development and administration. The Javascript Console allows developers to [1] easily test and develop Javascript code for Alfresco by providing features like code completion, loading scripts from the repository, and importing code. It also [2] provides access to the Alfresco Javascript API and custom functions to help with tasks like recursively iterating nodes, logging output, and more. The presentation demonstrates how to [3] use the Javascript Console for tasks like managing users, tagging content, reporting on permissions, and creating webscripts.

Uploaded by

pmrreddy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 26

Using the Javascript Console for

development and administration


Florian Maul (fme AG)
About me
Florian Maul
Senior Consultant at fme AG (Platinum Partner)
Many years of experience with Alfresco
Winner of the Dashlet Challenge 2011
Gallery Plus Dashlet
Opensource Contributor to Share Extras
and other Alfresco Extensions
Android CMIS Browser (2010)



@fmaul http://alfresco.fme.de/

Agenda
Overview and History
while(t < 50) {
Javascript Console Features
Demos
}
Alfresco APIs
What kinds of APIs are there?
Java Foundation API
Javascript API & Javascript Services
CMIS

Where can I use Javascript in Alfresco:
Webscripts developed in Javascript
Javascript run by Actions (Run Script Action)
Javascript attached to Tasks & Events in Workflows


But how to develop Javascript code?
Webscripts
Develop in Eclipse
ANT build script to copy changes & reload the webscripts
Run the webscript manually in the browser

Data Dictionary Scripts
upload a script to Data Dictionary
run Script Action
watch errors in the Alfresco Log file (ScriptLogger=DEBUG)
fix bugs and iterate

It takes too long to test Javascript code and fix bugs.

Meet the Javascript Console
Meet the Javascript Console
Mike Farman (Director Product
Management Alfresco):
I really like the stuff youve been
doing, my favourite is the
JavaScript console, its the first
add-on I always install!

(c) fme AG - #215124
7
Javascript Console Features
Component for Share Admin Console to develop, execute
and test Javascript code
Features
Full access to the Alfresco JavaScript API
Specifiy a context (space, document, user)
Simple code completion
Load & save scripts from the repository
Import Javascript code from the Alfresco classpath
Develop freemarker templates (since v0.5)

Javascript Cnosole Milestones
End of 2010
Need to develop and execute Javascript code for a project sparked
development of the first prototype
First internal versions with a single standalone page in Share
April 2011:
Contact with Will Abson
refactoring and integration into the admin console of Alfresco 3.4
May 2011:
First checkin into the Share-Extras project and first public release
Nov 2011:
Version 0.4 with basic code completion
June 2012:
Version 0.5 with freemarker editor


Download & Installation
Download from http://code.google.com/p/share-extras/




3.4.x or 4.0.x AMP or JAR versions




The repo.jar must be copied to tomcat/webapps/alfresco/WEB-
INF/lib and the share.jar to tomcat/webapps/share/WEB-INF/lib
Basic Demo
Overview
Poor mans Nodebrowser
Selecting the file or folder to work with
Select the space variable from a
directory chooser:

Open any document in the
Javascript Console from the
document library:

Custom Javascript functions
print()
Prints a String, Number or an Array to the console output window
Formats output for ScriptNode, NodeRef, ScriptUser, ScriptGroup,
ChildeAssociationRef objects
logger.log()
Logs normaly to the debug log but also performs a print()
Recommended for any output! (works outside of JS Console)
logger.setLevel()
Sets the log4j log level
logger.setLevel(org.alfresco.repo.jscript.ScriptLogger, DEBUG);
space variable can be changed from code
e.g. space = space.parent;
On the next script run, the new value will be used.
Custom Javascript functions
recurse()
Special function to iterate over a tree of nodes:

recurse(space, function(node) {
if (node.name.toLowerCase().indexOf("alfresco") >= 0) {
print("adding tag alfresco to " +node.displayPath+"/"+node.name);
node.addTag("alfresco");
}
});

If no function is given it returns the nodes as an array:

var allNodes = recurse(space);
print(allNodes);

Source: javascript-console-repo/config/de/fme/jsconsole/jsconsole-
post-roll-script.js

Demo User Management
Creating users

var p = people.createPerson(username,
firstname, lastname,
email, password, true);

p.properties["cm:location"] = location;
p.properties["cm:jobtitle"] = jobtitle;

and attaching avatars

for each (imageNode in space.children) {
var user = people.getPerson(name);
user.createAssociation(
imageNode, "cm:avatar");
}

Code completion
Use with Ctrl+Space
Javascript operations
for, if, while,
All javascript root objects
search, siteService,
Custom javascript extensions are included as well
All methods 1 level below the root objects
search.findNode(), siteService.getSite(),
Some variables are completed as ScriptNode objects:
space
document
companyhome
*node or *Node

Demo - Tagging
Automatically tag content

Spreadsheet metadata import
How does it work?
Alfresco Repository / Webscripts
Browser / Javascript / YUI / Codemirror
Execute Webscript
Input Output
print(), recurse(), logger
eval() / Java-Webscript
<imports>
Error handling
Javascript code
Freemarker template
space / document
Print / log output
Freemarker output
Error messages
JSON POST
Demo - permission reporting
All parent permission
while (document) {
print(document);
print(document.fullPermissions);
print("");
document = document.parent;
}

All direct permissions
recurse(space, function(node) {
for each(permission in node.fullPermissions) {
if (/;DIRECT$/.test(permission)) {
logger.log(node.displayPath + "/" + node.name + ";" + permission);
}
}
});

Demo - Creating Webscripts
The new version 0.5 makes
it easy to create webscripts:
Write a controller javascript
using logger.log output
Create a freemarker
template
See HTML or Text output
Test different URL
arguments and different
users

DEMO

Keyboard shortcuts
Currently supported
Ctrl + Enter Execute Script
Ctrl + Space Code Completion
Ctrl + Z Undo
Ctrl + Y Redo

Upcomming (0.5.1)
Ctrl + Shift + F Format javascript code (beautify.js)
Ctrl + / Comment / uncomment with //

Access spring beans / unlock documents
LockService is not accessible though the Javascript API
Example to unlock a document:

var ctx = Packages.org.springframework.
web.context.ContextLoader.getCurrentWebApplicationContext();

var lockService = ctx.getBean("lockService");

lockService.unlock(document.nodeRef);

may look like a hack but is perfectly valid Alfresco JS
It only works in Javascript stored in the Classpath
(not in the Data Dictionary)
Also very useful to test your own Beans written in Java
Javascript Puzzlers Alfresco Edition
What do these two do?
node.properties["cm:name"] = "textfile.txt";
node.name = "textfile.txt";

Comparing ScriptNode nodeRefs:
node1.nodeRef.equals(node2.nodeRef)
node1.nodeRef == node2.nodeRef
" " +node1.nodeRef == " " + node2.nodeRef

Batch processing
Examples
Set all documents to inherit permissions
Disable automatic versioning for all documents

Small batches can run in the Javascript Console
Single transaction (up to about 10000 nodes)
I install the Javascript Console on every production system

Large batches currently only possible using Java
Batch processing (updates for >100000 nodes)
How to find the nodes? Search or recursion?
Split in smaller batches with own transaction
How to make use of multithreading?

Developer Tools Menu
If you like the Javascript Console, you might also like










http://code.google.com/p/fme-alfresco-extensions/wiki/DeveloperToolsMenu
Questions?

You might also like