0

ユーザー管理者と手動で編集する前に、カスタム フィールドを編集することしかできません。

私のコードの何が問題で、これを解決するにはどうすればよいですか??

まさに、ポータルにログインするときにユーザー カスタム属性に値を割り当てようとしています。また、指定された条件で ExpandoColumn を取得できません。

問題は、ExpandoValue が null であることです。

 public class LoginAction extends Action {

        public void run(HttpServletRequest req, HttpServletResponse res) {
            User currentUser;
            try {
                currentUser = PortalUtil.getUser(req);
                long userId = PrincipalThreadLocal.getUserId();
                long companyId = currentUser.getCompanyId();            
                long groupId = GroupLocalServiceUtil.getGroup(companyId, "Guest").getGroupId();

                /* Get de CustomField Segmentation */
                ExpandoTable expandoTable = ExpandoTableLocalServiceUtil.getDefaultTable(companyId, User.class.getName());

                ExpandoColumn expandoColumn = ExpandoColumnLocalServiceUtil.getColumn(companyId, User.class.getName(), expandoTable.getName(), "Segmentation");           


          if (expandoColumn != null) {
                 ExpandoValue expandoValue = ExpandoValueLocalServiceUtil.getValue(expandoTable.getTableId(), expandoColumn.getColumnId(), userId);

          if (expandoValue != null) {
                 expandoValue.setData(finalsegment);


                 ExpandoValueLocalServiceUtil.updateExpandoValue(expandoValue);

          }
   }

}

要約:私の問題は

ExpandoValue expandoValue = ExpandoValueLocalServiceUtil.getValue(expandoTable.getTableId(), expandoColumn.getColumnId(), classPK);

カスタム属性の値にアクセスすると Null になります。この customattribute を手動で編集してから同じコードを実行すると、動作します!!! 理由がわかりませんし、これを解決する方法もわかりません。

4

3 に答える 3

1

編集(質問の更新後)

ExpandoValueLocalService javadocを見てくださいcreateExpandoValue。メソッドがあることがわかります。nullここで、「手動で値をまったく設定しておらず、ExpandoValue として返されている」というシナリオと「一度設定して更新可能な値を取得した...」の関係を推測してください。

別のオプションは、expando 値のデフォルト値を指定することです。この方法では、そこに値が確実にあり、無条件に更新できます (少なくとも意図的に削除されるまで - 堅牢性のために、この可能性に対応する必要があります)。 )

元の答え:

この状態以外にどこにif行くのですか?条件を試したことがelseありますか、または以前に例外が発生しましたか? たとえば、取得する前に「デフォルト」テーブルを作成する必要がある場合があります。

Expando テーブル/列にアクセスする方法の例については、このコードを参照してください。

私はあなたのコードを実行しませんでしたが、もちろん、以前にも例外が発生する可能性があります。または、設定を間違えたLoginActionために、まったく実行されなかった可能性があります。

于 2013-07-02T14:09:07.147 に答える
1

デフォルトでは、通常のユーザー ロールには、Expando 値にアクセスする権限がありません。

いずれにせよ、expando 値を次のように変更することをお勧めします。

User user = UserLocalService.getUserById(userId);
user.getExpandoBridge().setAttribute("attributeName", "attributeValue");

任意の権限で値を変更する場合は、使用します

user.getExpandoBridge().setAttribute("attributeName", "attributeValue", false);
于 2013-07-04T08:20:51.723 に答える