You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OroCRM自定义批量操作模态框不显示问题求助

OroCRM批量修改归属人模态框不显示排查

我正在对OroCRM进行定制开发,需要实现多条记录的批量操作:选中批量操作选项后弹出模态框以选择系统归属人。已完成以下配置,但选中选项后模态框并未显示,求排查原因:


1. 数据网格中添加mass-actions配置

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

2. 定义并注册Action类

Action类代码:

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: PB\Bundle\LeadBundle\Datagrid\Extension\MassAction\Actions\Widget\ChangeOwnerAction
        shared: false
        tags:
            - { name: oro_datagrid.extension.mass_action.type, type: lead_change_owner_mass_edit }

3. 编写路由控制器方法及注册服务

控制器方法:

/**
 * @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;
}

控制器服务注册:

PB\Bundle\LeadBundle\Controller\Frontend\LeadChangeOwnerController:
    calls:
        - [setContainer, ['@Psr\Container\ContainerInterface']]
    tags:
        - { name: container.service_subscriber }

4. 定义批量操作处理类及服务

#Abstract Lead mass action handler
pb_lead.abstract_lead_mass_action_handler:
    class: PB\Bundle\LeadBundle\Datagrid\Extension\MassAction\AbstractLeadMassActionHandler
    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: PB\Bundle\LeadBundle\Datagrid\Extension\MassActionxzczxcz\LeadChangeOwnerMassActionHandler
    calls:
        - ['setTranslator', ['@translator']]
        - ['setFormFactory', ['@form.factory']]

5. 创建自定义表单类及视图模板

表单类代码:

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 %}

内容的提问来源于stack exchange,提问作者Tony Díaz Ramos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:15:51