Acumatica: обновление заказа на обслуживание с момента назначения - PullRequest
0 голосов
/ 09 января 2020

Мне нужно настроить экран «Встреча», чтобы в случае, если пользователь установит флажок «Оплачиваемый» на встрече, он обновит исходный заказ на обслуживание. Мне удалось заставить это работать с PXUpdate, но это не помогло ни одному из графиков сервисных заказов logi c, который обновляет итоги документа и налоги. Мне нужно обновить флажок IsBillable в сервисном заказе, но он также должен запускать события ServiceOrderEntry. У меня есть следующий код, который проходит через, но не обновляет заказ на обслуживание. Я в недоумении. Любая помощь приветствуется!

    protected void FSAppointmentDetPart_RowPersisted(PXCache cache, PXRowPersistedEventArgs e)
    {
        var aptRow = e.Row as FSAppointmentDetPart;
        if (aptRow == null) return;

        var soGraph = PXGraph.CreateInstance<ServiceOrderEntry>();

        FSSODet soDetRow = PXSelect<FSSODet, Where<FSSODet.sODetID, Equal<Required<FSSODet.sODetID>>>>.Select(soGraph, aptRow.SODetID);
        if (soDetRow == null) return;
        soGraph.Caches<FSSODet>().Current = soDetRow;

        FSServiceOrder serviceOrderRow = soGraph.ServiceOrderRecords.Current = soGraph.ServiceOrderRecords
                    .Search<FSServiceOrder.refNbr>(soDetRow.RefNbr, soDetRow.SrvOrdType);
        if (serviceOrderRow == null) return;

        if (soDetRow is FSSODetPart)
        {
            if (e.Operation == PXDBOperation.Delete)
            {
                soGraph.ServiceOrderDetParts.Delete(soDetRow as FSSODetPart);
            }
            else if (e.Operation == PXDBOperation.Update)
            {
                bool? isBillable = aptRow.IsBillable;
                soDetRow.IsBillable = aptRow.IsBillable;
                soGraph.Caches<FSSODet>().SetValueExt<FSSODet.isBillable>(soGraph, isBillable);

                decimal? estimatedQty = aptRow.EstimatedQty;
                soDetRow.EstimatedQty = aptRow.EstimatedQty;
                soGraph.Caches<FSSODet>().SetValueExt<FSSODet.estimatedQty>(soGraph, estimatedQty);

                soGraph.ServiceOrderDetParts.Cache.Update(soDetRow);
                soGraph.ServiceOrderRecords.Cache.Update(serviceOrderRow);

                soGraph.Actions.PressSave();
            }
        }
    }

1 Ответ

0 голосов
/ 23 апреля 2020

Мне удалось заставить это работать, используя soGraph.ServiceOrderRecords.Cache.RaiseFieldUpdated (soDetRow, null);

...