baginski
I'm new here

Formularfelder in alle Sprachen kopieren

Hallo,

wir haben in einem Projekt ein Script erstellt, mit der Formularfelder im JavaClient per Button über eine Executable in die jeweils anderen Sprachen kopiert werden können. Bei 2 Sprachen scheint es noch kein Problem gegeben zu haben (zumindest sind in den Tests keine aufgetreten); die 3. Sprache wird beim ersten Versuch meist nicht befüllt, beim 2. Mal schon; die zu kopierenden Felder werden in der Form als Parameter gesetzt. Folgender Code wird dabei durchlaufen:

Iterator<Language> languageInterator = element.getProject().getLanguages().iterator();

        while (languageInterator.hasNext()) {

                 

          Language formLanguage = languageInterator.next();

         

         //initialize operation

          OpenElementDataFormOperation operation = context.requireSpecialist(OperationAgent.TYPE).getOperation(OpenElementDataFormOperation.TYPE);

          operation.setLanguage(formLanguage);

         

          //get form data

          FormData formData = element.getFormData();

         

          propertyKeysIterator = properties.keySet().iterator();

          while (propertyKeysIterator.hasNext()) {

            String propertyKey = propertyKeysIterator.next();

           

            Object propertyValue = properties.get(propertyKey);

            if (propertyValue instanceof ApiRemoteFormField<?>) {

              FormField<?> formField = (FormField<?>) properties.get(propertyKey);

              Object formFieldValue = formField.get();

              formData.get(formLanguage, propertyKey).set(formFieldValue);

            }

          }

         

          //set filled remoteFormData to operation and dataset

          operation.setFormData(formData);

          element.setFormData(formData);

         

          //execute operation

          operation.perform(element);

        }

Hat jemand eine Idee ? Version ist an dieser Stelle übrigens 5.1.410.

Danke & Gruß,

Michael Baginski

0 Kudos
3 Replies
mikula
Crownpeak employee

Hallo Michael,

ich habe das Skript mal genauer unter die Lupe genommen und musste feststellen, dass mir zur Beantwortung Informationen fehlen.

1. Von was für Objekten reden wir bei 'element', 'context', und 'properties'?

2. Ist dies das vollständige Skript? - Wenn ja, dann kann ich mir vorstellen, dass die Bearbeitung nicht optimal funktioniert, weil das 'element' niemals gelockt wird.

Mit freundlichem Gruß

Martin

0 Kudos
pavone
I'm new here

Hallo Michael,

bist du sicher, dass es sich hierbei nicht nur um ein Refresh-Problem handelt? Manchmal muss man das Element neu sperren und entsperren, damit die Änderung angezeigt wird. Manchmal ist es ggf. sogar notwendig, zu einem anderen Element zu navigieren.

Generell habe ich zwei Anmerkungen zu deinem Skript:

1. Du solltest auf keinen Fall auf ApiRemoteFormField prüfen, da dieser Typ nicht zur offiziellen öffentlichen API gehört und deshalb unangekündigt und undokumentiert geändert werden kann.

2. Ich glaube nicht, dass du OpenElementDataFormOperation verwenden musst (natürlich vorausgesetzt, ich habe deine Anforderungen richtig verstanden).

Ich habe mal ein kleines BeanShell-Skript geschrieben, dass in meiner Testumgebung mit 4 Sprachen funktioniert hat. Allerdings in manchen Fällen nur mit neuem Sperren/Entsperren. Hilft dir das ggf. weiter?

languages = element.getProject().getLanguages();

formData = element.getFormData();

for (language : languages) {

  for (property : properties.entrySet()) {

    if (property.getValue() instanceof FormField) {

      formFieldName = property.getKey();

      sourceFormField = (FormField) property.getValue();

      formFieldValue = sourceFormField.get();

      destinationFormField = formData.get(language, formFieldName);

      destinationFormField.set(formFieldValue);

    }

  }

}

element.setLock(true);

element.setFormData(formData);

element.save();

element.setLock(false);

Viele Grüße

Tim

0 Kudos
MichaelaReydt
Community Manager

Hallo Michael,

benötigst du noch weitere Hilfe oder hat dir Tims Antwort bereits geholfen? In diesem Fall wäre es super, wenn du seine "richtige Antwort" entsprechend markierst.

Solltest du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es toll, wenn du diese hier bereitstellst.

Viele Grüße

Michaela

0 Kudos