In diesem Artikel lernen Sie, wie Sie den aktuellen combit CRM-Benutzernamen auf dem SQL Server auslesen können, um diesen dann für die Weiterverarbeitung in einem von combit CRM unabhängigen Kontext zu nutzen. Beispielweise könnten Sie auf bestimmte (oder alle) combit CRM-Benutzeraktionen eine Folgeaktion (Datenbankreplikation, erweiterte Protokollierung, Trigger, gespeicherte Prozeduren, usw.) auslösen, die dann mit einer/einem von combit CRM unabhängigen Datenbank(-Server) arbeitet. Hierbei kann es sinnvoll sein, den aktuellen Benutzer zu identifizieren und den Benutzernamen zu übergeben bzw. aufzuzeichnen.
Hintergrund
Grundsätzlich muss zwischen zwei Anmeldearten unterschieden werden. Es gibt die combit CRM-Benutzeranmeldung und davon unabhängig die Datenbankserver-Anmeldung.
combit CRM-Benutzeranmeldung
Die Benutzeranmeldung von combit CRM ist notwendig, um sich in combit CRM anzumelden. Die Anmeldung erfolgt gegebenenfalls vollautomatisch ohne Kennworteingabe über eine in der Benutzerverwaltung hergestellte Assoziation zwischen einem Windows-Benutzernamen und einem combit CRM-Benutzerkonto. Über die Benutzerverwaltung werden zudem die Rechte innerhalb von combit CRM vergeben. Alle Details hierzu finden Sie im Handbuch unter Benutzerverwaltung.
Datenbankserver-Anmeldung
Davon unabhängig muss combit CRM mit dem Datenbankserver kommunizieren und benötigt zur Authentifizierung einen Benutzer. Am Datenbankserver kann ein fester (ggf. auch komplett „kryptischer“) SQL Server-Benutzer verwendet werden oder auch eine Windows-Authentifizierung erfolgen. Mehr zu den Anmeldearten finden Sie unter Microsoft SQL Server Anmeldeart.
Der für die Datenbank verwendete Benutzer muss bereits auf dem Datenbankserver bestehen bzw. zuvor, zum Beispiel mit dem SQL Server Management Studio (SSMS) bzw. pgAdmin, angelegt werden und über die entsprechenden Zugriffsrechte verfügen. Den Datenbankbenutzer tragen Sie anschließend in combit CRM ein über Datei > Konto > Datenbankanmeldung
. Mehr Informationen dazu finden Sie im Handbuch unter Datenbankverbindung.
Aufgabenstellung
Da für die Datenbankverbindung in vielen Fällen nur ein einzelner Datenbankbenutzer angelegt und verwendet wird, hinterlegt combit CRM den jeweiligen combit CRM-Anmeldebenutzernamen in einer Tabelle auf dem Datenbankserver und stellt damit sicher, dass die einzelnen Benutzeraktionen (z. B. einen Datensatz bearbeiten) einem Anmeldenamen zugeordnet werden können. Sie können diese Benutzerinformation nach Bedarf auch für eigene Anwendungsfälle auslesen.
Lösung
Für Microsoft SQL sowie PostgreSQL finden Sie in den mitgelieferten Solutions eine gespeicherte Prozedur (bzw. Funktion) namens cmbt_sp_GetcRMLoginName
. Deren Wert kann dann im aktiven Kontext weiterverarbeitet werden, also zum Beispiel beim Transfer von Daten an den Linked-Server als Feldinhalt direkt gesetzt werden.
Achtung: Im Kontext des Linked-Servers selbst können die folgenden Beispiele nicht verwendet werden, da dieser seine eigene Funktion
sys.dm_exec_sessions
besitzt und entsprechend nicht durch den combit CRM-Client-Datenbankanmeldevorgang mit den combit CRM-Benutzerdaten präpariert wurde. Das Feldprogram_name
wird dort nicht entsprechend gesetzt.
Microsoft SQL Server Management Studio (SSMS)
Hier finden Sie die Prozedur im SSMS:
Sollte diese Prozedur in Ihrer Solution (noch) nicht vorhanden sein, können Sie die Abfrage auch über folgendes T-SQL Beispiel-Snippet umsetzen:
SELECT @username = Substring("program_name", 0, PATINDEX('%@%', "program_name"))
FROM sys.dm_exec_sessions
WHERE "session_id" = @@SPID AND PATINDEX('%@%', "program_name") != 0
PostgreSQL pgAdmin
Hier finden Sie die Funktion für PostgreSQL in pgAdmin:
Folgende Funktion wird dabei unter PostgreSQL ausgeführt:
-- Ermitteln des Namens der/des diese Abfrage ausführenden combit CRM Benutzer:in
SELECT DISTINCT SUBSTRING("application_name" FROM 0 FOR position('@' IN "application_name"))
INTO v_cRMLoginName
FROM "pg_catalog"."pg_stat_activity"
WHERE "pid" = pg_backend_pid()
AND position('@' IN "application_name") != 0;
Hier ein Beispiel der vereinfachten SQL-Abfrage: