Hallo Jörn,
sofern die Usability für Euch in Ordnung geht wäre es möglich, die Auswahl des Redakteurs über ein Button-Skript zu validieren. Eine Validierung über einen Workflow wäre m. E. zwar die elegantere Variante, aber sofern keine Workflows eingesetzt werden oder aus sonstigen Gründen Workflows als Lösungsoption entfallen wäre die folgende Variante möglich:
Formular Absatzvorlage:
<CMS_MODULE>
<CMS_GROUP tabs="none">
<LANGINFOS>
<LANGINFO lang="*" label="Page reference"/>
<LANGINFO lang="DE" label="Seitenreferenz"/>
</LANGINFOS>
<FS_REFERENCE
name="st_pageref"
allowEmpty="yes"
hFill="yes"
imagePreview="no"
sections="no"
upload="no"
useLanguages="no">
<FILTER>
<ALLOW type="pageref"/>
</FILTER>
<LANGINFOS>
<LANGINFO lang="*" label="Page reference"/>
<LANGINFO lang="DE" label="Seitenreferenz"/>
</LANGINFOS>
<PROJECTS>
<LOCAL name=".">
<SOURCES>
<FOLDER name="root" store="sitestore"/>
</SOURCES>
</LOCAL>
</PROJECTS>
</FS_REFERENCE>
<FS_REFERENCE
name="st_pageref_hidden"
allowEmpty="yes"
hFill="yes"
hidden="yes"
imagePreview="no"
sections="no"
upload="no"
useLanguages="no">
<FILTER>
<ALLOW type="pageref"/>
</FILTER>
<LANGINFOS>
<LANGINFO lang="*" label="Page reference (hidden)"/>
<LANGINFO lang="DE" label="Seitenreferenz (versteckt)"/>
</LANGINFOS>
<PROJECTS>
<LOCAL name=".">
<SOURCES>
<FOLDER name="root" store="sitestore"/>
</SOURCES>
</LOCAL>
</PROJECTS>
</FS_REFERENCE>
<CMS_INPUT_TOGGLE name="st_isTranslatedAndReleased" hidden="yes" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label=""/>
</LANGINFOS>
</CMS_INPUT_TOGGLE>
<FS_BUTTON name="st_validation_button" hidden="no" onClick="script:sc_validatepageselection">
<LANGINFOS>
<LANGINFO lang="*" label="Auswahl validieren"/>
</LANGINFOS>
<PARAMS>
<PARAM name="form_isTranslatedAndReleased">#field.st_isTranslatedAndReleased</PARAM>
<PARAM name="form_pageref">#field.st_pageref</PARAM>
<PARAM name="form_pageref_hidden">#field.st_pageref_hidden</PARAM>
</PARAMS>
</FS_BUTTON>
</CMS_GROUP>
</CMS_MODULE>
Regeln Absatzvorlage:
<!-- field: st_pageref, desc: ensure field is not empty -->
<RULE>
<WITH>
<PROPERTY name="EMPTY" source="st_pageref"/>
</WITH>
<DO>
<NOT>
<VALIDATION scope="SAVE">
<PROPERTY name="VALID" source="st_pageref"/>
<MESSAGE lang="*" text="Bitte wählen Sie eine Seitenreferenz aus (referenzierte Seite muss im aktuellen Sprachkanal als übersetzt markiert sein!)"/>
</VALIDATION>
</NOT>
</DO>
</RULE>
<!-- field: st_pageref, desc: validate field, selected page references page is (not) translated -->
<RULE>
<IF>
<NOT>
<PROPERTY name="EMPTY" source="st_pageref"/>
</NOT>
</IF>
<WITH>
<PROPERTY name="VALUE" source="st_isTranslatedAndReleased"/>
</WITH>
<DO>
<VALIDATION scope="SAVE">
<PROPERTY name="VALID" source="st_pageref"/>
<MESSAGE lang="*" text="Die Seitenreferenz nutzt eine Seite die im Freigabestand nicht übersetzt ist, bitte korrigieren Sie Ihre Auswahl!"/>
</VALIDATION>
</DO>
</RULE>
<!-- field: st_pageref, desc: field and hidden shadow field selection doesn't match (user changed value), force user to validate selection -->
<RULE>
<IF>
<OR>
<AND>
<NOT>
<PROPERTY name="EMPTY" source="st_pageref"/>
</NOT>
<PROPERTY name="EMPTY" source="st_pageref_hidden"/>
</AND>
<AND>
<NOT>
<PROPERTY name="EMPTY" source="st_pageref"/>
</NOT>
<NOT>
<PROPERTY name="EMPTY" source="st_pageref_hidden"/>
</NOT>
</AND>
</OR>
</IF>
<WITH>
<EQUAL>
<PROPERTY name="VALUE" source="st_pageref"/>
<PROPERTY name="VALUE" source="st_pageref_hidden"/>
</EQUAL>
</WITH>
<DO>
<VALIDATION scope="SAVE">
<PROPERTY name="VALID" source="st_pageref"/>
<MESSAGE lang="*" text="Auswahl wurde verändert, bitte validieren Sie Ihre Eingabe über die Schalfläche 'Auswahl validieren'"/>
</VALIDATION>
</DO>
</RULE>
</RULES>
Script sc_validatepageselection:
referencedPageIsTranslatedAndReleasedInCurrentLanguage = false;
if(!form_pageref.isEmpty() &&
form_pageref.get().getPageRef().getPage().getReleaseStatus() != de.espirit.firstspirit.access.store.IDProvider.NEVER_RELEASED){
referencedPageFromCurrentStore = form_pageref.get().getPageRef().getPage();
referencedPageFromReleaseStore = context.getUserService().getStore(referencedPageFromCurrentStore.getStore().getType(), true, true).getStoreElement(referencedPageFromCurrentStore.getId());
referencedPageIsTranslatedAndReleasedInCurrentLanguage = referencedPageFromReleaseStore.isTranslated(language);
}
form_isTranslatedAndReleased.set(referencedPageIsTranslatedAndReleasedInCurrentLanguage);
if(referencedPageIsTranslatedAndReleasedInCurrentLanguage){
form_pageref_hidden.set(form_pageref.get());
}
Redakteure werden dann gezwungen, die getroffene Auswahl bei Veränderung über eine Schaltfläche manuell zu validieren.
Pflichtfeldprüfung:

Prüfungszwang bei veränderter Auswahl:

Fehlschlagende Validierung wenn die Seite der ausgewählte Seitenreferenz in der aktuellen Sprache nicht als übersetzt markiert ist:

Das ganze ließe sich evtl. auch noch etwas "optimieren", insbesondere die Regeln.
Nachteil ist, dass die Validierung immer nur zum Zeitpunkt der Bearbeitung des Formulars durch den Redakteur erfolgt.
Beste Grüße, Hendrik
p.s.: entwickelt / getestet mit FirstSpirit Version 2019-12