Vielleicht nochmal ganz grundsätzlich: Was trägt man beim LDAP-Mapping ein: den CN der Gruppe? Oder den vollen DN?
Und was ich oben nicht erwähnt habe: natürlich ist der LDAP-User memberOf 'UG Angestellte'.
Application Programmer (C, Perl, Python, C++, Java, PASCAL)
OpenVMS Support & Administration
Vielleicht nochmal ganz grundsätzlich: Was trägt man beim LDAP-Mapping ein: den CN der Gruppe? Oder den vollen DN?
Und was ich oben nicht erwähnt habe: natürlich ist der LDAP-User memberOf 'UG Angestellte'.
Nee, tut mir leid, da bin ich raus.
Aber gut, dass wenigstens der Export funktioniert.
Ich bin jetzt nicht der große Datenbank-Entwickler, aber in etwa mit
SELECT
COUNT(obj_main.isys_obj__id) AS 'Anzahl',
j4.isys_obj__title AS 'Lizenz'
FROM ...
WHERE ...
GROUP BY j4.isys_obj__title
sollte es gehen. Die ORDER BY-Clause kannst Du dann weglassen (und wenn nicht, muss sie nach der GROUP BY-Clause stehen).
Moin!
Umgebung: i-doit 1.15.2 PRO auf Ubuntu 18.04.5 mit Apache 2.4.29, PHP 7.4.14 und MariaDB 10.4.17.
Problem 1: Zum Einrichten des LDAP Sync möchte ich als Unique Identifier den sAMAccountName benutzen. Wenn ich in den Kategorieerweiterungen versuche, diesen einzutragen, setzt das System beim Speichern den Wert auf custom_1 zurück. Das system-Log enthält keine Fehlermeldung.
Problem 2: Ich setze das LDAP-Mapping der Personengruppe Reader auf 'UG Angestellte'. Nach erfolgreichem Sync enthält das ldap-Log für alle User
[2021-02-03 15:29:45] ldap.DEBUG: ->search: dn=CN=UG Angestellte,... | filter=(objectclass=*) [] []
[2021-02-03 15:29:45] ldap.DEBUG: Found CN=UG Angestellte,... (Filter: (objectclass=*)): 0 [] []
und das Mapping wird nicht hergestellt. Für andere Gruppen loggt das System
[2021-02-03 15:29:45] ldap.DEBUG: ->search: dn=CN=LG Sharepoint,... | filter=(objectclass=*) [] []
[2021-02-03 15:29:45] ldap.DEBUG: Found CN=LG Sharepoint,... (Filter: (objectclass=*)): 1 [] []
[2021-02-03 15:29:45] ldap.DEBUG: -- Group pendant for "LG Sharepoint" not found. Set an LDAP-Mapping in your co
rresponding person group if you want to use this as a right group. [] []
Ich bin kein AD-Spezialist. Wovon hängt ab, welche Gruppen hier verwendet werden können?
Du darfst nicht in der JOIN-Clause den j4.isys_obj__id durch j4.isys_obj__title ersetzen, sondern hinter SELECT den j2.isys_cats_lic_list__isys_obj__id .
Das müsste j4.isys_obj__title sein.
IMHO ist die objID ein int und kein String.
Inzwischen habe ich von unserem Reseller Nachricht bekommen, dass dieser Bug in i-doit 1.13.2 behoben sein wird.
Das hat unser PRO-Reseller mittlerweile reproduzieren können und ein Ticket bei Synetics eröffnet. In der Zwischenzeit habe ich mir beholfen mit
def idoit_create_with_categories(api, object_type, title, categories, attributes=None):
object_id = idoitapi.CMDBObject(api).create(object_type, title, attributes)
requests = list()
for category, catattr_array in categories.items():
for i, catattrs in enumerate(catattr_array):
params = {
'object': object_id,
'category': category,
'data': catattrs
}
if len(catattr_array) > 1:
params['entry'] = i
requests.append({
'method': 'cmdb.category.save',
'params': params
})
response = api.batch_request(requests)
result = {
'id': object_id,
'success': True,
'categories': dict(),
}
for i, entry in enumerate(response):
if 'success' not in entry or not entry['success']:
idoitapi.CMDBObject(api).delete(object_id)
message = 'Bad result'
if 'message' in entry:
message += ': ' + entry['message']
raise JSONRPC(message=message)
params = requests[i]['params']
category = params['category']
if 'entry' in params:
# For multi-valued categories, value is a list of IDs
if category not in result['categories']:
result['categories'][category] = list()
result['categories'][category][params['entry']] = entry['entry']
else:
result['categories'].update({category: entry['entry']})
return result
In Deinem Batch-Request-Payload steht in jedem Element das Tupel id/ObjektID/Kategorie. Anhand des id in der Response kannst Du das Request-Paket herausfinden und von dort ObjektID und Kategorie auslesen.
Außerdem: Ich habe bisher nur numerische IDs verwendet. Danke für die Info, dass das nicht sein muss.