Tipps & Tricks - Profilbilder aus Intrexx Share in Applikationen anzeigen

1. Allgemeines

In Intrexx Share kann jeder Benutzer ein Profilbild einbinden. Dieser Beitrag zeigt, wie diese Profilbilder auch in anderen Applikationen angezeigt werden können - z.B. das Profilbild des aktuell angemeldeten Benutzers oder auch das Profilbild eines Datensatz-Erstellers bzw. Datensatz-Besitzers. Vorkenntnisse in der Applikationsentwicklung sind bei diesem Beitrag von Vorteil.

2. Profilbild des aktuell angemeldeten Benutzers anzeigen

Bevor das Profilbild dargestellt werden kann müssen zwei Bedingungen geprüft werden:
  1. Ist Intrexx Share im Portal vorhanden?
  2. Wenn ja, ist auch ein Profil des Benutzers vorhanden?


Erstellen Sie für die Anzeige des Profilbildes eine Gruppierung mit einer bedingten Anzeige. Hier wird über zwei If-Bedingungen geprüft, ob Intrexx Share im Portal vorhanden ist. Wenn ja, wird geprüft, ob der aktuelle Benutzer ein Intrexx Share-Profil hat. Kopieren Sie das folgende Velocity-Skript und ersetzen Sie darin den Namen der Simplegroup mit dem entsprechenden Namen der Gruppierung in Ihrer Applikation:
#if($RtCache.existsApplication("AB4B031834F042FCADB595DF1923B768C7773F00"))
   #set($share = $ShareCallable)
   #set($l_strUserGuid = $User.getGuid())
   #set($profileId = $share.getProfileId($ProcessingContext, $l_strUserGuid))
   #set($hasShareProfile = $share.hasProfile($ProcessingContext, $profileId))
   #if($hasShareProfile)
      #set($show_simplegroup28B85008 = true)
   #else
      #set($show_simplegroup28B85008 = false)
   #end
#end


Platzieren Sie ein VTL-Include mit dem folgenden Skript in der Gruppierung, um das Share-Profilbild des aktuellen Benutzers anhand seiner ID bzw. Guid zu ermitteln und anzeigen zu lassen.
#set( $recentAppGuid = $Request.get("rq_AppGuid") )
#parse("internal/application/resource/${recentAppGuid}/makro.vmi")
#set( $srcAnonymousImageLink    = "images/assets/share/anonymous_profile.png")
#set( $recentUser = ($User.getId()))
#set( $recentUserGuid = $User.getGuid())
#set( $recentUserName= $User.getFullName())
#if( !$ObjectHelper.isNull($recentUserGuid) )
   #getUserInfo( $recentUserGuid $recentUserName "big")
#else
   <img class="Share_Container_Image_Border" src="${srcAnonymousImageLink}" border="0" width="55" height="55"  #if( !$ObjectHelper.isNull($p_strUsername) ) alt="${p_strUsername}" title="${p_strUsername}" #end/>
#end


Bevor die Applikation veröffentlicht und getestet werden kann, muss noch die Datei makro.vmi mit dem folgenden Skript erstellt werden.
#set( $srcDefaultImageLink = "images/assets/share/dummy_man.png")
#set( $srcAnonymousImageLink = "images/assets/share/anonymous_profile.png")
#set( $shareAppGuid = "AB4B031834F042FCADB595DF1923B768C7773F00" )
#set( $isShareAvailable = !$ObjectHelper.isNull($RtCache.getApplication($shareAppGuid)) )

##########################
### Userinfo
##########################
#macro(getUserInfo $p_strUserGuid $p_strUsername $p_strSize )
#if( $p_strSize == "big")
   #set( $imageWidth = 55 )
   #set( $imageHeight = 55 )
 #elseif( $p_strSize == "small" )
   #set( $imageWidth = 30 )
   #set( $imageHeight = 30 )
    #else
       #set( $imageWidth = 40 )
       #set( $imageHeight = 40 )
    #end

#set( $CurrUser = $DS.getUser().getUserFromGuid($DbConnection, $p_strUserGuid) )
#set( $strUserMailBiz = $CurrUser.getEmailBiz() )
#set( $iUserID = $CurrUser.getId() )
#set( $userImage = $FileUrlBuilder.getDownloadUrl($ProcessingContext, "419575A135C829CE5D0C16251A1D2A84B18B4F3C", "${iUserID}"))

#if( $isShareAvailable == true )
   ### Check, if User has share-profile
   #set( $hasShareProfile = $ShareCallable.hasProfile( $ProcessingContext, $p_strUserGuid ))
   #if( $hasShareProfile == true)
      #set( $userProfile = $ShareCallable.getProfileFromGuid( $ProcessingContext, $p_strUserGuid ))
      #if( !$ObjectHelper.isNull( $userProfile.getImage().getFirstFile() ) )
      $ShareCallable.getImageLink($ProcessingContext, "Share_Container_Image_Border", $userProfile.getImage(), $p_strUserGuid, "share.profile.page.viewByOther", "${I18N.SHARE_PERSONAL_FEED}: $!{p_strUsername}", false, $imageWidth, $imageHeight)
      #else
         #if( !$ObjectHelper.isNull($userImage) )
            <img class="" src="${userImage}" border="0" width="${imageWidth}" height="${imageHeight}"  
            #if( !$ObjectHelper.isNull($p_strUsername) ) alt="${p_strUsername}" title="${p_strUsername}" 
            #end/>
         #else
            <a href="mailto:${strUserMailBiz}" ><img class="Share_Container_Image_Border" src="${srcAnonymousImageLink}" border="0" width="${imageWidth}" height="${imageHeight}" alt="mailto:${strUserMailBiz}" title="mailto:${strUserMailBiz}" /></a>
      #end
   #end
#else
   #if( !$ObjectHelper.isNull($userImage) )
      <img class="" src="${userImage}" border="0" width="${imageWidth}" height="${imageHeight}"  #if( !$ObjectHelper.isNull($p_strUsername) ) alt="${p_strUsername}" title="${p_strUsername}" #end/>
   #else
	<a href="mailto:${strUserMailBiz}" ><img class="Share_Container_Image_Border" src="${srcAnonymousImageLink}" border="0" width="${imageWidth}" height="${imageHeight}" alt="mailto:${strUserMailBiz}" title="mailto:${strUserMailBiz}" /></a>
#end
#end
#else
   #if( !$ObjectHelper.isNull($userImage) )
      <img class="" src="${userImage}" border="0" width="${imageWidth}" height="${imageHeight}"  #if( !$ObjectHelper.isNull($p_strUsername) ) alt="${p_strUsername}" title="${p_strUsername}" #end/>
#else
   <img class="Share_Container_Image_Border" src="${srcDefaultImageLink}" border="0" width="${imageWidth}" height="${imageHeight}"  #if( !$ObjectHelper.isNull($p_strUsername) ) alt="${p_strUsername}" title="${p_strUsername}" #end/>
         #end
      #end
   #end
Die makro.vmi kann direkt im Velocity-Dateimanager erstellt werden, der Option "Velocity-Datei aus Applikationspaket referenzieren" bleibt aber die zuvor erstellte script.vmi-Datei zugeordnet. Anschließend kann die Applikation veröffentlicht und getestet werden.

3. Profilbild des Datensatz-Bearbeiters




Um in einer Ansichtstabelle das Profilbild des Datensatz-Bearbeiters anzuzeigen, fügen Sie der Tabelle eine Schaltflächen-Spalte hinzu. Bearbeiten Sie die Spalte und entfernen Sie das bereits zugeordnete Bild.



Setzen Sie in den Optionen der Spalte die Einstellung "Bedingte Anzeige" und fügen Sie das folgende Skript unterhalb der bereits enthaltenen ersten Skriptzeile ein:
#if($RtCache.existsApplication("AB4B031834F042FCADB595DF1923B768C7773F00"))
   #set( $recentAppGuid = $Request.get("rq_AppGuid") )
   #parse("internal/application/resource/${recentAppGuid}/makro.vmi")
   #set( $srcAnonymousImageLink    = "images/assets/share/anonymous_profile.png")
   #set( $recentUser = $DS.getUser().getUserFromId($DbConnection, $TextUtil.parseInt($drRecord.getUserId())) )
   #set( $recentUserGuid = $recentUser.getGuid())
   #set( $recentUserName= $recentUser.getFullName())
   #if( !$ObjectHelper.isNull($recentUserGuid) )
      #getUserInfo( $recentUserGuid $recentUserName "big")
   #else
      <img class="Share_Container_Image_Border" src="${srcAnonymousImageLink}" border="0" width="55" height="55"
	  #if( !$ObjectHelper.isNull($p_strUsername) ) alt="${p_strUsername}" title="${p_strUsername}" #end/>
   #end
#end
Auch hier wird zunächst geprüft, ob Intrexx Share im Portal vorhanden ist. Anschließend wird mit Hilfe der User-ID das Intrexx Share-Profilbild des Benutzers angezeigt, der den Datensatz zuletzt bearbeitet hat. Anstatt dem Profilbild des letzten Bearbeiters kann auch das Profilbild des Datensatzersteller bzw. -Besitzers angezeigt werden. Ändern Sie dazu im obigen Skript einfach Zeile 5 wie folgt ab:
#set( $recentUser = $DS.getUser().getUserFromId($DbConnection, $drRecord.getRecordOwner()))