2017-03-08 13 views
0

ATGのプロファイルの上にカスタムプロパティをいくつか追加しました。 jspでプロファイル値を読みたいときは、ATGプロファイルをインポートしてからprofile.nameとしてプロパティにアクセスしています。ユーザープロファイルリポジトリを照会するATG

1つのタイプのユーザーにはprofile.lastNameを返し、他のタイプのユーザーにはprofile.firstNameを返す必要があるシナリオに直面しています。これは、profile.userTypeプロパティに基づいています。

userTypeのチェックをリポジトリに追加して、profile.nameを読み込むときにfirstNameまたはlastNameのいずれかを返すようにすることは可能ですか?

名前は多くの場所(1000)で参照されているので、私はどこでもユーザタイプチェックを追加して、それに応じて名前を表示することはできません。可能であれば、これをrepoで処理できます。

答えて

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" />