Getting a custom user field value (expando) in Liferay

expando, java, liferay

Solution

It was a security problem...

In `com.liferay.portlet.expando.service.impl.ExpandoValueServiceImpl.getData(String className, String tableName, String columnName, long classPK)`:

    if (ExpandoColumnPermission.contains(
            getPermissionChecker(), column, ActionKeys.VIEW)) {

        return expandoValueLocalService.getData(
            className, tableName, columnName, classPK);
    }
    else {
        return null;
    }

I only had to set the view permisson on the custom expando value, and everything worked fine.

Problem

I added a custom user field in Liferay, and set a value on a specific user. How can I access this value programmatically? If I try this, I always get null: ``` String customAttr = (String)user.getExpandoBridge().getAttribute("customAttr"); ``` `user.getExpandoBridge().getAttribute("customAttr")` returns a value of Type `java.IO.Serializable`. Maybe the cast here is wrong? But the Custom Attribute does exist (following code prints out the attribute key): ``` for (Enumeration<String> attrs = user.getExpandoBridge().getAttributeNames(); attrs.hasMoreElements();) _log.info("elem: '" + attrs.nextElement() + "'"); ``` Somehow I miss the point here....

Original source