OroCRM中带有对话框的自定义批量操作



我正在对OroCRM进行一些自定义,在这种情况下,我需要对多个记录执行大规模操作,但在选择所需选项时,应显示一个模式,以选择系统的可能所有者之一。

为此,我在系统中包含了以下更改:

  • 我在数据网格中包含了批量操作选项:
change_owner:
type:            lead_change_owner_mass_edit
handler:         pb_lead.mass_action.change_owner.handler
acl_resource:    oro_sales_lead_update
route:           pb_lead_datagrid_mass_action_change_owner
label:           pb.lead.mass_actions.change_owner.label
icon:            user
data_identifier: lead.id
frontend_options:
title:       "@translator->trans(pb.lead.mass_actions.change_owner.label)"
dialogOptions:
width: 500
modal: true
allowMaximize: false
allowMinimize: false
  • 我定义了一个相关的操作,如下所示:
class ChangeOwnerAction extends WindowMassAction
{
/** @var array */
protected $requiredOptions = ['handler', 'route', 'data_identifier'];
/**
* {@inheritDoc}
*/
public function setOptions(ActionConfiguration $options)
{
if (empty($options['frontend_type'])) {
$options['frontend_type'] = 'edit-mass';
}
return parent::setOptions($options);
}
/**
* {@inheritdoc}
*/
protected function getAllowedRequestTypes()
{
return [Request::METHOD_POST];
}
}

此操作被定义为服务:

services:
#Change owner windows action
pb_lead.mass_action.type.changeownermass:
class: PBBundleLeadBundleDatagridExtensionMassActionActionsWidgetChangeOwnerAction
shared: false
tags:
- { name: oro_datagrid.extension.mass_action.type, type: lead_change_owner_mass_edit }

此外,还包括具有数据网格中定义的路由方法的控制器:

/**
* @Route("/change-owner-mass-edit-lead", name="pb_lead_datagrid_mass_action_change_owner")
* @AclAncestor("oro_sales_lead_update")
* @Template("@PBLead/Lead/widget/mass_change_owner_update.html.twig")
* @param Request $request
* @return array
*/
public function massChangeOwnerAction(Request $request)
{
dump($request);
$responseData = [
'inset' => $request->get('inset', null),
'values' => $request->get('values', null),
];
...

return $responseData;
}

此控制器被定义为控制器中的服务。yml:

PBBundleLeadBundleControllerFrontendLeadChangeOwnerController:
calls:
- [setContainer, ['@PsrContainerContainerInterface']]
tags:
- { name: container.service_subscriber }

另一方面,定义了两个类:一个是抽象类,另一个是从抽象类扩展来管理大规模操作的处理程序。两个处理程序都被定义为服务:

#Abstract Lead mass action handler
pb_lead.abstract_lead_mass_action_handler:
class: PBBundleLeadBundleDatagridExtensionMassActionAbstractLeadMassActionHandler
abstract: true
arguments:
- '@oro_entity.doctrine_helper'
- '@oro_security.acl_helper'
#Lead change owner mass action HANDLER
pb_lead.mass_action.change_owner.handler:
parent: pb_lead.abstract_lead_mass_action_handler
public: true
class: PBBundleLeadBundleDatagridExtensionMassActionxzczxczLeadChangeOwnerMassActionHandler
calls:
- ['setTranslator', ['@translator']]
- ['setFormFactory', ['@form.factory']]

有一个自定义窗体和一个视图是从控制器调用的。

形式:

class LeadChangeOwnerMassType extends AbstractType
{
const NAME = 'pb_lead_change_owner_mass_type';
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'owner',
UserAclSelectType::class,
[
'required' => true,
'label' => 'pb.lead.mass_actions.change_owner.label',
'constraints' => [
new NotNull()
]
]
);
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Lead::class,
]);
}

视图:

{% extends '@OroAction/Operation/form.html.twig' %}
{% set formAction = path('pb_lead_datagrid_mass_action_change_owner', {gridName: 'sales-lead-grid', actionName: 'change_owner', inset: inset, values: values }) %}
{% block form %}
<form id="{{ form.vars.id }}"
name="{{ form.vars.name }}"
action="{{ formAction }}"
method="{{ form.vars.method }}"
class="form-dialog"
>
<fieldset class="form-horizontal">
{{ form_row(form) }}
</fieldset>
<div class="hidden">
{{ form_rest(form) }}
</div>
<div class="widget-actions">
<button class="btn" type="reset">{{ 'Cancel'|trans }}</button>
<button class="btn btn-success" type="submit">{{ 'Apply'|trans }}</button>
</div>
</form>
{{ oro_form_js_validation(form) }}
{% endblock %}

问题是:为什么模态没有显示?

非常感谢的帮助

错误在于路由必须以"oro_";,只是一个小细节不允许显示模态。

change_owner:
type:            lead_change_owner_mass_edit
handler:         pb_lead.mass_action.change_owner.handler
acl_resource:    oro_sales_lead_update
route:           oro_lead_mass_action_change_owner
label:           pb.lead.mass_actions.change_owner.label
icon:            user
data_identifier: lead.id
frontend_options:
title:       "@translator->trans(pb.lead.mass_actions.change_owner.label)"
dialogOptions:
width: 500
modal: true
allowMaximize: false
allowMinimize: false

最新更新