Pregunta

Agregué algunos campos personalizados al formulario de grupo de clientes usando upgradeSchema.php.

Después de eso, descubrí que los campos originales, como el código de grupo de clientes y la identificación fiscal, se guardan utilizando métodos de configuración en la API proporcionada.Es completamente diferente de Magento 1.X que solo usa setXXX() para guardar.

¿Fue útil?

Solución

El mecanismo de atributos de extensión debe usarse en este caso. Permite la extensión de las API principales por los módulos de terceros. Pasos genéricos para habilitar el nuevo atributo de extensión:

  1. Declare Atributo de extensión como se describe en la documentos oficiales . Después de borrar var y ejecutar <project_root>/bin/magento setup:di:compile, el programa correspondiente y el getter para este nuevo atributo deben aparecer en \Magento\Customer\Api\Data\GroupExtensionInterface (esta interfaz se genera automáticamente)
  2. escribe complementos para \Magento\Customer\Api\GroupRepositoryInterface::save, \Magento\Customer\Api\GroupRepositoryInterface::getById (y cualquier otro método de servicio según sea necesario) para guardar / cargar un nuevo atributo. Como desarrollador de extensión, solo usted sabe dónde debe almacenarse este atributo, puede ser cualquier mesa. Ver \Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSave como ejemplo
  3. Si necesita hacer que este atributo sea visible en la cobro (para que se pueda buscar / filtrable), declare el nodo join. Si no, entonces solo omita esto
  4. Acceda a su atributo personalizado como: $customerGroup->getExtensionAttributes()->getMyAttribute(), donde customerGroup implementa \Magento\Customer\Api\Data\GroupInterface. Se puede utilizar setMyAttribute() también
  5. A continuación se muestra el ejemplo de la configuración que debe ponerse en VendorName/ModuleName/etc/extension_attributes.xml

    <?xml version="1.0"?>
    <config>
        <extension_attributes for="Magento\Customer\Api\Data\GroupInterface">
            <!--Data interface can be used as a type of attribute, see example in CatalogInventory module-->
            <attribute code="name_of_attribute" type="string">
                <resources>
                    <resource ref="VendorName_ModuleName::someAclNode"/>
                </resources>
                <!--Join is optional, only if you need to have added attribute visible in groups list-->
                <join reference_table="table_where_attribute_is_stored" reference_field="group_id_field_in_that_table" join_on_field="group_id">
                    <field>name_of_added_attribute_field_in_that_table</field>
                </join>
            </attribute>
        </extension_attributes>
    </config>
    

Otros consejos

No olvides que un módulo necesita un register.php archivo en él, y debe utilizar bin/magento module:enable VendorName_ModuleName ¡Antes de que aparezca!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top