Backoffice: функция загрузки CSV в области редактора

SAP Commerce 1811

У меня есть один настраиваемый тип, например CustomType, у которого есть один медиа-атрибут типа MediaModel. Мое требование - загрузить медиафайлы CSV с помощью редактора Drag & Drop в области редактора.

Итак, я использовал OOTB com.hybris.cockpitng.editor.dndfileupload типа com.hybris.cockpitng.editor.defaultfileupload.FileUploadResult и применить к моему атрибуту СМИ.

<attribute type="com.hybris.cockpitng.editor.defaultfileupload.FileUploadResult" editor="com.hybris.cockpitng.editor.dndfileupload" qualifier="media">
           <editor-parameter>
              <name>accept</name>
              <value>text/csv</value>
           </editor-parameter>
</attribute>

Теперь я создал одно настраиваемое действие Backoffice, например "UploadMedia", и настроил его в editorareaactions "CustomType".

Как и в случае, когда я загружаю csv-носитель и нажимаю на свое действие, в своем контроллере действий я пытаюсь получить загруженный носитель FileUploadResult, но он всегда дает нулевое значение.

@Override
public ActionResult<Object> perform(final ActionContext<TargetGroupModel> ctx)
{
    final WidgetModel model = (WidgetModel) ctx.getParameter(ActionContext.PARENT_WIDGET_MODEL);
    if (model != null)
    {
        final FileUploadResult result = model.getValue("currentObject.media", FileUploadResult.class);
        System.out.println(result.getData()); // result is always NULL
    }

    return new ActionResult<>(ActionResult.SUCCESS);
}

И странно то, что во время отладки, если я проверяю WidgetModel, я вижу для этого ключа "currentObject.media" значение там.

Любая помощь?

0 ответов

Я решил проблему простым приведением типа ctx.getParameter(ActionContext.PARENT_WIDGET_MODEL) с участием Map и получить значение с помощью currentObject.media Ключ.

Рабочий код

@Override
public ActionResult<Object> perform(final ActionContext<TargetGroupModel> ctx)
{
    final Map map = (Map) ctx.getParameter(ActionContext.PARENT_WIDGET_MODEL);
    if (map != null)
    {
       final FileUploadResult result = map.get("currentObject.media");
       System.out.println(result.getData());
    }

    return new ActionResult<>(ActionResult.SUCCESS);
}
Другие вопросы по тегам