Zum Hauptinhalt gehen

CMS_INPUT_TEXT mit Drag-n-Drop via DataAccessPlugin

Kommentare

9 Kommentare

  • Zendesk API User
    Author: mbergmann - 12/2/2016 17:06

    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

    0
  • Zendesk API User
    Author: Anonymous - 12/5/2016 13:44

    Hi Michael,

    mich irritiert halt, dass es im SiteArchitekt funktioniert, nur im ContentCreator nicht :smileysad:

    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());

            }

        }

    }

    0
  • Zendesk API User
    Author: mbergmann - 12/5/2016 14:22

    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

    0
  • Zendesk API User
    Author: Anonymous - 12/5/2016 14:25

    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 :smileyhappy: vielleicht klappt das ja.

    Gruß

    Danny

    0
  • Zendesk API User
    Author: Anonymous - 12/5/2016 15:24

    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

    0
  • Zendesk API User
    Author: mbergmann - 12/5/2016 15:39

    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

    0
  • Zendesk API User
    Author: Anonymous - 12/5/2016 15:48

    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 :smileysad: ist das eventuell ein Bug im CC, oder ist das nur eine Kleinigkeit, die ich noch nicht sehe?

    0
  • Zendesk API User
    Author: Anonymous - 12/6/2016 9:02

    Falls es was hilft:

    Server-Version im Einsatz: 5.2.422.73933

    0
  • Zendesk API User
    Author: StefanSchulz - 12/6/2016 9:48

    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

    0

Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.