我们现在给 User 加一个自定义字段 “Height”, 有一个user 名字是 "John" ,其 “Height” 属性值为180.
现在需要搜索所有自定义字段 “Height” 值为 180 的user。
先初始化两个变量, 分别为自定义字段的名字, 与需要搜索的值。
String customAttributeName="height"
String customAttributeValue="180"
我们需要定义需要搜索 Object 的类型, 因为可能会有不同类型的 Object 都有着同样的自定义字段 “Height”。
同时需要 companyId 用来标识 server 实例。
long classNameId = ClassNameLocalServiceUtil.getClassNameId(User.class);
long companyId = PortalUtil.getDefaultCompanyId();
接下来
List<ExpandoValue> values = ExpandoValueLocalServiceUtil.getColumnValues(companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME, customAttributeName,customAttributeValue, -1, -1);
现在得到的是一个 List 的 ExpandoValue 对象。
注意 ExpandoValue 对象, 有一个 getPrimaryKey() 方法, 可以用来或者目标对象的 primary key, 在这个例子, 也就是User对象的primary key。
每个liferay object 都有一个 primary key, 用来标识其为唯一的对象。
//get primary key of User object (userId)
user.getUserId(); or
user.getPrimaryKey();
//get primary key of Organization object (organizationId)
organization.getOrganizationId(); or
organization.getPrimaryKey();
//get primary key of Group
group.getGroupId(); or
group.getPrimaryKey();
所以接下来要做的, 是找到每个 ExpandoValue 对象对于的 User 对象。
//create an arraylist to store user objects
List<User> users = new ArrayList<User>();
//temp user object
User user;
//iterate through list of ExpandoValues and for each
// element try to find corresponding user object
for (int i = 0; i < values.size(); i++) {
long userId = values.get(i).getClassPK();
try{
user = UserLocalServiceUtil.getUser(userId);
users.add(user)
}catch(NoSuchUserException e ){
user with this primary key was not found in DB .....
}//
完事儿了