Automatische Migrationen

Es gibt aufwändige automatische Daten-Migrationen. Diese können je nach Datenmenge in einer Instanz beim ersten Starten nach der Aktualisierung einige Minuten Zeit in Anspruch nehmen.

Nullable-Option aus Datenspalten entfernt

Die Option „Nullwerte erlauben” wurde bei konfigurierten Spalten entfernt. Alle angepassten Spalten von numerischem Typ oder Datum/Zeit werden automatisch auf “Nullwert erlaubt” umgestellt.

Um ein Verhalten weitgehend wie vorher zu erhalten, wird dabei zusätzlich:

  • Bei numerischen Spalten (nicht Datum/Zeit) wird der Vorgabewert auf „0” gesetzt, sofern noch keiner existiert. Das entspricht weitgehend dem Verhalten programmierter Spalten ohne Nullwerte.
  • Es wird ein „Zwingend erforderlich”-Validator hinzugefügt (nicht Datum/Zeit). Dieser stellt sicher, dass ein bereits vorhandener Wert nicht entfernt werden kann, wodurch evtl. Formeln unerwartet NULL-Werte vorfinden.
  • Existierende Datensätze, bei denen in der Datenbank noch der Wert NULL steht, weil sie seit Einführung der Spalte noch nie gespeichert wurden, bekommen nun den Wert „0”. Dieser wurde bei den Spalten auch vorher in der UI angezeigt.
  • Bei Spalten vom Typ „einzelnes Zeichen” wird ein evtl. in der Datenbank stehender Wert von <NUL> (nicht darstellbares Unicode Steuerzeichen), durch NULL ersetzt. Das Steuerzeichen entstand, wenn ein Datensatz mit einer Spalte vom Typ „einzelnes Zeichen” und ohne „Nullwerte erlauben” gespeichert wird, ohne dass eine andere Eingabe erfolgt ist

Eigenes Hintergrundbild beim Login

Das Hintergrundbild beim Login (loginscreen.jpg) wird jetzt nicht mehr in „App_Data/Files” abgelegt, sondern in „Custom/Styles”. Bestehende Hintergrundbilder müssen entsprechend verschoben werden.

Umstellung von konfigurierten Auswahllisten-Datenspalten auf Einzelwert

Der Typ von einmal konfigurierten Spalten kann nachträglich nicht verändert werden. Das gilt auch für die neue Option „Mehrfachauswahl”. Standardmäßig wird diese Option bei allen vor Release 6.0 konfigurierten Auswahllisten-Datenspalten automatisch gesetzt. Dies entspricht dem bisherigen Verhalten.

Auswahllisten-Datenspalten auf Einzelwerte umstellen

Um eine bestehende, konfigurierte Auswahllisten-Datenspalte auf Einzelwerte umzustellen, ist wie folgt vorzugehen:

  • Vor dem ersten Start mit dem neuen Release, ist in die Datei Customer.config ein neuer Eintrag für den Parameter „BA:Migration_6.0_SingleEnumColumns” zu erstellen. Darin ist für jede auf Einzelwerte umzustellende Spalte deren Name zusammen mit dem ORM-Typ der Klasse im Format „OrmKlasse.Spaltenname” einzutragen. Mehrere Spalten können durch Leerzeichen oder Komma getrennt werden. Auf Groß-/Kleinschreibung muss geachtet werden.

Beispiel:

<add key="BA:Migration_6.0_SingleEnumColumns" value="OrmCRMCompany.Custom_MySelectionColumn OrmMMtestAppointmentCustom.Custom_MyEnum" />
  • Wenn die Anwendung das erste mal mit dem neuen Release startet, werden die in diesem Parameter genannten Spalten auf Einzelwert-Enums umgestellt.
    Dies bewirkt auch, dass ggf. Anpassungen in Formeln vorgenommen werden, in denen auf diese Spalten zugegriffen wird.
  • Der Parameter „BA:Migration_6.0_SingleEnumColumns” hat im laufenden Betrieb der Anwendung keine Auswirkung mehr. Er wird aber auch heran gezogen, wenn eine (Teil)Tabellen-Konfiguration aus einer älteren BA-Version importiert wird.
  • Falls die Spalte bereits Daten enthält, die mehr als einen Wert zugewiesen hatten, wird nur der erste Wert übernommen. Die alten Daten verbleiben in diesem Fall in der Datenbank in der Spalte „MySelectionColumn_AllValues”.

Die Entscheidung für Einfach-Auswahl bringt auch Performance-Vorteile. Nach der Migration auf 6.0 kann die Entscheidung dafür oder dagegen aber nicht mehr revidiert werden.

Eindeutige Schlüsselspalten in Teiltabellen

Diese Spalten müssen zukünftig auf Einfachauswahl umgestellt werden. Die Migration erfolgt (bei konfigurierten Spalten) automatisch. Sobald eine Spalte irgendwo als eindeutiger Schlüssel verwendet wird, wird sie auf Einzelauswahl umgestellt.

Auswahllisten-CommonFields auf Einzelauswahl migrieren

Die Vorgehensweise für CommonFields ist exakt identisch mit der Migration von konfigurierten Auswahllisten-Datenspalten. Hier wird ebenfalls der Parameter „BA:Migration_6.0_SingleEnumColumns” verwendet. Dort ist für konfigurierte Common-Fields ein Eintrag der Form „OrmBABase.Common_MyEnumField” vorzunehmen. (Common-Fields werden immer in der ORM-Klasse OrmBABase angelegt.)

Der Eintrag für ein Common-Field bewirkt auch, dass wenn dieses Common-Field im Zuge eines Auswahllisten- oder Konfigurationsimports aus einer älteren BA-Version nachträglich importiert wird, das CommonField angepasst wird.

Risiken bei der automatischen Migration

Falls es bei der Migration von eigenen Konfigurationen zu Warnungen im Server-Logfile kommt, müssen ggf. Formeln in den Konfigurationen manuell angepasst werden. Dasselbe gilt, falls eine BACRM-Konfiguration ohne automatische Aktualisierung verwendet wird, oder für Importe von alten Konfigurations-ZIPs.

Unklarer Zugriff auf XXX_AllValues

2022-07-04 16:54:32.078	239	WARN	-	BA.Core.Migrations.V6_0.Migration_06_SingleEnum+<>c__DisplayClass13_0.<AmbiguousCriteriaRule>b__0
"The Criteria property ResultRowTwo of control SearchIndexConfiguration 'Ticket' {6de3527d-4794-4477-b047-69eb264ae891}/IndexColumns/SearchIndexDisplayControlHolder {cf27aff9-a656-4fac-ba44-3dfd583949bf}/SearchIndexDisplayControl {abe7ec77-defd-470a-a614-d4e73c07c754} contains access to the enum field Category_AllValues which is used for multi values enum fields as well as for single value enum fields:
 Concat(
  Trim(Replace(ToStr([ActivityDate])+' ',':00 ',' ')),
  ' (', [RelatedEditor.EntityTitle], ') | ',
  [Status_AllValues],
  IIf(!IsNull([Category_AllValues]), Concat(' (', [Category_AllValues], ')'), ''))
If this context refers to a single enum field the criteria must be changed manually."	""

Diese Art Fehler tritt auf, wenn eine Spalte, hier „Category” in manchen Datentabellen eine Auswahlliste mit nur Einfachauswahl beherbergt und in anderen Datentabellen eine mit Mehrfachauswahl. In diesem Fall muss die genannte Formel manuell angepasst werden, falls die Formel sich in diesem Kontext auf ein Einzelauswahl bezieht, da es die AllValues-Spalte dann nicht mehr gibt.

In diesem Beispiel lautet die korrigierte Formel:

 Concat(
  Trim(Replace(ToStr([ActivityDate])+' ',':00 ',' ')),
  ' (', [RelatedEditor.EntityTitle], ') | ',
  [Status_AllValues],
  IIf(!IsNull([Category]), Concat(' (', ToStr([Category]), ')'), ''))

Einzelwertspalte enthält mehrere Auswahlwerte

2022-07-04 12:42:34.917	287	WARN	-	BA.Core.Migrations.V6_0.Migration_06_SingleEnum.ExecuteTheScriptAfterStart
"The enum column Industry of table OrmCompany has been converted to single value but the database contains at least one record with more than one enum value.
The column Industry_AllValues will NOT be removed."	""

Dieser Fehler tritt auf, wenn eine Einzelwertspalte vor der Migration bereits bei mindestens einem Datensatz mehrere Auswahlwerte hatte. Das gilt für Spalten, die im BA/BACRM umgestellt wurden gleichermaßen wie für in Projekten umgestellte Spalten wie auch für konfigurierte und per „BA:Migration_6.0_SingleEnumColumns”-Option umgestellte Spalten.

Die Anwendung ist nach einem solchen Fall lauffähig, aber es kann nur noch auf den jeweils ersten Auswahllisten-Wert pro Datensatz zugegriffen werden.

BA:RecentlyUsed.MaxLifetime entfernt

Der Parameter wurde entfernt und hat keine Funktion mehr. Der Parameter „BA:RecentlyUsed.MaxCount” kann stattdessen benutzt werden.

Dashboard-Widget

Es gibt ein neues Dashboard-Widget. Die bisherige Möglichkeit, Dashboards neben Masken und Ansichten anzuzeigen ist entfallen. Es erfolgt keine automatische Migration, aber die alten Einstellungen werden während der Migration protokolliert.