1

如何通过 Acumatica 中的 Import Scenario 引入同时归类为 Customer 和 Vendor 的业务帐户?

4

2 回答 2

4

开箱即用的Extend To Vendor操作不能在导入方案中使用,因为它会重定向到带有预填充数据的供应商屏幕,并且用户必须手动保存供应商。

在下面的代码片段中,我们正在创建一个新的隐藏操作,它调用基本的将客户扩展到供应商操作并保留供应商数据,而不是重定向到供应商屏幕。

using System;
using System.Collections;
using PX.Data;
using PX.Objects.AR;

namespace PXExtendCustomerToVendorExtPkg
{
    public class CustomerMaintPXExt : PXGraphExtension<CustomerMaint>
    {
        public PXAction<Customer> extendToVendorPXExt;
        [PXUIField(DisplayName = "Extend To Vendor Ext",
                   MapEnableRights = PXCacheRights.Select, 
                   MapViewRights = PXCacheRights.Select, 
                   Visible = false)]
        [PXButton]
        public virtual IEnumerable ExtendToVendorPXExt(PXAdapter adapter)
        {
            try
            {
                if (Base.extendToVendor.GetEnabled())
                    Base.extendToVendor.Press();
            }
            catch (Exception ex)
            {
                if (ex is PXRedirectRequiredException)
                {
                    PXRedirectRequiredException rdEx = (PXRedirectRequiredException)ex;
                    rdEx.Graph.Actions.PressSave();
                }
                else
                    throw ex;
            }
            return adapter.Get();
        }
    }
}

发布自定义后,修改Import Scenario( CustomersSM206025) 并Extend To Vendor Ext在保存操作后添加新操作。

在此处输入图像描述

下载定制包

于 2017-11-07T01:01:11.493 回答
1

DChhapgar 非常好的解决方案。以下是在 Acumatica 21R1 中工作的修改版本,因为 Acumatica 进行了一些修改:各自ExtendToCustomerExtendToVendorPXGraphExtension(s) 是在以下条件下创建的:

App_Data\CodeRepository\PX.Objects\Extensions\ExtendBAccount 在此处输入图像描述

因此有必要先得到扩展var graphExt = Base.GetExtension<ExtendToCustomer>();。下面的代码用于从 BusinessAccount 扩展到客户,这也在保存之前对客户进行了一些更改(在代码中注释)。扩展到供应商的概念是相同的。

using PX.Data;
using PX.Objects.AR;
using System;
using System.Collections;
using static PX.Objects.CR.BusinessAccountMaint;

namespace PX.Objects.CR
{
    public class IBBusinessAccountMaintExt : PXGraphExtension<BusinessAccountMaint>
    {
        public PXAction<BAccount> extendToCustomerPXExt;
        [PXUIField(DisplayName = "Extend As Customer Ext", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select, Visible = false)]
        [PXButton]
        public virtual IEnumerable ExtendToCustomerPXExt(PXAdapter adapter)
        {
            try {
                var graphExt = Base.GetExtension<ExtendToCustomer>();
                if (graphExt.extendToCustomer.GetEnabled()) { graphExt.extendToCustomer.Press(); }
            } catch (Exception ex) {
                if (ex is PXRedirectRequiredException) {
                    PXRedirectRequiredException rdEx = (PXRedirectRequiredException)ex;
                    
                    // If there is a need to make changes in new Graph
                    CustomerMaint editCustomer = (CustomerMaint)rdEx.Graph;
                    //editCustomer.CurrentCustomer.SetValueExt<Customer.paymentsByLinesAllowed>(editCustomer.BAccount.Current, true);

                    rdEx.Graph.Actions.PressSave();
                } else
                    throw ex;
            }
            return adapter.Get();
        }
    }
}
于 2021-08-26T18:29:07.253 回答