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:

  1. Backup der gesamten Datenbank
  2. Export der betroffenen Tabelle(n)
  3. Export der zu verändernden Daten
  4. ...

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

  1. Falls noch nicht geschehen, überlege dir was du eigentlich tun möchtest ;)

  2. Umreiße eine einigermaßen klare Zielstellung.
    Beispiel:_

    • Alle Shared Layout Felder finden, die einen bestimmten Wert enthalten.
  3. Ü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
  4. 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&amp;Border Shape=none&amp;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&amp;Border Shape&amp;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