Working with Admin Script Console

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. 
ブログ
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
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").getUserByEmailAddress(...)
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!
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.
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?
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.
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?
You can get some extra tips about Admin Script Console here :
- http://www.liferay.com/web/sebastien.lemarchand/blog/-/blogs/5-tips-to-improve-usage-of-the-liferay-script-console
- http://www.liferay.com/web/kzhang/blog/-/blogs/re-5-tips-to-improve-usage-of-the-liferay-script-console
Looking all over to find the answer and I see all combinations but not a direct explanation Is there a capability to use an API or CLI to communicate and execute commands to the LifeRay console?
Hi Wendell, I'm not aware of any way to interact with the Script Console from a CLI, however you could interact with Liferay's web services.

You might try posting your question to the Forums (be sure to specify the Liferay version you're using and any specific commands you're trying to execute).

If you're new to the Liferay community, Jamie's recent blog post (https://web.liferay.com/web/jamie.sammons/blog/-/blogs/a-new-way-to-connect-with-the-liferay-community) does a good job outlining other resources for getting help including our Community Slack Channel.