Бэк-офис: функциональность загрузки CSV в области редактора

#hybris #backoffice #sap-commerce-cloud

#sap-commerce-cloud #бэк-офис #серверная часть

Вопрос:

SAP Коммерция 1811

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

Поэтому я использовал 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» значение там.

Какая — нибудь помощь ?

Ответ №1:

Я решил проблему, просто набрав тип 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);
}