# user variables mit LDAP-Daten

**URL:** <https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501>\
**Category:** ReportServer (DE)\
**Created:** [December 20, 2021, 3:03pm UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501 "2021-12-20T15:03:02Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![itatwork](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/e274bd/32.png) [@itatwork](https://forum.reportserver.net/u/itatwork)\
**Post date:** [December 20, 2021, 3:03pm UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/1 "2021-12-20T15:03:02Z")

</div>

Hallo zusammen,

kann man eine angelegte “user variable” mit LDAP-Daten via LDAP-Import füttern (z.B. “department” vom AD) ?

Oder funktioniert das nur mit den Feldern in den “user properties” wie “First name” ?

Gruß  
Christoph

---

<div class="post-metadata">

**Author:** ![Tobias\_F](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/t/e5b9ba/32.png) [@Tobias\_F](https://forum.reportserver.net/u/Tobias_F)\
**Post date:** [December 21, 2021, 7:39am UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/2 "2021-12-21T07:39:37Z")

</div>

Hallo,

ja. Das funktioniert. Schau dir mal hier den Beispiel-Code an: [https://github.com/infofabrik/reportserver-samples/tree/main/src/net/datenwerke/rs/samples/admin/ldap](https://github.com/infofabrik/reportserver-samples/tree/main/src/net/datenwerke/rs/samples/admin/ldap)

Du musst die PROPERTY\_ATTRIBUTES um die gewünschten LDAP Attribute erweitern (siehe ldapimport.groovy).

Hier eine Liste der LDAP Attribute: [https://www.computerperformance.co.uk/logon/ldap-attributes-active-directory/](https://www.computerperformance.co.uk/logon/ldap-attributes-active-directory/)

Gruß

Tobias

---

<div class="post-metadata">

**Author:** ![IF\_Eduardo](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/94ad74/32.png) [@IF\_Eduardo](https://forum.reportserver.net/u/IF_Eduardo)\
**Post date:** [December 21, 2021, 8:22am UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/3 "2021-12-21T08:22:22Z")

</div>

Hi Christoph,

und zum Speichern der UserVariable mit den neuen Daten kannst Du die Services hier benutzen: net.datenwerke.rs.uservariables.service.uservariables.UserVariableService

Du kannst im LDAP Skript alle RS-Services nutzen wie gewohnt, da es sich um ein Skript handelt.

Gruss  
Eduardo

---

<div class="post-metadata">

**Author:** ![itatwork](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/e274bd/32.png) [@itatwork](https://forum.reportserver.net/u/itatwork)\
**Post date:** [January 4, 2022, 9:39am UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/4 "2022-01-04T09:39:37Z")

</div>

Hallo zusammen,

vielen Dank für die Antworten.  
@Tobias Hast du da ein Beispiel wie das im “ldapimport.groovy” aussehen soll?  
Ich würde zum Beispiel “department” aus dem AD in eine “user variable” importieren.

Gruß  
Christoph

---

<div class="post-metadata">

**Author:** ![IF\_Eduardo](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/94ad74/32.png) [@IF\_Eduardo](https://forum.reportserver.net/u/IF_Eduardo)\
**Post date:** [January 4, 2022, 1:43pm UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/5 "2022-01-04T13:43:38Z")

</div>

Hallo Christoph,

im nächsten ReportServer werden wir voraussichtlich LDAP direkt unterstützen, d.h. es wird ein LdapService geben. Hier haben wir ein Hooker eingebaut (LdapNodePostProcessHook), was Dir erlaubt, irgendetwas mit den Nodes (Users, Groups, OUs) nach dem Import zu machen. In Deinem Fall würdest Du bei den Users eine UserVariable setzen.

Ein Beispiel haben wir hier hochgeladen (postProcessNode): [https://github.com/infofabrik/reportserver-samples/blob/main/src/net/datenwerke/rs/samples/admin/ldap/ldapUserVariableProcessorHooker.groovy](https://github.com/infofabrik/reportserver-samples/blob/main/src/net/datenwerke/rs/samples/admin/ldap/ldapUserVariableProcessorHooker.groovy)

Da die Version noch nicht veröffentlicht ist, kannst Du diesen Hook noch nicht benutzen. Aber im Beispiel siehst Du bereits alles, was Du dafür benötigst. Am wichtigsten ist:

```auto
def allUserVarDefs = userVarService.getDefinedVariableDefinitions()
allUserVarDefs.each{
   userVarDef ->
      if (! userVarDef.name.equals(userVar) ) return

      def userVarInstance = null
      if (userVarService.hasVariableInstance(node, userVarDef)) {
         // retrieve instance
         userVarInstance = userVarService.getVariableInstanceForUser(node, userVarDef)
      } else {
         // create instance
         userVarInstance = userVarDef.createVariableInstance()
         userVarInstance.setFolk node
         userVarService.persist userVarInstance
      }

      userVarInstance.setValue ldapService.getStringAttribute(searchResult, ldapProp)
}
```

was genau das macht: setzt eine UserVariable mit dem Wert einer LDAP Property.

ldapService.getStringAttribute(searchResult, ldapProp) ist analog wie im legacy-Skript definiert ([https://github.com/infofabrik/reportserver-samples/blob/main/src/net/datenwerke/rs/samples/admin/ldap/legacyLdapimport.groovy](https://github.com/infofabrik/reportserver-samples/blob/main/src/net/datenwerke/rs/samples/admin/ldap/legacyLdapimport.groovy)) :

```auto
private String getStringAttribute(SearchResult sr, String attributeName) throws NamingException{
        try{
            return sr.getAttributes().get(attributeName).get().toString();
        }catch(Exception e){
            logger.log(Level.WARNING,"failed to retrieve attribute '" + attributeName + "' from " + sr.getNameInNamespace(), e);
            return null;
        }
    }
```

Viele Grüße  
Eduardo

---

<div class="post-metadata">

**Author:** ![itatwork](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/e274bd/32.png) [@itatwork](https://forum.reportserver.net/u/itatwork)\
**Post date:** [January 5, 2022, 9:06am UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/6 "2022-01-05T09:06:53Z")

</div>

Danke Eduardo.

Da ich das kurzfristig einrichten muss, hast du noch ein Beispiel für die alte Version?

Gruß  
Christoph

---

<div class="post-metadata">

**Author:** ![IF\_Eduardo](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/94ad74/32.png) [@IF\_Eduardo](https://forum.reportserver.net/u/IF_Eduardo)\
**Post date:** [January 5, 2022, 9:11am UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/7 "2022-01-05T09:11:26Z")

</div>

Hi Christoph,

siehe mein obiges Beispiel. Im Beispiel-Skript hast Du alles, was du in der aktuellen Version benötigst. Nämlich das:

```auto
def allUserVarDefs = userVarService.getDefinedVariableDefinitions()
allUserVarDefs.each{
   userVarDef ->
      if (! userVarDef.name.equals(userVar) ) return

      def userVarInstance = null
      if (userVarService.hasVariableInstance(node, userVarDef)) {
         // retrieve instance
         userVarInstance = userVarService.getVariableInstanceForUser(node, userVarDef)
      } else {
         // create instance
         userVarInstance = userVarDef.createVariableInstance()
         userVarInstance.setFolk node
         userVarService.persist userVarInstance
      }

      userVarInstance.setValue ldapService.getStringAttribute(searchResult, ldapProp)
}
```

Das musst Du in dein aktuelles ldapimport.groovy Skript integrieren/anpassen.

Grüße  
Eduardo

---

<div class="post-metadata">

**Author:** ![itatwork](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/e274bd/32.png) [@itatwork](https://forum.reportserver.net/u/itatwork)\
**Post date:** [January 5, 2022, 2:28pm UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/8 "2022-01-05T14:28:07Z")

</div>

Wo genau kommt dann das Mapping für das “AD-Feld” und die “User Variable” hin?

Gruß  
Christoph

---

<div class="post-metadata">

**Author:** ![IF\_Eduardo](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/94ad74/32.png) [@IF\_Eduardo](https://forum.reportserver.net/u/IF_Eduardo)\
**Post date:** [January 5, 2022, 2:38pm UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/9 "2022-01-05T14:38:27Z")

</div>

Hallo Christoph,

hier werden diese definiert:

```auto
// the userVariable you want to set. The user variable definition must exist.
def userVar = 'myUserVar'

// the LDAP property to read. It must exist in your LDAP installation.
def ldapProp = 'mail'
```

Mapping:

```auto
if (userVarService.hasVariableInstance(node, userVarDef)) {
..
userVarInstance.setValue ldapService.getStringAttribute(searchResult, ldapProp)
```

Gruss,  
Eduardo

---

<div class="post-metadata">

**Author:** ![itatwork](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/e274bd/32.png) [@itatwork](https://forum.reportserver.net/u/itatwork)\
**Post date:** [January 5, 2022, 5:13pm UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/10 "2022-01-05T17:13:22Z")

</div>

mmh, ich kann jetzt keine Verbindung zu “myUserVar” und “mail” erkennen.  
sorry, ich verstehe es noch nicht so ganz.

Gruß  
Christoph

---

<div class="post-metadata">

**Author:** ![IF\_Eduardo](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/94ad74/32.png) [@IF\_Eduardo](https://forum.reportserver.net/u/IF_Eduardo)\
**Post date:** [January 5, 2022, 5:22pm UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/11 "2022-01-05T17:22:18Z")

</div>

Hi Christoph,

1. def userVar = ‘myUserVar’  
 → so heißt Deine UserVariable

2. def ldapProp = ‘mail’  
 → so heißt Deine LDAP Property

3. def allUserVarDefs = userVarService.definedVariableDefinitions  
 → so holst Du alle UserVariablen die es gibt

4. allUserVarDefs.each{ userVarDef →   
 → Für alle UserVariablen die es gibt:

5. if (! userVarDef.name.equals(userVar) ) return  
 → holen wir nur die, die wie “userVar” heißt, also hier holen wir die “richtige” UserVariable

6. if (userVarService.hasVariableInstance(node, userVarDef)) {  
 → falls der User diese UserVariable bereits besitzt

7. userVarInstance = userVarService.getVariableInstanceForUser(node, userVarDef)  
 → holt sie

Ansonsten:

1. userVarInstance = userVarDef.createVariableInstance()  
 → erstellt sie und setzt den User

2. userVarInstance.setValue ldapService.getStringAttribute(searchResult, ldapProp)  
 → Hier setzt er den Wert, den er im LDAP findet, zu der richtigen UserVariable

Das mapping ist also im 1, 2, 5, und 9

Gruss  
Eduardo

---

<div class="post-metadata">

**Author:** ![itatwork](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/e274bd/32.png) [@itatwork](https://forum.reportserver.net/u/itatwork)\
**Post date:** [January 6, 2022, 9:14am UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/12 "2022-01-06T09:14:38Z")

</div>

Super, danke. Jetzt habe ich es verstanden.

Gruß  
Christoph

---

<div class="post-metadata">

**Author:** ![itatwork](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/e274bd/32.png) [@itatwork](https://forum.reportserver.net/u/itatwork)\
**Post date:** [January 6, 2022, 10:28am UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/13 "2022-01-06T10:28:15Z")

</div>

Eine Frage noch:

Gehört das noch in den Bereich von “public class LdapUserLoader {” oder kann das in einen extra Bereich?

---

<div class="post-metadata">

**Author:** ![IF\_Eduardo](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/94ad74/32.png) [@IF\_Eduardo](https://forum.reportserver.net/u/IF_Eduardo)\
**Post date:** [January 6, 2022, 11:26am UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/14 "2022-01-06T11:26:42Z")

</div>

Hi Christoph,

das kannst Du in der createUserNode() Methode integrieren, da Du hier Zugriff auf die User-Nodes hast.  
Z.b. hier [https://github.com/infofabrik/reportserver-samples/blob/main/src/net/datenwerke/rs/samples/admin/ldap/legacyLdapimport.groovy#L346](https://github.com/infofabrik/reportserver-samples/blob/main/src/net/datenwerke/rs/samples/admin/ldap/legacyLdapimport.groovy#L346)

Gruss  
Eduardo

---

<div class="post-metadata">

**Author:** ![itatwork](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/e274bd/32.png) [@itatwork](https://forum.reportserver.net/u/itatwork)\
**Post date:** [January 13, 2022, 11:36am UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/15 "2022-01-13T11:36:57Z")

</div>

Wie lade ich diese Klasse?

error message: No such property: userVarService for class: ldap.LdapUserLoader

Wahrscheinlich mit “net.datenwerke.rs.uservariables.service.uservariables.UserVariableService”, oder?

Wenn ja, ich in welcher Config muss das rein?

Gruß  
Christoph

---

<div class="post-metadata">

**Author:** ![IF\_Eduardo](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/94ad74/32.png) [@IF\_Eduardo](https://forum.reportserver.net/u/IF_Eduardo)\
**Post date:** [January 13, 2022, 11:46am UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/16 "2022-01-13T11:46:08Z")

</div>

Hi Christoph,

du musst diesen Service analog wie UserManagerService definieren ([https://github.com/infofabrik/reportserver-samples/blob/main/src/net/datenwerke/rs/samples/admin/ldap/legacyLdapimport.groovy#L34](https://github.com/infofabrik/reportserver-samples/blob/main/src/net/datenwerke/rs/samples/admin/ldap/legacyLdapimport.groovy#L34))

Dann musst du den Service im Konstruktor vom LdapUserLoader übergeben damit er auch in der Klasse verfügbar ist. Den UserManagerService übergeben wir dagegen nicht, da er in der Klasse nicht benötigt wird.

Der Import ist net.datenwerke.rs.uservariables.service.uservariables.UserVariableService , richtig.

Gruss  
Eduardo

---

<div class="post-metadata">

**Author:** ![IF\_Eduardo](https://forum.reportserver.net/letter_avatar_proxy/v4/letter/i/94ad74/32.png) [@IF\_Eduardo](https://forum.reportserver.net/u/IF_Eduardo)\
**Post date:** [January 26, 2022, 9:07am UTC](https://forum.reportserver.net/t/user-variables-mit-ldap-daten/1501/17 "2022-01-26T09:07:10Z")

</div>

Hi Christoph,

wir haben gestern RS 4.0.0 veröffentlicht: [https://forum.reportserver.net/viewtopic.php?id=2940](https://forum.reportserver.net/viewtopic.php?id=2940)

Hier kannst du die eingebaute ldapimport Funktionalität verwenden inkl. UserVariablen-Skript: [https://github.com/infofabrik/reportserver-samples/blob/main/src/net/datenwerke/rs/samples/admin/ldap/ldapUserVariableProcessorHooker.groovy](https://github.com/infofabrik/reportserver-samples/blob/main/src/net/datenwerke/rs/samples/admin/ldap/ldapUserVariableProcessorHooker.groovy)

Hier die LDAP Doku: [https://reportserver.net/en/guides/config/chapters/SSO-related-properties/](https://reportserver.net/en/guides/config/chapters/SSO-related-properties/)

Grüße  
Eduardo
