M_Lehe
Occasional Observer

CMS_INPUT_TEXT während eines Workflows mehrmals ändern

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é

0 Kudos
6 Replies
MarsDD
Occasional Observer

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

0 Kudos
M_Lehe
Occasional Observer

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é

0 Kudos
MarsDD
Occasional Observer

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? Smiley Wink

Viele Grüße

Marcel

0 Kudos
MarsDD
Occasional Observer

Hallo Manuel,

bitte füge mal folgendes hinzu:

m_pElement.setLock(true);

// manipulieren

m_pElement.setLock(false);

Viele Grüße

Marcel

0 Kudos
M_Lehe
Occasional Observer

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

0 Kudos
M_Lehe
Occasional Observer

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

0 Kudos