karazy
I'm new here

Query - Abfrage auf NOTNULL bei Typ XML (FirstSpirit Editor)

Hallo zusammen,

ich möchte in einer Abfrage prüfen ob ein XML Wert in einer Datenbank null ist.

Der XML Wert wird durch eine FS_Reference befüllt. Nun ist aber immer ein Wert in der

Datenbank egal ob die FS_Reference einen Wert enthält oder nicht.

<CMS_VALUE name="csCertificate" tag="FS_REFERENCE"><LANG id="§" set="0"/></CMS_VALUE>

Gibt es hier eine Möglichkeit z. B. über isEmpty dies abzuprüfen?

Viele Grüße,

F. Reifschneider

0 Kudos
6 Replies
feddersen
Community Manager

Die Prüfung mittels isEmpty ist hier das Mittel er Wahl, allerdings müssen sie sich vorher alle Datensätze holen und dann mit einer Schleife darüber zu iterieren. Wie Sie schon gemerkt haben, greift die klassische IS NULL Prüfung in der Datenbank  für komplexe XML-Spalten nicht.

0 Kudos

Ich habe das gleiche Problem:

Hab ein CMS_INPUT_LINK was ein XML speichert. Eine Überprüfung mittels .isEmpty funktioniert nur wenn ein Link gepeflegt ist, aber beim Generieren wirft er ein Fehler wenn kein Link existiert (also nur das XML-Grundgerüst wie im ersten Posting).

Fehlermeldung:

(de.espirit.firstspirit.generate.SiteProduction): cannot create access editor for attribute 'Url'

[...]

inside of: $CMS_VALUE(vOrt.Url.isEmpty)$ - at 230, 8

java.lang.RuntimeException: cannot create access editor for attribute 'Url'

  at de.espirit.firstspirit.parser.eval.EntityEnhancer.get(EntityEnhancer.java:117)

[...]

Caused by: java.lang.NullPointerException: NULL is not allowed as variable name

Ich habe die Vermutung, er will mit isEmpty Typabhängig prüfen ob ein Link existiert und stößt auf NULL, da kein link drin steckt. Ich müsste statt isEmpty besser auf isNull o.ä. prüfen. Aber bei beiden (isEmpty, isNull) kriege ich bei leeren Feldern die obige Fehlermeldung und weder true noch false bei der Ausgabe.

Was mache ich falsch bzw. was ist mit "vorher alle Datensätze holen.." gemeint?

Bisherige Prüfung, die bei gefüllten Felder funktioniert und bei leeren Feldern zu Fehler führt:

$CMS_IF(!#row.Veranstaltungsort.Url.isEmpty)$

0 Kudos

Für alle, die das gleiche Problem haben (speziell bei Wechsel von

CMS_INPUT_LINK, *CONTENTAREA und *CONTENT -> FS_LIST

z.B. vom Wechsel FS4->FS5):

Ändert man das Formularelment und behält die ID bei, so bleiben zwar die Daten erhalten und werden ausgespielt, aber das XML-Format der Kompotente ist anders und führt zu Fehlern im Generierungslog.

Als Lösung kann man den Datensatz einfach bearbeiuten und schließen, dann wird das XML angepasst.

Alt:

<CMS_VALUE>

          <LANG id="§" set="1">

                    <LINKS>

                              <CMS_LINK linktemplate="content_external" localId="8"

                                        type="genericLink">

                                        <TEMPLATECONTENT>

                                                  <CMS_VALUE name="text">

                                                            <LANG id="§" set="1">

                                                                      <TEXT>anonymisiert</TEXT>

                                                            </LANG>

                                                  </CMS_VALUE>

                                                  <CMS_VALUE name="title">

                                                            <LANG id="§" set="0" />

                                                  </CMS_VALUE>

                                                  <CMS_VALUE name="url">

                                                            <LANG id="§" set="1">

                                                                      <SEL>

                                                                                <VALUE>

                                                                                          <KEY_VALUE class="java.lang.Integer">167813</KEY_VALUE>

                                                                                </VALUE>

                                                                      </SEL>

                                                            </LANG>

                                                  </CMS_VALUE>

                                                  <CMS_VALUE name="external">

                                                            <LANG id="§" set="0" />

                                                  </CMS_VALUE>

                                        </TEMPLATECONTENT>

                              </CMS_LINK>

                    </LINKS>

                    <LATEST linkId="8" />

          </LANG>

</CMS_VALUE>

NEU:

<CMS_VALUE name="cs_links" tag="FS_LIST">

          <LANG id="§" set="1">

                    <DATA>

                              <ENTRY id="1947" template="content_external">

                                        <TEMPLATECONTENT>

                                                  <CMS_VALUE name="text">

                                                            <LANG id="§" set="1">

                                                                      <TEXT>anonymisiert</TEXT>

                                                            </LANG>

                                                  </CMS_VALUE>

                                                  <CMS_VALUE name="title">

                                                            <LANG id="§" set="0" />

                                                  </CMS_VALUE>

                                                  <CMS_VALUE name="url">

                                                            <LANG id="§" set="1">

                                                                      <VALUE uid="Backoffice.url_extern">

                                                                                <KEY>

                                                                                          <ITEM>167813</ITEM>

                                                                                </KEY>

                                                                      </VALUE>

                                                            </LANG>

                                                  </CMS_VALUE>

                                                  <CMS_VALUE name="external">

                                                            <LANG id="§" set="0" />

                                                  </CMS_VALUE>

                                        </TEMPLATECONTENT>

                              </ENTRY>

                    </DATA>

          </LANG>

</CMS_VALUE>

0 Kudos
TimoMeister
Returning Responder

Hallo,

gibt es dazu auch eine Lösung bei Datenbank-Abfragen?

Möchte gerne ein XML-Feld das mit CMS_COMBOBOX gefüllt wird prüfen ob es leer ist.

Beim Anlegen eines neuen Datensatzes ist das XML-Feld schon immer gesetzt, mit was auch immer.

Viele Grüße

Timo

0 Kudos

Hi Timo,

das "was auch immer" ist die Persistenzinformation für das XML-Feld. Eine Prüfung via DB-Query ist an dieser Stelle nicht zuverlässig möglich.

Beste Grüße

Stefan

0 Kudos

Hallo Stefan,

Schade! Danke für deine Antwort

Viele Grüße

Timo

0 Kudos