thomas_walter
I'm new here

Umgang von FirstSpirit mit Pflichtfeldern?

Bevor ich zu diesem Punkt evtl. einen Featurewunsch einstelle würde ich gerne zuerst hören, wie andere Kunden mit dem Thema umgeben, was evtl. bereits in der aktuellen Version 4.2 bereits umgesetzt ist (wir setzen noch 4.1 ein) und was bereits seitens der e-spirit AG geplant ist ...

Hintergrund zum aktuellen Verhalten:

Das "Problem" ist hier, dass _initial_ alle Eingabekomponenten (also auch DOM) leer gespeichert werden können weil diese theoretisch auch im WebClient angelegt werden können und dort ist es ja technisch gar nicht möglich, eine neue Eingabekomponente (im Browser) anzuzeigen, ohne diese vorher zu speichern.
Daher wird die Eingabekomponente "rot" angezeigt - also als Warnung für den Redakteur, dass dort kein leerer Inhalt gespeichert werden sollte.
Wie gesagt, die Speicherung einer leeren Eingabekomponente funktioniert (trotz allowEmpty="no") nur initial. Doch sobald man in so einer Komponente mind. ein Zeichen eingibt, so wird es vom System erkannt und eine leere Speicherung ist ab diesem Zeitpunkt gar nicht möglich - auch dann nicht möglich, wenn man das(die) eingegebene(n) Zeichen wieder löscht.

Meine Wünsche:

Wenn ich ein Feld im Template als Pflichfeld markiere würde ich erwarten, dass das CMS dies (ausser der optischen Hervorhebung im Java-Client) berücksichtigt. Ich finde es nicht schlimm, dass ein Objekt ohne dass alle Pflichfelder befüllt sind gespeichert werden kann - im Gegenteil das wäre m.E. sinnvoller, als die Benutzer zu zwingen irgendein Zeichen einzugeben, damit die Seite gespeichert werden kann. (Damit ist dann ja auch die Information, dass auf dieser Seite noch ein Pflichfeld nicht befüllt ist verloren).

Allerdings würde ich dann erwarten, dass das CMS bei der Freigabe einer Seite prüft, ob alle Pflichtfelder befüllt sind und die Freigabe einer Seite, bei der nicht alle Pflichfelder befüllt sind unterbindet.

0 Kudos
10 Replies
StefanSchulz
I'm new here

Der Umgang mit Pflichtfeldern und möglicherweise weiterer Automation in FirstSpirit-Formularen ist für die nächste Major-Version geplant. Die bislang angedachte Umsetzung deckt unter anderem das hier gewünschte Verhalten mit ab. Da hier Arbeiten an der Infrastruktur von Formularen, Datenhaltung und Datenkontrollfluss vonnöten sind, ist aktuell keine Lösung für Version 4 vorgesehen.

Gruß

Stefan

0 Kudos
dleinich
Occasional Collector

Sie können im Freigabe-Arbeitsablauf ein Skript einsetzen, um das gewünschte Verhalten zu erreichen. Mit diesem Skript werden dann einfach die Eingabekomponenten der freigegebenen Seiten und deren Absätze darauf überprüft, ob Sie ein Pflichtfeld sind und wenn ja, ob diese mit Inhalt gefüllt sind.

Im speziellen wird hier die Methode isValid() genutzt, die in der API-Dokumentation dokumentiert ist.

Folgendes Code-Snippet habe ich zwar nicht getestet, so in etwa sollte das aber aussehen:

for (storeElement : storeElements) {

     if (!storeElement.getData().isValid()) {
           context.logInfo("Page "+storeElement.getUid()+" not valid so it won't be released.");
           context.doTransition("decline"); return;
      } else {
           context.logInfo("Page "+storeElement.getUid()+" valid, now checking its sections...");
      }

      sections = storeElement.getChildren(de.espirit.firstspirit.access.store.pagestore.Section.class, true);
      sectionIterator = sections.iterator();
      while (sectionIterator.hasNext()) {
           section = sectionIterator.next();
           if (section.getData() != null) {
                if (!section.getData().isValid()) {
                     context.logInfo("  Section "+section.getName()+" not valid so the page won't be released.");
                     context.doTransition("decline"); return;
                } else {
                     context.logInfo("  Section "+section.getName()+" valid.");
                }
           }
      }

}

context.logInfo("Everything is valid so we head on to the next activity!");

context.doTransition("accept");

0 Kudos

Hallo zusammen,

seh ich das richtig, dass diese Abfrage nicht Funktioniert, wenn das Pflichtfeld mittels Regeln definiert wurde und nicht mit "allowEmpty"?

Kann man trotzdem abfragen, die Pflichtfelder ausgefüllt sind oder nicht?

Szenario:

Wir haben Datensätze für die nachträglich Regeln eingefügt wurden. Nun möchte ich mittels Script prüfen, ob alle Pflichtfelder ausgefüllt sind, oder nicht.

lg thomas

0 Kudos

Hallo Thomas,

man kann über die API Formulardaten eines Elements auf Validität der Regeln prüfen.

Siehe hierzu den ValidationAgent.

Beste Grüße

Stefan

0 Kudos

Danke für die schnelle Antwort.

Hast du hierfür evtl. ein kleines Beispiel, das zeigt wie ich das auf einem Datensatz anwenden kann (beanshell)?

0 Kudos

Sollte in etwa so gehen (ungetestet, Skriptausführung auf Datensatz):

import de.espirit.firstspirit.agency.ValidationAgent;

validationAgent = context.requireSpecialist(ValidationAgent.TYPE); 

storeElement = context.getStoreElement();

validationReports = validationAgent.validate(storeElement, ValidationAgent.ValidationScope.SAVE);

valid = validationReports.isValid();

... // ausgabe etc.

Beste Grüße

Stefan

0 Kudos

Danke.

Hier bekomme ich jetzt aber ja die Validierung für meine Datenquelle und nicht für einen einzelnen Datensatz, da storeElement bei mir jetzt zb. die Datenquelle "teasers" ist, oder habe ich etwas falsch gemacht?

lg thomas

0 Kudos

Das kommt darauf an, auf welchem Objekt du das Skript ausführst. Auf einer Datenquelle macht es weniger Sinn. Datensätze erreichst du über die Tabelle einer Datenquelle. Woher du die Datensätze in deinem Fall bekommst, ist natürlich anwendungsabhängig, das kann ich dir schlecht sagen.

Grüße

Stefan

0 Kudos

Vielen Dank, habe es hinbekommen.

import de.espirit.firstspirit.agency.ValidationAgent;

validationAgent = context.requireSpecialist(ValidationAgent.TYPE); 

row = context.getSelectedRow();

storeElement = context.getStoreElement();

dataset = storeElement.getDataset(row);

validationReports = validationAgent.validate(dataset, ValidationAgent.ValidationScope.SAVE);

valid = validationReports.isValid();

JOptionPane.showMessageDialog(null, "Pflichtfelder ausgefuellt: "+valid);

lg thomas

0 Kudos