2017-03-08 51 views
0

我在ATG的配置文件之上添加了一些自定義屬性。當我想讀取jsp中的配置文件值時,我只是導入ATG配置文件,然後以profile.name身份訪問該屬性。查詢用戶配置文件存儲庫ATG

我正面臨一種情況,我需要爲一種類型的用戶返回profile.lastName,爲其他類型的用戶返回profile.firstName。這是基於說profile.userType屬性。

是否有可能在存儲庫中添加userType檢查,以便當我讀取profile.name時,它應該返回firstName或lastName。

由於名稱在許多地方被引用(1000),我無法在任何地方添加用戶類型檢查並相應地顯示名稱。所以如果可能的話,我們可以在回購中處理。

回答

2

是的,你可以。只需使用RepositoryPropertyDescriptor即可。我匆忙拼湊之下的版本(沒有測試但應該足以讓你去):

import atg.repository.RepositoryItem; 
import atg.repository.RepositoryItemImpl; 
import atg.repository.RepositoryPropertyDescriptor; 

public class AcmeRealUserName extends RepositoryPropertyDescriptor{ 

    @Override 
    public Object getPropertyValue(RepositoryItemImpl profile, Object pValue) { 


     String userType = (String) profile.getPropertyValue("userType"); 
     String lastName = (String) profile.getPropertyValue("lastName"); 
     String firstName = (String) profile.getPropertyValue("firstName");  

     if ("firstNameUser".equals(userType)) { 
      return firstName; 
     } else { 
      return lastName; 
     } 
    } 

    @Override 
    public void setValue(String pAttributeName, Object pValue) { 
     //Probably Do Nothing since this is a derived property 
    } 

    /** 
    * A class specific logDebug method to output log messages. Unfortunately 
    * using System.out as the mechanism. 
    * 
    * @param pMessage 
    */ 
    protected void logDebug(String pMessage) { 
     System.out.println("### DEBUG(:" + getClass().getName() + getName() + ")" + pMessage); 
    } 
} 

然後你指的這個新屬性在userprofiling.xml如下:

<property name="name" property-type="com.acme.propertydescriptor.AcmeRealUserName" item-type="string" writable="false" readable="true" />