Search the FirstSpirit Knowledge Base
Hallo Community,
ich habe ein DataAccessPlugin implementiert, was (mittlerweile) gut funktioniert im Site-Architect. Das ganze wollte ich nun auch im ContentCreator verwenden, allerdings funktioniert es dort etwas anders:
Mit einem FS_INDEX-Feld funktioniert alles, wenn ich das ganze in einem CMS_INPUT_DOM fallen lasse, bekomme ich alles aus dem Snippet, ... aber was muss ich nun machen, um per Drag-n-Drop etwas in das CMS_INPUT_TEXT fallen lassen zu können?
Muss ich hierfür extra einen FS_BUTTON nutzen, obwohl es im SiteArchitekt bereits funktioniert?
Gruß
Danny
Hallo Danny,
kannst Du mal das Stück Code aus dem Supplier posten, speziell den Teil wo Du Dir den TransferType holst?
Viele Grüße
Michael
Hi Michael,
mich irritiert halt, dass es im SiteArchitekt funktioniert, nur im ContentCreator nicht
Hier mal der entsprechende Part, wo ich bestimmt etwas vergessen habe:
package somepackage.aspects;
import de.espirit.firstspirit.access.BaseContext;
import de.espirit.firstspirit.agency.TransferAgent;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.transfer.SupplierHost;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.transfer.TransferSupplying;
import de.espirit.firstspirit.ui.gadgets.aspects.transfer.TransferType;
import somepackage.SomeDataObject;
import java.util.Collections;
import java.util.List;
import org.jetbrains.annotations.NotNull;
/**
* @author Danny Althoff
*/
public class SomeDataTransferSupplyingDataAccessSessionAspect implements TransferSupplying<SomeDataObject> {
private final BaseContext _context;
public SomeDataTransferSupplyingDataAccessSessionAspect(@NotNull final BaseContext _context) {
this._context = _context;
}
@Override
public void registerSuppliers(SupplierHost<SomeDataObject> host) {
final TransferAgent transferAgent = _context.requireSpecialist(TransferAgent.TYPE);
final TransferType<SomeDataObject> someDataObjectTransferType = transferAgent.getRawValueType(SomeDataObject.class);
host.registerSupplier(someDataObjectTransferType, new SomeDataObjectSupplier());
final TransferType<String> stringTransferType = transferAgent.getStringType();
host.registerSupplier(stringTransferType, new StringSupplier());
}
private static class SomeDataObjectSupplier implements SupplierHost.Supplier<SomeDataObject, SomeDataObject> {
@Override
public List<SomeDataObject> supply(@NotNull final SomeDataObject object) {
return Collections.singletonList(object);
}
}
private static class StringSupplier implements SupplierHost.Supplier<SomeDataObject, String> {
@Override
public List<String> supply(@NotNull final SomeDataObject object) {
return Collections.singletonList(object.getSpecialValue());
}
}
}
Hallo Danny,
versuch bitte mal, nicht den String-Type zu nehmen sondern (ggf. zusätzlich)
transferAgent.getAllTextsType() bzw. transferAgent.getPlainTextType().
Es kommt zwar jedes Mal TransferType<String> heraus, intern erfolgt die Registrierung aber mit anderen MIME-Types.
Viele Grüße
Michael
Hi Michael,
vielen Dank für die Tipps. Das mit dem PlainText hatte ich bereits mal ausprobiert gehabt, hatte aber leider nicht geklappt (wenn man out-of-options ist, fängt man an wie wild rumzuexperimentieren :smileygrin:)
Das mit dem getAllTextsType versuche ich noch mal vielleicht klappt das ja.
Gruß
Danny
Hi Michael,
leider hab ich keine guten Nachrichten.
Egal wie ich es versuche, es scheint im CC nicht zu funktionieren.
Ist das vielleicht ein Bug oder sowas? Wenn notwendig, kann ich mal schauen ein kleines reproduzierbares Modul zusammenzustellen.
Was mich am meisten stört: wieso klappt es denn dann im SiteArchitekt? Was nehmen die Input-Felder im CC anders an als im SA?
Gruß
Danny
Hallo Danny,
mal sicherheitshalber: Hast Du denn den Aspekt "TransferSupplying" wirklich in der SessionAspectMap hinzugefügt, so dass er beim getAspect(...) auch "ausgeliefert" wird? Im SA wird wenn ich mich richtig erinnere teilweise "direkt" mit den Objekten gearbeitet, so dass es hier in einigen Fällen auch ohne das Registrieren des Aspektes funktionieren kann.
Viele Grüße
Michael
Hi Michael,
kein Problem, oftmals liegt es ja wirklich an so Kleinigkeiten (wie ich bereits auch schon in anderen Threads gelesen habe), daher hier meine entsprechenden Klassen:
SomeDataSession:
package somepackage;
import de.espirit.firstspirit.access.BaseContext;
import de.espirit.firstspirit.access.store.Store;
import de.espirit.firstspirit.access.store.globalstore.GlobalStoreRoot;
import de.espirit.firstspirit.access.store.globalstore.ProjectProperties;
import de.espirit.firstspirit.agency.LanguageAgent;
import de.espirit.firstspirit.agency.SpecialistsBroker;
import de.espirit.firstspirit.agency.StoreAgent;
import de.espirit.firstspirit.client.plugin.dataaccess.DataAccessSession;
import de.espirit.firstspirit.client.plugin.dataaccess.DataSnippetProvider;
import de.espirit.firstspirit.client.plugin.dataaccess.DataStreamBuilder;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.Identifying;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.SessionAspectMap;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.SessionAspectType;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.ValueIndexing;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.transfer.TransferHandling;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.transfer.TransferSupplying;
import somepackage.aspects.SomeDataIdentifyingDataAccessSessionAspect;
import somepackage.aspects.SomeDataTransferHandlingDataAccessSessionAspect;
import somepackage.aspects.SomeDataTransferSupplyingDataAccessSessionAspect;
import somepackage.aspects.SomeDataValueIndexingDataAccessSessionAspect;
import somepackage.providers.SomeDataObjectDataSnippetProvider;
import java.util.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
*
* @author Danny Althoff
*/
public class SomeDataSession implements DataAccessSession<SomeDataObject> {
private final BaseContext _context;
private final SessionAspectMap _aspects;
private final SomeDataObjectProvider _categoryDataObjectProvider;
public SomeDataSession(BaseContext _context) {
this._context = _context;
this._aspects = new SessionAspectMap();
this._someDataObjectProvider = new SomeDataObjectProvider(getServerPrefix(_context));
// Add session-specific aspects to the aspect map.
// Advertise that the individual SomeDataObject objects support identifying features.
_aspects.put(Identifying.TYPE, new SomeDataIdentifyingDataAccessSessionAspect(_someDataObjectProvider));
// Advertise support for value indexing, allowing entries referenced in an FS_INDEX input component to be indexed for search purposes.
_aspects.put(ValueIndexing.TYPE, new SomeDataValueIndexingDataAccessSessionAspect(_someDataObjectProvider));
// Advertise that this plug-in can supply transfer data for individual SomeDataObject entries.
_aspects.put(TransferSupplying.TYPE, new SomeDataTransferSupplyingDataAccessSessionAspect(_context));
// Advertise that this plug-in can handle transfer data from outside sources.
_aspects.put(TransferHandling.TYPE, new SomeDataTransferHandlingDataAccessSessionAspect(_context));
}
@Nullable
@Override
public <A> A getAspect(SessionAspectType<A> type) {
return _aspects.get(type);
}
// ... cropped ...
}
SomeDataTransferSupplyingDataAccessSessionAspect:
package somepackage.aspects;
import de.espirit.firstspirit.access.BaseContext;
import de.espirit.firstspirit.agency.TransferAgent;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.transfer.SupplierHost;
import de.espirit.firstspirit.client.plugin.dataaccess.aspects.transfer.TransferSupplying;
import de.espirit.firstspirit.ui.gadgets.aspects.transfer.TransferType;
import somepackage.SomeDataObject;
import java.util.Collections;
import java.util.List;
import org.jetbrains.annotations.NotNull;
/**
* @author Danny Althoff
*/
public class SomeDataTransferSupplyingDataAccessSessionAspect implements TransferSupplying<SomeDataObject> {
private final BaseContext _context;
public SomeDataTransferSupplyingDataAccessSessionAspect(@NotNull final BaseContext _context) {
this._context = _context;
}
@Override
public void registerSuppliers(SupplierHost<SomeDataObject> host) {
final TransferAgent transferAgent = _context.requireSpecialist(TransferAgent.TYPE);
final TransferType<SomeDataObject> someDataObjectTransferType = transferAgent.getRawValueType(SomeDataObject.class);
host.registerSupplier(someDataObjectTransferType, new SomeDataObjectSupplier());
final TransferType<String> stringTransferType = transferAgent.getStringType();
host.registerSupplier(stringTransferType, new StringSupplier());
// register on "allTextsType" for CC-support, would work on SA with normal stringType:
// https://community.e-spirit.com/message/30774#30774
final TransferType<String> allTextsTransferType = transferAgent.getAllTextsType();
host.registerSupplier(allTextsTransferType, new StringSupplier());
}
private static class SomeDataObjectSupplier implements SupplierHost.Supplier<SomeDataObject, SomeDataObject> {
@Override
public List<SomeDataObject> supply(@NotNull final SomeDataObject object) {
return Collections.singletonList(object);
}
}
private static class StringSupplier implements SupplierHost.Supplier<SomeDataObject, String> {
@Override
public List<String> supply(@NotNull final SomeDataObject object) {
return Collections.singletonList(object.getSpecialValue());
}
}
}
Funktioniert ja im SA, daher sollte es ja eigentlich im CC auch klappen. Ist etwas unschön, wenn beide nicht gleich funktionieren ist das eventuell ein Bug im CC, oder ist das nur eine Kleinigkeit, die ich noch nicht sehe?
Falls es was hilft:
Server-Version im Einsatz: 5.2.422.73933
Hi,
dass der "stringType" nicht im ContentCreator funktioniert, würde ich als "schade" verbuchen. Dabei handelt es sich tatsächlich um den Java String-Typ, den man im Web so einfach nicht bekommen kann.
PlainText oder AllTextType sollten aber funktionieren. Das ist was für unseren Technical Support, bitte dort als Ticket einreichen.
Beste Grüße
Stefan