论坛

主页 » Liferay Portal » English » 3. Development

组合视图 统一视图 树状图
讨论主题 [ 上一个 | 下一个 ]
toggle
[SOLVED]Getting a custom user field value (expando) Daniel Kreiseder 2009年7月17日 上午2:00
RE: Getting a custom user field value (expando) Amos Fong 2009年7月16日 下午3:14
RE: Getting a custom user field value (expando) Daniel Kreiseder 2009年7月16日 下午10:53
RE: Getting a custom user field value (expando) Mahmoud kallel 2014年1月27日 下午1:50
RE: Getting a custom user field value (expando) Mahmoud kallel 2014年1月27日 下午1:51
RE: Getting a custom user field value (expando) Daniel Kreiseder 2009年7月17日 上午1:59
RE: Getting a custom user field value (expando) ilke Muhtaroglu 2009年11月17日 上午5:29
RE: Getting a custom user field value (expando) Daniel Kreiseder 2009年12月2日 上午7:33
RE: Getting a custom user field value (expando) vikash kumar chaurasia 2010年2月24日 下午8:23
RE: Getting a custom user field value (expando) jeff Leitman 2010年6月21日 上午9:53
RE: Getting a custom user field value (expando) Borja Gómez 2010年11月24日 上午10:15
RE: Getting a custom user field value (expando) Piotr Filipowicz 2010年11月24日 下午12:31
RE: Getting a custom user field value (expando) kuki last 2011年2月24日 上午12:59
RE: Getting a custom user field value (expando) Adolfo Benedetti 2011年3月30日 上午5:51
RE: Getting a custom user field value (expando) Mykola M 2011年6月16日 上午4:09
RE: Getting a custom user field value (expando) Jack Daniels 2011年7月28日 上午8:38
RE: Getting a custom user field value (expando) Marc Piparo 2011年9月13日 上午10:33
RE: Getting a custom user field value (expando) Krishan Kumar 2012年3月9日 下午11:32
RE: Getting a custom user field value (expando) Praveen P 2012年4月20日 上午1:37
RE: Getting a custom user field value (expando) Julien GRESSE 2012年6月29日 上午8:20
RE: Getting a custom user field value (expando) Pranoti Nandurkar 2013年5月28日 上午5:59
RE: Getting a custom user field value (expando) Mahmoud kallel 2014年1月27日 下午1:48
RE: Getting a custom user field value (expando) Mahmoud kallel 2014年1月27日 下午1:48
RE: Getting a custom user field value (expando) Ehsan Rashidy 2014年3月12日 上午6:14
RE: [SOLVED]Getting a custom user field value (expando) ilke Muhtaroglu 2009年11月17日 上午5:15
RE: [SOLVED]Getting a custom user field value (expando) Anil Sunkari 2011年7月28日 下午10:00
RE: [SOLVED]Getting a custom user field value (expando) Tejas patel 2012年2月23日 下午8:48
RE: [SOLVED]Getting a custom user field value (expando) Jack Bakker 2011年9月13日 上午10:41
RE: [SOLVED]Getting a custom user field value (expando) Samir Gami 2011年9月14日 上午5:16
RE: [SOLVED]Getting a custom user field value (expando) Mahmoud kallel 2014年1月27日 下午1:49
RE: [SOLVED]Getting a custom user field value (expando) Mahmoud kallel 2014年1月27日 下午1:52
RE: [SOLVED]Getting a custom user field value (expando) Archi Madhu 2014年1月27日 下午7:02
RE: [SOLVED]Getting a custom user field value (expando) Mahmoud kallel 2014年2月5日 下午4:11
Daniel Kreiseder
[SOLVED]Getting a custom user field value (expando)
2009年7月17日 上午2:00
答复

Daniel Kreiseder

等级: New Member

帖子: 12

加入日期: 2009年1月7日

最近的帖子

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:

1    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):
1
2    for (Enumeration<String> attrs = user.getExpandoBridge().getAttributeNames(); attrs.hasMoreElements();)
3        _log.info("elem: '" + attrs.nextElement() + "'");


Somehow I miss the point here....
Amos Fong
RE: Getting a custom user field value (expando)
2009年7月16日 下午3:14
答复

Amos Fong

LIFERAY STAFF

等级: Liferay Legend

帖子: 1844

加入日期: 2008年10月7日

最近的帖子

Hi Daniel,

When you created the custom attribute, which type did you choose? Maybe try casting into that type.
Daniel Kreiseder
RE: Getting a custom user field value (expando)
2009年7月16日 下午10:53
答复

Daniel Kreiseder

等级: New Member

帖子: 12

加入日期: 2009年1月7日

最近的帖子

The custom field is of type string...
Daniel Kreiseder
RE: Getting a custom user field value (expando)
2009年7月17日 上午1:59
答复

Daniel Kreiseder

等级: New Member

帖子: 12

加入日期: 2009年1月7日

最近的帖子

It was a security problem...

In com.liferay.portlet.expando.service.impl.ExpandoValueServiceImpl.getData(String className, String tableName, String columnName, long classPK)
:
 1
 2        if (ExpandoColumnPermission.contains(
 3                getPermissionChecker(), column, ActionKeys.VIEW)) {
 4
 5            return expandoValueLocalService.getData(
 6                className, tableName, columnName, classPK);
 7        }
 8        else {
 9            [b]return null;[/b]
10        }


I only had to set the view permisson on the custom expando value, and everything worked fine ....
ilke Muhtaroglu
RE: [SOLVED]Getting a custom user field value (expando)
2009年11月17日 上午5:15
答复

ilke Muhtaroglu

等级: Regular Member

帖子: 226

加入日期: 2009年5月12日

最近的帖子

Hi,

I try to access to a custom attribute of users.

The result comes as Serializable and when i cast the result to Integer, and when i print the value it appears as "null", not the integer value i have given to that custom attribute !

user.getExpandoBridge().getAttribute("sessionNo");

am i supposed to cast it ?

the custom attribute exists ! I checked it as you proposed. How did you solve this "null" problem ???

ilke
ilke Muhtaroglu
RE: Getting a custom user field value (expando)
2009年11月17日 上午5:29
答复

ilke Muhtaroglu

等级: Regular Member

帖子: 226

加入日期: 2009年5月12日

最近的帖子

Hi,

I am trying to access this value before i log-in ! Where and how what do we set ?

"had to set the view permisson on the custom expando value" Can you please inform more about how to do this?

thanks for co-operation.

ilke
Daniel Kreiseder
RE: Getting a custom user field value (expando)
2009年12月2日 上午7:33
答复

Daniel Kreiseder

等级: New Member

帖子: 12

加入日期: 2009年1月7日

最近的帖子

Control Panel-> Users->Custom Attributes->Actions->Permissions


Set Guest Permission to read
vikash kumar chaurasia
RE: Getting a custom user field value (expando)
2010年2月24日 下午8:23
答复

vikash kumar chaurasia

等级: Junior Member

帖子: 97

加入日期: 2010年1月8日

最近的帖子

Hi,


My question is:

If I have created a custom attribute for User e.g. country from the control panel and set it's value as "France" for a user. How can I get that attribute value for that user in a portlet in Plugin SDK envt.

Thanks.
jeff Leitman
RE: Getting a custom user field value (expando)
2010年6月21日 上午9:53
答复

jeff Leitman

等级: New Member

帖子: 4

加入日期: 2009年8月20日

最近的帖子

vikash kumar chaurasia:
Hi,


My question is:

If I have created a custom attribute for User e.g. country from the control panel and set it's value as "France" for a user. How can I get that attribute value for that user in a portlet in Plugin SDK envt.

Thanks.



I am wondering the same thing. I have a custom attribute of type java.lang.String[], used for timezones (e.g. "America/New York", "America/Chicago") for Organizations. I put the list of available timezones into the Default Value to get the list to show up, and chosoe "Selection" when creating the custom attribute. Then for an organization, I can choose one timezone from the list. But when I try to do
1
2(String) org.getExpandoBridge().getAttribute("timezone");


it always throws an error because "timezone" attribute has type "java.lang.String[]", not "java.lang.String".

So how do I retrieve only the chosen timezone String?
Borja Gómez
RE: Getting a custom user field value (expando)
2010年11月24日 上午10:15
答复

Borja Gómez

等级: New Member

帖子: 6

加入日期: 2010年11月18日

最近的帖子

I have the same problem. Have you solved it?

It can't be so difficult!
Piotr Filipowicz
RE: Getting a custom user field value (expando)
2010年11月24日 下午12:31
答复

Piotr Filipowicz

等级: Junior Member

帖子: 52

加入日期: 2010年11月18日

最近的帖子

Maybe you should write something like this:

 1
 2String name = "myAttr";
 3        int type = user.getExpandoBridge().getAttributeType(name);
 4        Serializable value = user.getExpandoBridge().getAttribute(name);
 5        Serializable defaultValue = user.getExpandoBridge().getAttributeDefault(name);
 6        if (type == ExpandoColumnConstants.STRING_ARRAY) {
 7            String[] curValue = (String[])value;
 8            for (String curDefaultValue : (String[])defaultValue) {
 9                if ((curValue != null) && (curValue.length > 0) && (curDefaultValue.equals(curValue[0]))) {
10                    System.out.println(curDefaultValue);
11                }
12            }
13        }


I saw similar code in tag ui:custom-attribute in file: portal/portal-web/docroot/html/taglib/ui/custom_attribute/page.jsp.

Give me the answer if this code looks right.

--
Best regards,
Piotr Filipowicz
kuki last
RE: Getting a custom user field value (expando)
2011年2月24日 上午12:59
答复

kuki last

等级: New Member

帖子: 1

加入日期: 2010年11月22日

最近的帖子

This is not solved! I cannot get the value of expando atrributes it always gives me defaultValue. I tried

1
2Boolean a = (Boolean)file.getExpandoBridge().getAttribute("Date_attr");
3Date ad = (Date)file.getExpandoBridge().getAttribute("Arch_it");


and

1
2Map<String, Serializable> expandoAttribs = file.getExpandoBridge().getAttributes();
3Boolean a = (Boolean)file.getExpandoBridge().getAttribute("Date_attr");
4Date ad = (Date)file.getExpandoBridge().getAttribute("Arch_it");


It still gives me the default values ... i can see them in the db table 'expandovalue'

I've tried to do it like this:

1
2            ExpandoTable et = ExpandoTableLocalServiceUtil.getTable(eb.getClassName(), eb.get);
3            System.out.println("et: "+et.getTableId()+" "+et.getName()+" "+et.getPrimaryKey());
4            ExpandoColumn ec = ExpandoColumnLocalServiceUtil.getColumn(et.getTableId(), et.getName());
5            System.out.println("ec: "+ec.getColumnId()+" ");
6            //ExpandoRowLocalServiceUtil.getRow(et.getTableId(), et.getPrimaryKey());
7            //ExpandoValueLocalServiceUtil.getValue(columnId rowId)


and ... THERE IS NOOOOOOOOO *$@% DOCUMENTATION on the parameters exceppt for @depricated...
Adolfo Benedetti
RE: Getting a custom user field value (expando)
2011年3月30日 上午5:51
答复

Adolfo Benedetti

等级: Junior Member

帖子: 45

加入日期: 2009年6月3日

最近的帖子

kuki last:
This is not solved! I cannot get the value of expando atrributes it always gives me defaultValue.

Did you try to change the values of your test? maybe the values retrieved from the custom fields are not the ones sent by the browser in the last submit, but the old ones(in your case the default values). see this post
Mykola M
RE: Getting a custom user field value (expando)
2011年6月16日 上午4:09
答复

Mykola M

等级: New Member

帖子: 4

加入日期: 2011年1月20日

最近的帖子

kuki last:
This is not solved! I cannot get the value of expando atrributes it always gives me defaultValue. I tried

1
2Boolean a = (Boolean)file.getExpandoBridge().getAttribute("Date_attr");
3Date ad = (Date)file.getExpandoBridge().getAttribute("Arch_it");


and

1
2Map<String, Serializable> expandoAttribs = file.getExpandoBridge().getAttributes();
3Boolean a = (Boolean)file.getExpandoBridge().getAttribute("Date_attr");
4Date ad = (Date)file.getExpandoBridge().getAttribute("Arch_it");


It still gives me the default values ... i can see them in the db table 'expandovalue'

I've tried to do it like this:

1
2            ExpandoTable et = ExpandoTableLocalServiceUtil.getTable(eb.getClassName(), eb.get);
3            System.out.println("et: "+et.getTableId()+" "+et.getName()+" "+et.getPrimaryKey());
4            ExpandoColumn ec = ExpandoColumnLocalServiceUtil.getColumn(et.getTableId(), et.getName());
5            System.out.println("ec: "+ec.getColumnId()+" ");
6            //ExpandoRowLocalServiceUtil.getRow(et.getTableId(), et.getPrimaryKey());
7            //ExpandoValueLocalServiceUtil.getValue(columnId rowId)


and ... THERE IS NOOOOOOOOO *$@% DOCUMENTATION on the parameters exceppt for @depricated...


This is ridiculous. Spent ~6h hours digging it, had to look up eventually how they display values of custom fields in control panel, and look what I have found!
Sorry for being somewhat emotional, but this is just stupid.

If you define custom field "myfield" on for instance Organization, and you call
org.getExpandoBridge().getAttribute("random") - returns null, because there's no field "random" defined
org.getExpandoBridge().getAttribute("myfield") - returns value as expected.

Simple, yep? But!
DLFileEntry (document library documents) is very special.
dlFileEntry.getExpandoBridge().getAttribute("random") - returns null, ok
dlFileEntry.getExpandoBridge().getAttribute("myfield") - returns default value! (like empty string for Text, 1 Jan 1970 for Date etc)

Extensive debugging shows, that in expandovalue for document with id say 100000 there's a record with classPK column value 100001. So class is somehow wrong.
Looking up liferay-portal-src-6.0.6\portal-web\docroot\html\portlet\document_library\edit_file_entry.jsp expained it all - they use DLFileVersion!

dlFileEntry.getFileVersion().getExpandoBridge().getAttribute("myfield") - returns desired value

Had to learn it the hard way )-:
So I hope sharing this knowledge will save mankind some wasted resources (-:
Enjoy.
Jack Daniels
RE: Getting a custom user field value (expando)
2011年7月28日 上午8:38
答复

Jack Daniels

等级: New Member

帖子: 19

加入日期: 2010年5月17日

最近的帖子

That is absurd indeed.

Thank you so much for providing a solution for others to follow. I was about to embark on the same quest when I stumbled on your post. Thanks again!!!
Anil Sunkari
RE: [SOLVED]Getting a custom user field value (expando)
2011年7月28日 下午10:00
答复

Anil Sunkari

等级: Expert

帖子: 412

加入日期: 2009年8月11日

最近的帖子

Hi ilke,

ilke Muhtaroglu:
Hi,

I try to access to a custom attribute of users.

The result comes as Serializable and when i cast the result to Integer, and when i print the value it appears as "null", not the integer value i have given to that custom attribute !

user.getExpandoBridge().getAttribute("sessionNo");

am i supposed to cast it ?

the custom attribute exists ! I checked it as you proposed. How did you solve this "null" problem ???

ilke


As per my understanding if i am right you can try using below code to get field value from expandovalue.

long userClassNameId = ClassNameLocalServiceUtil.getClassNameId(User.class.getName());
ExpandoTable table = ExpandoTableLocalServiceUtil.getDefaultTable(themeDisplay.getCompanyId(), userClassNameId );
ExpandoColumn column = ExpandoColumnLocalServiceUtil.getColumn(table.getTableId(), "portraitId");
ExpandoValue expandoValue = ExpandoValueLocalServiceUtil.getValue(table.getTableId(), column.getColumnId(), themeDisplay.getUserId());


Regards,
Anil Sunkari
Marc Piparo
RE: Getting a custom user field value (expando)
2011年9月13日 上午10:33
答复

Marc Piparo

等级: Junior Member

帖子: 43

加入日期: 2011年3月14日

最近的帖子

thanks!!
Jack Bakker
RE: [SOLVED]Getting a custom user field value (expando)
2011年9月13日 上午10:41
答复

Jack Bakker

等级: Liferay Master

帖子: 760

加入日期: 2010年1月3日

最近的帖子

ilke Muhtaroglu:

I try to access to a custom attribute of users.
The result comes as Serializable and when i cast the result to Integer, and when i print the value it appears as "null", not the integer value i have given to that custom attribute !
user.getExpandoBridge().getAttribute("sessionNo");
am i supposed to cast it ?
the custom attribute exists ! I checked it as you proposed. How did you solve this "null" problem ???


and check permissions on the custom field
Samir Gami
RE: [SOLVED]Getting a custom user field value (expando)
2011年9月14日 上午5:16
答复

Samir Gami

等级: Regular Member

帖子: 159

加入日期: 2011年2月3日

最近的帖子

Hey Guys,

What about ExpandoValueLocalServiceUtil , It have same purpose.
ExpandoValueLocalServiceUtil.getValue(companyId, User.class.getName(), ExpandoTableConstants.DEFAULT_TABLE_NAME, "Custom_Field_Name", userID);


Also it don't requires the Guest user permission to retrieve/update/add the custom field value.

Hope this may helps.
Tejas patel
RE: [SOLVED]Getting a custom user field value (expando)
2012年2月23日 下午8:48
答复

Tejas patel

等级: Junior Member

帖子: 71

加入日期: 2012年1月23日

最近的帖子

HI Anil
Do you please explain the objects you taken that which object refers to which class and what it returns .
Because i am new in this technology so please explain in detail so i understand how they works .
I use existing code but it gives error in ExpandoColumn and ExpandoValue.
and one thing can u please explain where to use this code like in processAction class or any other class.
Thanks and Regards,
Tejas patel
Krishan Kumar
RE: Getting a custom user field value (expando)
2012年3月9日 下午11:32
答复

Krishan Kumar

等级: New Member

帖子: 16

加入日期: 2012年1月18日

最近的帖子

Hi Mykola M,

I need a little help on Docuemnt Lib. custom Fields. If you can help me on this, that wud save my life.

I want to search documents on custom Fields value. That is, I added a custom field - say "Package" - in DL file and added a value - say "1234"- to it.

Now when is search the Liferay portal through open search portlet, it should give me this document. Currently Open search is searching on Custom fileds in User but not on Custom Fields in Document Library.

If you can suggest any solution, plz give it step by step as I am new to Liferay.

I am using Liferay 6.0.6 + tomcat 6.0.29 + MySQL 5.5.

Thanx in advance...

Krishan Kumar
Praveen P
RE: Getting a custom user field value (expando)
2012年4月20日 上午1:37
答复

Praveen P

等级: Regular Member

帖子: 100

加入日期: 2012年2月20日

最近的帖子

Hi i added custom field like country, and given some group of values but while fetching the data useing
(String) user.getExpandoBridge().getAttribute("Country") it is not displaying a desired value, how to get?

Thanks in advance
Julien GRESSE
RE: Getting a custom user field value (expando)
2012年6月29日 上午8:20
答复

Julien GRESSE

等级: New Member

帖子: 4

加入日期: 2012年1月9日

最近的帖子

Hi everybody,

We found a way to retreive custom fields value, it's bit complicated but it works fine.

 1
 2long versionID = DLFileVersionLocalServiceUtil.getLatestFileVersion(fileId, true).getFileVersionId();
 3ExpandoTable expandoTable = ExpandoTableLocalServiceUtil.getDefaultTable(companyId, DLFileEntry.class.getName());
 4ExpandoColumn column = ExpandoColumnLocalServiceUtil.getColumn(expandoTable.getTableId(), "custom.order");
 5if (column != null) {
 6ExpandoValue val = ExpandoValueLocalServiceUtil.getValue(expandoTable.getTableId(), column.getColumnId(), versionID);
 7  if (val != null) {
 8    return val.getInteger();
 9  } else {
10    return 0;
11  }
12}


Hope this helps
Pranoti Nandurkar
RE: Getting a custom user field value (expando)
2013年5月28日 上午5:59
答复

Pranoti Nandurkar

等级: Junior Member

帖子: 47

加入日期: 2012年2月2日

最近的帖子

Thanks Julien, It worked for me... emoticon
Mahmoud kallel
RE: Getting a custom user field value (expando)
2014年1月27日 下午1:48
答复

Mahmoud kallel

等级: New Member

帖子: 7

加入日期: 2013年11月20日

最近的帖子

please ,
i need help
i want to add custom field like nationality or grade
what can i do ??
thanks
Mahmoud kallel
RE: Getting a custom user field value (expando)
2014年1月27日 下午1:48
答复

Mahmoud kallel

等级: New Member

帖子: 7

加入日期: 2013年11月20日

最近的帖子

please ,
i need help
i want to add custom field like nationality or grade
what can i do ??
thanks
Mahmoud kallel
RE: [SOLVED]Getting a custom user field value (expando)
2014年1月27日 下午1:49
答复

Mahmoud kallel

等级: New Member

帖子: 7

加入日期: 2013年11月20日

最近的帖子

please ,
i need help
i want to add custom field like nationality or grade
what can i do ??
thanks
Mahmoud kallel
RE: Getting a custom user field value (expando)
2014年1月27日 下午1:50
答复

Mahmoud kallel

等级: New Member

帖子: 7

加入日期: 2013年11月20日

最近的帖子

please ,
i need help
i want to add custom field like nationality or grade
what can i do ??
thanks
Mahmoud kallel
RE: Getting a custom user field value (expando)
2014年1月27日 下午1:51
答复

Mahmoud kallel

等级: New Member

帖子: 7

加入日期: 2013年11月20日

最近的帖子

please ,
i need help
i want to add custom field like nationality or grade
what can i do ??
thanks
Mahmoud kallel
RE: [SOLVED]Getting a custom user field value (expando)
2014年1月27日 下午1:52
答复

Mahmoud kallel

等级: New Member

帖子: 7

加入日期: 2013年11月20日

最近的帖子

please ,
i need help
i want to add custom field like nationality or grade
what can i do ??
thanks
Archi Madhu
RE: [SOLVED]Getting a custom user field value (expando)
2014年1月27日 下午7:02
答复

Archi Madhu

等级: Regular Member

帖子: 240

加入日期: 2008年3月24日

最近的帖子

Mahmoud kallel:
please ,
i need help
i want to add custom field like nationality or grade
what can i do ??
thanks


I think following should work -

long userClassNameId = ClassNameLocalServiceUtil.getClassNameId(User.class.getName());
ExpandoTable table = ExpandoTableLocalServiceUtil.getDefaultTable(themeDisplay.getCompanyId(), userClassNameId );
ExpandoColumn column = ExpandoColumnLocalServiceUtil.getColumn(table.getTableId(), "nationality");
ExpandoValue expandoValue = ExpandoValueLocalServiceUtil.addValue(userClassNameId ,table.getTableId(), column.getColumnId(), classPK, "indian");
Mahmoud kallel
RE: [SOLVED]Getting a custom user field value (expando)
2014年2月5日 下午4:11
答复

Mahmoud kallel

等级: New Member

帖子: 7

加入日期: 2013年11月20日

最近的帖子

thanks, but in what field i shoul put this code?
Ehsan Rashidy
RE: Getting a custom user field value (expando)
2014年3月12日 上午6:14
答复

Ehsan Rashidy

等级: New Member

帖子: 17

加入日期: 2013年4月24日

最近的帖子

Daniel Kreiseder:
Control Panel-> Users->Custom Attributes->Actions->Permissions

Set Guest Permission to read


Hi,
Thank you Daneil for your helpful post,

I had the same problem with custom fields, here is my scenario:

First i created a custom field through control panel for organization (here),
Then I changed the permissions for this fields
(
1-login as administrator, go to control panel
2-Portal -> custom fields
3- click Actions -> permissions on you desired custom field
4- then check view check box for guest role
)

And at the end i just get the value of the custom field by ExpandoBridge.(organization.getExpandoBridge().getAttribute("CUSTOM_FIELD_NAME");)