String Methoden entfernt
Zwei Methoden wurden entfernt und müssen umgestellt werden
string.GiveMaxNChars(n)
-> string.Ellipsis(n)
string.GiveFirstNChars(n)
-> string.Remove(Math.Min(string.Length, n))
Umbau der Definition der Basis-Datentabellen
Neues Vorgehen siehe Kapitel
Falls eine Basis-Tabelle definiert ist, muss folgendes umgestellt werden.
EnumInheritanceTypes
ist entfallen. Damit müssen alle Extensions an Auswahlliste gelöscht werden. (.CS-Dateien)OrmInheritanceNodeAttribute
ist ebenfalls entfallen. Dieses bei allen Typen, wo es verwendet wurde, löschen. Wichtig: Alle Klassen, bei denen das Attribut gelöscht wurde, muss alsabstract
deklariert sein!- Migration: Konfig-Migration:
BA.Core.Migrations.V5_0.Migration_02_RemoveEnumInheritance.MigrateEnumInheritanceTypeToEnumDataSource()
muss im Context einer eigenen ConfigMigration aufgerufen werden. Und zwar aus der FunktionMigrateConfiguration()
.
Datentabellen sind per Vorgabe nun DesignTimeVisible(true)
Jedes ORM, dass von OrmBABase erbt, erhält nun automatisch das Attribut [DesignTimeVisible(true)]
vererbt. Das bedeutet, es kann in den Auswahlen von Datentabellen gewählt werden. Jetzt muss daher explizit [DesignTimeVisible(false)]
gesetzt werden, wenn man das nicht will.
Refactoring im Rahmen der Einführung von Teilmasken
Durch die Einführung von FormConfigurationBase
haben sich einige Namespaces geändert:
Suchen und ersetzen:
Suchen: BA.Core.Configuration.Form.Renderers
Ersetzen BA.Core.Configuration.FormBase.Renderers
Suchen: BA.Core.Configuration.Form.Controls
Ersetzen: BA.Core.Configuration.FormBase.Controls
Vereinzelt müssen einige Usings noch auf BA.Core.Configuration.FormBase umgestellt werden.
Wegfall von IDevExFormControl
Wurden eigene Steuerlemente für Masken implementiert, muss die Schnittstelle IDevExFormControl
entfernt werden. Diese entfällt ersatzlos.
Umbau Framework für Aktionen
Aus technischen Gründen musste das Framework für die Implementierung von Aktionen umgebaut werden. Wichtig dabei ist das das Control während dem Rendern AdditionalRibbonButtonAssignment
nicht verändert wird. das erzeugt Race-Conditions und Benutzer können sich gegenseitig beeinflussen. Dies gilt für die Implementierung aller Steuerelemente.
Die notwendigen Änderungen sind hier beschrieben.
Deinstallierte Nugets
Zur aktuellen Version wurden eine Reihe von Nugets in BA.CRM deinstalliert. Dadurch entfällt die Abhängigkeit von BA von diesen Tools. Es wird empfohlen eine Deinstalaltion dieser Nugets auch in den eigenen Projekte zu prüfen. Eine Deinstallation sollte dann möglich sein, wenn das Projekt selbst keine eigenen Abhängigkeiten zu den jeweiligen Nugets besitzt. Liste
Die TaskSession wurde aufgelöst
Die TaskSession
wurde aus BA ausgebaut. Stattdessen wird nun die normale Session
oder UnitOfWork
verwendet.
session = Api.ORM.GetNewTaskSession(type)
nach
session = Api.ORM.GetNewSession();
Damit fällt auch eine möglich Überprüfung der TaskSession weg
TaskSession.IsTaskOfType(Session, type)
und ein mögliches Setzen des ForceLoadingRelations
Session.ForceLoadingRelations(true);
Änderung der Signatur von RemoveAttributeFromControl und RemoveAttributeFromControlDirect
Es wird nun die ID des Steuerelementes als Guid benötigt. Das Steuerelement kann ermittelt werden über
parameters.FormConfiguration.GetControl(nameof(OrmCRMOpportunity.ActualClosingDate))
oder
parameters.FormConfiguration.GetControl(EnumRelationTypeExtension.CompetitorGuid)
RelationTypeConfiguration.CopyRelation existiert nicht mehr
Das Property CopyRelation
von RelationTypeConfiguration
existiert nun nicht mehr und muss bei Erstellen einer eigenen Relation entsprechend entfernt werden.
Api.ORM
Api.ORM.GetOrm(oid)
Liefert jetzt immer mindestens OrmBABase. Wichtigster Anwendungsfall, bei dem das nicht erfüllt ist, ist der Zugriff auf den aktuellen User:
Api.ORM.GetOrm<OrmUser>(Api.User.CurrentUserGuid())
Dafür gibt es die API-Funktion
Api.User.CurrentUserAccess()
Für Anwendungsfälle, wo das nicht genügt, ist der Ersatz
session.GetObjectByKey(oid)
Api.ORM.GetNewORM(session)
Liefert jetzt immer mindestens OrmBABase. Falls das irgendwo für etwas anderes verwendet wird heißt es nun:
new T(session)
Api.ORM.GetQuery(Session session)
Erfordert jetzt immer mindestens OrmBABase. Am häufigsten wurde dies für Relationen verwendet:
Api.ORM.GetQuery<OrmRelation>(session).Where(ff => ff.RelationType = relationType)
=> Api.Relation.GetRelationsQuery(relationType, session)
Dann gibt es den Fall Teiltabellen. Für die ist jetzt die API-Funktion
Api.ORM.GetSubRecordsQuery(...)
zu verwenden. Oder allgemein für alle anderen nicht Orm*BA-Tabellen:
Api.ORM.GetQuery<T>(session)
=> session.Query<T>()
bzw.
Api.ORM.GetQuery<T>()
=> Api.ORM.GetDefaultSession().Query<T>()
Api.ORM.GetQuery(Guid type, Session session)
Liefert jetzt IQueryable<OrmBABase>
Falls dies nicht passt, sollte
session.Query<...>()
verwendet werden.
Sonstiges
WorkflowActionBaseControl.ExecuteAction
hat nun einen RückgabewertActionBase.AddRibbonItemToList
hat Signatur geändert, das Dictionary ist nicht mehr ref.SingleDetailGridViewControl.Entity
gibt’s nicht mehr und muss jetzt aus der View ausgelesen werdenDevExFormLayoutTranslator.RecursiveTranslateControls
=> hat keinenVisibleOnLoad
Parameter mehr, dieser Parameter kann einfach entfernt werdenRenderingUtils.ShouldBeSkippedBecauseOfCondition
gibt’s nicht mehr => neuIsConditionallyHidden
- GetDevExRibbonButton(parentType, uiModel); => Signatur hat sich verändert!
DevExNavigationTranslator.AddAdditionalButtonParameters(Id, renameButton.Name, parentType, renameAdditionalClientData, ref additionalButtonParameters);
=> Signatur hat sich verändertMassOperationDataProvider.GetSelectedRecordsQuery
=> gibt’s nicht mehr, evtl passt jetztOrmTempSelectedRecords.GetSelectedRecordsQuery<T>()
IRefreshPanelFiringControl
=> gibt es nicht mehr, muss inclusive seiner Property und der Funktion einfach entfernt werden