Visual Studio Projekt: Umstellung BusinessApp auf 64 Bit
BA erfordert jetzt 64 Bit CPUs. Aus diesem Grund müssen auch davon abhängige Projekte umgestellt werden. Das geht unter Projekteigenschaften, Build, Platform Target. Dort umstellen auf x64.
Visual Studio Projekt: Anpassung der NLog Konfiguration in web.config
Wegen Update auf NLog 5.x muss die Konfiguration für die Server-Logdateien aktualisiert werden. Diese Befindet sich unter <nlog...
in der Datei web.config des Projektes, das für die Veröffentlichung oder ZIP-Erstellung genutzt wird. Bei allen Targets mit xsi:type="File"
muss die Option concurrentWrites="true"
hinzugefügt werden.
Die empfohlene NLog-Standard-Konfiguration ist jetzt: Download Kundenspezifische Konfigurationen können abweichen.
Visual Studio Projekt: “Custom” Ordner beim der Veröffentlichung schützen
Um sicher zu gehen, das die “Custom” Ordner bei der Veröffentlichung der Projekte nicht entfernt werden, sollten diese Zeilen in den “csproj” Dateien ersetzt werden.
Veraltet
<AbsolutePath>/[^\\]+\\Custom</AbsolutePath>
Neu
<AbsolutePath>[\\\/][^\\\/]+[\\\/]Custom</AbsolutePath>
Zusätzlich sollte noch diese PropertyGroup
ergänzt werden
<PropertyGroup>
<AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest>
</PropertyGroup>
Der Abschnitt
<PropertyGroup>
<AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest>
</PropertyGroup>
<Target Name="AddCustomSkipRules">
<ItemGroup>
<MsDeploySkipRules Include="CustomSkipFile">
<ObjectName>filePath</ObjectName>
<AbsolutePath>[\\\/][^\\\/]+[\\\/]Custom</AbsolutePath>
</MsDeploySkipRules>
<MsDeploySkipRules Include="CustomSkipFile">
<ObjectName>dirPath</ObjectName>
<AbsolutePath>[\\\/][^\\\/]+[\\\/]Custom</AbsolutePath>
</MsDeploySkipRules>
</ItemGroup>
</Target>
Datenbankabfragen mit String Vergleich
Es kann nun in programmierten Datenbankabfragen die Funktion
query.Where(ff => string.Equals(ff.Name, wert, StringComparison.CurrentCultureIgnoreCase))
verwendet werden, um sicher zu stellen, dass beim Vergleichen die Groß-/Kleinschreibung nicht berücksichtigt wird.
Analog kann mit
query.Where(ff => string.Equals(ff.Name, wert, StringComparison.CurrentCulture))
das Gegenteil erreicht werden.
Ohne diese Methode (Operator =) hängt das Ergebnis von der verwendeten Datenbank ab. MS SQL Server ist Case insensitiv und Postgres ist Case sensitiv. Aus Performancegründen wird das auch so bleiben, falls es an der jeweiligen Stelle keinen semantischen Unterschied macht, weil z.B. die Groß-/Kleinschreibung ohnehin nicht abweichen kann.
Änderungen an PostSave
Die Funktionalität ActionPostSave
wird hiermit ersetzt.Die ActionPostSave
Funktionalität war bisher kein Teil des Leitfadens. Falls dies in Projekten genutzt wurde, sollte die Funktionalität auf das neue Vorgehen umgestellt werden.
Die Eigenschaften ActionPostSaveClass
, ActionPostSaveMethod
und ActionPostSaveMethodParameters
wurden in den Typen BA.Ui.Models.ActionPostSaveModel
überführt, und dieses belegt nun nur noch die einzelne Eigenschaft ActionPostSave
auf FormHiddenData
.
ActionPostSaveClass
->ActionPostSaveModel.HandlerClass
-> FunktionsparameterhandlerClass
ActionPostSaveMethodParameters
->ActionPostSaveModel.Parameters
-> Funktionsparameterparameters
ActionPostSaveMethod
-> entfällt durch Verwendung des Interface-Konzepts (s. unten)ActionPostSaveIncludeFormModelAndHiddenData
-> entfällt durch Verwendung des Interface-Konzepts (s. unten)
Durch die Verwendung eines Interface-Konzepts ist es nun nicht mehr möglich, in einer Handler-Klasse mehrere Methoden zum Aufruf unterschiedlicher Funktionalitäten unterzubringen, Vorkommen dieser Art müssen auf mehrere Klassen aufgeteilt werden.
Umstellung RelationCategory auf GUID
Der Datentyp für Relationskategorien hat sich aus Performancegründen auf GUID geändert. Es gilt:
- Es werden wie gehabt die GUIDs der Enum-Werte für die Relationskategorie verwendet.
- Die Relationskategorie “keine” entspricht jetzt Guid.Empty.
- Die Relationskategorie null bedeutet “alle” Kategorien eines Relationstyps. Das ist nur bei Selektionen erlaubt nicht beim Schreiben von Relationen.
Notwendige Änderungen zu finden hier
Attribut [CriteriaProperty] rendert nun das Eingeabesteuerlement selbst
[CriteriaProperty]
fügt ein simples Formelfeld als Eingabesteuerelement ein. Das [MemoControl]
Attribute muss an diesen Stellen entfernt werden, sonst wird anstelle des Formelfeldes auch weiterhin ein MemoControl gerendert.
Programmierte Teiltabellen
Programmierte Teiltablenneninstanzen, also die Verwendung innerhalb einer Tabelle, benötigen jetzt auch eine eindeutige GUID.
Bei der Klasse, die von OrmSubXXX
erbt und in der das Parent-Property mit dem AssociationAttribute
definiert ist, muss ein OrmSubEntityInstanceAttribute
hinzugefügt werden. Jede Instanz davon benötigt eine eigene GUID, die sonst nirgends verwendet wird. Das ist die DataSource-GUID für diese Verwendung der Teiltabelle.
Beispiel:
[OrmSubEntityInstance("BD5525AB-C55C-42C9-B6E8-55F933C2C78C")]
public partial class OrmSubAddressCompany
{
public OrmSubAddressCompany() : base() { }