#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);
}