Patches
Mithilfe von Patches können Anpassungen an fremden Codeblock Packages vorgenommen werden. Dies liefert so zum Beispiel individuelle Einstellungsmöglichkeiten für Standard-Packages. Wie fast alle Konfigurationen sind die Patches unter objects angesiedelt und können sowohl in der be_package_install.yaml direkt - als auch in seperaten xxx.patches.yamldefiniert werden.
Eine einzelne Patchconfiguration hat Eigenschaften:
Property | Beschreibung |
|---|---|
| Eindeutige ID, wird perspektivisch automatisch gesetzt. Muss bis auf weiteres manuell gesetzt werden. |
| Hiermit kann man den aktuellen Patch deaktivieren/aktivieren. ( |
| Beschreibung des Patches. Wichtig für Nachvollziehbarkeit und Dokumentation. |
| Gibt an, ob der Patch nur für bestimmte Rollen gelten soll. (perspektivisch, aktuell nicht verfügbar) |
| Bedingung, wann der Patch angewendet wird. Filterbar über Rolle oder per JS-Expression. (perspektivisch, aktuell nicht verfügbar) |
| Liste der Objekte, die innerhalb dieses Patches angepasst werden sollen. |
In der objects Eigenschaft werden die eigentlichen Patches definiert mit Eigenschaften:
Property | Beschreibung |
|---|---|
| Der Typ des Objekts. Aktuell |
| Pfad des zu patchenden Objects, z.B. |
| Liste von Änderungen diese haben ihrerseits jeweils die Keys:
|
| Liste von Änderungen, diese haben ihrerseits jeweils die Keys:
Additions sind aktuell nur für |
| Gibt an, ob das gesamte Objekt gelöscht werden soll ( Aktuell nur für |
Es sind folgenden Kombinationen möglich:
Property | Action | Sub-Property | Beschreibung |
|---|---|---|---|
menu | change | orderKey | Änderung der Sortierreihenfolge von Menüeinträgen |
delete | - | Löschen von Menüeintragen | |
entity | addition | fields | Zufügen neuer Felder zu einer Entität |
change | permissions.read permissions.create permissions.delete permissions.update | Überschreiben der jeweiligen Permission an einer Entität | |
page | change | permissions | Überschreiben der Page permissions |
command | change | permissions | Überschreiben der benötigten Permission für das Ausführen des Kommandos. |
Werden Objecte eines anderen Packages gepatched, so muss das zu patchende Package auch als dependency dem Package zugefügt werden.
Die Form von value hängt stets maßgeblich von dem zu patchendem Pfad ab und stimmt mit dem jeweilig “benötigtem” Objekt überen. Das heißt z.B. für das zufügen von Entitätsfeldern ist der value ein Objekt, dessen Form mit der entsprechenden Felddefinition, wie sie auch innerhalb von <..>.entities.yaml Dateien zugelassen ist, übereinstimmt..
Beispiele
1. Beispiel: Den orderKey eines Menüs überschreiben
patches:
- uuid: <automatisch generierte UUID>
description: |
Das Menüelement "upYouGo" soll up you know?.
objects:
- object: menu
path: BEPO.upYouGo
changes:
- path: orderKey
value: AB
2. Beispiel: Menüeintrag löschen
patches:
- uuid: <automatisch generierte UUID>
name: C_MenuLoeschen
description: |
Entfernt den veralteten Menüeintrag "mnuObsoleteMenu".
objects:
- object: menu
path: BEPO.mnuObsoleteMenu
delete: true
3. Beispiel: Ein neues Feld einer Entität zufügen
patches:
- uuid: <automatisch generierte UUID>
description: |
Extend an Ent.
objects:
- object: entity
path: LOTR_Ent
additions:
- path: fields
value:
name: bark_type
dbType: text
label: Art
4. Beispiel: Die benötigten Leserechte an einer Entität überschreiben
patches:
- uuid: <automatisch generierte UUID>
description: |
Look at my horse. My horse is amazing.
objects:
- object: entity
path: LOTR_Horses
changes:
- path: permissions.read
value:
- role: BE.portalUser
Restriktionen für Entitätsfeldpatches
Im Falle von Entitätsfeldpatches ist folgendes zu beachten:
Es können keine Entitäten aus
@be/*packages gepatched werdenDie Namen der neuen Entitätsfelder müssen dem folgenden Namensschema entsprechen
Ist der Patch in einem custom Package definiert (
@custom/*), so muss der Feldname mitc_beginnen.Ist der Patch nicht in einem custom Package definiert, so muss der Feldname mit dem packagekey (+
_) beginnen (inlowercase) in dem der Patch definiert ist
Definitionen von patches in .customizing
Im Gegensatz zu anderen Objekten (Stand 7.7.0) können patches nicht nur unter .objects, sondern auch unter .customizing definiert werden. Hierbei gelten alle Restriktionen wie bisher, allerdings können an dieser Stelle NUR Objekte gepatched werden, die in dem Package definiert sind.