Копирование пользовательских полей из CRM-предложения в заказ клиента - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь скопировать некоторые пользовательские поля из цитаты CRM в заказ на продажу.Цитата CRM использует объект, отличный от котировки продаж, и, похоже, нет способа вернуть его обратно.Я пытался переопределить Create Sales Order, чтобы добавить обработчик, но это не помогло. Любая помощь будет принята с благодарностью.Вот код, который я попробовал:

public class OpportunityMaint_Extension : PXGraphExtension<OpportunityMaint>
{
    public delegate IEnumerable CreateSalesOrderDelegate(PXAdapter adapter);

    [PXOverride]
    public virtual IEnumerable CreateSalesOrder(PXAdapter adapter, CreateSalesOrderDelegate baseMethod)
    {
        Base.RowInserting.AddHandler<SOLine>((sender, e) =>
        {
            SOLine orderLine = e.Row as SOLine;
            if (orderLine == null) return;

            SOLineExt orderLineExt = orderLine.GetExtension<SOLineExt>();

            var product = Base.Products.Current;
            CROpportunityProductsExt productExt = product.GetExtension<CROpportunityProductsExt>();

            orderLineExt.UsrHasAnticipatedDiscount = productExt.UsrHasAnticipatedDiscount;
            orderLineExt.UsrAnticipatedDiscountPct = productExt.UsrAnticipatedDiscountPct;
            orderLineExt.UsrAnticipatedDiscountAmt = productExt.UsrAnticipatedDiscountAmt;
            orderLineExt.UsrAnticipatedUnitPrice = productExt.UsrAnticipatedUnitPrice;
            orderLineExt.UsrTotalAnticipatedDiscountAmt = productExt.UsrTotalAnticipatedDiscountAmt;
        });

        return baseMethod(adapter);
    }
}

Спасибо!

1 Ответ

0 голосов
/ 25 сентября 2018

Есть два сообщения с ответами на этот же вопрос:

Заполните настраиваемое поле при создании заказа на продажу из возможности

Как передать вейлы настраиваемого поляот Opportunity к заказу на продажу?

Чтобы подвести итог, вы можете добавить обработчик события вставки строк в действие кнопки, или мои предпочтения находятся в DoCreateSalesOrder (расширение OpportunityMaint), как в примере ниже ...

[PXOverride]
public virtual void DoCreateSalesOrder(OpportunityMaint.CreateSalesOrderFilter param, Action<OpportunityMaint.CreateSalesOrderFilter> del)
{
        PXGraph.InstanceCreated.AddHandler<SOOrderEntry>(graph =>
        {
            graph.RowInserting.AddHandler<SOLine>((cache, args) =>
            {
                var soLine = (SOLine)args.Row;
                if (soLine == null)
                {
                    return;
                }
                CROpportunityProducts opProduct = PXResult<CROpportunityProducts>.Current;
                if (opProduct == null)
                {
                    return;
                }

                var opProductExt = PXCache<CROpportunityProducts>.GetExtension<CROpportunityProductsExt>(opProduct);
                var soLineExt = PXCache<SOLine>.GetExtension<SOLineExt>(soLine);

                //Copy all extension fields here...

            });
        });

    del(param);
}
...