Anonymous
Not applicable

CMS_INPUT_TEXT mit Drag-n-Drop via DataAccessPlugin

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:

  • Wenn ich per Drag-n-Drop im SiteArchitekt einen Eintrag auf ein CMS_INPUT_TEXT-Feld fallen lasse, wird wie gewünscht der "StringSupplier" verwendet.
  • Wenn ich per Drag-n-Drop im ContentCreator einen Eintrag auf ein CMS_INPUT_TEXT-Feld fallen lassen will, passiert garnichts.

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

0 Kudos
10 Replies
mbergmann
Crownpeak employee

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 Kudos
Anonymous
Not applicable

Hi Michael,

mich irritiert halt, dass es im SiteArchitekt funktioniert, nur im ContentCreator nicht Smiley Sad

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 Kudos

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 Kudos
Anonymous
Not applicable

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 Smiley Happy vielleicht klappt das ja.

Gruß

Danny

0 Kudos
Anonymous
Not applicable

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 Kudos

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 Kudos
Anonymous
Not applicable

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

0 Kudos
Anonymous
Not applicable

Falls es was hilft:

Server-Version im Einsatz: 5.2.422.73933

0 Kudos

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 Kudos