Script Examples
Here are some examples to help you use scripts in DXP. Most of the examples originated from the Liferay blog post 5 Tips to Improve Usage of the Liferay Script Console.
Example 1: Presenting New Terms of Use to Users
This example retrieves user information from the database, modifies Users, and then saves the changes to the database. Suppose that your company updates its terms of use and wants present them to the users. When a user agrees to the terms of use, a Boolean field called agreedToTermsOfUse
is set in the User record associated with that user. As long as the field value is true
, the user isn’t presented with the terms of use. If you set the field false
for all users, they must agree to the terms of use again before they can sign in.
-
Enter and execute this script in the Script Console:
import com.liferay.portal.kernel.service.UserLocalServiceUtil userCount = UserLocalServiceUtil.getUsersCount() users = UserLocalServiceUtil.getUsers(0, userCount) for (user in users) { println("User Name: " + user.getFullName() + " -- " + user.getAgreedToTermsOfUse()) }
This script prints each User’s
agreedToTermsOfUse
field value. -
Replace the script with this:
import com.liferay.portal.kernel.service.UserLocalServiceUtil userCount = UserLocalServiceUtil.getUsersCount() users = UserLocalServiceUtil.getUsers(0, userCount) long currentUserId = Long.parseLong(userInfo.get("liferay.user.id")) for (user in users){ if(!user.isDefaultUser() && (user.getUserId() != currentUserId)) { user.setAgreedToTermsOfUse(false) UserLocalServiceUtil.updateUser(user) } }
The script sets each User’s
agreedToTermsOfUse
field tofalse
. It skips the default User as well as the default admin User that’s currently signed in and running the script. -
Click Execute.
-
Verify the script updated the records by running the first script again.
All Users (except the default User and your User) are updated. You’ve enabled the new terms of use agreement for all users to accept.
Example 2: Embedding HTML Markup in Script Output
The Script Console renders output as HTML content. Thus, you can embed HTML markup in script output to change its look and feel. Here’s an example:
import com.liferay.portal.kernel.service.*
number = com.liferay.portal.kernel.service.UserLocalServiceUtil.getUsersCount();
out.println(
"""
<div style="background-color:black; text-align: center">
<h1 style="color: #37A9CC; font-size:xx-large">${number}</h1>
</div>
""");
Example 3: Showing Exceptions in the Script Console
The Script Console’s standard error message is this:
Your request failed to complete.
The message doesn’t describe the error or provide any details. Getting error information requires examining the logs. You can, however, use a try / catch block to capture exceptions and print the exception information in the console.
try {
nullVar = null
out.println(nullVar.length())
} catch(e) {
out.println("""<div class="portlet-msg-error">${e}</div>""")
e.printStackTrace(out)
}
Example 4: Logging Output to a Files
A script’s output only shows in the Script Console when the script completes. If you want to see a script’s progress, you can log messages to a file.
import com.liferay.portal.kernel.service.*
import com.liferay.portal.kernel.dao.orm.*
// Output management
final def SCRIPT_ID = "MYSCRIPT"
outputFile = new File("""${System.getProperty("liferay.home")}/scripting/out-${SCRIPT_ID}.txt""")
outputFile.getParentFile().mkdirs()
def trace(message) {
out.println(message)
outputFile << "${message}\n"
}
// Main code
users = UserLocalServiceUtil.getUsers(QueryUtil.ALL_POS, QueryUtil.ALL_POS)
users.each { u ->
trace(u.getFullName())
}
This script creates a subfolder in Liferay Home called scripting
and saves the script output to a file in this folder.
If you don’t have direct access to the file system, you can use this code to print the file content to the Script Console:
final def SCRIPT_ID = "MYSCRIPT"
outputFile = new File("""${System.getProperty("liferay.home")}/scripting/out-${SCRIPT_ID}.txt""")
out.println(outputFile.text)
Congratulations! You’ve executed various scripts in the Script Console.