aVogt
Returning Creator

FS_Referenz in einem Script (Formular) erstellen

Hallo,

ich möchte in einem Script folgende FS_Referenz erzeugen:

    <FS_REFERENCE name="st_dok_tmp" allowEmpty="yes" hFill="yes" upload="yes" useLanguages="no">

      <LANGINFOS>

        <LANGINFO lang="*" label="neues Regelungsdokument" description="Suchen Sie das Regelungsdokument"/>

      </LANGINFOS>

      <PROJECTS>

        <LOCAL name="." uploadFolder="0_upload">

          <SOURCES>

            <FOLDER name="empty" store="mediastore"/>

          </SOURCES>

        </LOCAL>

      </PROJECTS>

    </FS_REFERENCE>

folgendes habe ich bereits "geschafft":

                Script sc = context.getScript();

                GomEditorProvider gp = sc.getGomProvider();

                GomReference gomReference = new GomReference();

                d = ValueOfContractor.Invoke.valueOf(Designator.class, "st_tmp_file");

                gomReference.setName(d);

                gomReference.setAllowEmpty(YesNo.NO);

                gomReference.setUpload(YesNo.YES);

                gomReference.setLabel("neues Regelungsdokument:");

                gp.add(gomReference);

Allerdings:

- kann ich noch eine bestehende Seite auswählen (soll/darf nicht sein)

- muss der Speicher-Ordner noch ausgewählt werden (soll/darf nicht sein)

-  gomReference.setLabel(..) ist deprecated - wie kann es richtig gesetzt werden

Wer kann mir helfen?

Der Grund wurde in

Arbeitsablauf mit unterschiedlichen Datenmasken

beschrieben.

Grüße

Andreas

0 Kudos
7 Replies
andre
I'm new here

setLabel ....Deprecated since 4.0.17 - use getLangInfos().get(String).setLabel(String) instead

Since:

4.0.17

-----------------

vielleicht hilft folgendes weiter:

GomReference#filter#allow / #hide

GomReference#projectConstraints#setUploadFolder   

das sind allerdings non-API-Methoden und koennen sich auch mal ändern, allerdings ist dieses unwahrscheinlich

0 Kudos
aVogt
Returning Creator

getLangInfos() ist null. Ich vermute mal, dass ich vorher überhaupt erst mal ne Sprache setzen muss.
Da hab ich
gomText.getLangInfos().add(GomLangInfo); gefunden.
Da hab ich allerdings das Problem mit der Sprachesetzen (.setLang(LanguageAbbreviation.valueOf("*")), dass will er nicht tun).

Das mit den Filtern hat zwar geklappt, aber ich möchte eigentlich, dass mir nur der Ordner "empty" angezeigt wird.
Das mit dem Upload-VZ hat auch nicht wirklich geholfen

0 Kudos

final GomReference form = new GomReference();

        form.setName(Designator.valueOf("fs_reference"));

        form.setUpload(YesNo.YES);

        final DefaultGomLangInfos langInfos = form.getLangInfos();

        langInfos.add(new DefaultGomLangInfo("*", "any label", "any description"));

        form.filter().add(new GomFilterAllowEntry(FilterType.PICTURE));

        form.filter().add(new GomFilterAllowEntry(FilterType.FILE));

        // dot means local project else this is the symbolic remote project name

        final ProjectConstraint with = ProjectConstraint.with(Type.LOCAL, ".", "myUploadFolder", Collections.singletonMap(Store.Type.MEDIASTORE.name(), Collections.singletonList("empty")));

        form.projectConstraints().add(with);

> Das mit den Filtern hat zwar geklappt, aber ich möchte eigentlich, dass mir nur der Ordner "empty" angezeigt wird.

De Filter allow/hide defnieren, welche Typen angezeigt und selektierbar sind oder ebend nicht angezeigt werden. Die eigentlichen Quellen werden ueber die ProjectConstraint definiert

>> das sind allerdings non-API-Methoden und koennen sich auch mal ändern, allerdings ist dieses unwahrscheinlich

aVogt
Returning Creator

Das
form.setName(Designator.valueOf("fs_reference"));
funktioniert nicht. Da kommt eine:
de.espirit.firstspirit.access.script.ExecutionException: Method Invocation Designator.valueOf

Dafür funktioniert:
form.setName(ValueOfContractor.Invoke.valueOf(Designator.class, "fs_reference"));


Der Label wird nun gesetzt => DANKE!

Allerdings der UploadOrdner funktioniert nicht. Ich habe den Eindruck, dass der ProjectConstraint nicht richtig gespeichert wird:

...
form.projectConstraints().add(with);
Iterator it = form.projectConstraints().iterator();
while(it.hasNext()) {
  ProjectConstraint pc =  (ProjectConstraint) it.next();
  context.logInfo("\tName: " + pc.getName());
  context.logInfo("\tUF: " + pc.getUploadFolder());
}
...
liefert
Name: .
UF: null

Das with scheint aber richtig gesetzt zu sein:
...
context.logInfo("\tName: " + with.getName());
context.logInfo("\tUF: " + with.getUploadFolder());
...
Name: .
UF: 0_upload

>> das sind allerdings non-API-Methoden und koennen sich auch mal ändern, allerdings ist dieses unwahrscheinlich

Das ist mir bewußt, aber das Risiko werde ich eingehen.

Grüße

Andreas

0 Kudos

hat form.projectConstraints()  jetzt size == 2 ?

dann muss man vermutl. den schon bestehenden Type.LOCAL aus den ProjectConstraints entfernen und mit dem neuen "with" ersetzten bzw. form.projectConstraints().add(0, with);

oder ueber form.getProjects() gehen

aVogt
Returning Creator

hat form.projectConstraints()  jetzt size == 2 ?

leider nein.

dann muss man vermutl. den schon bestehenden Type.LOCAL aus den ProjectConstraints entfernen und mit dem neuen "with" ersetzten bzw. form.projectConstraints().add(0, with);

das mit add(0,with) hatte nichts gebracht. Auch ein form.projectConstraints().remove(0) und dann ein add(with) nicht

oder ueber form.getProjects() gehen

werd ich mal versuchen

0 Kudos
aVogt
Returning Creator

Über form.getProjects() allein hat auch nicht geklappt.

Aber es funktioniert, wenn gleichzeitig über  form.projectConstraints() und form.getProjects() die Werte gesetzt werden.

Hier mal der Code, der nun das gewünschte Ergebnis liefert.

final GomReference form = new GomReference();

form.setName(ValueOfContractor.Invoke.valueOf(Designator.class, "fs_reference"));

form.setUpload(YesNo.YES);

form.projectConstraints().remove(0);

DefaultGomLangInfos langFsRef = form.getLangInfos();

langFsRef.add(new DefaultGomLangInfo("*", "Neue Regelungsdatei", "Wählen Sie aus dem Filesystem die neue Datei aus."));

form.filter().add(new GomFilterHideEntry(FilterType.ALL));

final ProjectConstraint with = ProjectConstraint.with(Type.LOCAL, ".", "0_upload", Collections.singletonMap(Store.Type.MEDIASTORE.name(), Collections.singletonList("empty")));

form.projectConstraints().add(0, with);

GomStorableProjectList gspl = form.getProjects();

context.logInfo("Anzahl: " + gspl.size());

GomStorableLocalProjectEntry gslpe =  (GomStorableLocalProjectEntry) gspl.get(0);

gslpe.setUploadFolder("0_upload");

GomStoreFolder gsf = new GomStoreFolder();

gsf.setName("empty");

gsf.setStore(Store.Type.MEDIASTORE.name());

gslpe.getSources().add(gsf);

Besten Dank für die Hilfestellungen

Grüße

Andreas

0 Kudos