002 - Operation am offenen Herzen
Das direkte Arbeiten auf den Sitecore Datenbanken core, master und web hat sich in vielen Situationen als äußerst effizient erwiesen.
I. Vorbereitung
Bevor man jedoch anfängt locker flockig SQL-Befehle abzufeuern sollte man über folgende Punkte zumindest einmal nachgedacht haben:
Datensicherung
Sichere alle Daten, die du vorhast zu verändern, in geeigneter Art und Weise.
Dazu stehen je nach Situation verschiedene Methoden zur Verfügung:
- Backup der gesamten Datenbank
- Export der betroffenen Tabelle(n)
- Export der zu verändernden Daten
- ...
Backup Validierung
Prüfe mindestend einmal ob ein Rollback dieser Daten funktioniert.
Lokale Entwicklung
Jede Query wird stets zuallererst gegen die lokale Entwicklerdatenbank getestet.
Checkliste
- Backup erstellt
- Backup validiert
II. Informationsbeschaffung
-
Falls noch nicht geschehen, überlege dir was du eigentlich tun möchtest ;)
-
Umreiße eine einigermaßen klare Zielstellung.
Beispiel:_- Alle Shared Layout Felder finden, die einen bestimmten Wert enthalten.
-
Überlege, welche Informationen für Umsetzung erforderlich sind und beschaffe diese. Passe wenn nötig die Zielstellung an.
Beispiele:_- Um welches Feld handelt es sich? → Shared Layout
- Ist das Feld versioned, unversioned oder shared? → shared
- Wie lautet die TemplateId des Feldes? → {F1A1FE9E-A60C-4DDB-A3A0-BB5B29FE732E}
- Welchen Wert soll das Feld enthalten? → Border Shape
-
Definiere konkret, was du als Ergebnis erwartest.
Beispiel:_- Eine Liste mit den IDs aller Items, deren Shared-Layout-Feld den Wert Border Shape enthält.
Checkliste
- Backup erstellt
- Backup validiert
- Alle nötigen Informationen vorhanden
- Konkrete Zielstellung formuliert
III. Durchführung
Wenn alle notwendigen Informationen zur Durchführung vorliegen dann ist die Umsetzung reine Fleißarbeit.
Es muss nur die konkret formulierte ...
Anforderung
Alle shared Felder mit der TemplateId {F1A1FE9E-A60C-4DDB-A3A0-BB5B29FE732E} finden, die den Wert Border Shape enthalten.
in eine geeignete ...
SQL Query
... über- und ausgeführt werden:
/* get all '__Renderings' fields containing the term 'Border Shape' */
USE [sitecore_master_db]
GO
SELECT [Id]
,[ItemId]
,[FieldId]
,[Value]
,[Created]
,[Updated]
FROM [dbo].[SharedFields]
WHERE FieldId = '{F1A1FE9E-A60C-4DDB-A3A0-BB5B29FE732E}'
AND Value LIKE '%Border Shape%'
GO
Wenn Shared Layout Felder exisitieren, welche die Bedingungen erfüllen dann erhalten wir eine Liste mit den gewünschten Einträgen:
| Id | ItemId | FieldId | Value | Created | Updated |
|---|---|---|---|---|---|
| D2A883A1-9B4E-434F-9654-C20053EC1B6A | E196D0FB-00DF-4955-8151-CF791FF2F155 | F1A1FE9E-A60C-4DDB-A3A0-BB5B29FE732E | <r xmlns:p="p" xmlns:s="s" p:p="1"><d id="{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}"><r uid="{86489BCB-54BF-4A98-8675-72C4CA14BFA6}" p:after="*[1=2]" s:ds="{3F90435D-BEAB-4470-B55A-F1DD6F94ACF2}" s:id="{2EC62A9F-85AC-477A-8641-B493DC00735C}" s:par="Appearance&Border Shape=none&Invert Foo Color=1" s:ph="content-header" /></d></r> |
2020-12-06 14:46:53.537 | 2020-12-06 14:46:53.537 |
| 42DF267A-E949-4F87-887E-71DD509260D7 | 8886147E-9C6B-4069-84B7-134E1D5901EC | 1A1FE9E-A60C-4DDB-A3A0-BB5B29FE732E | <r xmlns:xsd="http://www.w3.org/2001/XMLSchema" ><d id="{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}" l="{1F4ED7D1-C7F1-4E7D-B104-F204CF257564}"><r id="{3645DD05-C857-4365-B548-5A95B3CCA36F}" ph="nav-meta-header" uid="{4888020C-855B-4224-AA66-659455CC5720}" /><r id="{ED828D3C-F328-4E7C-A974-3799B65C64DD}" ph="nav-main" uid="{540C19CC-2029-4C60-AF2A-8C8C1C2C304A}" /><r id="{37286E9D-0075-41EB-9E76-AD58174B6AF1}" ph="nav-breadcrumb" uid="{CD40DC99-7B7B-4E76-8405-B14227D77155}" /><r ds="{3F90435D-BEAB-4470-B55A-F1DD6F94ACF2}" id="{2EC62A9F-85AC-477A-8641-B493DC00735C}" par="Appearance&Border Shape&Invert Foo Color" ph="content-heater" uid="{36662AF0-4255-4172-9757-BFC0E5059479}" /></d></r> |
2020-11-03 10:56:27.357 | 2020-11-03 10:56:27.357 |
IV. Ergebnis
Betrachten wir die Listeneinträge im Detail dann finden wir da die Felder ...
ItemId
Die ID des Items, zu dem das Feld gehört.
Value
Den aktuellen Wert des Feldes.
In unserem konkreten Beispiel ist das die XML-Notation des Layout-Delta des Feldes __Renderings.
Id
Die eindeutige Id des Feldes.
FieldId
Die Template Id des Feldes.
Created
Der Zeitpunkt der Erstellung.
Updated
Der Zeitpunkt der letzten Änderung.
Damit ist das Ziel, alle Shared Layout Felder, die den Wert Border Shape enthalten, zu finden, erfüllt.
06.12.2020 | armin