Skip to main content
Skip table of contents

Update auf 2024.4.x

Die Update-Dokumentation beschreibt die Schritte, die aus technischer Sicht zum Update einer Major-Version notwendig sind und gibt Hinweise, worauf aus technischer Sicht geachtet werden muss.

Voraussetzungen

Vorgehensweise

  1. Bei dem Update ist unbedingt darauf zu achten, die einzelnen Schritte in der angegebenen Reihenfolge komplett abzuarbeiten und sich dabei exakt an die Anleitung zu halten. Im Fehlerfall ist die im Update Verzeichnis liegende Update und Update_Debug Textdatei zu sichern und mit dem Support Rücksprache zu halten.

  2. Wenn Sie die Update-Prozedur erfolgreich abgeschlossen haben, teilen Sie uns bitte mit (support@cursor.de), welche Systeme (z.B. Test- oder Produktiv-System) Sie auf welche Version aktualisiert haben. Nur so können wir im Falle einer Support-Frage Ihr Problem möglichst schnell in unserem Haus prüfen.

Versionen

Versionsvoraussetzungen für das CRM:

Installierte Version

Max. Update Version

19.2.19, 20.1.19, 20.2.17, 21.1.12, 21.2.08

22.1

20.2.21, 21.1.15, 21.2.13, 22.1.09

23.1

21.1.18, 21.2.19, 22.1.13, 23.1.08

23.2

21.2.20, 22.1.17, 23.1.10, 23.2.8

23.3

22.1.18,23.1.12,23.2.11,23.3.6

24.1 LTS

23.1.13, 23.2.14, 23.3.8, 24.1.6

24.2

23.2.14, 23.3.8, 24.1.6, 24.2.2

24.3

23.3.8, 24.1.6, 24.2.2, 24.3.1

24.4

Tipp

Generell sollte immer der aktuelle Patch für die alte Version eingespielt werden, um Probleme beim Update zu vermeiden.
Wird der Customizing Transport verwendet, empfehlen wir den Transport aller Pakete vor dem Update und auch eine Spiegelung der Datenbank (Prod in Test und QS). Auch sollte das Update über ein Wartungsfenster durchgeführt werden.

Prüfung der Metadaten

Beim Update auf Version werden die Metadaten der Installation geprüft. In kritischen Fällen kann es sein, dass diese Prüfung das Fortführen des Update verhindert.

Systemvoraussetzungen und Softwarekomponenten

Beachten Sie die Dokumentation, welche Systemvoraussetzungen und Softwarekomponenten erforderlich sind.

Systemvoraussetzungen für Update

Software-Voraussetzungen

Die Systemvoraussetzungen können unter Systemvoraussetzungen  eingesehen werden. Erforderliche Portfreigaben zwischen Rich Client und Applikationsserver finden Sie ebenfalls in dem Dokument.

Update-Vorbereitungen

Download der Version

Um die für Update-Zwecke benötigte Programm-Version zu erhalten, melden Sie sich bitte im Kundenbereich von www.cursor.de an. Dort können Sie im Downloadbereich das entsprechende Paket beziehen. Bei Rückfragen wenden Sie sich bitte an den Support der CURSOR Software AG (support@cursor.de). Nachdem Sie die gezippte Datei heruntergeladen haben, entpacken Sie diese auf dem Applikationsserver.

Verzeichnisstruktur des Update- bzw. Installationspakets

Nachdem Sie die gezippte Datei für beispielsweise CURSOR-CRM 2024.3 (24.3.x) entpackt haben, ergibt sich (unter anderem) folgende ähnliche Verzeichnisstruktur:

Hauptverzeichnis: CURSOR-CRM_24.3.X (Im Folgenden <INSTALL-DIR> genannt).

Unterverzeichnis:

  • client (CURSOR-CRM-Client)

  • clientlog (Verzeichnis/Freigabe für Clientlogs)

  • cti (Dateien für einen CTI Server)

  • db (Datenbankskripte)

  • installer (Die Dateien des Update- bzw. Installationstools)

  • jdk (Open JDK für Windows und Linux)

  • server (Applikationsserver JBoss)

  • tools (Tools für die Installation)

    image-20240613-104245.png

Wartungsfenster einrichten, um alle Benutzer abmelden

Bevor Sie mit dem Update beginnen, stellen Sie sicher, dass keine User im System angemeldet sind. Angemeldete User können im Windows Client über das Menü Extras / Aktive Benutzer oder im Webclient über Benutzermenü / Aktive Benutzer angezeigt werden. Aktive Benutzer können per "Mail senden" Aktion eine E-Mail erhalten.

Eine deutlich einfachere Variante ist die Anlage eines Wartungsfensters. Hierbei können die Benutzer informiert werden, dass eine Wartung ansteht und sie werden zum definierten Zeitpunkt vom System abgemeldet.

Unter Administration / Datenfluss einen neuen Wartungsfenster - Datensatz anlegen und dort die Informationen pflegen. Der Benutzer, der dort hinterlegt wird, muss auch das Update ausführen, da nur dieser Benutzer sich im Zeitraum des Wartungsfensters am System anmelden kann.
Es werden alle Timer für diese Zeit ausgesetzt, laufende Prozesse werden aber nicht unterbrochen. Es ist daher sinnvoll, wenn etwas Zeit vor dem eigentlichen Update für den Wartungszeitraum reserviert wird.

Externe Datenbankschnittstellen sollten ebenfalls während eines Updates deaktiviert werden.

Massendatenserver prüfen

Unter Optionen / Systemeinstellungen / Allgemein / Adresse des Anwendungsservers prüfen Sie, ob ein Massendatenserver eingerichtet wurde. Dieser darf zum Zeitpunkt des Updates nicht aktiv sein. Falls Sie das Update am Massendatenserver ausführen, erhalten Sie im Verlauf der Aktualisierung einen Hinweis.

Datenbank sichern

  • Microsoft SQL Server: Über Microsoft SQL Server Management Studio.

  • ORACLE: Auf dem Datenbankserver über EXPDP das aktuelle Schema exportieren.

Für beide Datenbanksysteme werden hierfür in der Regel Skripte bei der Installation bereitgestellt. Den genauen Pfad entnehmen Sie der bei der Installation mitgelieferten Installationsübersicht im Feld Skriptverzeichnis. Dies befindet sich im Abschnitt Datenbanken (DB).

Bei Produktivsystemen kann es sinnvoll sein, die Sicherung vor dem Update manuell durchzuführen. Die Updateroutine kann die Sicherung allerdings auch durchführen. Wird die Sicherung vorher manuell erstellt, empfiehlt es sich, die Sicherung im Rahmen des Updates zu deaktivieren.

Alternativ ist es ab Version 21.2 nun möglich unseren neuen Spiegelungsassistenten zu nutzen:

Voraussetzungen des Spiegelungsassistenten:

  • Verfügbar ab Version CRM Version 21.2

  • Der ausführende Anwender muss Admin Berechtigungen haben.

  • Es muss mindestens eine 2 System Landschaft mit gleicher CRM Version geben.

  • Es dürfen keine offenen Customizing Pakete in den Zielsystemen existieren (dies wird vom Assistenten geprüft).

Datenbank-Skripte sichern

Bei einigen Kunden wurden Änderungen an den Datenbank-Scripten in db\scripts oder im Verzeichnis db\scripts\stmts vorgenommen. Häufig ist die Datei propertymapper.sql angepasst oder auch die Datei RenewIndexes.sql um kundenspezifische Indizes erweitert.

Geplante Tasks deaktivieren

Bei einigen Kunden werden z.B. stündlich automatisch Tasks gestartet, die z.B. einen Import in die Datenbank ausführen. Diese Tasks müssen vor dem Update beendet werden, da es sonst Konflikte während der Aktualisierung der Datenbankstrukturen gibt.

Update-Vorgehensweise

Im folgenden Kapitel wird das Update einer CURSOR-CRM-Installation beschrieben. Hierbei müssen die folgenden drei Komponenten aktualisiert werden:

  1. Datenbank

  2. Applikationsserver

  3. Windows Client

Automatisierter Updatevorgang

Voraussetzungen:

  • Das Update muss auf dem Applikationsserver ausgeführt werden.

  • Auf dem Applikationsserver muss auch der Rich Client installiert sein.

  • Der Applikationsserver ist als Dienst gestartet und der aktuelle Benutzer der Maschine hat die Berechtigung, den Dienst zu beenden/starten, Dienste zu löschen und Dienste zu installieren

  • Der Benutzer muss auch Powershell-Skripte ausführen dürfen, da diese genutzt werden, um die Datenbankverbindung im JBoss bekannt zu machen.
    (Lesen der aktuellen ExecutionPolicy: Get-ExecutionPolicy
    Setzen der ExecutionPolicy: Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted

    Die ExecutionPolicy kann vom Administrator per Richtlinie auch fest auf einen Wert gesetzt werden, so dass nur er diese ändern kann.

Im Folgenden wird der Updatevorgang unter diesen Voraussetzungen beschrieben.

Bei einem Update müssen sowohl der Applikations-Server als auch der Rich Client aktualisiert werden. Der Web Client ist im Applikationsserver enthalten. Zunächst müssen sich alle Anwender vom System abmelden.

  1. Erstellen Sie innerhalb des Installationsverzeichnisses der Anwendung ein Unterverzeichnis namens "update", z.B. D:\CURSOR\EVI\update

  2. Entpacken Sie das Installationspaket in dieses Verzeichnis.

  3. Die folgende Datei ausführen: "update.bat". Es ist auch möglich, das Installationsverzeichnis als Parameter zu übergeben, z.B. update.bat "D:\CURSOR\EVI\update"
    Unter Linux starten Sie das Update mit ./update.sh

CODE
D:\InstallDir\update>.\update.bat

Wenn Sie die Datei update.bat ausgeführt haben, erscheint (nach Auswahl der Installationssprache) ein Willkommensbildschirm:

Die Installation Klicken Sie auf "Weiter". Sie werden folgenden Dialog sehen:

Wechseln Sie zum folgenden Dialog. Sie werden aufgefordert, die Verzeichnisse ...server/JBoss und ...client/JBoss auszuwählen - im Standard wird dies automatisch erkannt, wenn Sie den Update-Ordner in ihr JBoss-Verzeichnis gelegt haben.

Im nächsten Schritt müssen Sie die Daten eines administrativen Kontos angeben, mit dem das Update durchgeführt werden wird, sowie das Sicherungsverzeichnis auswählen.

Wenn Sie jetzt auf Weiter klicken, wird automatisch mit dem nächsten Schritt fortgefahren (zunächst Datenbank-Backup) und danach der Server- bzw. Client-Backup-Vorgang entsprechend Ihrer Angaben ausgeführt.

Nun erfolgt die SSL Konfiguration (SSL-Kommunikationsstrecken & Zertifikate ):

Nach dem Klick auf Starte SSLUpdateTool erscheint folgender Dialog:

Danach kann der Installationsassistent mit weiter fortgeführt werden:

SSL Konfiguration (Sicherheitszertifikate)

  • Ab Version 16.1 erfolgt die Konfiguration mit dem Updater und der integrierten Anwendung "CURSOR Key- und Trustore Tool":

Feld

Beschreibung

Zertifikat (Public key)

Das hier angegebene Zertifikat, auch Public Key genannt, wird in den Keystore gespeichert. Wird hier ein Keystore angegeben, erfolgt keine Erstellung eines neuen Keystores. Für die Formate PKCS#12 und Java Keystore ist die Angabe des Passwortes notwendig.
Erlaubte Dateiformate:

  • .crt*

  • .pem*

  • .pfx**

  • .p12**

  • .p7b*

  • .jks**

*Die Angabe eines Private Key ist erfoderlich!
**Die Angabe des Passwortes ist erfoderlich!

Zertifikatspasswort

Dieses Passwort wird zum Entschlüsseln des PKCS#12 Zertifikats bzw. Java Keystore verwendet.

Private Key

Hier muss der zum Zertifikat (Public Key) zugehörige Private Key angegeben werden. Die Angabe des Private Key ist nicht erforderlich, wenn als Public Key ein PKCS#12 Zertifikat oder ein Java Keystore angegeben wurde.
Erlaubte Dateiformate:

  • .key

  • .pem

  • .txt

Key Passwort

Ist der Private Key verschlüsselt, wird dieses Passwort zum entschlüsseln verwendet. Das Feld ist optional.

CA Zertifikate

Mit der Liste der hier angegebenen Zertifikate wird versucht, die Zertifikatskette herzustellen. Es müsen alle Intermediate- und Root-Zertifikate angegeben werden, die hierfür nötig sind.
Diese und alle weiteren angegebenen Zertifikate werden in den Truststore eingefügt.
Erlaubte Dateiformate:

  • .crt

  • .cer

  • .pem

Bestehender Truststore

Der existierende Truststore. Hier kann optional ein bereits bestehender Truststore angegeben werden. Ist dies der Fall, wird dieser als Grundlage für den neuen Truststore verwendet und wird um die angegebenen Zertifikate ergänzt und unter neuem Namen gespeichert. Ist das Feld leer, so wird ein neuer Truststore mit den angegebenen CA Zertifikaten erstellt.

Truststore Passwort

Dieses Passwort wird zum Entschlüsseln des bestehenden Truststores verwendet.

Truststore CURSOR

Hier muss der Pfad zur Datei truststore_cursor.jks angegeben werden. Dieser Truststore wird als Grundlage für die Erstellung des neuen Truststores verwendet. Es muss der Truststore aus der Auslieferungsversion verwendet werden.

Ausgabepasswort

Dieses Passwort wird zum Verschlüsseln des Key- und Truststores verwendet.

Ausgabeverzeichnis

In dieses Verzeichnis werden die neu erstellen Key- und Truststore-Dateien abgelegt. Wurde das Verzeichnis als Parameter übergeben, ist dieser Wert nicht änderbar.

Weiterführende Informationen zur Thematik Sicherheitszertifikate finden Sie im Installationshandbuch unter dem Abschnitt Installation des Applikationsservers im Kapitel SSL-Installation und -Konfiguration (Das Installationshandbuch erhalten Sie auf Anfrage).

Danach erfolgt eine Zusammenfassung des Updates.

Sie müssen nun abwarten, bis der gesamte Updatevorgang automatisch zu Ende geführt wird.

Wenn Sie in den nächsten Schritt wechseln, werden Sie noch einmal aufgefordert, die Konfiguration entsprechend vorzubereiten, wie es hier zuvor beschrieben wurde. Prüfen Sie dies noch einmal und fahren Sie dann fort. Der Vorgang wird einige Zeit in Anspruch nehmen. Anschließend erhalten Sie einen ähnlichen Bestätigungsbildschirm wie folgt:

Mit einem Klick auf Beenden kann der Installationsassistent nun geschlossen werden.

Masterclient aktualisieren

Um nicht bei jedem Update oder Patch den Client neu verteilen zu müssen, bietet CURSOR-CRM die Möglichkeit, einen Master-Client zu verwenden. Das Installationsverzeichnis des Master-Clients entnehmen Sie der Installationsübersicht (Feld Auto-Update-Verzeichnis). Änderungen müssen somit nur an diesem einen Client durchgeführt werden. Bei der Anmeldung an CURSOR-CRM wird zunächst geprüft, ob Änderungen vorliegen. Sind Änderungen vorhanden, wird das Update des Clients voll automatisch durchgeführt. Somit ist mit minimalem Aufwand sichergestellt, dass alle Benutzer von CURSOR-CRM mit dem aktuellsten Client arbeiten.

Die zuvor konfigurierte Datei ..\client\jboss\custom\configuration.bat aus der neuen Version muss ebenfalls in den Master-Client übernommen werden. In der Datei ...\Client\jboss\custom\update.properties werden die Einstellungen zum automatischen Aktualisieren der einzelnen Verzeichnisse vorgenommen.

In dem Verzeichnis custom öffnen Sie die Datei update.properties mit einem Texteditor. Ändern Sie die folgenden Schlüssel auf das aktuelle Tagesdatum und die aktuelle Uhrzeit.

CODE
LAST-UPDATE=26.10.23 14\:00

BIN-DIR=26.10.23 14\:00
CONF-DIR=26.10.23 14\:00
EXT-DIR=26.10.23 14\:00
LIB-DIR=26.10.23 14\:00
CUSTOM-DIR=26.10.23 14\:00
UPDATE-TOOL-DIR=26.10.23 14\:00
JRE-DIR=26.10.23 14\:00

Der Eintrag LAST-UPDATE gibt die letzte Änderung an dem Master-Client an. Für jedes Verzeichnis gibt es einen Eintrag in der Datei update.properties (EXT-DIR, BIN-DIR, CONF-DIR, LIB-DIR, CUST-EXT-DIR usw.). Zum Aktualisieren muss das Datum und die Uhrzeit für jedes Verzeichnis und bei dem Eintrag LAST-UPDATE aktualisiert werden.

Aktivierung des automatischen Client-Updatetools

Der Master-Client muss in der Datei Client\jboss\custom\configuration.bat aktiviert sein. Hierzu gibt es in der Datei-Zeile 64 den Eintrag SET USE_UPDATE_TOOL=true. Dieser muss zum Aktivieren auf 'true' gesetzt sein.

Starten des Client-Updatetools

Beim Starten eines noch nicht aktualisierten Clients wird die folgende Fortschrittsanzeige angezeigt, die das Kopieren diverser Dateien visualisiert.

Datenbank-Statistiken aktualisieren
  • Bei ORACLE-Datenbanken: Ausführen der Datei db\scripts\analyzeTables.bat (bei Linux db\scripts\linux\analyzeTables.sh). Hierdurch wird auch die SQL-Datei RenewIndexes.sql, die bei einigen Kunden erweitert wurde, ausgeführt.

  • Bei MS-SQL eine Datenbankoptimierung durchführen.

Weitere Hinweise

Turnus zum Neustart des Applikationsservers

Tipp

Es wird empfohlen, den Applikationsserver in einem monatlichen Turnus neu zu starten. Häufigere Neustarts würden dazu führen, dass aus Performance-Sicht wertvolle Cache-Informationen temporär verloren gehen und damit neu aufzubauen wären.

Falls das Zusatzmodul CTI Schnittstelle im Einsatz ist, sollte der zusätzliche Dienst des CTI-Applikationsservers mindestens 1 Mal wöchentlich oder noch besser nächtlich neu gestartet werden, damit die CTI-Schnittstellen neu initialisiert werden können.

Dokumentenbearbeitung und externe Aufrufe im Web Client

Zur Nutzung der erweiterten Dateibehandlung und der externen Aufrufe im Web Client ist die Nutzung der "CURSOR Browser-Erweiterung" und des zugehörigen "Communication Host für die CURSOR Browser-Erweiterung" zwingend erforderlich.

Besonderheiten beim Einsatz eines CTI Servers.

Wenn die CTI-Schnittstelle im Einsatz ist, muss der dafür vorhandene JBoss ebenfalls aktualisiert werden.

Behobene Bugs

Informationen finden Sie in der Patch-Dokumentation im Kundenportal.

Schriftarten

Die ausgelieferten Reports verwenden als Standardschriftart Tahoma, welche im TrueType Format auf dem Applikationsserver installiert sein muss. Läuft der Applikationsserver unter Linux, bietet es sich an, zunächst die MS TrueType CoreFonts zu installieren und anschließend noch den Tahoma Font hinzuzufügen. 

Sofern Sie eine gültige Windows-Lizenz haben, kopieren Sie die Datei tahoma.ttf aus dem Verzeichnis C:\Windows\Fonts

Bei SuSE Linux
BASH
# als Benutzer root:
# Kopieren Sie die Datei tahoma.ttf in das fonts Verzeichnis
cp tahoma.ttf /usr/share/fonts/truetype
 
# Font-Cache neu laden
fc-cache
Bei Ubuntu Linux
BASH
# MS TrueType CoreFonts installieren
sudo apt-get -y install ttf-mscorefonts-installer
 
# Schriftart Tahoma installieren
cd /tmp
wget http://download.microsoft.com/download/ie6sp1/finrel/6_sp1/w98nt42kmexp/en-us/ielpkth.cab
cabextract --lowercase ielpkth.cab
 
# Kopieren der Datei tahoma.ttf in das fonts Verzeichnis
sudo cp tahoma.ttf /usr/share/fonts/truetype/msttcorefonts
 
# Font-Cache neu laden
sudo fc-cache

Alternative Schriftart-Bibliothek

Ist eine Installation der Schriftarten auf dem Server nicht möglich, können auch im Applikationsserver alle benötigten Schriftarten als Bibliothek installiert werden. Wie auch die Datenbank-Treiber wird die Datei cursor-font.jar im Verzeichnis ./custExt abgelegt

Eine vorkonfigurierte Bibliothek mit den Windows-Schriftarten Calibri und Tahoma können Sie von der CURSOR-Website herunterladen.

Link: https://www.cursor.de/software_mgmt/install/cursor-font.jar

2024.4

(Warnung) Systemrelevante Informationen für Administratoren

Metadatenvalidierung bei Erreichung/Überschreitung des Max-Counts in der Datenbank

Die Anlage von neuen Feldern auf Entitäten wird begrenzt, damit die Oracle-Begrenzungen nicht überschritten werden. Vorher wird aber noch eine Warnung bei der Metadatenvalidierung beim Update nach Count-Prüfung ausgegeben.

Maximalwerte für C0-Entitäten:

  • 350 C0-Felder

  • 200 C1-Felder

  • 200 C2-Felder

Maximalwerte für C1-Entitäten:

  • 350 C1-Felder

  • 200 C2-Felder

Maximalwerte für C2-Entitäten:

  • 500 C2-Felder

Oracle

SQL
-- Validation.C0FieldsInC0Entities
WITH sub_crmTabs AS ( 
SELECT DISTINCT
	UPPER( RowPk) AS table_name
FROM
	emdVarchar
WHERE
	FieldName = 'ShortCut' ) 
	
SELECT ut.table_name, COUNT(*) 
FROM
	user_tab_columns ut, sub_crmTabs s
WHERE
	NOT REGEXP_LIKE ( ut.Column_Name, 'C[0-9]{1,2}' ) 
	AND NOT REGEXP_LIKE ( ut.table_name, 'C[0-9]{1,2}' ) 
	AND s.table_name = ut.table_name
GROUP BY
	ut.table_name
	HAVING COUNT(*) > 350;

-- Validation.C1FieldsInC0Entities
WITH sub_crmTabs AS ( 
SELECT DISTINCT
	UPPER( RowPk) AS table_name
FROM
	emdVarchar
WHERE
	FieldName = 'ShortCut' ) 
	
SELECT ut.table_name, COUNT(*) 
FROM
	user_tab_columns ut, sub_crmTabs s
WHERE
	REGEXP_LIKE ( ut.Column_Name, 'C[0-9]{2}' ) 
	AND NOT REGEXP_LIKE ( ut.table_name, 'C[0-9]{1,2}' ) 
	AND s.table_name = ut.table_name
GROUP BY
	ut.table_name
	HAVING COUNT(*) > 200;

-- Validation.C2FieldsInC0Entities
WITH sub_crmTabs AS ( 
SELECT DISTINCT
	UPPER( RowPk) AS table_name
FROM
	emdVarchar
WHERE
	FieldName = 'ShortCut' ) 
	
SELECT ut.table_name, COUNT(*) 
FROM
	user_tab_columns ut, sub_crmTabs s
WHERE
	ut.Column_Name LIKE 'C2%' 
	AND NOT REGEXP_LIKE ( ut.table_name, 'C[0-9]{1,2}' ) 
	AND s.table_name = ut.table_name
GROUP BY
	ut.table_name
	HAVING COUNT(*) > 200;

-- Validation.C1FieldsInC1Entities
WITH sub_crmTabs AS ( 
SELECT DISTINCT
	UPPER( RowPk) AS table_name
FROM
	emdVarchar
WHERE
	FieldName = 'ShortCut' ) 
	
SELECT ut.table_name, COUNT(*) 
FROM
	user_tab_columns ut, sub_crmTabs s
WHERE
	ut.Column_Name NOT LIKE 'C2%' 
	AND REGEXP_LIKE ( ut.table_name, 'C[0-9]{2}' ) 
	AND s.table_name = ut.table_name
GROUP BY
	ut.table_name
	HAVING COUNT(*) > 350;

-- Validation.C2FieldsInC1Entities
WITH sub_crmTabs AS ( 
SELECT DISTINCT
	UPPER( RowPk) AS table_name
FROM
	emdVarchar
WHERE
	FieldName = 'ShortCut' ) 
	
SELECT ut.table_name, COUNT(*) 
FROM
	user_tab_columns ut, sub_crmTabs s
WHERE
	ut.Column_Name LIKE 'C2%' 
	AND REGEXP_LIKE ( ut.table_name, 'C[0-9]{2}' ) 
	AND s.table_name = ut.table_name
GROUP BY
	ut.table_name
	HAVING COUNT(*) > 200;

-- Validation.C2FieldsInC2Entities
WITH sub_crmTabs AS ( 
SELECT DISTINCT
	UPPER( RowPk) AS table_name
FROM
	emdVarchar
WHERE
	FieldName = 'ShortCut' ) 
	
SELECT ut.table_name, COUNT(*) 
FROM
	user_tab_columns ut, sub_crmTabs s
WHERE
	ut.table_name LIKE 'C2%' 
	AND s.table_name = ut.table_name
GROUP BY
	ut.table_name
	HAVING COUNT(*) > 500;

MSSQL

SQL
-- Validation.C0FieldsInC0Entities
WITH sub_crmTabs AS ( 
SELECT DISTINCT
	LOWER( RowPk) AS table_name
FROM
	emdVarchar
WHERE
	FieldName = 'ShortCut' ) 
	
SELECT so.name, COUNT(*) 
FROM
	sysobjects so, syscolumns sc, sub_crmTabs s
WHERE
	NOT ( sc.name  LIKE 'C[0-9][0-9]%' OR sc.name LIKE 'C2%' ) 
	AND NOT ( so.name LIKE 'C[0-9][0-9]%' OR so.name LIKE 'C2%' ) 
	AND s.table_name = so.name
	AND so.uid = 1 
	AND so.xtype = 'U' 
	AND so.id = sc.id
GROUP BY
	so.name
	HAVING COUNT(*) > 350

-- Validation.C1FieldsInC0Entities
WITH sub_crmTabs AS ( 
SELECT DISTINCT
	LOWER( RowPk) AS table_name
FROM
	emdVarchar
WHERE
	FieldName = 'ShortCut' ) 
	
SELECT so.name, COUNT(*) 
FROM
	sysobjects so, syscolumns sc, sub_crmTabs s
WHERE
	sc.name  LIKE 'C[0-9][0-9]%' 
	AND NOT ( so.name LIKE 'C[0-9][0-9]%' OR so.name LIKE 'C2%' ) 
	AND s.table_name = so.name
	AND so.uid = 1 
	AND so.xtype = 'U' 
	AND so.id = sc.id
GROUP BY
	so.name
	HAVING COUNT(*) > 200

-- Validation.C2FieldsInC0Entities
WITH sub_crmTabs AS ( 
SELECT DISTINCT
	LOWER( RowPk) AS table_name
FROM
	emdVarchar
WHERE
	FieldName = 'ShortCut' ) 
	
SELECT so.name, COUNT(*) 
FROM
	sysobjects so, syscolumns sc, sub_crmTabs s
WHERE
	sc.name LIKE 'C2%' 
	AND NOT ( so.name LIKE 'C[0-9][0-9]%' OR so.name LIKE 'C2%' ) 
	AND s.table_name = so.name
	AND so.uid = 1 
	AND so.xtype = 'U' 
	AND so.id = sc.id
GROUP BY
	so.name
	HAVING COUNT(*) > 200

-- Validation.C1FieldsInC1Entities
WITH sub_crmTabs AS ( 
SELECT DISTINCT
	LOWER( RowPk) AS table_name
FROM
	emdVarchar
WHERE
	FieldName = 'ShortCut' ) 
	
SELECT so.name, COUNT(*) 
FROM
	sysobjects so, syscolumns sc, sub_crmTabs s
WHERE
	sc.name NOT LIKE 'C2%' 
	AND so.name LIKE 'C[0-9][0-9]%' 
	AND s.table_name = so.name
	AND so.uid = 1 
	AND so.xtype = 'U' 
	AND so.id = sc.id
GROUP BY
	so.name
	HAVING COUNT(*) > 350

-- Validation.C2FieldsInC1Entities
WITH sub_crmTabs AS ( 
SELECT DISTINCT
	LOWER( RowPk) AS table_name
FROM
	emdVarchar
WHERE
	FieldName = 'ShortCut' ) 
	
SELECT so.name, COUNT(*) 
FROM
	sysobjects so, syscolumns sc, sub_crmTabs s
WHERE
	sc.name LIKE 'C2%' 
	AND so.name LIKE 'C[0-9][0-9]%' 
	AND s.table_name = so.name
	AND so.uid = 1 
	AND so.xtype = 'U' 
	AND so.id = sc.id
GROUP BY
	so.name
	HAVING COUNT(*) > 200

-- Validation.C2FieldsInC2Entities
WITH sub_crmTabs AS ( 
SELECT DISTINCT
	LOWER( RowPk) AS table_name
FROM
	emdVarchar
WHERE
	FieldName = 'ShortCut' ) 
	
SELECT so.name, COUNT(*) 
FROM
	sysobjects so, syscolumns sc, sub_crmTabs s
WHERE
	so.name LIKE 'C2%' 
	AND s.table_name = so.name
	AND so.uid = 1 
	AND so.xtype = 'U' 
	AND so.id = sc.id
GROUP BY
	so.name
	HAVING COUNT(*) > 500

(Warnung) Hinweise auf veraltete Funktionalitäten

Umbenennung der Feldeigenschaft "Nur lesen" anstelle von "Schreibgeschützt"

Die Feldeigenschaft "Schreibgeschützt" wurde bei administrativen Aufgaben in "Nur lesen" umbenannt, da die Benennung klarer Wirkungsweise der Feldeigenschaft beschreibt.

In den CURSOR-Dokumentationen wird jetzt die Feldeigenschaft einheitlich “Nur lesen” genannt.

image-20240912-180506.png

2024.3

(Warnung) Systemrelevante Informationen für Administratoren

HTTP/2

Beginnend mit CRM-Version 24.3 wird HTTP/2 für einen reibungslosen Betrieb vorausgesetzt und ist im CRM-Applikationsserver standardmäßig aktiviert. Ohne HTTP/2 treten in bestimmten Situationen deutlich verzögerte Reaktionszeiten im Web Client auf. Der Web Client reagiert für eine gewisse Zeit gar nicht mehr auf Eingaben oder Klicks.

Wichtige Hinweise beim Betrieb des CRMs hinter einem Reverse-Proxy/Web-Application-Firewall (WAF)

Mit CRM-seitig aktiviertem HTTP/2 wird nur noch ein Reverse-Proxy oder eine Web-Application-Firewall (WAF) unterstützt, die TLS-Sessions terminiert (Layer 7) und HTTP/2 unterstützt. Damit ist weiterhin der Einsatz von "Single IP" (für den Reverse-Proxy / Web-Application-Firewall) und Wildcard oder Multi-Domain (SAN) Zertifikaten möglich.

Der Hintergrund wurde hier beschrieben: https://help.cursor.de/de/hub/current/ssl-kommunikationsstrecken-zertifikate#id-(de)SSL-Kommunikationsstrecken&Zertifikate-EinsatzvonReverse-Proxy/Loadbalancer/WAF(WebApplicationFirewall)

Single Sign-On mit SAML 2.0: Änderung der Url

Bisher:

Neu:

Feldlänge von Feldern mit URL-Inhalt wurde erhöht

Es konnte vorkommen, dass die Feldlänge zu kurz war und es kam zu Fehlern.

Bei den betroffenen Feldern soll die Eingabemaske geprüft werden, ob die Eingabemaske eine Übersteuerung in C2 hat (Feldeigenschaften). Diese müsste dann auf .{0,1000} angepasst werden.

Folgende Felder wurden auf 1000 Zeichen erhöht:

  • DocuLink.Request --> von 255 -> 1000

  • CallUrl.SocialMedia --> von 255 -> 1000

  • MSTeamsLink.Activity --> ist bereits 1000 Zeichen

  • Url.CampContent --> von 255 -> 1000

  • Website.ContactPerson --> von 255 -> 1000, Einschränkung auf 60 Zeichen in der Maske in C0 entfernt, kann noch in C2 vorhanden sein

  • Website.Customer --> von 255 -> 1000

  • Website.Employee --> von 255 -> 1000

  • Website.Person --> von 255 -> 1000, Einschränkung auf 60 Zeichen in der Maske in C0 entfernt, kann noch in C2 vorhanden sein

  • Website.Telecom --> von 255 -> 1000

  • WebsitePrivate.ContactPerson --> von 255 -> 1000

  • WebsitePrivate.Employee --> von 255 -> 1000

weitere Url-Felder in der Anwendung:

  • ExternalLink1.Ticket --> waren bereits 1000 Zeichen

  • ExternalLink2.Ticket --> waren bereits 1000 Zeichen

Aktionsrechte

“Suchen administrieren”

Benutzer mit der Berechtigung “Fachadmin” durften Suchen als System-Schnellsuchen nicht markieren.

Das ist jetzt möglich.

"Erstelle Consent" und "Lösche Consent"

Aktionsrechte "Erstelle Consent" und "Lösche Consent" haben das Recht AdminOnlyManage bekommen.

Im Zuge des neuen Consent-Management-Moduls ist die Neuanlage und das Löschen von Consent-Datensätzen (ehem. OptIn) im Standard deaktiviert worden. Um Kunden-Systemadministratoren zu ermöglichen, die Rechte im Bedarfsfall zu aktivieren, wurden die beiden Aktionsrechte "Erstelle Consent" (create.element.permission.OptIn) und "Lösche Consent" (remove.element.permission.OptIn) mit dem Recht "AdminOnlyManage" ausgestattet.

Tabmanagement: Änderung der Reihenfolge von offenen Tabs

Offene Tabs können in einer gewünschten Reihenfolge per Drag and Drop platziert werden, um so in einem intuitiv vertrauten System zu arbeiten.

Der Tab "Mein Cockpit" bleibt dagegen immer an erster Stelle und ist nicht verschiebbar.

Die Funktionalität, einen Datensatz per Drag and Drop in myCRM zu ziehen entfällt

Nach dem Verschieben rücken die bisherigen geöffneten Tabs zusammen. Sind so viele Tabs geöffnet, dass zwei Zeilen entstehen, verhält sich dies so, wie wenn es einzeilig wäre. War in der zweiten Zeile nur ein weiterer Tab geöffnet und man möchte diesen verschieben, werden die Zeilen je nach Position einspaltig oder zweispaltig. Zieht man einen Tab an eine Position, an der ein Umbruch zur zweiten Zeile erfolgen würde, so wird entsprechend auch eine zweite Zeile angezeigt

image-20240616-063924.png

Verschiebung der Tabs

Aufnahme der IBAN und BIC in die Standardsuche für den Unterbereich Bankverbindungen

Bisher wurde in dem Unterbereich bei der Bankverbindung bei eingetragener IBAN und BIC keine Bankleizahl und Kontonummer generiert.
Die Felder ‘Bankleizahl’ und ‘Kontonummer’ werden aus dem Unterbereich entfernt, da sie auf der Maske nicht mehr vorhanden sind. Es wurde keine Suche angepasst, da es sich bei der Suche um die "Generierte Standardsuche" handelt.

Änderungen der Feldeigenschaften:

  • Kontonummer (AccountNumber.BankData)
    Feldeigenschaften: Suchfeld, Suchergebnisfeld und IdFeld wurden entfernt
    Sortierung wurde deaktiviert

  • Bankleitzahl (BankCode.BankData)
    Feldeigenschaften: Suchfeld und Suchergebnisfeld wurden entfernt

  • IBAN IBAN.BankData
    Feldeigenschaften: Suchfeld, Suchergebnisfeld und IdFeld wurden gesetzt
    Sortierung wurde aktiviert

  • BIC BIC.BankData
    Feldeigenschaften: Suchfeld und Suchergebnisfeld wurden gesetzt

Beziehungstyp auswählen

Wenn man bisher z.B. bei einer Anfrage über den Unterbereich einen Geschäftspartner verknüpfte, erschien hier der Dialog, um einen Beziehungstyp zu setzen.

Der Dialog wird nun nicht im Zuordnungsbrowser angeboten, wenn es zwar ein Beziehungstyp ‘Schlüsselfeld’ gibt, es dort aber keine aktiven, sichtbaren bzw. selektierbaren Schlüssel gibt.

Dies betrifft jegliche Beziehung bei der Zuordnung auf allen relevanten Entitäten (z.B. Ansprechpartner und Mitarbeiter unterhalb der Aktivität).

Die Funktionalität, hier „Ist Hauptgeschäftspartner“ auszuwählen, ist entfallen, das kann man auch im Anschluss noch über den Unterbereich setzen (Beziehungstyp bearbeiten).

Wenn man den Beziehungstyp über den Unterbereich bearbeitet, wird das entsprechende Feld der Schlüssel deaktiviert bzw. ausgegraut dargestellt, wie es auch bei boolean-Attributen der Fall ist.

Tipp

Details zur Bedienung finden Sie im Kapitel Beziehungen des Anwender-Handbuchs.

Darstellung von Schlüsseln und Beschreibung in Tooltips

Bisher wurde in dem Tooltip beim Hovern lediglich die Schlüsselbeschreibung angezeigt.

Der Tooltip setzt sich nun wie folgt zusammen: ‘Schlüsselwert - Schlüsselbeschreibung’

Diese Darstellung ist als System-Standard ausgewählt.

Tooltip-new.png

Darstellung des Tooltipps

Feld "Funktionsbeschreibung" auf Mitarbeiter-Maske

Für die Maske des Mitarbeiters (Employee) wurde ein neues Feld hinzugefügt: Funktionsbeschreibung ("Function.Employee").

Das Verhalten des Feldes:

  • Wird in dem Feld "Funktion" ("FunctionKey.Employee") ein Wert ausgewählt, wird dieser initial ebenfalls in das neue Feld Funktionsbeschreibung ("FunctionDesc.Employee") geschrieben.

  • Der Wert des neuen Feldes kann angepasst werden (Freitext). Hierbei hat das Ändern keine Auswirkungen auf ein anderes Feld.

Bei DepartmentKey.Employee und Department.Employee wurde es auch dementsprechend angeglichen.

image-20240616-093403.png

Platzierung des Feldes auf der Maske

Suchen-Kachel: Sortierreihenfolge wird durch die Einstellungen definiert

Die angezeigten Aktivitäten waren bisher nach dem Anlagedatum (CreateDate.Activity) sortiert.

Sortierung nach "Beginn am" (StartDate.Activity) ist für manche Kunden relevant, für manche aber auch C2-Felder innerhalb der Aktivitäten.

Deswegen wird eine neue Konfigurationseinstellung mit aufgenommen, welche für die Sortierung der Aktivitäten als Grundlage verwendet. Es findet keine Differenzierung zwischen den verschiedenen Aktivitätstypen statt, d.h. das vorgegebene Datumsfeld greift global für die Sortierung alle Aktivitäten. Der aktuelle Standard (CreateDate.Activity) wird als Standardwert der neuen Einstellung mitgegeben.

Eine weitere Konfigurationseinstellung wird mit aufgenommen, welche für die Datums-Anzeige der Aktivitäten maßgeblich ist. Der aktuelle Standard (CreateDate.Activity) wird als Standardwert der neuen Einstellung mitgegeben.

image-20240616-195148.png

(Warnung) Hinweise auf veraltete Funktionalitäten

Prüfung der Datenbank-Version

Ab Version 2024.3 wird beim Update geprüft, ob mindestens eine Oracle 19c Datenbank genutzt wird.

Der JBoss Server startet nicht mehr, wenn eine ältere Version genutzt wird.

2024.2

(Warnung) Systemrelevante Informationen für Administratoren

Aufnahme der Mitarbeiterkategorie zur Abbildung von Benutzern ohne Client-Anmeldung

Bisher wurde das Flag "Ist technischer Benutzer" auf dem Mitarbeiter dafür verwendet, um diesen Benutzern einen Login zu verwehren. Häufig handelte es sich dabei allerdings nicht um technische Benutzer, sondern Ressourcen. Da diese fälschlicherweise dann auch in BPM-Prozessen als ausführender Benutzer ausgewählt werden konnten, wurde eine sinnvolle Trennung der technischen Benutzer von den Ressourcen vorgenommen.

Um allerdings nicht für jeden Mitarbeitertyp eigene Felder aufzunehmen und eine Erweiterbarkeit sicherzustellen, wurde im Standard ein neues Schlüsselfeld aufgenommen:

  • Feld: Mitarbeiterkategorie
    Feldname: CategoryKey.Employee
    Feldtyp: Schlüsselfeld
    Keyrange: C0CategoryKey (DE: Mitarbeiterkategorie; EN: Employee Type
    Key 1: C0UserCat (DE: Benutzer, EN: User)
    Key 2: C0ResourceCat (DE: Ressource, EN: Resource)
    Standardwert (Vorbelegung): C0UserCat

Das Feld TechnicalUser.Employee wurde wie folgt migriert:

  • Ist technischer Benutzer = true, dann C0ResourceCat

  • Ist technischer Benutzer = false, dann C0UserCat

Für die "Mitarbeiter", die als Ressource angelegt waren, ist nun keine Anmeldung am Client (Web/App) mehr möglich (analog zum bisherigen Flag "technischer Benutzer").

Für die "Mitarbeiter", die NICHT als Ressource angelegt waren, ist die Anmeldung am Client möglich. Dies gilt auch für Mitarbeiterkategorien, die zukünftig in der Kunden-Schicht C2 angelegt werden.

Bestandskunden wird empfohlen, die technischen Benutzer zu überprüfen und zu aktualisieren. Mitarbeiterdatensätze, die lediglich als Ressource genutzt werden sollen (wie bspw. Räume), können als technischer Benutzer = false gesetzt werden. So werden die Listen technischer User bspw. in BPM für die Ausführung von Prozessen übersichtlicher.

Wurde bei Bestandskunden die Suche für den Mitarbeiterabgleich (C0EMPLOYEES_TO_MERGE) übersteuert, sollte das neue Feld in der Suche aufgenommen werden, damit auch diese Information im Rahmen des Abgleichs übertragen wird.

Außerdem wurde das Feld Mitarbeiterkategorie in die Standardmaske aufgenommen. Übersteuerte Mitarbeitermasken sollten um diese Information ergänzt werden. Der Standardwert für neu angelegte Mitarbeiter ist immer "Benutzer".

Überführen von Skriptlogik nach BPM mit Skriptbibliotheksfunktionen im Bereich der Aktivitäten

Die geänderte Serverlogik überschreibt eventuelle Logiken, die ein Kunde im C2-Maskenskript eingestellt hat. Wenn der Kunde individuelle Logiken im Maskenskript definiert hatte, muss er die neue zentrale Logik in der Skriptbibliothek übersteuern und seine Logik dort hinterlegen. Der Ort hat sich geändert und der neue Ort überschreibt den alten Ort.

Vor dem Speichern einer Aktivität werden das Datum "Ende" und evtl. "Erinnerungsdatum" berechnet. Die Daten werden nur berechnet, wenn sie beim Speichern nicht vorher verändert wurden oder leer sind. Anpassungen der Datumslogik erfolgen im Maskenskript der Aktivität oder in SC0EntityLogic.beforeSave().

Allgemein können in SC0EntityLogic.beforeSave() bzw. SC0EntityLogic.doStartBeforeSave() Logiken für weitere Bereiche hinterlegt werden.

(Warnung) Hinweise auf neue Funktionalitäten

Tabmanagement: Öffnen von Datensätzen in neuer Ebene im Hintergrund

Wenn man einen Eintrag über das Kontextmenü “in einer neuen Ebene öffnen” anklickt, öffnet sich eine neue Ebene, der Fokus bleibt aber in der Listenansicht bestehen.

image-20240320-130732.png

Datensatz in einer neuen Ebene

Umbenennung OptIn in Consent

Die Entität OptIn wurde damals für das alte Optin-Modul angelegt. Mit der Zeit stellte sich immer mehr heraus, dass die Bezeichnung "OptIn" für die Entität unpassend ist, da man für fachliche OptOuts im CRM Optins mit dem Status Ablehnung anlegen musste. Das hat zu Mißverständnissen geführt.

Daher wurde die Entität “OptIn” in "Consent" umbenannt, sodass in der Oberfläche dieser Begriff zu sehen ist (z.B. Unterbereich).

In Konsequenz wurden die beiden Schlüsselbereiche "OptIn-Herkunft" und "OptIn-Status" in "Consent-Herkunft" und "Consent-Status" umbenannt, damit auch dort die zugehörigen Schlüssel gefunden werden können.

Analog dazu wurde der Name des Opt-In-Moduls auf “Consent Management” angepasst. Die ID blieb naturgemäß unverändert.

Weitere Anpassungen wurden nicht vorgenommen.

Einschränkung der Rechte zum Anlegen und Löschen von Consent-Datensätzen

Da es aus Datenschutzgründen nicht zu empfehlen ist, OptIns manuell im CRM-System anzulegen oder zu löschen, ist im Zuge des neuen Consent-Management-Moduls die Neuanlage und das Löschen von Consent-Datensätzen (ehem. OptIn) im Standard deaktiviert worden. Da es sich bei der Consent-Entität um eine Standard-Entität handelt, hat diese Anpassung auch Auswirkungen auf Systeme, die das Consent Management-Modul zwar nicht lizensiert haben, aber die Entität zur Verwaltung von OptIns und OptOuts nutzen.

Um Kunden-Systemadministratoren zu ermöglichen, die Rechte im Bedarfsfall zu aktivieren, wurden die beiden Aktionsrechte "Erstelle Consent" (create.element.permission.OptIn) und "Lösche Consent" (remove.element.permission.OptIn) mit dem Recht "AdminOnlyManage" ausgestattet. Insofern ist es möglich, dass kundenindividuell definiert wird, ob und wer Consent-Datensätze anlegen und löschen darf.

Die Neuanlage oder das Löschen von Consent-Datensätzen über Schnittstellen sind hiervon nicht betroffen.

(Warnung) Hinweise auf veraltete Funktionalitäten

-

2024.1

(Warnung) Systemrelevante Informationen für Administratoren

MS SQL-Server Datenbank

Ab CURSOR-CRM Release 24.1 werden im Falle einer MS SQL-Server Datenbank nur noch die Versionen 2022 und 2019 unterstützt.

Das Tool “CURSOR DDAddin” welches für den Firefox vor Version 115 notwendig war, wird für das Drag&Drop von E-Mails aus Outlook auf den Webclient im Firefox ab Version 115 des Firefox nicht mehr benötigt. Die Browser Chrome und Edge haben dieses Tool noch nie benötigt.

Aktualisierung der MSSQL Reindizierungs-Skripte

Die bislang ausgelieferten MS SQL Skripte nutzen die Funktion "DBCC DBREINDEX", um die Indizes und Statistiken für alle Tabellen neu zu erstellen. Diese Funktion ist veraltet und wird in zukünftigen MS SQL Server Versionen entfernt. Hier muss der Befehl "ALTER INDEX ALL ON @tablename REBUILD" genutzt werden.

Im Installationspaket ist das aktuelle Reindizierungs-Skript enthalten und sollte bei Nutzung getauscht werden. Sind MS SQL Server Wartungspläne im Einsatz, sind keine Maßnahmen erforderlich.

Deaktivieren der Neuanlage von V1-Kacheln

Die Neuanlage neuer V1-Kacheln ist mit der Version 24.1 nicht mehr möglich. Es können nur noch V2-Kacheln erstellt werden. Die Bearbeitung bestehender V1-Kacheln ist weiterhin möglich:

  • Freigabe des Kacheleditors V2 mit 23.3

  • Ende des Windows Clients nach 25.1

  • Entfernung der V1-Kacheln mit 26.1

(Warnung) Hinweise auf neue Funktionalitäten

Darstellung von Angebotspositionen im Unterbereich

Im Unterbereich der Angebote wurden in den Angebotspositionen aktuell die Positionswerte nur in der Fremdwährung angezeigt. Zusätzlich zur Fremdwährung werden jetzt im Standard die Angebotspositionswerte in Hauswährung angezeigt.

Angebotspositionen im Unterbereich

Mit der Abschaffung der PDF-Dokumentation der Handbücher mit 23.3 verweist nun auch der Link in der CRM-Toolbar (rechts oben) auf die neue Online-Hilfe verweisen:

Angebotspositionen werden mit der Genauigkeit der in den Feldern hinterlegten Editiergenauigkeit berechnet

Die Berechnug der Angebotspositionen wird wie folgt angepasst:

  • Die interne Berechnung erfolgt mit BigDecimal-Werten mit einer Genauigkeit von 11.

  • Das Schreiben von Werten erfolgt mit der Genauigkeit, die in den Metadaten in der Nachkommastellen (Editieren) hinterlegt wurde.

Im Standard sind diese Werte für die folgenden relevanten Felder so konfiguriert:

  • Rabatt (Discount.QuoteItem) 4 Stellen

  • Einzelpreis (Unitprice.QuoteItem) 2 Stellen

  • Einzelpreis (FW) (UnitpriceFC.QuoteItem) 2 Stellen

  • Gesamtpreis (Totalprice.QuoteItem) 2 Stellen

  • Gesamtpreis (FW) (TotalpricFC.QuoteItem) 2 Stellen

  • Brutto (Gross.QuoteItem) 2 Stellen

Für die Vertragspositionen gilt die Logik analog. Aus diesem Grund wird auch die Editiergenauigkeit im Standard und den Rabattfeldern auf 4 gestellt.

Dieses Vorgehen soll Rundungsfehler in der bisherigen Logik verhindern.

Erweiterung der Logik des Personen-Rollen-Modells um die vor- und nachgestellten Titel

Anpassung und Erweiterung der Namenstitelfelder

Mit dem Release 2024.1 wurden Änderungen an dem Datenmodell in Bezug auf die Titel einer natürlichen Person (z.B. nachgestellte Namenstitel) vorgenommen. Dabei wurden neue Felder aufgenommen, welche z.T. vorher bestehende (nicht-delegierte Felder) ersetzt haben, um eine einheitliche Verhaltensweise und -logik der Titelfelder zu schaffen.

Die Zusammenhänge der Titelfelder auf den Entitäten Person, Geschäftspartner, Ansprechpartner und Mitarbeiter sind in der folgenden Tabelle aufgeführt, die geänderten Felder sind eingefärbt:

Entität: Person

Entität: Ansprechpartner

Entität: Geschäftspartner

Entität: Mitarbeiter

Sonstige Titel

Grades.Person

Grades.ContactPerson
delegiert aus Grades.Person

Grades.Customer (neu!)
delegiert aus Grades.Person

Grades.Employee
delegiert aus Grades.Person

Namenssuffix

Suffix.Person (neu!)

Suffix.ContactPerson (ersetzt!)
delegiert aus Suffix.Person

Suffix.Customer (neu!)
delegiert aus Suffix.Person

Suffix.Employee
delegiert aus Suffix.Person

Namensprädikate

Predicates.Person

Predicates.ContactPerson
delegiert aus Predicates.Person

Predicates.Customer (neu!)
delegiert aus Predicates.Person

Predicates.Employee
delegiert aus Predicates.Person

Akademischer Titel

AcademicTitle.Person

AcademicTitle.ContactPerson
delegiert aus AcademicTitle.Person

AcademicTitle.Customer
delegiert aus AcademicTitle.Person

AcademicTitle.Employee
delegiert aus AcademicTitle.Person

Besondere Änderungen hat das Feld "Suffix.ContactPerson" erhalten. Das vorher nicht-delegierte Feld wurde durch ein neues delegiertes Feld ersetzt, damit der Namenssuffix zwischen Ansprechpartnerrollen zukünftig synchronisiert wird. 

Aus diesem Grund wurde eine Migration geschaffen, welche die Werte aus bestehenden Rollen übernimmt, wenn es sich um Personen vom Typ Frau (Schlüssel-PK: 'PersonType-F'), Mann (Schlüssel-PK: 'PersonType-M') oder Divers (Schlüssel-PK: 'PersonType-D') handelt. Die Migration erfolgt nach folgender Logik:

  • Zuerst Übernahme des Wertes aus dem Ansprechpartner

    • wenn zu einer Person nur ein Ansprechpartner existiert, wird dieser Wert übernommen

    • wenn zu einer Person mehrere Ansprechpartner existieren, wird der Wert des aktuellsten Ansprechpartners übernommen (nach dem Datum der letzten Änderung)

  • Wenn kein Wert in dem/in den Ansprechpartner(n) hinterlegt ist, wird geprüft, ob ein Wert im Mitarbeiter vorhanden ist und dieser übernommen

Es erfolgt keine Migration von Werten bei inaktiven Datensätzen.

Es wird empfohlen, die betroffenen Ansprechpartner mit einem Konflikt vor dem Update zu identifizieren und den Namenssuffix zu korrigieren. Mithilfe der folgenden Datenbank-Statements können alle Daten selektiert werden, die einen Suffix enthalten und damit auf Konflikte geprüft werden sollten:

MS SQL

SQL
SELECT 'ContactPerson' as source, c.pk as sourcePk, c.suffix, p.pk AS personPk
FROM person p, contactPerson c
WHERE c.personPk = p.pk
   AND p.active = 1
   AND c.active = 1
   AND p.PersonTypeKey IN ('PersonType-F', 'PersonType-M', 'PersonType-D')
   AND c.suffix is NOT null
   AND c.suffix != ''
union all
SELECT 'Employee' as source, e.pk as sourcePk, e.suffix, p.pk AS personPk
FROM person p, employee e
WHERE e.personPk = p.pk
   AND p.active = 1
   AND e.active = 1
   AND p.PersonTypeKey IN ('PersonType-F', 'PersonType-M', 'PersonType-D')
   AND e.suffix is NOT null
   AND e.suffix != ''
order by personpk

ORACLE

SQL
SELECT 'ContactPerson' as source, c.pk as sourcePk, c.suffix, p.pk AS personPk
FROM person p, contactPerson c
WHERE c.personPk = p.pk
   AND p.active = 1
   AND c.active = 1
   AND p.PersonTypeKey IN ('PersonType-F', 'PersonType-M', 'PersonType-D')
   AND c.suffix is NOT null
   AND c.suffix != ''
union all
SELECT 'Employee' as source, e.pk as sourcePk, e.suffix, p.pk AS personPk
FROM person p, employee e
WHERE e.personPk = p.pk
   AND p.active = 1
   AND e.active = 1
   AND p.PersonTypeKey IN ('PersonType-F', 'PersonType-M', 'PersonType-D')
   AND e.suffix is NOT null
   AND e.suffix != ''
order by personpk

(Warnung) Hinweise auf veraltete Funktionalitäten

-

2023.3

(Warnung) Systemrelevante Informationen für Administratoren

OptIn: Erweiterung der Entitätenverknüpfung
Die Relation zwischen den Entitäten ContactPerson und OptIn wurde um eine n:m-Relation erweitert. Die 1:n-Relation zwischen Ansprechpartner und OptIn besteht nach der Anpassung weiterhin, jedoch ist diese Relation über die Maskenkonfiguration nun im Standard ausgeblendet. Stattdessen ist die neue n:m-Relation eingeblendet, welche aber auch die 1:n-Relation enthält.
Kunden, welche die Entität OptIn bereits nutzen, sollten die Konfiguration nach dem Update überprüfen und gegebenenfalls anpassen, um das gewünschte Verhalten zu erreichen.

(Warnung) Hinweise auf neue Funktionalitäten

Verhalten von NotificationEntityManager.createOrUpdateNotification und der dazugehörigen Methode in BPM

Die neue Arbeitsweise

  • Der Eskalations-Timer erzeugt für jede Stufe (Eskalation, Erinnerung und Ablauf) eine eigene Benachrichtigung

  • Die bisherigen Benachrichtigungen werden nicht mehr gelöscht bzw. überschrieben

  • Die Datenbanksperre tritt nun nicht mehr auf

  • Die Methode überschreibt nur noch eine Benachrichtigung, wenn der Primärschlüssel gepflegt ist, nicht mehr nur anhand von den Feldern EntityName und EntityPk. Denn zu einem Ticket kann es mehrere Benachrichtigungen geben.

Zuvor hat diese Methode einen Benachrichtigungs-Datensatz vom Typ ENTITY anhand der Werte EntityName und EntityPk gesucht. Gab es dort mehrere Einträge, wurden diese bis auf einen gelöscht und der letzte verbliebene geändert. Gab es keinen passenden Eintrag, wurde ein neuer Satz angelegt.

Diese Löschung wurde nun entfernt. Diese Verhaltensänderung existiert zwar theoretisch, praktisch führte sie aber zu dieser Endlosschleife und konnte somit nicht korrekt durchgeführt worden sein.

Das neue Update verhält sich nun wie alle anderen BPM-Methoden. Das Update findet anhand des Primärschlüssels statt. Dies hat nun Auswirkungen auf dem Eskalationstimer selbst, da hier evtl. zwei Benachrichtigungen erzeugt werden, einmal zur Erinnerung und einige Zeit (Tage, Wochen) evtl. eine für das Ablaufdatum des Tickets. Diese Verhaltensänderung betrifft alle Kunden, die die Tickets mit dem Timer schon einsetzen. Aber es ist dann evtl. nur einen Eintrag in der Taskliste mehr, den der Anwender wie gewohnt auf erledigt setzen muss.

2023.2

(Warnung) Systemrelevante Informationen für Administratoren

Lese- und Bearbeitungsmodus auf Masken

Durch die Einführung des Lese- und Bearbeitungsmodus sowie der Feldeigenschaft zur Darstellung von Nachschlagefeldern im Web Client und das Entfernen der Leerschlüssel aus der Anwendungsoberfläche ergeben sich unter Umständen Handlungsbedarfe für Systemadministratoren im Rahmen des Updates auf die Version 23.2, die nachfolgend themenspezifisch aufgeführt werden.

Eine fachliche Beschreibung der Änderungen befindet sich in der Release-Dokumentation. Die neue Benutzeroberfläche ist nur im Web Client verfügbar und kann nicht abgeschaltet werden (keine System- oder Benutzereinstellung vorhanden). Nach dem Update werden die Masken automatisch im neuen Lese- und Bearbeitungsmodus dargestellt.

Prüfung von Masken / Maskenskript

Für eine optimierte Benutzererfahrung im Lese- und Bearbeitungsmodus wurden Anpassung an allen C0-Standardmasken vorgenommen. Die Anpassungen beziehen sich hauptsächlich auf

  • die Anpassung von Spalten, Collapsibles und Tabs für eine bessere Lesbarkeit im Lesemodus

  • die Einführung einer Maximalbreite von 1500px (2-/3-spaltige Layouts) bzw. 900px (1-spaltiges Layout) für eine Anwenderfokus-Zentrierung

  • die Optimierung von Abständen (z.B. auf einer Karte) für eine luftigere Darstellung von Inhalten

  • eine sprechende Benennung von Tabs, Collapsibles etc. zur besseren Verwendbarkeit in Maskenskripten oder Prozessen

Die Standardmasken erscheinen mit einem Update auf die Version 2023.2 automatisch im Layout und können nicht mehr zurückgesetzt werden. Wenn die Masken im alten Layout beibehalten werden sollen, müssen diese vor dem Update durch den Administrator übersteuert werden.

Mit einem Statement kann man eine Übersicht der betreffenden Standardmasken erhalten:

Oracle und MS SQL
SQL
SELECT t1.MaskId, t1.EntityName, t1.CustLayer, t2.ConfigGroup FROM
    (SELECT MaskId, EntityName, CustLayer FROM Mask WHERE CustLayer IN ('C2', 'C1')) t1
LEFT JOIN
    (SELECT ConfigGroup, MaskId, EntityName FROM MaskConfig WHERE MaskId IS NOT null) t2
ON (t1.MaskId = t2.MaskId AND t1.EntityName = t2.EntityName)

Eine Aufstellung der größeren Änderungen pro Maske zur Prüfung von Maskenskripten, Prozessen oder Testfällen ist auf Anfrage erhältlich. Auch eine Überarbeitung von Masken in C1 (EVI/TINA) hat stattgefunden, Informationen dazu befinden sich in den entsprechenden Releasenotes.

Es wird empfohlen, nach dem Update alle Individualmasken mit dem Lese- und Bearbeitungsmodus zu testen. Notwendige Anpassungen können beinhalten:

  • Anordnung von Spalten / Feldern: Spalten sollten sinnhaft genutzt bzw. Felder nebeneinander nur gezielt eingesetzt werden, ohne Verwirrung zu stiften.

  • Verwendung von Tabs vs. Collapsibles: Insbesondere im Lesemodus lassen sich Kartenüberschriften mit Tabs besser erkennen. Durch die Annäherung von Labels und Feldern an die Darstellung von Collapsible-Überschriften, nimmt der Anwender die Tabüberschriften einfacher wahr.

  • Maximalbreiten: Damit sich Komponenten nicht unendlich ausbreiten, empfiehlt sich die Konfiguration von Maximalbreiten.

  • Ausrichtung von Zahlenfeldern: Zahlenfelder sollten entsprechend dem Kontext sinnhaft ausgerichtet werden, um einheitliche Fluchten zu schaffen und Sprünge in der Maske zu vermeiden.
    (siehe hierzu auch Abschnitt "Prüfung der Feldeigenschaften")

  • Beschränkung des vertikalen Vergrößerns von Komponenten: Aufgrund des Ausblendens leerer Felder können sich bei häufiger Nutzung große leere Flächen / Karten ergeben.

  • Ein- und Ausblenden von Feldlabels: Zu einem Feld zugehörige Labels werden im Lesemodus ein- und ausgeblendet, wenn das Feld leer ist. Erfahrungsgemäß kommt es an einzelnen Stellen vor, dass das Label vor dem Feld tatsächlich nicht dem Feld zugeordnet ist und korrigiert werden muss.

Mehr Details und Empfehlungen für die optimale Konfiguration von Masken für den Lese- und Bearbeitungsmodus sind auf Anfrage erhältlich.

Die Methoden setTabEnabled und setTabVisible deaktivieren Tabs im Windows Client. Im Web Client war es bisher so, dass setTabEnabled das Tab de-/aktiviert (Deaktivierung = ausgegraut und nicht klickbar) hat, während setTabVisible das Tab un-/sichtbar gemacht hat. Im Rahmen der UI/UX-Umsetzungen wurde setTabEnabled im Web Client auf setTabVisible umgestellt, sodass zukünftig setTabEnabled und setTabVisible im Web Client die gleiche Auswirkung haben (un-/sichtbar). Eine Anpassung des Maskenskripts ist aktuell nicht notwendig. Perspektivisch wird mit dem EOL des Windows Clients auch setTabEnabled als Skriptmethode entfernt.

Prüfung der Feldeigenschaften

Nun ist es insbesondere bei der Überarbeitung der Maskendarstellung von Vorteil, dort eine aufgeräumte UI zu präsentieren und die Mehrheit der Nachschlagefelder ohne Schlüssel nur mit Beschreibung anzuzeigen. Hierfür wurde eine Möglichkeit geschaffen, die Darstellung explizit im Webclient anzupassen, ohne die Darstellung und Arbeit in den anderen Clients zu beeinflussen. Da es fachlich nur im Kontext sinnvoll entschieden werden kann, ob die Darstellung eines Schlüssels benötigt wird, ist die Darstellung pro Feld einstellbar. Die vormals dafür zuständige Systemeinstellung wurde entfernt.

Die Feldeigenschaft findet sich in einem Auswahlfeld mit folgenden Optionen:

  • Nur Beschreibung

  • Nur Schlüssel

  • Schlüssel und Beschreibung

Der Default dieser Feldeinstellung für alle Nachschlagefelder ist "Nur Beschreibung". Eine Ausnahme stellen numerische Schlüsselfelder dar: Der Default von Schlüsselfelder mit numerischen Schlüsseln wird auf "Schlüssel und Beschreibung" stehen. Die Feldeigenschaften der Anzeige von Icons sowie der Listendarstellungen bleibt davon unberührt.

Da die neue Feldeigenschaft jegliche vorigen Einstellungen (insb. die ehemalige Systemeinstellung bzw. die Feldeigenschaften "Schlüsselfeld anzeigen" und "Beschreibung anzeigen") überschreibt, ist empfohlen, nach Abschluss des Updates die Anzeige im Web Client zu überprüfen und die Darstellung der Beschreibungen im Einzelfall anzupassen.

Wenn trotz Feldeinstellung "Nur Beschreibung" auch der Schlüssel angezeigt wird, kann es daran liegen, dass die Beschreibung so konfiguriert ist, dass der Schlüssel in der Beschreibung angezeigt wird. Die Beschreibung muss in diesem Fall angepasst werden.

Der häufigste Störfaktor für eine homogene Darstellung von Informationen im Lese- und Bearbeitungsmodus ist die Ausrichtung von Zahlenfeldern. Standardmäßig sind alle Zahlenfelder rechtsbündig eingestellt. Je nach Kontext kann es vorkommen, dass sich ein rechtsbündiges Zahlenfeld im Umfeld von linksbündigen Textfeldern befindet. Im Lesemodus hat es dann den Anschein, als wäre das Zahlenfeld in der Maske "verrutscht". Daher sollten Zahlenfelder nach dem Update überprüft und entsprechend dem Kontext sinnhaft ausgerichtet werden, um einheitliche Fluchten zu schaffen und Sprünge in der Maske zu vermeiden.

Sollen eine größere Anzahl an Zahlenfelder linksbündig umgestellt werden, kann eine Unterstützung auf Anfrage erfolgen und entsprechende Statements zur Verfügung gestellt werden.

Damit die Pflichtfeldeigenschaft zukünftig ihren eigentlichen Sinn erfüllen kann, wurde weiterhin die Feldeigenschaft "Leerschlüssel erlauben" entfernt. Ab der Version 23.2 gibt es somit nur noch die Unterscheidung zwischen Pflichtfeld ja/nein. Handelt es sich um ein Pflichtfeld, muss ein sinnhafter Wert eingetragen werden. Soll weiterhin eine Art Platzhalter für undefinierte Werte verwendet werden, muss dieser als Schlüssel manuell angelegt werden (z.B. "nicht zutreffend" / "keine Aussage möglich" / "undefiniert").

Ist ein Feld (vor der Umstellung) als Pflichtfeld definiert, aber mit einem erlaubten Leerschlüssel, muss dieses Feld zukünftig (nach der Umstellung) bei der nächsten Änderung durch den User nachgepflegt werden. Bei der Bearbeitung eines Datensatzes, bei dem in einem Pflichtfeld ein Leerschlüssel eingetragen war, kommt spätestens beim Speichern der Hinweis auf das noch zu befüllende Pflichtfeld (siehe Fall 2 in untenstehender Aufstellung).

Die Migration der Feldeigenschaften ist wie folgt:

Fall

Alte Werte

Neuer Wert

Erläuterung

1

Pflichtfeld = true
Leerschlüssel = false

Pflichtfeld=true

Keine Änderung zum bisherigen Verhalten.

2

Pflichtfeld = true
Leerschlüssel erlaubt = true

Pflichtfeld=true

In Pflichtfeldern, in denen der Leerschlüssel bisher erlaubt war und damit die Pflichtfeldeigenschaft damit obsolet gemacht haben, sind zukünftig tatsächliche Pflichtfelder.

Die fachliche Richtigkeit sollte hier überprüft werden!

3

Pflichtfeld = false
Leerschlüssel erlaubt = true

Pflichtfeld=false

Keine Änderung zum bisherigen Verhalten.

4

Pflichtfeld = false
Leerschlüssel erlaubt = false

Pflichtfeld=true

Felder, in denen tatsächlich kein Leerschlüssel erlaubt war, haben sich de facto  wie Pflichtfelder verhalten. Insofern wird hier die Pflichtfeldeigenschaft gesetzt.

In den neueren Versionen war diese Kombination bereits über die Oberfläche nicht mehr möglich, da automatisch Pflichtfeld = true gesetzt wurde, sobald Leerschlüssel erlaubt = false war.

Zur Identifizierung der betreffenden Felder des oben genannten zweiten Falles steht ein Statement zur Verfügung, welches vor dem Update ausgeführt werden muss. Sollen diese Felder zukünftig keine Pflichtfelder sein, muss die Eigenschaft Pflichtfeld = true vor oder nach dem Update auf Pflichtfeld = false geändert werden.

Oracle und MS SQL
SQL
SELECT Pk FROM AttributeMetaData 
WHERE TableName in (SELECT Pk FROM EntityMetaData)
       AND EmptyKeyAllowed = 0 AND LookupField = 1 AND NotNullField = 0
ORDER BY Pk
Anpassung von BPM-Prozessen

Prozesse, welche neue Datensätze anlegen und diese mit einem Prozess-Ende-Ereignis vom Typ "Öffnen" für den Anwender in der Detailansicht öffnen, damit der Anwender noch fehlende Informationen (wie z.B. Pflichtfelder) ergänzen kann, werden grundsätzlich im Lesemodus geöffnet. Die betreffenden Prozesse sollten auf ein Prozess-Ende-Ereignis vom Typ "Neuanlage" umgestellt werden, um eine nahtlose Benutzererfahrung zu gewährleisten.

Anpassungen von Testfällen (Test-Studio)

Datensätze werden in der Detailansicht grundsätzlich im lesenden Modus geöffnet. Hierbei muss zukünftig beachtet werden, dass leere Felder ausgeblendet sind. Insofern können Testfälle, welche auf potentiell leere Felder referenzieren, auf Fehler laufen und müssen angepasst werden. Hierfür gibt es mit der neuen Version des Test-Studios 2.x ein neues Keyword enter edit mode, welches für den Aufruf des Bearbeitungs-Modus verwendet wird. 

Beispiel: Ein Test führt eine Suche aus und springt aus der Suchergebnis-Liste in die Detailansicht eines Datensatzes. Möchte man hier verlässlich auf leere Felder prüfen bzw. leere Felder befüllen, muss in den Bearbeitungs-Modus gewechselt werden. 

Beispiel: Werden innerhalb eines Tests BPM-Prozesse ausgeführt werden, die mit einem Nachrichten-Ende-Ereignis vom Typ "Öffnen" in der Detailansicht weiterarbeiten, um leere Felder zu prüfen bzw. leere Felder zu befüllen, muss in den Bearbeitungsmodus gewechselt werden.

Weiterhin ist die Einzelbearbeitung aktuell noch nicht zugänglich für das Test-Studio. Jegliche Änderungen am Datensatz müssen im Bearbeitungs-Modus durchgeführt werden. 

Hinweise auf betroffene Testfälle geben die Keywords execute search und open [nth] dataset bzw. open {nth] dataset from subdata
In der Praxis hat sich bewährt, vor einer Detailprüfung der fehlerhaften Testfälle und der Suche nach der expliziten Fehlerursache das Keyword enter edit mode vor der Fehler-Stelle einzufügen. Dies schafft häufig in einem Großteil der betroffenen Testfälle bereits Abhilfe, sodass sich in diesen Testfällen die Detailprüfung und der damit zusammenhängende Aufwand gespart werden kann.

Durch das Ausblenden von leeren Tabs kann es weiterhin in Spezialfällen dazu kommen, dass man innerhalb eines Testfalls nach dem Wechsel in den Bearbeitungs-Modus zusätzlich das betreffende Tab öffnen muss, um dort Inhalte zu prüfen oder zu manipulieren.

Beispiel: In einer Tabgruppe ist das erste Tab im Lesemodus ausgeblendet, da alle Felder auf diesem Tab leer sind. Es ist im Lesemodus lediglich das zweite Tab sichtbar. Nach dem Wechsel in den Bearbeitungsmodus ist weiterhin das vorher sichtbare Tab (zweite) geöffnet. Sollen innerhalb des Testfalls Felder auf dem ersten Tab geprüft oder manipuliert werden, ist ein expliziter Wechsel auf das erste Tab notwendig.

Aufgrund von Änderungen an den Standardmasken sind einzelne Felder nicht mehr auf den ursprünglichen Tabs oder Collapsibles zu finden. Referenzieren Testfälle auf die betroffenen Tabs / Collapsibles / Felder, müssen diese angepasst werden.

Beispiel: Auf der Standard-Aktivitätenmaske wurden die Felder des Kampagnen-Tabs "C0CampaignTab" auf ein eigenes Kampagnen-Collapsible "C0CampaignCollapsible" verschoben, welches in der rechten Spalte immer sichtbar ist. Der Schritt in einem Testfall zum Öffnen des Kampagnen-Tabs, um dort beispielsweise eine Kampagne und Kampagnenphase zu verknüpfen, ist nun nicht mehr anwendbar und muss angepasst werden.

Mit dem Entfernen der Leerschlüssel aus der Anwendungsoberfläche sind unter Umständen weitere Anpassungen an Testfällen im Test-Studio notwendig. Der Wert emptykey ist nun nicht mehr als Parameter für das Überprüfen von Nachschlagefeldern oder Datumsfeldern verfügbar und muss durch einen gültigen Wert ersetzt werden.

Zuletzt kommt es aufgrund der neuen Feldeigenschaft für Nachschlagefelder "Anzeige im Web Client" dazu, dass eine Prüfung auf den Inhalt eines Feldes fehlschlagen kann.

Beispiel: Innerhalb eines Testfalls erfolgt die Feldprüfung >>"ActTypeKey.Activity" should be "ERINNERUNG"<<. Nun steht im Standardfall nach dem Update die Feldeigenschaft zur Anzeige im Web Client in diesem Feld auf "Nur Beschreibung", sodass der Testfall zukünftig auf >>"ActTypeKey.Activity" should be "Erinnerung (kein Abgleich mit Groupware)"<< prüfen muss.

Aktualisierung Datenbank-Treiber und Aktivierung der Verschlüsselung unter MSSQL

Für CURSOR-CRM wurden die Datenbank Treiber auf den aktuellen Stand gebracht. Microsoft hat im Rahmen seiner Cloud-Strategie Änderungen am SQL-Treiber vorgenommen und die Verschlüsselung zur Datenbank im Standard aktiviert. Da OnPremise Installationen üblicherweise auf eine selbstsigniertes Zertifikat setzen, schlägt die Verbindung zur MSSQL Datenbank mit dem Update auf Version 23.2 fehl. Siehe https://github.com/dotnet/SqlClient/blob/main/release-notes/4.0/4.0.0.md#breaking-changes.

Um das Problem zu umgehen, wird die Prüfung des Server-Zertifikates im Standard deaktiviert. Für Cloud-Umgebungen kann Prüfung wieder aktiviert werden.
Dazu muss in der MS SQL Server URL der Parameter "trustServerCertificate=true" ergänzt werden. In Cloud Installationen kann der Parameter deaktiviert werden (;trustServerCertificate=false).

Beispiel:

CODE
jdbc:sqlserver://<server>:1433;databaseName=<database>;trustServerCertificate=true

(Warnung) Hinweise auf neue Funktionalitäten

Entität 'Produkte'

Die Produkt-Maske wurde um ein neues Feld erweitert, so dass ein Produktbild hinzugefügt werden kann.

Desktop-Benachrichtigungen anzeigen

Die Option ist nun standardmäßig aktiv. Es stellt eine Änderung der Benutzereinstellungen dar, die jeden betrifft. Jedoch kann sie jederzeit wieder zurück genommen werden. Der Grund ist: viele haben die Benachrichtigungen deaktiviert oder wissen gar nicht, dass es sie gibt. Nun werden sie sichtbar, insbesondere, da sie optisch aufgewertet wurden.

Rich Client-Favoriten (myHelvis)

Im Rich Client gibt es einen Ordner für die Favoriten in der Kopfzeile. Die Favoriten im Web Client sind allerdings unabhängig von den Favoriten im Rich Client.

Nach dem Update werden Favoriten inkl. Unterordner einmalig in den Ordner "Favoriten-Import" im Hauptordner von MyHelVIS angehängt.  Ordner und Favoriten heißen identisch zum Favoriten-Menü. Favoriten im Menü sind unverändert und funktionieren ebenfalls.

Vorgangsmanagement: Rückbau des Schreibschutz bei die Vorgangstypen

Es wurden Feldeigenschaften und Patterns geändert, damit der Vorgangstyp auch nach der Neuanlage geändert werden kann.

Mit folgenden Anpassungen ist es nun wieder möglich:

  • Auf dem Vorgang: Vorgangs-Nr. (TicketNo.Ticket)
    Alter Pattern Wert (für Bestandskunden): #PATTERN#[$!!$VALUE--TicketType$!!$-$!!$NUMBER7]
    Neuer Pattern Wert: #PATTERN#[$!!$NUMBER7]

  • Auf dem Vorgang: Typ (TicketType.Ticket)
    Die Feldeigenschaft "Initial schreiben" ist im Standard wieder deaktiviert

Ausblenden der Anruf-Buttons via MS-Teams

Bisher konnte man die Teams-Integration per Systemeinstellung "aktivieren". Diese führte dazu, dass die Teams-Buttons in Feldern und Toollbars freigeschaltet werden. Es kommt aber vor, dass die Nutzung von Teams nur für interne Anrufe freigegeben ist und die Teams-Buttons im CRM (Anrufen über die E-Mail-Adresse) bei Ansprech- und Geschäftspartnern keine Funktion haben bzw. bei Aufruf zu einer Meldung in Teams führen.
Die Systemeinstellung soll "Externe Anrufe mit MS Teams aktivieren" legt fest, ob die Anruf-Buttons von Teams systemweit ausgeblendet werden.

Dies betrifft folgende Stellen:

  • Geschäftspartner E-Mail-Feld

  • Geschäftspartner Toolbar

  • Ansprechpartner E-Mail-Feld

  • Ansprechpartner Toolbar

  • Nachschlagefeld Ansprechpartner (z.B. Aktivität mit)
    Die Funktion "Microsoft-Teams Besprechung erstellen" kann weiterhin genutzt werden. Alle Buttons bei Mitarbeitern bleiben bestehen.

Anpassung an den Prozessmasken

Um für den Anwender einen optimalen Workflow in BPM-Prozessen zu ermöglichen, sind Anpassungen an den Prozessmasken-Buttons (insb. "Fortfahren") durchgeführt worden. Der Anwender kann die notwendigen Infomationen im Formular nacheinander ausfüllen und direkt im Anschluss am unteren rechten Rand des jeweiligen Formulars den Prozess fortführen. Voraussetzung hierfür ist, dass die Prozessmaske auf erster Ebene in einer Spalte mit Maximalbreite konfiguriert ist. Ist keine Maximalbreite konfiguriert, wird der Fortfahren-Button am unteren rechten Rand angezeigt der Maske angezeigt. Wird in der Maske die Eigenschaft "vertikal vergrößern" nicht genutzt, kann sich der Fortfahren-Button direkt ans untere Ende des Formular anschließen, auch wenn die Komponente (z.B. Karte) nicht bis ans untere Ende des Fensters reicht.

Abbildung: BPM-Maske im Card-Layout und Positionierung des Fortfahren-Buttons in BPM-Prozessen

Die Funktionen "Prozess abbrechen" und "Prozess pausieren" sind nun im Schließen des Tabs platziert. Ein Klick auf den Schließen-Button des Tabs führt zu einer Abfrage, ob der Prozess unterbrochen (= Maske schließen, Variablen werden gespeichert, Benachrichtung im Benachrichtigungsmenü erscheint) oder abgebrochen (= Löschen der gesamten Instanz, räumt aber ggf. vorher angelegte Daten nicht auf) werden soll.

Weiterhin wurden nun auch alle BPM-Masken von C0-Prozessen überarbeitet und in das neue Card-Layout überführt. Die neuen BPM Standardmasken werden in nicht übersteuerten C0-Prozessen automatisch veröffentlicht und sind somit in der Anwendung sichtbar.
Wurde ein C0-Prozess übersteuert, aber es wird noch weiterhin die C0-BPM Maske verwendet, muss der Prozess einmal neu veröffentlicht werden, damit die neue C0-BPM-Maske in der Anwendung sichtbar ist.

Fehlermeldung bei einem Berechtigungsproblem in der REST-Schnittstelle

Wird versucht ein schreibgeschütztes Feld per Rest-Schnittstelle zu ändern, kommt es nun zu einer Sicherheits-Fehlermeldung und das Speichern wird abgebrochen. Dies Anpassung ist eine Verhaltensänderung, die bei bestehenden Rest-Schnittstellen-Aufrufen zu einem Fehler führen konnte, wenn Felder nicht beschrieben werden können.

Für CURSOR-BPM wird die Methode WorkSpaceScriptUtils.saveEntry() um den optionalen Parameter errorOnChangedReadonlyFields erweitert, der zur selben Verhaltensänderung wie oben führt.

errorOnChangedNotWriteableFields

  • true, wenn schreibgeschützte Felder geändert wurden, wird eine ScriptingException geworfen.

  • false, es werden schreibgeschützt Felder beim Speichern ignoriert. false ist der Standardwert.

Bereichsranking für die COMMAND Suchergebnisse

Das Ranking der unterschiedlichen Bereiche kann über eine Konfigurationseinstellung verändert werden, so dass man einzelne Bereiche höher gewichten kann und damit die Treffer aus diesem Bereich weiter oben angezeigt werden.

Abbildung: Konfiguration der Gewichtung

In der Anwendungsvariable EnhancedIndexSearcher kann die Gewichtung für Bereiche konfiguriert werden.

Die Gewichtung erfolgt prinzipiell nach folgender Logik: 

  • Wenn kein Eintrag für einen Bereich vorhanden ist der Score 1.0

  • Alles unter 1.0 wertet den Bereich ab

  • Alles über 1.0 wertet den Bereich auf

Folgende Scoring-Einstellungen werden ausgeliefert:

  • Geschäftspartner: 1.5

  • Ansprechpartner: 1.3

  • Mitarbeiter: 1.2

  • Aktivität: 0.25

  • Dokumente: 0.1

  • Projekte: 0.25

  • Vorgang: 0.25

Berücksichtigung des "Callback URL"-Aufbaus mit Port 443

Beim Aufbau der OAuth-Callback-URL wird HTTPS berücksichtigt und somit der 443-Port aus der URL entfernt wird.

Wurden in Drittsystemen URLs mit Bezug auf das CRM hinterlegt, kann es nötig sein, diese anzupassen.

  • Wurden bislang die Portangaben x8443 genutzt, so ändert sich nichts.

  • Wurde bislang die Portangabe 443 genutzt, so kann oder muss (abhängig vom Drittsystem) die Portangabe entfallen.

Workflows für automatischen Groupware-Abgleich und E-Mail-Import als Timer

Mit der Version 2023.2 wurden die Workflows für den BCC-Importer durch einen Timer ersetzt. Der Standard Workflow WKF_ImportMailsByBCC wurde automatisch migriert.

Abbildung: Timer "Automatischer Groupware-Abgleich"

  • Der Timer wird alle 10 Minuten ausgeführt

  • Im Auslieferungsstandard ist der Timer deaktiviert

  • Beim Update wird der Timer automatisch aktiviert, wenn beim Kunden eine entsprechende Timer-Aktion konfiguriert war

Für eigene Workflows sind folgende manuelle Schritte notwendig:

  • Änderung an der Mail-Konfiguration

    • Der Haken automatisch importieren, muss bei allen Mail-Konfigurationen manuell gesetzt werden, die zuvor über den Workflow importiert wurden.

  • Anpassung Skriptbibliothek SC0MailMailUtils

    • Übersteuern der Methode getMailConfigToUpdateAfterImport: In der Methode müssen alle Mail-Konfigurationen aufgenommen werden, die für die BCC-Importer-Workflow Logiken
      verwendet wurden.

    • Übersteuern der Methode getValuesToSetAfterImport: Für jede Mail-Konfigurationen werden hier die Feldvorbelegungen für die Aktivität konfiguriert. Z.B. den Status auf erledigt setzen, die Aktivitätenart ändern...

  • Anpassen des Timer Zeitraums

    • Ggf. ist der Zeitraum des Timers "Automatischer Mail-Import von E-Mail-Konfigurationen" anzupassen. Der Default-Wert für den Zeitraum beträgt 10 Minuten.

Automatisch Mails bei Nachrichten erhalten

Anwender können einstellen und entscheiden, ob zusätzlich zu den Nachrichten im CRM-System noch Mail-Benachrichtigungen für Erwähnungen, Delegationen, Mitteilungen oder Veränderungen in beobachteten Datensätzen automatisch versendet werden sollen, um einen korrekten Informationsfluss zu gewährleisten und sicherzustellen, dass keine Informationen verloren gehen.

Abbildung: Benutzereinstellungen für Mail-Benachrichtigungen

Abbildung: Mailvorlage für eine CRM-Benachrichtigung

(Warnung) Hinweise auf veraltete Funktionalitäten

Der Workflow SWKF_calculateIBAN wird im CURSOR-Standard entfernt

Der Workflow SWKF_calculateIBAN wird im CURSOR Standard entfernt. Dieser adressiert einen ganz spezifischen Prozess und wird von neuen Kunden und den meisten Bestandskunden nicht mehr eingesetzt. Der Prozess wird für Neukunden und Bestandskunden gelöscht. Kommt der Prozess bei Bestandskunden als Timer Aktion zum Einsatz, wird der Workflow in die Kundenschicht verschoben und muss später im Projekt als Prozess migriert werden.

Erlauben von "ForRead"-Methoden

Die "ForRead"-Methoden der WorkSpaceScriptUtils wurden für die Nutzung im EventRuleScript freigeschaltet und in der Autovervollständigung aufgenommen.
Die WorkSpaceScriptUtils Methoden, die einen IScriptWorkSpace benötigen, werden aktiv unterbunden, sie werfen dann eine NotSupportedRuntimeException.
Bisher war die Nutzung der Methoden im EventRuleScript nicht erlaubt, sie wurden allerdings nicht explizit geprüft.

Liste "ForRead"-Methoden:

  • WorkSpaceScriptUtils.searchCount

  • WorkSpaceScriptUtils.searchForRead

  • WorkSpaceScriptUtils.searchForReadOrderedBy

  • WorkSpaceScriptUtils.searchEntryForRead

Einige Methoden, die einen IScriptWorkSpace nutzen (ggf. auch nur intern), die Methoden sind auch nicht unterstützt im EventRuleScript:

  • WorkSpaceScriptUtils.calculateItem(AttributeContainer)

  • WorkSpaceScriptUtils.copyEntry(WorkSpace,int,String)

  • WorkSpaceScriptUtils.createEmptyWorkSpace(String)

  • WorkSpaceScriptUtils.createEntry(WorkSpace,int,AttributeContainer)

  • WorkSpaceScriptUtils.search(String)

  • WorkSpaceScriptUtils.searchDoublets(AttributeContainer, String)

  • WorkSpaceScriptUtils.deleteEntry(String, String)

  • WorkSpaceScriptUtils.createDefaultEntry(String)

  • WorkSpaceScriptUtils.linkEntries(AttributeContainer, String, List<AttributeContainer>)

  • WorkSpaceScriptUtils.unlinkEntries(AttributeContainer, String, List<AttributeContainer>)

WattIsLos-Kachel

WattIsLos-Kachel wurde aus dem Standard entfernt.

2023.1

(Warnung) Systemrelevante Informationen für Administratoren

Technologie Updates

Mit der Version 2023.1 fand ein umfassendes Update der technischen Basis (Bibiliotheken) von CURSOR-CRM statt.

Folgende Komponenten sind dabei betroffen:

  1. Java 17

  2. JBoss EAP 7.4.x

  3. Groovy 3.x (Maskenskript, BPM, Jasper Reports)

  4. Activiti 7.0 (BPM)

  5. Primefaces (Web Client)

  6. Jasper Reports 7.9

Maskeneditor

Mindestbreite-Eigenschaft wurde entfernt

Folgende Einstellungen wurden angepasst:
Mindestbreite  (min-width),  Standardbreite (flex-basis) => Breite (flex-basis)
Labels, Buttons und Felder bekommen nur einen Wert für die Breite. Dieser wird in Pixel angegeben und ist standardmäßig weiterhin 120px. Über "Horizontal auffüllen" kann die Breite darüber hinaus erweitert bzw. maximiert werden.

Für bestehende Masken, in welchen der Wert "Mindestbreite" (min-width) gesetzt ist wird dieser beim Laden der Maske in den Editor entfernt.

Die Eigenschaft "Mindestbreite" war nur sichtbar, wenn "Horizontal auffüllen" nicht gesetzt war. Ein Feld wird nicht kleiner als der bei Standardbreite angegebene Wert, der Wert Mindestbreite war für den Fall vorgesehen, dass die Standardbreite in % angegeben wird, was in der Praxis wenig genutzt wurde.

Rahmen wurden entfernt

Die Einstellung "Rahmen anzeigen" bei Spaltencontainern, Spalten, Tabgruppen, Collapsibles, Infoboards, Webviews, Auswertungen wurde entfernt. Der Button behält den Rahmen und soll ausschließlich mit diesem dargestellt werden: ein Button sieht immer aus, wie ein "Button" und nie wie ein Label.
Eine Box kann einen Rahmen erhalten. Wenn beim Maskendesign ein Element mit Rahmen verwendet werden soll, kann dieses in die Box gepackt werden. Button: "Rahmen anzeigen" und "Als Schaltern anzeigen" sind als Default gesetzt und können nicht konfiguriert werden.

Status von Terminen und Besprechungen

Termine, die aus dem CRM nach Outlook exportiert oder aus Outlook ins CRM importiert werden, werden von Outlook entkoppelt. Das Mapping wird aufgelöst.

Die wesentlichen Merkmale des Abgleichs:

  • Wiedervorlage, Termin und Besprechung werden von der Inhaus nach Outlook immer mit dem default-Wert von Outlook synchronisiert.

  • Termine aus Outlook unter Vorbehalt, beschäftigt (ohne Teilnehmer), gebucht und frei werden von Outlook nach Inhaus als Termine synchronisiert

  • Termine aus Outlook, die Teilnehmer haben (Besprechungen, werden von Outlook nach Inhaus als Besprechung synchronisiert.

  • Wiedervorlagen, die im System sind, werden entsprechend wie Termine behandelt.

  • Der Schlüssel wird "als nicht mehr auswählbar" im Standard markiert.

  • Neue Wiedervorlagen werden nicht mehr erzeugt.

Länge für Produktbezeichnung wurde erweitert

Text-Länge für Produktbezeichnung auf Produkten (PrdName.Product) und Angebotstexten (ProdDescName.ProdDesc) wurde von 50 auf 100 Zeichen erweitert.

Datenbankbasierter "Autologin"

Beim bisherigen datenbankbasiertem Autologin wurden Sicherheitsstandards angehoben.

Anmeldung an den REST und SOAP Services via Datenbank-Passwort-Hash wurde entfernt

Die Option, sich an Web-Schnittstellen mit dem Passwort-Hash eines Benutzers anzumelden, wurde entfernt. Die Anmeldung an Web-Schnittstellen (REST, SOAP, weitere interne Schnittstellen) kann nur noch mit dem Klartext-Passwort erfolgen.

Bei Anmeldeproblemen von Schnittstellen nach dem Update ist zu prüfen, ob das Passwort korrekt im Plaintext übergeben wird.

Hashing-Methode für den Datenbank-Login wurde umgestellt

Der Restservice Endpoint rest/api/session/v1/session wurde um den optionalen Parameter sessionTokenOnly erweitert. Dieser bestimmt, ob nur das Token oder ein SessionDTO zurückgeliefert wird.
Rest-Dokumentation:
https://server.domain:port/rest/private/doc/v1/services/session 
https://server.domain:port/rest/private/doc/v1/types/de.cursor.rest.api.session.SessionDTO
Beispiel Powershell: 

POWERSHELL
$TokenUrl = "https://server.domain:port/rest/api/session/v1/session?loginType=WEBSERVICE&sessionTokenOnly=true"
$SecurePassword = ConvertTo-SecureString -String "password" -AsPlainText -Force
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "userName", $SecurePassword
$Token = Invoke-RestMethod -Method GET -Uri $TokenUrl -Credential $Cred
$SecureToken = ConvertTo-SecureString -String $Token -AsPlainText -Force
$TokenCred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $Token, $SecureToken
# Rest calls
...
Invoke-RestMethod -Method DELETE -Uri $TokenUrl -Credential $TokenCred 

Umstellung von Beschreibungsfelder für Nachschlagefelder für ausgewählte Lookup-Suchen

Über die Systemeinstellung der Feldeigenschaften kann für Nachschlagefelder die Beschreibung so konfiguriert werden, so dass nur die gewählten Felder in der Beschreibung angezeigt werden. Die Standardschicht (C0) kann dann vom Systembetreiber in der Kundenschicht (C2) übersteuert werden. 

Abbildung: Konfiguration des Beschreibungsfeldes

Mit der Version 22.1.07/23.1 haben sich die Beschreibungsfelder für Nachschlagefelder geändert. Hat der Kunde in der C2-Schicht nichts konfiguriert, so werden sich die Beschreibungsfelder gemäß folgendem Schema verändern: 

Im Nachschlagefeld angezeigte Entität

Betroffene Lookup-Suchen

Zukünftige Anzeige im Beschreibungsfeld

Activity

LookupEntityActivityDBF_Dyn  

Betreff 

Address

LookupEntityAddress

LookupEntityAddressByLocation

LookupEntityContactPersonAddress

LookupEntityCustomerAddress

PLZ, Ort, Straße/Postfach, Haus-Nr., Haus-Nr. Zusatz 

AnnualAccounts

LookupEntityAnnualAccounts

Betreff, Mandant 

BankAccount

LookupEntityBankAccount

IBAN, Kontoinhaber 

BankHouse

LookupEntityBankHouse

BIC 

Campaign

LookupEntityCampaign

Kampagnen-Name, ID, Status

CampContent

LookupEntityCampContent

Name

CampOutbound

LookupEntityCampOutbound

Outbound-Name

CampPhase

LookupEntityCampPhase

Phasen-Name, Status 

ContactPerson

LookupEntityContactPerson

LookupEntityContactPersonForCustomer

LookupEntityContactPersonInOpportunityForCustomer

LookupEntityDefaultContactPerson

LookupEntitySocialMediaNP

Namenstitel, Vorname / Zusatz 1, Nachname / Firma

Contract

LookupEntityContract

LookupEntityContractCRM

Vertrags-Nr., Produktart

ContractAccount

LookupEntityContractAccount

Vertragskonto-Nr. 

ContractItem

LookupEntityContractItem

Hauptposition 

Country

LookupEntityCountry

LookupEntityCountryNo

Land 

CtiDevice

LookupEntityCtiDevice

Telefon-ID 

CustPackage

LookupEntityCustPackage

Name

Customer

LookupEntityAdvisersNP

LookupEntityCustomer

LookupEntityCustomerCompetitor

LookupOfficePKCustomer

Zusatz 1, Firma

District

LookupEntityDistrict

Ortsteil 

DocTemplate

LookupEntityDocTemplate

LookupEntityDocTemplateMCM

Beschreibung

Document

LookupEntityDocument

Betreff

Doublet

LookupEntityDoublet

Verarbeitungstyp, Personendublette 

Employee

LookupEntityEmployee

LookupEntityDOENP

Akademischer Titel, Vorname, Name

FederalState

LookupEntityFederalState

Bundesland (lang) 

GdprCategory

LookupEntityGdprCategory

Kategoriename

GdprMain

LookupEntityGdprMain

Beschreibung

Installation

LookupEntityInstallation

LookupEntityInstallationNP

Anlagennummer, Branche

InterfaceDetail

LookupEntityInterfaceDetail

Status der Schnittstelle

InterfaceOver

LookupEntityInterfaceOver

Schnittstellenname

InvocationExt

LookupEntityInvocationExt

Titel

Location

LookupEntityLocation

Anschlussobjekt-Nr., Straße, Hausnummer, Haus-Nr. Zusatz, PLZ, Land, Ort, Ortsteil

MailConfig

LookupEntityMailConfig

Kurzname, Groupware-System 

MassInvoice

LookupEntityMassInvoice

Betreff

MassPrint

LookupEntityMassPrint

Betreff, Mandant

MeasuringDevice

LookupEntityMeasuringDevice

Zähler-Nr., Produktart

MonthEnd

LookupEntityMonthEnd

Betreff, Mandant

Opportunity

LookupEntityOpportunity

LookupEntityOpportunityDBF_Dyn

Kurzname, Vorgangsnummer, Geschäftspartner 

Person

LookupEntityPerson

Vorname / Zusatz 1, Nachname / Firma 

Product 

LookupEntityProduct

LookupEntityProduct_NoMasters

LookupEntityProduct_NoSlaves

LookupEntityProductHELVIS

Produkt-Nr. , Bezeichnung

ProdType

LookupEntityProdType

Schlüssel, Quellentität, Zielentität

Project

LookupEntityProject

Kurzname, Projekt-Nr.

Quote

LookupEntityQuote

Angebotsnummer, Betreff 

QuoteItem

LookupEntityQuoteItem

Hauptposition

RightTemplate 

LookupEntityRightTemplate

LookupEntityRightTemplateDBF_Dyn

Name

ScriptTestCase

LookupEntityScriptTestCase

Name / Klassenname

ScriptTestRun

LookupEntityScriptTestRun

Typ, Status, Gesamtlaufzeit (ms)

SocialMedia

LookupEntitySocialMediaNP

Beschreibung

Street

LookupEntityStreet

Straße 

Supply

LookupEntitySupply

Anschluss-Nr., Anschlusstyp, Produktart

Ticket

LookupEntityTicket

Betreff, Typ

Unit

LookupEntityUnit

Name, Nummer, Systembetreiber 

Workflow

LookupEntityWorkFlow

Vorgangsnummer

ZipCode

LookupEntityZipCode

PLZ

Um zu überprüfen, welche Felder in Systemen potenziell betroffen sind, kann folgendes DB-Statement abgesetzt werden, welche alle Felder auflistet, in denen die betroffen Lookup-Suchen verwendet werden: 

Oracle
SQL
select RowPk from amdVarchar where fieldname = 'LookupEntityQueryPk' AND c0 IN ('LookupEntityActivityDBF_Dyn', 'LookupEntityAddress‘, 'LookupEntityAddressByLocation‘,'LookupEntityContactPersonAddress', 'LookupEntityCustomerAddress', 'LookupEntityAnnualAccounts', 'LookupEntityBankAccount', 'LookupEntityBankHouse', 'LookupEntityCampaign', 'LookupEntityCampContent', 'LookupEntityCampOutbound', 'LookupEntityCampPhase', 'LookupEntityContactPerson', 'LookupEntityContactPersonForCustomer', 'LookupEntityContactPersonInOpportunityForCustomer', 'LookupEntityDefaultContactPerson', 'LookupEntitySocialMediaNP','LookupEntityContract','LookupEntityContractCRM','LookupEntityContractAccount','LookupEntityContractItem','LookupEntityCountry','LookupEntityCountryNo','LookupEntityCtiDevice','LookupEntityCustPackage','LookupEntityAdvisersNP','LookupEntityCustomer','LookupEntityCustomerCompetitor','LookupOfficePKCustomer','LookupEntityDistrict','LookupEntityDocTemplate','LookupEntityDocTemplateMCM','LookupEntityDocument','LookupEntityDoublet','LookupEntityEmployee','LookupEntityDOENP','LookupEntityFederalState','LookupEntityGdprCategory','LookupEntityGdprMain','LookupEntityInstallation','LookupEntityInstallationNP','LookupEntityInterfaceDetail','LookupEntityInterfaceOver','LookupEntityInvocationExt','LookupEntityLocation' ,'LookupEntityMailConfig','LookupEntityMassInvoice','LookupEntityMassPrint','LookupEntityMeasuringDevice','LookupEntityMonthEnd','LookupEntityOpportunity','LookupEntityOpportunityDBF_Dyn','LookupEntityPerson','LookupEntityProduct','LookupEntityProduct_NoMasters','LookupEntityProduct_NoSlaves','LookupEntityProductHELVIS','LookupEntityProdType','LookupEntityProject','LookupEntityQuote','LookupEntityQuoteItem','LookupEntityRightTemplate','LookupEntityRightTemplateDBF_Dyn','LookupEntityScriptTestCase','LookupEntityScriptTestRun','LookupEntitySocialMediaNP','LookupEntityStreet','LookupEntitySupply','LookupEntityTicket','LookupEntityUnit','LookupEntityWorkFlow','LookupEntityZipCode')

Hat der Kunde in der C2-Schicht nichts konfiguriert, so ändern sich die angezeigten Beschreibungsfelder nach obiger Tabelle. Hat der Kunde auf den betroffenen Feldern C2-Werte hinterlegt, so greifen die C0-Änderungen nicht. Um sie sichtbar zu machen, kann das folgende Statement abgesetzt werden, um die C2 Änderungen zurückzusetzen:

SQL
UPDATE amdvarchar set C2 = null where fieldname = 'LookupDescriptionFields' AND RowPK IN
(
'AddressCustomerKey.Address', 
'AddressKey.Address', 
'AnnualAccountPk.MonthEnd', 
'AppropriatePM.Request', 
'AutoImportUser.MailConfig', 
'BICKey.BankAccount', 
'Campaign.Activity', 
'Campaign.CampBudgetPos', 
'Campaign.CampInbound', 
'Campaign.CampOutbound', 
'Campaign.CampPhase', 
'Campaign.ContactPerson', 
'Campaign.Customer', 
'Campaign.Opportunity', 
'Campaign.PriceCalc', 
'Campaign.Project', 
'Campaign.Quote', 
'CampaignPhase.CampInbound', 
'CampaignPhase.CampOutbound', 
'CampPhase.Activity', 
'CampPhase.ContactPerson', 
'CampPhase.Customer', 
'CampPhase.Opportunity', 
'CampPhase.PriceCalc', 
'CampPhase.Project', 
'CampPhase.Quote', 
'CityPart.Street', 
'ClientPk.AnnualAccounts', 
'ClientPk.MassInvoice', 
'ClientPk.MassPrint', 
'ClientPk.MonthEnd', 
'CompetitorKey.Opportunity', 
'ComposedAddressKey.ContactPerson', 
'ComposedAddressKey.Customer', 
'Concern.Customer', 
'ContactPerson.CampInbound', 
'ContactPersonCustomerKey.Advisers', 
'ContactPersonKey.Advisers', 
'ContactPersonKey.SocialMedia', 
'ContactPersonPk.Contract', 
'ContactPersonPk.ContractAccount', 
'ContactPersonPk.Installation', 
'ContactPersonPk.InstalledProd', 
'ContactPersonPk.LastContact', 
'ContactPersonPK.Quote', 
'Content.CampOutbound', 
'ContractAccountPk.Contract', 
'ContractAccPK.BillingContract', 
'ContractPk.BillingContract', 
'ContractPk.BillingDataYear', 
'ContractPk.ContractItem', 
'ContractPk.ContractParam', 
'ContractPk.SwitchNum', 
'ContractPk.TimeSlicingIs', 
'CoordinatorKey.Project', 
'CoPeKey.OptIn', 
'CoPeKey.Ticket', 
'CoPeKey.TicketRequest', 
'CoPeMasterRolePk.DoubletRole', 
'CoPeOrderAcknow.Opportunity', 
'CoPeSlaveRolePk.DoubletRole', 
'CorpBubaKey.Customer', 
'CorpBubaKey.Person', 
'CorpHelabaKey.Customer', 
'CorpHelabaKey.Person', 
'Country.TapiLocation', 
'CountryKey.Address', 
'CountryKey.ContactPerson', 
'CountryKey.Customer', 
'CountryKey.District', 
'CountryKey.FederalState', 
'CountryKey.Installation', 
'CountryKey.Location', 
'CountryKey.Person', 
'CountryKey.Street', 
'CountryKey.Supply', 
'CountryKey.ZipCode', 
'CountryKeyPrivate.ContactPerson', 
'CuMasterRolePk.DoubletRole', 
'CuSlaveRolePk.DoubletRole', 
'CustNoInvoice.Contract', 
'CustNoInvoicePk.ContractAccount', 
'CustomerKey.ContactPerson', 
'CustomerKey.SocialMedia', 
'CustomerKey.Ticket', 
'CustomerPk.AlterCuNo', 
'CustomerPk.BillingDataYear', 
'CustomerPk.ContactImport', 
'CustomerPk.Contract', 
'CustomerPk.ContractAccount', 
'CustomerPk.CustomerValue', 
'CustomerPk.CustomGenerate', 
'CustomerPk.EnergyConsumer', 
'CustomerPk.Installation', 
'CustomerPk.LastContact', 
'CustomerPk.MassInvoice', 
'CustomerPk.MassPrint', 
'CustomerPk.SwitchNum', 
'CustomerPKGridOperator.Contract', 
'CustomerPkLostTo.Contract', 
'CustomerPkManufacturerKey.EnergyConsumer', 
'CustomerPkTechnicalFirmKey.EnergyConsumer', 
'CustomerPkWonFrom.Contract', 
'DefaultContactPerson.Activity', 
'DefaultContactPersonCustomerKey.Activity', 
'DefaultContract.Activity', 
'DefaultContractAccount.Activity', 
'DefaultCoPeKey.Customer', 
'DefaultCustomer.Opportunity', 
'DefaultCustomer.Project', 
'DefaultCustomer.Quote', 
'DefaultInstallation.Activity', 
'DefaultInstallation.Contract', 
'DefaultLocation.Activity', 
'DefaultLocation.Supply', 
'DefaultMeasuringDevice.Activity', 
'DefaultOpportunity.Activity', 
'DefaultQuote.Activity', 
'DefaultSupply.Activity', 
'DelegatedBy.Activity', 
'DelegatedFrom.Ticket', 
'DelegatedTo.Activity', 
'DelegatedTo.ComplaintRule', 
'DelegatedTo.Ticket', 
'DelegatedTo.TicketRequest', 
'DelegatedTo.WorkFlow', 
'DeputyAgentId.ProcessInstance', 
'DeputyKey.Opportunity', 
'DeputyPk.AnalysisQueue', 
'DetailedReport.ScriptTestCase', 
'DetailedReport.ScriptTestRun', 
'DetailedReport.ScriptTestStep', 
'DeviceId.CtiCall', 
'District.Address', 
'District.Customer', 
'District.Installation', 
'District.Location', 
'District.Person', 
'DocTemplateKey.CampOutbound', 
'DocumentKey.OptIn', 
'DocumentPk.DocArchiveMap', 
'DoubletOf.ContactPerson', 
'DoubletOf.Customer', 
'DoubletOf.Employee', 
'DoubletPk.DoubletRole', 
'EmMasterRolePk.DoubletRole', 
'EmployeeKey.EmployeeLog', 
'EmployeeKey.SchedEmList', 
'EmployeeKey.TimerConfiguration', 
'EmployeeOffice.Customer', 
'EmployeeOffice.Installation', 
'EmployeeOffice.Location', 
'EmployeePK.Advisers', 
'EmployeePk.AnalysisQueue', 
'EmployeePk.ChangeHistory', 
'EmployeePk.Credential', 
'EmployeePk.CtiCall', 
'EmployeePk.EventBuffer', 
'EmployeePk.Installation', 
'EmployeePk.Maintenance', 
'EmployeeSales.Customer', 
'EmployeeTechnics.Installation', 
'EmployeeTechnics.Location', 
'EmSlaveRolePk.DoubletRole', 
'ExecutiveUser.DeletionRule', 
'FaxNoCountry.ContactPerson', 
'FaxNoCountry.Customer', 
'FaxNoCountry.Employee', 
'FaxNoCountry.Person', 
'FaxNoCountry.Telecom', 
'FollowingPhase.CampPhase', 
'FunctionalContact.CustPackage', 
'GdprCatKey.Activity', 
'GdprCatKey.Address', 
'GdprCatKey.ContactPerson', 
'GdprCatKey.Customer', 
'GdprCatKey.Document', 
'GdprCatKey.Employee', 
'GdprCatKey.GdprInstance', 
'GdprCatKey.Person', 
'GdprCatKey.Telecom', 
'GdprMainKey.ContactPerson', 
'GdprMainKey.Customer', 
'GdprMainKey.Employee', 
'GdprMainKey.GdprCategory', 
'GdprMainKey.Person', 
'HasDocuments.Activity', 
'HasQuote.Opportunity', 
'IncidentKey.TicketRequest', 
'Installation.MeasuringDevice', 
'InstallationPk.BillingDataYear', 
'InstallationPk.CustomGenerate', 
'InstallationPk.EnergyConsumer', 
'InstallationPk.InstDetailBT', 
'InstallationPk.InstDetailPV', 
'InstallationPk.InstDetailSt', 
'InstallationPk.InstDetailWB', 
'InstallationPk.Product', 
'InstallationPk.Quote', 
'InstallationPk.QuoteItem', 
'InstallationPk.SwitchNum', 
'InstallationPk.TimeSlicingIs', 
'InterfOverKey.InterfaceDetail', 
'InverterKey.InstDetailPV', 
'InvExtPk.SocialMedia', 
'KeyAccountManager.Customer', 
'KtoIDAusgang.ContractAccount', 
'KtoIDEingang.ContractAccount', 
'LastIntDetKey.InterfaceOver', 
'Location.Activity', 
'LocationPk.CustomGenerate', 
'LocationPk.Installation', 
'LocationPk.MeasuringDevice', 
'MailConfigKey.Employee', 
'MainItemKey.ContractItem', 
'MainItemKey.QuoteItem', 
'MainUnit.Employee', 
'MAKredit.OpportunityItem', 
'ManufacturerKey.Product', 
'MassPrintPk.Quote', 
'MasterPePk.Doublet', 
'MobilePhoneCountry.ContactPerson', 
'MobilePhoneCountry.Customer', 
'MobilePhoneCountry.Employee', 
'MobilePhoneCountry.Person', 
'MobilePhoneCountry.Telecom', 
'MonthEndPk.MassInvoice', 
'MonthEndPk.MassPrint', 
'NewCustomerPk.DoubletRole', 
'OfficeEmplKey.Contract', 
'OfficePKKey.Employee', 
'OfficePKKey.News', 
'OperatorKey.Installation', 
'OpportunityPk.Quote', 
'Outbound.Activity', 
'Outbound.CampBudgetPos', 
'Outbound.CampInbound', 
'OwnerKey.Location', 
'Pate.Request', 
'PeCountryKey.Customer', 
'PeDistrict.Customer', 
'PeStateAddress.Customer', 
'PeStreet.Customer', 
'PeZIP.Customer', 
'Phase.CampBudgetPos', 
'PhoneNoCountry.ContactPerson', 
'PhoneNoCountry.Customer', 
'PhoneNoCountry.Employee', 
'PhoneNoCountry.Person', 
'PhoneNoCountry.Telecom', 
'PrecedingPhase.CampPhase', 
'ProductKey.ContractItem', 
'ProductKey.InstDetailBT', 
'ProductKey.InstDetailPV', 
'ProductKey.InstDetailSt', 
'ProductKey.InstDetailWB', 
'ProductKey.ItemsList', 
'ProductKey.OpportunityItem', 
'ProductKey.Potential', 
'ProductKey.QuoteItem', 
'ProductKey.UsedProducts', 
'ProductPk.InstalledProd', 
'ProjectmanagerKey.Opportunity', 
'QuotePK.QuoteItem', 
'REC_COUNTRY.Sepa', 
'ReleasedUser.CustPackage', 
'RequestedFor.OptIn', 
'Requisitioner.Request', 
'Responsible.Campaign', 
'Responsible.CampPhase', 
'Ressource.HumanRes', 
'RightTemplate.Employee', 
'SalesEmplKey.Contract', 
'Screenshot.ScriptTestStep', 
'Secretary.ContactPerson', 
'Secretary.Employee', 
'SelfConfig.RightTemplate', 
'SenderMailConfig.DocTemplate', 
'Senior.ContactPerson', 
'Senior.Employee', 
'Signatory1EmplKey.Quote', 
'Signatory2EmplKey.Quote', 
'SlavePePk.Doublet', 
'SlaveProductKey.ItemsList', 
'SND_COUNTRY.Sepa', 
'SocialMediaList.ContactPerson', 
'SourceUnit.Unit', 
'StartUser.ProcessInstance', 
'State.Address', 
'State.Location', 
'State.ZipCode', 
'StateAddress.ContactPerson', 
'StateAddress.Customer', 
'StateAddress.Person', 
'StateAdrPrivate.ContactPerson', 
'Street.Address', 
'Street.ContactPerson', 
'Street.Customer', 
'Street.Installation', 
'Street.Location', 
'Street.Person', 
'Street.Supply', 
'StreetPrivate.ContactPerson', 
'Substitue.ContactPerson', 
'Substitue.Employee', 
'SupplierKey.Product', 
'SupplyPk.CustomGenerate', 
'SupplyPk.EnergyConsumer', 
'SupplyPk.Installation', 
'SupplyPk.MeasuringDevice', 
'SystemOwnerPk.Unit', 
'TechnicalContact.CustPackage', 
'TestCaseKey.ScriptTestStep', 
'TestRun.ScriptTestCase', 
'UserId.ProcessInstance', 
'UserTemplate.DocTemplate', 
'WebGroupwareKey.Employee', 
'WFInstanceId.AccountExternal', 
'WFInstanceId.AccountInternal', 
'WFInstanceId.ActionRight', 
'WFInstanceId.Activity', 
'WFInstanceId.ActivityDel', 
'WFInstanceId.Address', 
'WFInstanceId.Advisers', 
'WFInstanceId.AlterCuNo', 
'WFInstanceId.AnalysisConfig', 
'WFInstanceId.AnalysisQueue', 
'WFInstanceId.AnnualAccounts', 
'WFInstanceId.AttributeMetaData', 
'WFInstanceId.Authorities', 
'WFInstanceId.BankAccount', 
'WFInstanceId.BankData', 
'WFInstanceId.BankHouse', 
'WFInstanceId.BgiEntity', 
'WFInstanceId.BillingContract', 
'WFInstanceId.BillingDataYear', 
'WFInstanceId.BitRight', 
'WFInstanceId.BoardDefinition', 
'WFInstanceId.Campaign', 
'WFInstanceId.CampBudgetPos', 
'WFInstanceId.CampContent', 
'WFInstanceId.CampDistrList', 
'WFInstanceId.CampInbound', 
'WFInstanceId.CampOutbound', 
'WFInstanceId.CampPhase', 
'WFInstanceId.ChangeHistory', 
'WFInstanceId.ComplaintRule', 
'WFInstanceId.ComplexSearch', 
'WFInstanceId.ContactChanges', 
'WFInstanceId.ContactImport', 
'WFInstanceId.ContactMapping', 
'WFInstanceId.ContactPerson', 
'WFInstanceId.ContactTemplate', 
'WFInstanceId.Contract', 
'WFInstanceId.ContractAccount', 
'WFInstanceId.ContractItem', 
'WFInstanceId.ContractParam', 
'WFInstanceId.CopyDocuments', 
'WFInstanceId.Country', 
'WFInstanceId.Credential', 
'WFInstanceId.CtiCall', 
'WFInstanceId.CtiDevice', 
'WFInstanceId.CtiServer', 
'WFInstanceId.Cust', 
'WFInstanceId.CustDependency', 
'WFInstanceId.CustGuidance', 
'WFInstanceId.CustHistory', 
'WFInstanceId.CustImport', 
'WFInstanceId.Customer', 
'WFInstanceId.CustomerValue', 
'WFInstanceId.CustomGenerate', 
'WFInstanceId.CustPackage', 
'WFInstanceId.CustRepository', 
'WFInstanceId.CustRollback', 
'WFInstanceId.DataTransition', 
'WFInstanceId.DefaultSetter', 
'WFInstanceId.DelegationAttribute', 
'WFInstanceId.DeletionRule', 
'WFInstanceId.Depots', 
'WFInstanceId.District', 
'WFInstanceId.DocArchiveMap', 
'WFInstanceId.DocAssignment', 
'WFInstanceId.DocBarcodeMap', 
'WFInstanceId.DocMapping', 
'WFInstanceId.DocObject', 
'WFInstanceId.DocTemplate', 
'WFInstanceId.Document', 
'WFInstanceId.Doublet', 
'WFInstanceId.DoubletRole', 
'WFInstanceId.Employee', 
'WFInstanceId.EmployeeLog', 
'WFInstanceId.EnergyConsumer', 
'WFInstanceId.EntityMetaData', 
'WFInstanceId.EventArchive', 
'WFInstanceId.EventBuffer', 
'WFInstanceId.ExpFormat', 
'WFInstanceId.ExpSearches', 
'WFInstanceId.ExtendedSearch', 
'WFInstanceId.ExtendedSearchMetaData', 
'WFInstanceId.Features', 
'WFInstanceId.FederalState', 
'WFInstanceId.Freefield', 
'WFInstanceId.FreefieldDef', 
'WFInstanceId.GdprCategory', 
'WFInstanceId.GdprInstance', 
'WFInstanceId.GdprInterface', 
'WFInstanceId.GdprMain', 
'WFInstanceId.GeoAttrCond', 
'WFInstanceId.GeoCoAttVal', 
'WFInstanceId.GeoI18n', 
'WFInstanceId.GeoMetadata', 
'WFInstanceId.GlobalVariables', 
'WFInstanceId.Groups', 
'WFInstanceId.GroupsAttributeMetaData', 
'WFInstanceId.HISTORICDOC', 
'WFInstanceId.HumanRes', 
'WFInstanceId.Images', 
'WFInstanceId.InfoboardConfig', 
'WFInstanceId.Installation', 
'WFInstanceId.InstalledProd', 
'WFInstanceId.InstDetailBT', 
'WFInstanceId.InstDetailPV', 
'WFInstanceId.InstDetailSt', 
'WFInstanceId.InstDetailWB', 
'WFInstanceId.InterfaceDetail', 
'WFInstanceId.InterfaceOver', 
'WFInstanceId.InvocationExt', 
'WFInstanceId.ItemsList', 
'WFInstanceId.JasperReports', 
'WFInstanceId.JasperSubreports', 
'WFInstanceId.KeyMappings', 
'WFInstanceId.KeyRange', 
'WFInstanceId.KeytabNum', 
'WFInstanceId.LastContact', 
'WFInstanceId.LinkMetaData', 
'WFInstanceId.Location', 
'WFInstanceId.LockEntity', 
'WFInstanceId.MailConfig', 
'WFInstanceId.Maintenance', 
'WFInstanceId.Mask', 
'WFInstanceId.MaskConfig', 
'WFInstanceId.MaskScript', 
'WFInstanceId.MaskScriptHist', 
'WFInstanceId.MassDataLog', 
'WFInstanceId.MassDataTask', 
'WFInstanceId.MassInvoice', 
'WFInstanceId.MassPrint', 
'WFInstanceId.MeasuringDevice', 
'WFInstanceId.ModAssign', 
'WFInstanceId.ModRollback', 
'WFInstanceId.Module', 
'WFInstanceId.ModuleMetaData', 
'WFInstanceId.MonthEnd', 
'WFInstanceId.News', 
'WFInstanceId.Note', 
'WFInstanceId.Notification', 
'WFInstanceId.OAuthClient', 
'WFInstanceId.OAuthClientRedirectUri', 
'WFInstanceId.OAuthToken', 
'WFInstanceId.Opportunity', 
'WFInstanceId.OpportunityItem', 
'WFInstanceId.OptIn', 
'WFInstanceId.Person', 
'WFInstanceId.PersonType', 
'WFInstanceId.Potential', 
'WFInstanceId.PriceCalc', 
'WFInstanceId.ProcessCleanJob', 
'WFInstanceId.ProcessContainer', 
'WFInstanceId.ProcessDataLink', 
'WFInstanceId.ProcessErrorLog', 
'WFInstanceId.ProcessInstance', 
'WFInstanceId.ProcessLog', 
'WFInstanceId.ProcessMask', 
'WFInstanceId.ProcessModel', 
'WFInstanceId.ProcessRule', 
'WFInstanceId.ProcessSearch', 
'WFInstanceId.ProcessWaitStat', 
'WFInstanceId.ProdDesc', 
'WFInstanceId.ProdType', 
'WFInstanceId.Product', 
'WFInstanceId.ProductGroups', 
'WFInstanceId.ProfileData', 
'WFInstanceId.ProfileNote', 
'WFInstanceId.Project', 
'WFInstanceId.PropertyConfig', 
'WFInstanceId.PropertyMapper', 
'WFInstanceId.Quip', 
'WFInstanceId.Quote', 
'WFInstanceId.QuoteItem', 
'WFInstanceId.rAcAc', 
'WFInstanceId.rAcCtiCa', 
'WFInstanceId.rAcDo', 
'WFInstanceId.rAcFf', 
'WFInstanceId.rAcPrd', 
'WFInstanceId.rAdNo', 
'WFInstanceId.rAnAccAc', 
'WFInstanceId.rAnAccDo', 
'WFInstanceId.rCaAc', 
'WFInstanceId.rCaBuPoAc', 
'WFInstanceId.rCaBuPoDo', 
'WFInstanceId.rCaCaDiLi', 
'WFInstanceId.rCaDiLiAc', 
'WFInstanceId.rCaDiLiCaPh', 
'WFInstanceId.rCaDiLiCoPe', 
'WFInstanceId.rCaDiLiEm', 
'WFInstanceId.rCaDo', 
'WFInstanceId.rCaNo', 
'WFInstanceId.rCaOutAc', 
'WFInstanceId.rCaOutDo', 
'WFInstanceId.rCaPhAc', 
'WFInstanceId.rCaPhCaPh', 
'WFInstanceId.rCaPhDo', 
'WFInstanceId.rCaPhNo', 
'WFInstanceId.rCnAc', 
'WFInstanceId.rCnAcAc', 
'WFInstanceId.rCnAcAd', 
'WFInstanceId.rCnAcBaDa', 
'WFInstanceId.rCnAcCn', 
'WFInstanceId.rCnAcDo', 
'WFInstanceId.rCnAcNo', 
'WFInstanceId.rCnAd', 
'WFInstanceId.rCnBaDa', 
'WFInstanceId.rCnCn', 
'WFInstanceId.rCnCoPe', 
'WFInstanceId.rCnCuGe', 
'WFInstanceId.rCnDo', 
'WFInstanceId.rCnFf', 
'WFInstanceId.rCnIs', 
'WFInstanceId.rCnMeDe', 
'WFInstanceId.rCnNo', 
'WFInstanceId.rCnOp', 
'WFInstanceId.rCnPj', 
'WFInstanceId.rCnPrCa', 
'WFInstanceId.rCnQu', 
'WFInstanceId.rCoPeAc', 
'WFInstanceId.rCoPeAd', 
'WFInstanceId.rCoPeAuth', 
'WFInstanceId.rCoPeCa', 
'WFInstanceId.rCoPeCaOut', 
'WFInstanceId.rCoPeCaPh', 
'WFInstanceId.rCoPeCoPe', 
'WFInstanceId.rCoPeCtiCa', 
'WFInstanceId.rCoPeDo', 
'WFInstanceId.rCoPeEm', 
'WFInstanceId.rCoPeFea', 
'WFInstanceId.rCoPeFf', 
'WFInstanceId.rCoPeNo', 
'WFInstanceId.rCoPeQu', 
'WFInstanceId.rCoPeSo', 
'WFInstanceId.rCuAc', 
'WFInstanceId.rCuAccExt', 
'WFInstanceId.rCuAccInt', 
'WFInstanceId.rCuAd', 
'WFInstanceId.rCuAdv', 
'WFInstanceId.rCuBaAc', 
'WFInstanceId.rCuBaDa', 
'WFInstanceId.rCuCa', 
'WFInstanceId.rCuCaOut', 
'WFInstanceId.rCuCaPh', 
'WFInstanceId.rCuCn', 
'WFInstanceId.rCuCtiCa', 
'WFInstanceId.rCuCu', 
'WFInstanceId.rCuDep', 
'WFInstanceId.rCuDo', 
'WFInstanceId.rCuFea', 
'WFInstanceId.rCuFf', 
'WFInstanceId.rCuGeAc', 
'WFInstanceId.rCuGeDo', 
'WFInstanceId.rCuGeFf', 
'WFInstanceId.rCuGeNo', 
'WFInstanceId.rCuInPr', 
'WFInstanceId.rCuIs', 
'WFInstanceId.rCuMeDe', 
'WFInstanceId.rCuNo', 
'WFInstanceId.rCuOp', 
'WFInstanceId.rCuPj', 
'WFInstanceId.rCuPo', 
'WFInstanceId.rCuQu', 
'WFInstanceId.rCusPaCus', 
'WFInstanceId.rCuUPrd', 
'WFInstanceId.rDoBaDa', 
'WFInstanceId.rDoDo', 
'WFInstanceId.rDoInDe', 
'WFInstanceId.rDoInOv', 
'WFInstanceId.rDoPrCa', 
'WFInstanceId.rEmAc', 
'WFInstanceId.rEmAd', 
'WFInstanceId.rEmCtiCa', 
'WFInstanceId.rEmCtiDe', 
'WFInstanceId.rEmDo', 
'WFInstanceId.rEmEm', 
'WFInstanceId.rEmFea', 
'WFInstanceId.rEmFf', 
'WFInstanceId.rEmMod', 
'WFInstanceId.rEmNc', 
'WFInstanceId.rEmNo', 
'WFInstanceId.rEmPj', 
'WFInstanceId.rEmTaLo', 
'WFInstanceId.rEmUn', 
'WFInstanceId.rEnCoAc', 
'WFInstanceId.rEnCoDo', 
'WFInstanceId.rEnCoNo', 
'WFInstanceId.Request', 
'WFInstanceId.rGdMaDo', 
'WFInstanceId.rGeCoAtVaGeInter', 
'WFInstanceId.rGeMeDaGeInter', 
'WFInstanceId.rGrEm', 
'WFInstanceId.rGrNc', 
'WFInstanceId.RightTemplate', 
'WFInstanceId.rIsAc', 
'WFInstanceId.rIsBaDa', 
'WFInstanceId.rIsBtAc', 
'WFInstanceId.rIsBtDo', 
'WFInstanceId.rIsDo', 
'WFInstanceId.rIsFf', 
'WFInstanceId.rIsIs', 
'WFInstanceId.rIsMeDe', 
'WFInstanceId.rIsNo', 
'WFInstanceId.rIsOp', 
'WFInstanceId.rIsPj', 
'WFInstanceId.rIsPvAc', 
'WFInstanceId.rIsPvDo', 
'WFInstanceId.rIsQu', 
'WFInstanceId.rIsStAc', 
'WFInstanceId.rIsStDo', 
'WFInstanceId.rIsWbAc', 
'WFInstanceId.rIsWbDo', 
'WFInstanceId.rItLiPd', 
'WFInstanceId.rLoAc', 
'WFInstanceId.rLoCn', 
'WFInstanceId.rLoCu', 
'WFInstanceId.rLoDo', 
'WFInstanceId.rLoFf', 
'WFInstanceId.rLoNo', 
'WFInstanceId.rLoOp', 
'WFInstanceId.rLoQu', 
'WFInstanceId.rLoSup', 
'WFInstanceId.rMaInAc', 
'WFInstanceId.rMaInDo', 
'WFInstanceId.rMaInQu', 
'WFInstanceId.rMaPrAc', 
'WFInstanceId.rMaPrDo', 
'WFInstanceId.rMeDeAc', 
'WFInstanceId.rMeDeDo', 
'WFInstanceId.rMeDeFf', 
'WFInstanceId.rMeDeNo', 
'WFInstanceId.rMoEnAc', 
'WFInstanceId.rMoEnDo', 
'WFInstanceId.rNewsEm', 
'WFInstanceId.rOpAc', 
'WFInstanceId.rOpCoPe', 
'WFInstanceId.rOpDo', 
'WFInstanceId.rOpFea', 
'WFInstanceId.rOpFf', 
'WFInstanceId.rOpNo', 
'WFInstanceId.rOpOi', 
'WFInstanceId.rOpPj', 
'WFInstanceId.rPeAc', 
'WFInstanceId.rPeAccExt', 
'WFInstanceId.rPeAccInt', 
'WFInstanceId.rPeAdv', 
'WFInstanceId.rPeCoPe', 
'WFInstanceId.rPeDep', 
'WFInstanceId.rPeDo', 
'WFInstanceId.rPeFf', 
'WFInstanceId.rPeNo', 
'WFInstanceId.rPeOp', 
'WFInstanceId.rPePe', 
'WFInstanceId.rPePrDa', 
'WFInstanceId.rPjAc', 
'WFInstanceId.rPjCoPe', 
'WFInstanceId.rPjCuGe', 
'WFInstanceId.rPjDo', 
'WFInstanceId.rPjEnCo', 
'WFInstanceId.rPjFf', 
'WFInstanceId.rPjLo', 
'WFInstanceId.rPjNo', 
'WFInstanceId.rPjPe', 
'WFInstanceId.rPjPj', 
'WFInstanceId.rPjQu', 
'WFInstanceId.rPrDaPrNo', 
'WFInstanceId.rPrdCu', 
'WFInstanceId.rPrdDo', 
'WFInstanceId.rPrdFea', 
'WFInstanceId.rPrdFf', 
'WFInstanceId.rPrdNo', 
'WFInstanceId.rPrdPd', 
'WFInstanceId.rQuAc', 
'WFInstanceId.rQuDo', 
'WFInstanceId.rQuFf', 
'WFInstanceId.rQuNo', 
'WFInstanceId.rQuPrCa', 
'WFInstanceId.rQuQu', 
'WFInstanceId.rReQuAc', 
'WFInstanceId.rReQuCoPe', 
'WFInstanceId.rReQuCu', 
'WFInstanceId.rReQuDo', 
'WFInstanceId.rReQuNo', 
'WFInstanceId.rReQuOp', 
'WFInstanceId.rReQuPj', 
'WFInstanceId.rReQuPrd', 
'WFInstanceId.rReQuReQu', 
'WFInstanceId.rScEmLEm', 
'WFInstanceId.rSepaBaDa', 
'WFInstanceId.rSepaCu', 
'WFInstanceId.rsKeytabGr', 
'WFInstanceId.rSoNo', 
'WFInstanceId.rSupAc', 
'WFInstanceId.rSupCn', 
'WFInstanceId.rSupCu', 
'WFInstanceId.rSupDo', 
'WFInstanceId.rSupFf', 
'WFInstanceId.rSupNo', 
'WFInstanceId.rSupOp', 
'WFInstanceId.rSupPj', 
'WFInstanceId.rSupQu', 
'WFInstanceId.rTiAc', 
'WFInstanceId.rTiCa', 
'WFInstanceId.rTiCn', 
'WFInstanceId.rTiCoPe', 
'WFInstanceId.rTiCu', 
'WFInstanceId.rTiDo', 
'WFInstanceId.rTiIs', 
'WFInstanceId.rTiLo', 
'WFInstanceId.rTiOp', 
'WFInstanceId.rTiPj', 
'WFInstanceId.rTiQu', 
'WFInstanceId.rTiReqAc', 
'WFInstanceId.rTiReqCa', 
'WFInstanceId.rTiReqCn', 
'WFInstanceId.rTiReqDo', 
'WFInstanceId.rTiReqIs', 
'WFInstanceId.rTiReqLo', 
'WFInstanceId.rTiReqOp', 
'WFInstanceId.rTiReqPj', 
'WFInstanceId.rTiReqQu', 
'WFInstanceId.rTiTi', 
'WFInstanceId.rTiTiCtg', 
'WFInstanceId.rWfCn', 
'WFInstanceId.rWfCoPe', 
'WFInstanceId.rWfCu', 
'WFInstanceId.rWfCuGe', 
'WFInstanceId.rWfIs', 
'WFInstanceId.rWfLo', 
'WFInstanceId.rWfMeDe', 
'WFInstanceId.rWfOp', 
'WFInstanceId.rWfPj', 
'WFInstanceId.rWfPrCa', 
'WFInstanceId.rWfQu', 
'WFInstanceId.rWfSepa', 
'WFInstanceId.rWfSup', 
'WFInstanceId.S_Keytab', 
'WFInstanceId.SAPConfig', 
'WFInstanceId.SAPMapping', 
'WFInstanceId.SchedEmList', 
'WFInstanceId.ScriptHistory', 
'WFInstanceId.ScriptLibrary', 
'WFInstanceId.ScriptMethod', 
'WFInstanceId.ScriptTestCase', 
'WFInstanceId.ScriptTestRun', 
'WFInstanceId.ScriptTestStep', 
'WFInstanceId.SearchResult', 
'WFInstanceId.Sepa', 
'WFInstanceId.SocialMedia', 
'WFInstanceId.SqlProtocol', 
'WFInstanceId.Statements', 
'WFInstanceId.Street', 
'WFInstanceId.Supply', 
'WFInstanceId.SwitchNum', 
'WFInstanceId.TapiLocation', 
'WFInstanceId.Telecom', 
'WFInstanceId.TestEntity', 
'WFInstanceId.TestLink', 
'WFInstanceId.Ticket', 
'WFInstanceId.TicketCategory', 
'WFInstanceId.TicketClassify', 
'WFInstanceId.TicketReason', 
'WFInstanceId.TicketRequest', 
'WFInstanceId.TileConfig', 
'WFInstanceId.TileDefinition', 
'WFInstanceId.TileElement', 
'WFInstanceId.TilePersistence', 
'WFInstanceId.TileRepository', 
'WFInstanceId.TimerConfiguration', 
'WFInstanceId.TimeSlicingIs', 
'WFInstanceId.TimeSlicingVAT', 
'WFInstanceId.Translation', 
'WFInstanceId.UnIndexedEntity', 
'WFInstanceId.Unit', 
'WFInstanceId.UsedProducts', 
'WFInstanceId.WebService', 
'WFInstanceId.WebserviceLog', 
'WFInstanceId.WFActionMapping', 
'WFInstanceId.WFDefinition', 
'WFInstanceId.WorkFlow', 
'WFInstanceId.ZipCode', 
'ZIP.ContactPerson', 
'ZIP.Customer', 
'ZIP.Location', 
'ZIP.Person', 
'ZIPKey.Address', 
'ZIPKey.District', 
'ZIPKey.Installation', 
'ZIPKey.Street', 
'ZIPKey.Supply', 
'ZIPKeyPrivate.ContactPerson' 
)

(Warnung) Hinweise auf neue Funktionalitäten

Vorgangsmanagement

Das Kundenservice Modul wird im Zuge des Update auf die Version 23.1. zum Vorgangsmanagement migriert. Hierbei sind die nachfolgenden Punkte im Projekt zu prüfen.

Änderungen im Standard
Neuer Nummernkreis bei Vorgängen und Anliegen
  • Auf dem Vorgang: Vorgangs-Nr. (TicketNo.Ticket)

    • Feldeigenschaft "Doppelte Feldwerte verhindern" wurde im Standard aktiviert

Änderung von Memofeldern
  • Auf dem Vorgang: Beschreibung (Description.Ticket)

    • Hier ist eine Umwandlung von EditorPane auf HTML erfolgt

    • In dem Zuge wurde auch das Feld Description2.Ticket umgestellt

    • Conclusion.Ticket wurde ebenfalls in HTML umwandelt

  • Auf dem Anliegen: Beschreibung (Description.TicketRequest)

    • Hier istl eine Umwandlung von EditorPane auf HTML erfolgt

    • In dem Zuge wurde auch das Feld Description2.TicketRequest umgestellt

    • Conclusion.TicketRequest wurde ebenfalls in HTML umwandelt

  • Die Felder Desription2.Ticket und Desription2.TicketRequest wurden von den Masken entfernt

Benachrichtigungen
  • Es wird eine Benachrichtigung an den User "Delegiert an" (Delegiert an Gruppe) versendet.

    • Dies erfolgt bei Überschreitung des Datum Erinnerungsdatum (auf dem Vorgang und Anliegen)

    • Dies erfolgt bei Überschreitung des Datum Fälligkeitsdatum (auf dem Vorgang und Anliegen)

      • Wenn beide eingetreten wird nur eine Benachrichtigung (Fälligkeitsdatum) versendet.

      • Die Benachrichtigung wird nur aktualisiert (Nur eine Benachrichtigung für Erinnerung und Fälligkeitsdatum - auch wenn diese gleich sind)

Neuer Timer zum Versand von Benachrichtigungen nach überschrittenem Datum

Es wurde ein neuer Timer "Eskalationsdatum prüfen" im Standard erstellt, welcher jede Minute prüft, ob ein Vorgang oder Anliegen Datum (Fälligkeits- und Erinnerungsdatum) überschritten wurde und versendet anschließend eine Benachrichtigung im Benachrichtigungssystem.

Aufnahme von neuen Datumsfeldern auf dem Vorgang und auf dem Anliegen
  • Bei der Neuanlage eines Vorgang werden die Werte vom Erinnerungs- und Fälligkeitsdatum wie folgt vorbelegt:

  • Fälligkeitsdatum (standardmäßig +14 Tage vorbelegt)

  • Erinnerungsdatum (standardmäßig +7 Tage vorbelegt)

    • Wurden die hinterlegten Daten überschritten erhält die Person, welche in dem Feld "Delegiert an" hinterlegt wurde eine Benachrichtigung

  • Bei der Neuanlage eines Anliegens werden die Werte vom Erinnerungs- und Fälligkeitsdatum des übergeordneten Vorgang übernommen

  • Zusätzlich dazu gilt: 

    • Das Fälligkeitsdatum des Anliegens darf nicht hinter dem Fälligkeitsdatum des übergeordneten Vorgang liegen

      • Prüfung: Eine Speicherung des Datensatzes darf nicht erfolgen, wenn dies nicht gewährleistet ist 

      • Wenn durch eine manuelle Änderung durch Speichern das Fälligkeitsdatum des Vorgang vor dem Fälligkeitsdatum des Anliegen liegt, so wird automatisch das Fälligkeitsdatum des Anliegen mit dem Fälligkeitsdatum des Vorgang gleichgesetzt 

      • Wenn durch eine manuelle Änderung das Fälligkeitsdatum des Anliegen hinter dem Fälligkeitsdatum des Vorgang liegt, so soll die manuelle Änderung und die Abspeicherung verhindert werden. Stattdessen wird der letzte gültige Wert für das Fälligkeitsdatum es Anliegens verwendet → Zurücksetzen auf letzten Wert

Neues Feld Ansprechpartner auf dem Anliegen

Es gibt ein neues Feld Ansprechpartner auf dem Anliegen, welches bei der Neuanlage mit dem Ansprechpartner aus dem übergeordneten Vorgang vorbelegt wird.

Änderungen an der Skriptbibliothek SC0TicketUtils

Folgende Anpassungen sind in der Skriptbibliothek SC0TicketUtils erfolgt:

Methode

Status

Änderungen

createTicketFromActivity()

Geändert

Feld CoPeKey.Ticket wird nur gefüllt, wenn Feld DefaultContactPerson.Activity nicht leer ist

generateTicketNoFromActivity()

Geändert

Änderung des RegEx, sodass das neue Vorgangsnummerformat beim Mailimport erkannt wird

getRemindDateDuration()

Neu

Setzt den Abstand zwischen dem Fälligkeitsdatum und dem Erinnerungsdatum in Tagen

handleRequestBbetterTabs()

Neu

Steuert die Sichtbarkeit der Bbetter und Ticket spezifichen Elemente auf der Anliegen-Maske

handleTicketBbetterTabs()

Neu

Steuert die Sichtbarkeit der Bbetter und Ticket spezifichen Elemente auf der Vorgangs-Maske

isWeekend()

Neu

Überprüft, ob das übergebene Datum an einem Wochenende liegt

reqEntryInserted()

Geändert

Daten aus dem Vorgang übertragen und Aufruf von handleRequestBbetterTabs() hinzugefügt

reqEntryLoaded()

Geändert

Aufruf von handleRequestBbetterTabs hinzugefügt

reqFieldValueChanged()

Geändert

Hinzufügen der Fäligkeitsdatums- und Erinnerungsdatums-Logik

ticketEntryInserted()

Neu

Aufruf von handleTicketBbetterTabs() hinzugefügt. Aufruf der initialen Fäligkeitsdatums- und Erinnerungsdatums-Logik

ticketEntryLoaded()

Geändert

Aufruf von handleTicketBbetterTabs() hinzugefügt

ticketFieldValueChanged()

Geändert

Aufruf von handleTicketBbetterTabsHinzugefügt. Aufruf der Fäligkeitsdatums- und Erinnerungsdatums-Logik

Optional: Klassifikationen für einzelne Abteilungen individualisieren.

Es besteht die Möglichkeit abhängig vom Tickettyp unterschiedliche Schlüssel in der Klassifikation und Unterklassifikation zu hinterlegen. Dies kann somit in drei Stufen konfiguriert werden: Tickettyp - Klassifikation - Unterklassifikation. Sollen in diesen Schlüsselbereichen allgemeine Schlüssel (für alle Personen) hinterlegt werden, muss diese Konfiguration nicht durchgeführt werden, nur wenn beispielsweise abteilungsindividuelle Schlüssel hinterlegt werden sollen, welche andere Abteilungen nicht sehen oder auswählen sollen.

Feldeigenschaft in dem Feld Unterklassifikation (Classification2.Ticket):
Nachschlagesuche: 

CODE
LookupEntityS_KeytabKeyMappings

Vorselektion beim Validieren:

CODE
MasterKey.KeyMappings.EQUAL={Classification.Ticket}
MasterKeyRange.KeyMappings.EQUAL=C0TICKET_CLASSIFICATION
SlaveKeyRange.KeyMappings.EQUAL=C0TICKET_CLASSIFICATION2
Active.KeyMappings.EQUAL=1
Migration für Bestandskunden

Bei Kunden, welche das Kundenservice-Modul lizenziert und über Customizing verändert haben, muss innerhalb des Projekts geprüft werden, welche Auswirkungen die Anpassungen im Standard haben. Hier muss eine projektindividuelle Lösung gefunden werden.

Änderung der Sprachvariablen

Die Sprachvariablen wurden von der modulspezifischen Internationalisierung in die Skriptbibliothek (Skript-Klasse SC0TICKETUTILS) Sprachvariablen verschoben. Hierdurch hat sich auf der Skript Aufruf String I18nUtils.i18nModule(String moduleID, String key, Locale language, Object... parameter) in den Skript Aufruf String I18nUtils.i18nCustom(String key, Locale language, Object... parameter) im Standard geändert. Dies muss bei allen übersteuerten Prozessen im Bereich des Vorgangsmanagement nachgezogen werden.

Folgende Prozesse haben in C0 ihr I18n vom Modul in die Sprachvariablen verschoben. Dies ist in höheren Schichten nachzuholen, sofern einer davon übersteuert wurde:

  • C0TicketAddActivity

  • C0TicketCompletion

  • C0TicketCompletionSub

  • C0TicketCreation

  • C0TicketMailSending

  • C0TicketReopen

  • C0TicketRequestCompletion

  • C0TicketRequestCreation

Folgende Prozesse haben in C0 kein i18n enthalten, müssten aber im Falle einer Übersteuerung trotzdem geprüft werden ob dort etwas eingebaut wurde.

  • C0TicketCreateActivityFromNotesField

  • C0TicketLinkActivity

  • C0TicketRequestCreateActivityFromNotesField

  • C0TicketDelegateToGroup

  • C0TicketLinkComment

  • C0IB_CreateRequestTicket

Ersetzt werden muss jeder Aufruf wie

CODE
I18nUtils.i18nModule("TICKET", "<key>", SessionConstants.LOCALE);

durch

CODE
I18nUtils.i18nCustom("<key>", SessionConstants.LOCALE);
b.better

b.better ist nun ein eigenes Modul. Bei dem Update auf die Version 23.1. wird geprüft, ob es b.better spezifische Datensätze gibt. Dies erfolgt wie folgt:

  • Sind in den Entitäten Ticket-Begründung (TicketReason) und Ticket-Klassifizierung (TicketClassify) Datensätze vorhanden, dann wird das Beschwerdemanagement Modul (b.better) NICHT entfernt

    • Das löschende Update wird NICHT ausgeführt, wenn in Ticket-Klassifizierung / Begründung Datensätze vorhanden sind

  • Sind in den Entitäten Ticket-Begründung (TicketReason) und Ticket-Klassifizierung (TicketClassify) KEINE Datensätze vorhanden, dann wird das Beschwerdemanagement Modul (b.better) entfernt

    • Das löschende Update wird ausgeführt, wenn in Ticket-Klassifizierung / Begründung KEINE Datensätze vorhanden sind

Wichtig: Die Standardmasken TicketBbetter und TicketRequestBbetter wurden gelöscht. Sollen diese nach dem Update auf die Version 23.1. noch verwendet werden, müssen diese VOR dem Update übersteuert werden.

  • Umbenennung Kundenservicemodul in Beschwerdemanagement

  • Entitäten Ticket und Ticket-Anliegen wurden in Vorgang und Anliegen umbenannt und aus dem Modul heraus gelöst

  • Standard Vorgangsmanagement-Logiken wurden ebenfalls aus den Modul heraus gelöst und funktionieren nun ohne eingespieltes Modul

  • Einzelne Felder und Infoboards von Vorgang und Anliegen, welche speziell für das Beschwerdemanagement b.better verwendet werden, bleiben im Modul bestehen

  • Ein neuer Schlüssel BB - bbetter steuert die neue Maskenlogik und blendet nach der Auswahl die b.better spezifischen Karten (und somit Felder) ein

    • Es ist somit ggf. eine Umstellung des Maskenskript oder der Maske notwendig

  • Die Masken TicketBbetter und TicketRequestBbetter wurden gelöscht

    • Hat ein Kunde eine der Masken ausgewählt, aber nicht übersteuert, wird er automatisch auf die neue Maske umgestellt. Dort werden die b.better Felder (bzw. Karten) über die neue Logik ein und ausgeblendet

    • Hat ein Kunde die Masken übersteuert und angepasst, so werden nur die C0 Masken gelöscht. Die C2 Varianten bleiben bestehen, sodass für den Kunden kein Unterschied entsteht

      Achtung

      Wenn der Kunde vor dem Update das Anpassen der Masken auf das neue Design NICHT wünscht, so müssen die alten Masken in der Kundenschicht (C2-Schicht) übersteuert werden.

Neuer Personen-Typ "Eheleute"

Es wurde ein neuer Personentyp EHE (Langtext = "Eheleute", Juristische Person = Nein) aufgenommen.

Hierzu wurden folgenden Anreden wie folgt konfiguriert:

  • Generierte Briefanrede: Sehr geehrtes Ehepaar <Nachname>

  • Generierte Anrede: Guten Tag <Vorname><Nachname>

Pflege von Timern unabhängig vom Prozessnamen

Bisher galt für Prozesse: Timername = Prozessname. Man musste für jeden dieser Timeraufrufe auch einen BPM-Prozess anlegen. Mehrere Timer mit unterschiedlichen Parametern aber dem selben Prozessnamen waren nicht möglich, weil dann auch die Timer alle den selben Namen hätten. Statt passend zu nur einer parametrierten Scriptmethode auch nur einen parametrierten BPM-Prozess anzulegen, musste man je Timer einen BPM-Prozess erstellen.

Man kann nun den Namen des Timers unabhängig vom Prozessnamen pflegen. Somit können mehrere Timer mit unterschiedlichen an denselben BPM-Prozess übergebenen Parametern angelegt und mit unabhängigem Zeitplan aufgerufen werden. Es existiert nur noch genau ein BPM-Prozess, der wiederum die benötigte Skriptbibliotheksmethode aufruft.

Hierfür wird die ID genutzt:

  • die ID wird bei Neuanlage der Aktion gepflegt

  • das Feld ist bei Neuanlage der Aktion schreibbar

  • es ist ein eindeutiges Pflichtfeld, wo keine Leerzeichen erlaubt sind

  • In verschiedenen Schichten wird das entsprechende Präfix berücksichtigt

Abbildung: Konfoguration des Timers über eine ID

Starten des Massendatenservers beim Update

Die Behandlung des Massendatenservers beim Update muss mit der Version 2023.1 angepasst werden, da das Starten des Massendatenservers beim Update nicht möglich ist.
Das Vorgehen ist wie folgt:

  • Der Massendatenserver muss nach dem Hauptserver aktualisiert werden (ansonsten erhält der Anwender einen entsprechenden Hinweis)

  • Ist der Hauptserver aktualisiert, kann der Massendatenserver aktualisiert werden, er kann und darf hierfür nicht gestartet sein

  • Für die Aktualisierung des Massendatenservers muss der Anwender keine Anmeldeinformation eingeben, da der Server nicht gestartet werden kann und so die bisherige Prüfung nicht möglich ist.

(Warnung) Hinweise auf veraltete Funktionalitäten

Rückbau des Features: unbekannte Mail-Adressen in der Aktivität

Im damaligen Aktivitätenabgleich existierte ein Feature, wo man zu unbekannten E-Mail-Adressen im Wizard einen Ansprechpartner anlegen und diesen anschließend mit Aktivitäten verknüpfen konnte, die zu dieser E-Mail-Adresse in der Datenbank gespeichert wurden.

Dieses Feature existiert in dem CRM seit 2023.1 so nicht mehr. Es gibt einzig noch die Möglichkeit "Unbekannte" E-Mail-Adressen anzeigen zu lassen (gefundene E-Mail-Adressen, zu denen kein Ansprechpartner existiert).

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.