Search the FirstSpirit Knowledge Base
Hallo,
ich habe ein Problem mit dem Zusammenspiel PermanentPlugin und ClientService. Und zwar möchte ich über ein RequestOperation-Objekt einen Dialog anzeigen.
Im SiteArchitect funktioniert das auch, aber im ContentCreator ist das RequestOperation-Objekt immer null.
Der Code sieht wie folgt aus:
public class MyPermanentPlugin implements JavaClientPermanentPlugin, WebeditPermanentPlugin {
public void setUp(BaseContext context) {
OperationAgent operationAgent = context.requestSpecialist(OperationAgent.TYPE);
RequestOperation requestOperation = operationAgent.getOperation(RequestOperation.TYPE); //NULL IN CONTENTCREATOR
// CLIENT SERVICE:
final MyClientService myClientServiceObject = new MyClientService(requestOperation);
final ClientServiceRegistryAgent clientServiceRegistryAgent = context.requestSpecialist(ClientServiceRegistryAgent.TYPE);
clientServiceRegistryAgent.registerClientService(MyClientService.class, myClientServiceObject);
context.logInfo("MyPermanentPlugin loaded");
}
public void tearDown() {
// TODO Auto-generated method stub
}
}
public class MyClientService {
private RequestOperation operation;
public MyClientService(RequestOperation operation){
this.operation = operation;
}
public void showDialogue(){
operation.setKind(RequestOperation.Kind.QUESTION);
operation.addAnswer("YES");
operation.addAnswer("NO");
operation.addAnswer("CANCEL");
operation.perform("My Message");
}
}
Gibt es irgendeine andere Möglichkeit im ContentCreator einen Dialog über einen ClientService anzuzeigen?
Viele Grüße,
Marc
Hi Marc,
bin mal eben in den Hook-Code eingetaucht. Es sieht so aus, als käme an dieser Stelle kein Client-spezifischer Kontext an und kann wohl auch nicht so einfach bereitgestellt werden. Ich fürchte, du musst einen anderen Lösungsweg für deine Anforderung suchen. Eventuell das Hochladen des Bildes selbst übernehmen? Ich nehme an, ihr nutzt aktuell eine Eingabekomponente oder ähnliches?
Beste Grüße
Stefan
Hallo Marc,
die RequestOperation ist in diesem Kontext des WebeditPermanentPlugin nicht supported. Dein Problem kannst du akut lösen, indem du die zwei Zeilen
OperationAgent operationAgent = context.requestSpecialist(OperationAgent.TYPE);
RequestOperation requestOperation = operationAgent.getOperation(RequestOperation.TYPE);
in deine Service-Methode auslagerst und den BaseContext (der Umgebung in der du den Service benutzt) übergibst.
Darüberhinaus solltest du jedoch darüber nachdenken ob es an dieser Stelle sinnvoll ist einen ClientService zu benutzen. Falls du tatsächlich nur eine RequestOperation aufrufen möchtest sollte eine Utility-Klasse ausreichend sein.
Viele Grüße,
Philipp
Hallo Philipp,
Danke für den Hinweis. Ich habe es nun wie folgt versucht:
public class MyPermanentPlugin implements JavaClientPermanentPlugin, WebeditPermanentPlugin {
public void setUp(BaseContext context) {
// CLIENT SERVICE:
MyClientService myClientServiceObject = new MyClientService(context);
final ClientServiceRegistryAgent clientServiceRegistryAgent = context.requireSpecialist(ClientServiceRegistryAgent.TYPE);
clientServiceRegistryAgent.registerClientService(MyClientService.class, myClientServiceObject);
context.logInfo("MyPermanentPlugin loaded");
}
public void tearDown() {
// TODO Auto-generated method stub
}
}
public class MyClientService {
public MyClientService(BaseContext context){
OperationAgent operationAgent = context.requireSpecialist(OperationAgent.TYPE);
RequestOperation requestOperation = operationAgent.getOperation(RequestOperation.TYPE);
context.logInfo("requestOperation: " + requestOperation);
}
}
Leider ist das RequestOperation-Objekt im ContentCreator nach wie vor null 😞
Viele Grüße,
Marc
Hallo Marc,
da es sich auch auf dem zweiten Weg um das gleiche Kontextobjekt handelt, würde mich eine Änderung auch wundern.
Interessant ist hier eher, auf welchem Weg dein ClientService aufgerufen/genutzt wird. Eventuell hilft der dortige Kontext weiter.
Beste Grüße
Stefan
Hallo Stefan,
wir hatten es so gedacht, dass wir einen eigenen Upload-Hook programmieren und in der folgenden Methode auf unseren Client-Service zugreifen:
public void preProcess(BaseContext context, Media media, de.espirit.firstspirit.access.store.mediastore.File file,
InputStream stream, long size) throws UploadRejectedException, IOException {
final ServicesBroker servicesBroker = context.requireSpecialist(ServicesBroker.TYPE);
MyClientService myClientServiceObject = servicesBroker.getService(MyClientService.class);
myClientServiceObject.showDialogue();
...
}
-> und damit dem User dann einen Dialog anzeigen
Viele Grüße,
Marc
Hi Marc,
dann solltest du mal schauen, ob der hier reingereichte Kontext (context) die entsprechende Operation bereitstellt. Am Besten dann einfach den Kontext an die Methoden des ClientServices weiterreichen, wenn das so ist.
Beste Grüße
Stefan
Hi Stefan,
das habe ich nun soeben versucht. Leider stellt auch dieses context-Objekt die gewünschte RequestOperation im ContentCreator nicht bereit (null).
Fällt dir spontan noch eine andere Lösungsmöglichkeit ein? Oder ist das technisch mit FirstSpirit im ContentCreator bisher noch gar nicht möglich?
Viele Grüße,
Marc
Hi Marc,
bin mal eben in den Hook-Code eingetaucht. Es sieht so aus, als käme an dieser Stelle kein Client-spezifischer Kontext an und kann wohl auch nicht so einfach bereitgestellt werden. Ich fürchte, du musst einen anderen Lösungsweg für deine Anforderung suchen. Eventuell das Hochladen des Bildes selbst übernehmen? Ich nehme an, ihr nutzt aktuell eine Eingabekomponente oder ähnliches?
Beste Grüße
Stefan
Hallo Marc,
benötigst Du noch weitere Hilfe oder hat Dir die Antwort von Stefan bereits geholfen?
In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere Community-Teilnehmer diese auf den ersten Blick finden.
Solltest Du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.
Viele Grüße
Martin