Questions & Answers

astember
Returning Observer

TargetReference - Remote Medien validieren

Hallo zusammen,

ich habe ein Migrationsskript fรผr die Massen-ร„nderung von Catalog-Eintrรคgen von lokalen Projekt-Medien auf Remote-Projekt-Medien identischer UID fรผr mehrere Download-Center-Absรคtze erweitert. Prinzipiell klappt das Skript solange das Ziel im entsprechenden Remote-Projekt existiert. Da ich nur Medien umstellen mรถchte, die im Remote-Projekt existieren, scheitere ich aktuell an einer entsprechenden Abfrage:

Die TargerReference wird wie folgt angepasst.

...

cardFormData.get(null,"st_file");

file = cFormField.get();

TargetReference remoteFile = TargetReference.TargetReferences.newInstance(file.getLanguage(), file.getUid(), file.getUidType(), "global_media");

cFormField.set(remoteFile);

...

In der API zu TargetReference habe ich keine Mรถglichkeit gefunden das Ziel zu validieren. Ein remoteFile.get() liefert immer null zurรผck, was mich vermuten lรคsst, dass man รผber dieses Interface nicht auf die Remote-Inhalte zugreifen kann. Wenn das Medium nicht remote existiert fรผhrt dies allerdings beim Speichern zu einem Validierungs-Fehler:
ValidationError[element='igw_dlc' (ID=468462, project=460362), msg={MultiFormValidationReport{(DE:{st_folders:[Validation{SAVE,false:Referenced element 'mediafolder:igw_dl_de' does not exi...}]

Die Frage wรคre jetzt, ob und wie man ggf. รผber die Validierung oder eine anderes Interface รผberprรผfen kann, dass das Remote-Medium im definierten Ziel vorhanden ist.

0 Kudos
3 Replies
felix_reinhold
Returning Responder

Hi Andre,

du kรถnntest dir รผber den BrokerAgent einen Broker fรผr das Remote-Projekt holen.

รœber diesen Broker holst du dir dann den Store bzw. die Stores.

getUid und getUidType sollten auch auf der Remote-TargetReference funktionieren.

Auf dem "Remote-Store" kannst du dann mit getStoreElement(uid, uidType) das Element holen. Wenn null zurรผck kommt, dann existiert es nicht.

Den Store bzw. die Stores wรผrde ich mir einmalig zu Beginn des Skripts holen. Trotzdem kann dieses Abfragen der Existenz sich natรผrlich negativ auf die Performance des Skriptes auswirken.

Viele GrรผรŸe

Felix

0 Kudos

Danke, das hilft schon etwas weiter, allerdings wรคre ein kleines Code-Beispiel hilfreich, da ich bisher kaum mit dem SpecialistsBroker interface gearbeitet hab.

Habe mal รผber die Beanshell-Konsole folgendes versucht, bekomme aber nur ein NULL zurรผck.

import de.espirit.firstspirit.agency.*

connection = context.getConnection();

broker = connection.getBroker();

remote = broker.requireSpecialist(BrokerAgent.TYPE).getBroker("global_media");

Ich vermute mal, dass ich รผber den lokalen Projekt-Kontext den falschen broker bekomme.

0 Kudos

Hi Andre,

habe mal schnell was als Beanshell-Skript zusammengetippt:

import de.espirit.firstspirit.access.project.Project;

import de.espirit.firstspirit.access.store.Store;

import de.espirit.firstspirit.access.store.IDProvider;

import de.espirit.firstspirit.agency.BrokerAgent;

import de.espirit.firstspirit.agency.StoreAgent;

import de.espirit.firstspirit.agency.SpecialistsBroker;

IDProvider element = context.getElement();

BrokerAgent brokerAgent = context.requireSpecialist(BrokerAgent.TYPE);

SpecialistsBroker broker = brokerAgent.getBrokerByProjectName("Mithras Energy");

StoreAgent storeAgent = broker.requireSpecialist(StoreAgent.TYPE);

Store store = storeAgent.getStore(element.getStore().getType());

context.logInfo("Exists: " + (store.getStoreElement(element.getUid(), element.getUidType()) != null));

Wenn du das als Kontextmenรผ-Skript anlegst kannst du Rechtsklick auf einem Element machen und er zeigt dir, ob das Element im Projekt "Mithras Energy" existiert.
Ich denke das solltest du fรผr deine Bedรผrfnisse anpassen kรถnnen. Alternativ zum fest verdrahteten Projektnamen kannst du dir bspw. auch aus den RemoteProjektKonfigurationen das Remote-Media-Projekt raussuchen.

GruรŸ

Felix

0 Kudos

Type a product name