Search the FirstSpirit Knowledge Base
Hallo Zusammen,
Ich baue akutell einen Workflow der einen Wert in den Metadaten setzt, welchen ich dann verwende um die Freigabe auf verschiedenen Webservern (Stage/Live) zu steuern. Dabei soll folgendes Feld geändert werden:
<CMS_INPUT_TEXT name="mt_releaseStatus" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="workflowFlag"/>
</LANGINFOS>
</CMS_INPUT_TEXT>
Im laufe des Workflow soll das Feld die Werte X, stage und live enthalten. Diese Werte werden über das Script wie folgt gesetzt:
if (m_pElement == null || !m_pElement.hasMeta() || !m_pElement.isLocked()) {
m_pContext.logWarning("Element is locked, null or has no Meta!");
return false;
}
FormData actualFormData = getFormData();
FormField<?> metaField = getFormField(actualFormData);
metaField.set(status);
m_pElement.setMetaFormData(actualFormData);
m_pElement.save("", false);
protected FormField<?> getFormField(FormData actFormData) {
return (actFormData != null && actFormData.get(m_pProject.getMasterLanguage(), METAFIELD) != null) ? actFormData.get(m_pProject.getMasterLanguage(), METAFIELD) : null;
}
protected FormData getFormData() {
return (m_pElement != null && m_pElement.hasMeta()) ? m_pElement.getMetaFormData() : null;
}
m_pElement ist dabei ein IDProvider.
Mein Problem ist nun, dass der Wert bei der ersten Ausführung noch geändert wird, danach aber keine Änderung mehr stattfindet, obwohl der richtige Wert in das metaField eingetragen wird. Auch das Speichern scheint zu funktionieren, da ich dieses in der Versionshistorie verfolgen kann. Kann es daran liegen, dass das Element sich im Workflow befindet und nie entsperrt und wieder gesperrt wird?
Vielen Dank und viele Grüße
Manuel Lehé
Hallo Manuel,
ein IDProvider, welcher sich in einem Workflow befindet ist ausschließlich im "read-only"-Mode.
Zudem ist deine Überprüfung teilweise fehlerhaft - dort überprüfst du auf
Viele Grüße
Marcel
Hallo Marcel,
Danke für die schnelle Antwort.
Allerdings funktioniert die generelle Bearbeitung des Feldes während des Workflows bei mir. Doch nach der ersten Wertänderung bleibt der Wert auf dem zuletzt geänderten Wert.
Beispiel:
Wenn ich den Workflow starte, wird der Wert von "test" auf "X" geändert, danach aber nicht mehr von "X" auf "stage".
Viele Grüße
Manuel Lehé
Hallo Manuel,
zudem ist mir aufgefallen, das du
if (m_pElement == null || !m_pElement.hasMeta() || !m_pElement.isLocked()) {
in deinem Code hast - du meinst hier doch sicherlich m_pElement.isLocked() - um es mit deiner logWarning äquivalent zu halten?
Viele Grüße
Marcel
Hallo Manuel,
bitte füge mal folgendes hinzu:
m_pElement.setLock(true);
// manipulieren
m_pElement.setLock(false);
Viele Grüße
Marcel
Hallo Marcel,
Leider bleibt das Ergebnis auch mit dem setzen des Locks das gleiche. Der Lock wird ohne Fehler gesetzt, aber der Wert ändert sich nicht. Könnte es vielleicht sein, dass der IDProvider nach der ersten Änderungen geblockt ist und somit die anderen Versuche scheitern?
Gruß
Manuel
Hallo Marcel,
Das Problem hat sich nun geklärt. Das setzen funktionierte nicht, da die folgende Transition keine bzw. die falschen Rechte gesetzt hatte.
Danke nochmal für die Hilfe!
Viele Grüße
Manuel