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.

  1. EnumInheritanceTypes ist entfallen. Damit müssen alle Extensions an Auswahlliste gelöscht werden. (.CS-Dateien)
  2. 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 als abstract deklariert sein!
  3. Migration: Konfig-Migration: BA.Core.Migrations.V5_0.Migration_02_RemoveEnumInheritance.MigrateEnumInheritanceTypeToEnumDataSource() muss im Context einer eigenen ConfigMigration aufgerufen werden. Und zwar aus der Funktion MigrateConfiguration().

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ückgabewert
  • ActionBase.AddRibbonItemToList hat Signatur geändert, das Dictionary ist nicht mehr ref.
  • SingleDetailGridViewControl.Entity gibt’s nicht mehr und muss jetzt aus der View ausgelesen werden
  • DevExFormLayoutTranslator.RecursiveTranslateControls => hat keinen VisibleOnLoad Parameter mehr, dieser Parameter kann einfach entfernt werden
  • RenderingUtils.ShouldBeSkippedBecauseOfCondition gibt’s nicht mehr => neu IsConditionallyHidden
  • GetDevExRibbonButton(parentType, uiModel); => Signatur hat sich verändert!
  • DevExNavigationTranslator.AddAdditionalButtonParameters(Id, renameButton.Name, parentType, renameAdditionalClientData, ref additionalButtonParameters); => Signatur hat sich verändert
  • MassOperationDataProvider.GetSelectedRecordsQuery => gibt’s nicht mehr, evtl passt jetzt OrmTempSelectedRecords.GetSelectedRecordsQuery<T>()
  • IRefreshPanelFiringControl => gibt es nicht mehr, muss inclusive seiner Property und der Funktion einfach entfernt werden