« Back

Working with Admin Script Console

Company Blogs November 11, 2010 By Jeffrey Handa Staff

First of all, greetings to everyone in the Liferay Community. I've been lucky enough to meet many of you around the world over the last two years and I look forward to meeting more of you in the years to come.  As they say, time really does fly when you're having fun.  I can't belive it's taken me this long to writing my first post, and I hope it doesn't take another two years to write my next :)

Today I wanted to share a little bit of information about the new Liferay Administrator Script Console that's available through the Liferay Control Panel. I know that many of you have probably been wondering about this feature and perhaps thought that it wasn't working because the default script doesn't work as-is. Well last week I finally had a chance to spend a little bit of time playing around with it and I wanted to share what I learned with the community. 

First, a little background if you're not familiar with the script console or the scripting service. This feature was added in Liferay version 6.0. It was originally developed to support the execution of scripts from within the workflow module but it also provides a generic way to perform tasks that have no specific UI. A script console was also added tot he Server Administration portlet in the Control Panel to allow system administrators an easier way to execute scripts. The script engine supports the Beanshell, Javascript, Groovy, Python, and Ruby.

 

Some of the tasks that you might use the script console to perform might include user maintenance operations, bulk manipulations using the Liferay API to ensure consistency, or even system level operations.

 

To see a very simple example of the script console in action, navigate to the Control Panel → Server Administration → Script. Chance the script type to Groovy and modify the current code to look like the following: 

 

number = com.liferay.portal.service.UserLocalServiceUtil.getUsersCount();
out.println(number);

 

Click the execute button and check the console or the log for your output.  

 

Let's start with a slightly more complex example to retrieve some user information from the database.  To change things up a bit, let's start by setting the script type to Python.  There are some known issues with Liferay CE (6.0.5) and Liferay EE(6.0.10) that causes the script type to reset after every execution so be sure to double check the script type to make sure it's set correctly.  With the script type set to Python, execute the following code and watch the console:

from com.liferay.portal.service import UserLocalServiceUtil
maxNumber = UserLocalServiceUtil().getUsersCount()
from com.liferay.portal.model import User
users = UserLocalServiceUtil().getUsers(0,maxNumber)
for user in users:
print user.getFullName(), " -- ",user.getLastLoginDate()

That's all that's needed to run scripts and to access the Liferay service layouer.  However, there are some things to keep in mind when working with the script console: 

  • There is no undo
  • There is no preview
  • There is no permission checking
  • Scripts are executed synchronously, so be careful with scripts that might take a long time to execute. 
Threaded Replies Author Date
Ya know, I bet this would be highly useful... James Falkner November 11, 2010 8:27 PM
excellent! James Min November 11, 2010 10:37 PM
Actually, the scripting service was implemented... Michael C. Han November 12, 2010 10:14 AM
Yeah, I know it's been there, but during... James Falkner November 12, 2010 10:35 AM
Got it. Yeah, the scripting ide is something... Michael C. Han November 12, 2010 1:59 PM
Thank you, @Michael, @JF and @James. Both... Jonas Yuan November 15, 2010 8:09 AM
Thanks for the clarification Mike! Jeffrey Handa November 12, 2010 10:42 AM
I've been able to use the script console to add... Kevin Britton November 29, 2010 12:26 PM
This is a great tool, but here are two things I... Joseph Toman June 3, 2011 10:10 PM
Is there any way to "cron" that scripts? I... Moisés Belda June 23, 2011 4:24 AM
[...] Many of you are probably aware that... Anonymous November 1, 2011 4:40 PM
[...] Since the release 6.0, Liferay provide a... Anonymous May 12, 2013 11:34 PM
You can get some extra tips about Admin Script... Sébastien Le Marchand May 23, 2013 1:37 PM

Ya know, I bet this would be highly useful during WCM template development. A nice prototyping feature. Now, to make this available via the OS command line emoticon
Posted on 11/11/10 8:27 PM.
Posted on 11/11/10 10:37 PM.
Actually, the scripting service was implemented prior to Kaleo. It was for the EU research project, Romulous. The service's primary responsibility was to make it easier for developers to write portlets in non-Java languages (e.g. Ruby, Groovy, Python, PHP). As a side benefit, workflow was able to use it for easier action coding and of course we added it as an admin interface.

@JF scripting in WCM template was already possible with the velocity and freemarker support. There's no need for scripting service for that. In the WCM template, you can call any LR service. e.g.:
$serviceLocator.findService("com.liferay.portal.service.UserService").getUs­erByEmailAddress(...)
Posted on 11/12/10 10:14 AM.
Yeah, I know it's been there, but during template development you have 1. have a structure defined, 2. define your template, 3. create an article, 4. deploy to a WCM display portlet, to see if it works. It would be awesome if during template development I could have a separate window open to run small snippets of test script in VM or FM or whatever, to make sure it works, before committing it to the template. Even cooler would be a "test script" button which just runs what you have written with some sample data or something. Really would speed up template dev!
Posted on 11/12/10 10:35 AM in reply to Michael C. Han.
Thanks for the clarification Mike!
Posted on 11/12/10 10:42 AM in reply to Michael C. Han.
Got it. Yeah, the scripting ide is something we need. something we are looking @ for the workflow designer as well.
Posted on 11/12/10 1:59 PM in reply to James Falkner.
Thank you, @Michael, @JF and @James. Both scripting and WCM templates are cool features. Comparing scripting and WCM templates (VM or FM), which is better for developers?

Maybe, detailed documentation would be helpful to show these cool features.
Posted on 11/15/10 8:09 AM in reply to James Falkner.
I've been able to use the script console to add a user to a community, but it seems to fail whenever I try to do an addUser. Is this a designed-in limitation, or am I doing something wrong?
Posted on 11/29/10 12:26 PM.
This is a great tool, but here are two things I can think of that would make this even more useful:

a) Run scripts from the Document Library, or some other persistence mechanism. If you have to cut & paste every time you want to run a script, that gets old real fast.
b) Redirect output to a popup window. The admin does not necessarily have access to the logs or console when they are running a script.
Posted on 6/3/11 10:10 PM.
Is there any way to "cron" that scripts?
I need to execute one script periodically, with the easy API access that provide this scripting method.... it's possible?
Posted on 6/23/11 4:24 AM.
[...] Many of you are probably aware that Liferay version 6.0 supports several scripting languages in a variety of contexts including portlet plugins, Kaleo workflows, and the Script Console in the Server... [...] Read More
Posted on 11/1/11 4:40 PM.
[...] Since the release 6.0, Liferay provide a script console integrated into the Control Panel. Very powerful, this tool becomes fast essential for any portal administrator or developer (if you do not... [...] Read More
Posted on 5/12/13 11:34 PM.
You can get some extra tips about Admin Script Console here :
- http://www.liferay.com/web/sebastien.lemarchand/blog/-/blogs/5-tips-to-improve-u­sage-of-the-liferay-script-console
- http://www.liferay.com/web/kzhang/blog/-/blogs/re-5-tips-to-improve-usage-of-the­-liferay-script-console
Posted on 5/23/13 1:37 PM.