Acumatica 更新查询页面上的值失败

Acumatica 更新查询页面上的值失败,acumatica,Acumatica,我写了一些代码,试图更改库存分配详细信息的一些字段 下面是我的代码,我想更改的值是“手头”字段。我总是在其他页面上使用“setValue”或“setValueExt”来完成此操作。但是在这个查询页面上,它不起作用 在我使用“setValue”方法后,我检查了缓存,“On hand”的值实际上在缓存中发生了更改,但它没有刷新UI 有人知道为什么吗?谢谢 public PXAction<PX.Objects.IN.InventoryAllocDetEnqFilter> changeIt;

我写了一些代码,试图更改库存分配详细信息的一些字段

下面是我的代码,我想更改的值是“手头”字段。我总是在其他页面上使用“setValue”或“setValueExt”来完成此操作。但是在这个查询页面上,它不起作用

在我使用“setValue”方法后,我检查了缓存,“On hand”的值实际上在缓存中发生了更改,但它没有刷新UI

有人知道为什么吗?谢谢

public PXAction<PX.Objects.IN.InventoryAllocDetEnqFilter> changeIt;

[PXButton(CommitChanges = true)]
[PXUIField(DisplayName = "Change it")]
protected void changeit()
{
    var current = Base.Filter.Current;
    var cache = Base.Filter.Cache;
    var BaseUnit = current.BaseUnit;

    var onHand = current.QtyOnHand;
    var totalAddition = current.QtyTotalAddition;

    var cgt = Convert.ToDecimal(current.QtyOnHand * 100);

    cache.SetValue<InventoryAllocDetEnqFilter.qtyOnHand>(current, cgt);

}
public-PXAction-changeIt;
[PXButton(CommitChanges=true)]
[PXUIField(DisplayName=“更改它”)]
受保护的void changeit()
{
var电流=Base.Filter.current;
var cache=Base.Filter.cache;
var BaseUnit=当前的.BaseUnit;
var onHand=current.QtyOnHand;
var totalAddition=current.QtyTotalAddition;
var cgt=Convert.ToDecimal(current.QtyOnHand*100);
cache.SetValue(当前,cgt);
}

在“Filter”委托中计算“QtyOnHand”值

在服务器回调时调用委托以刷新值。您的操作更改了“QtyOnHand”值,但委托会在下一次服务器回调时覆盖其值:

public PXFilter<InventoryAllocDetEnqFilter> Filter;

protected virtual IEnumerable filter()
{
    PXCache cache = this.Caches[typeof(InventoryAllocDetEnqFilter)];
    if (cache != null)
    {
        InventoryAllocDetEnqFilter filter = cache.Current as InventoryAllocDetEnqFilter;
        if (filter != null)
        {
            filter.QtyOnHand = 0m;

            filter.QtyTotalAddition = 0m;

            filter.QtyPOPrepared = 0m;
            filter.QtyPOOrders = 0m;
            filter.QtyPOReceipts = 0m;
            filter.QtyINReceipts = 0m;
            filter.QtyInTransit = 0m;
            filter.QtyInTransitToSO = 0m;
            filter.QtyINAssemblySupply = 0m;
            filter.QtyInTransitToProduction = 0m;
            filter.QtyProductionSupplyPrepared = 0m;
            filter.QtyProductionSupply = 0m;
            filter.QtyPOFixedProductionPrepared = 0m;
            filter.QtyPOFixedProductionOrders = 0m;

            filter.QtyTotalDeduction = 0m;

            filter.QtyHardAvail = 0m;
            filter.QtyActual = 0m;
            filter.QtyNotAvail = 0m;
            filter.QtyExpired = 0m;
            filter.QtySOPrepared = 0m;
            filter.QtySOBooked = 0m;
            filter.QtySOShipping = 0m;
            filter.QtySOShippingReverse = 0m;
            filter.QtySOShipped = 0m;
            filter.QtySOShippedReverse = 0m;
            filter.QtyINIssues = 0m;
            filter.QtyINAssemblyDemand = 0m;
            filter.QtyProductionDemandPrepared = 0m;
            filter.QtyProductionDemand = 0m;
            filter.QtyProductionAllocated = 0m;
            filter.QtySOFixedProduction = 0m;
            filter.QtySOBackOrdered = 0m;                   
            filter.QtySOFixed = 0m;
            filter.QtyPOFixedOrders = 0m;
            filter.QtyPOFixedPrepared = 0m;
            filter.QtyPOFixedReceipts = 0m;
            filter.QtySODropShip = 0m;
            filter.QtyPODropShipOrders = 0m;
            filter.QtyPODropShipPrepared = 0m;
            filter.QtyPODropShipReceipts = 0m;

            filter.QtyAvail = 0m;


            // InventoryId is required field 
            if (filter.InventoryID != null)
            {

                // 'included' checkboxes
                InventoryItem inventoryItemRec = PXSelect<InventoryItem, Where<InventoryItem.inventoryID, Equal<Current<InventoryAllocDetEnqFilter.inventoryID>>>>.Select(this);
                INAvailabilityScheme availSchemeRec = PXSelectJoin<INAvailabilityScheme,
                    InnerJoin<INItemClass, On<INAvailabilityScheme.availabilitySchemeID, Equal<INItemClass.availabilitySchemeID>>>,
                    Where<INItemClass.itemClassID, Equal<Required<INItemClass.itemClassID>>>>
                    .Select(this, inventoryItemRec.ItemClassID);
                filter.InclQtyPOPrepared = availSchemeRec.InclQtyPOPrepared;
                filter.InclQtyPOOrders = availSchemeRec.InclQtyPOOrders;
                filter.InclQtyPOReceipts = availSchemeRec.InclQtyPOReceipts;
                filter.InclQtyINReceipts = availSchemeRec.InclQtyINReceipts;
                filter.InclQtyInTransit = availSchemeRec.InclQtyInTransit;
                filter.InclQtySOPrepared = availSchemeRec.InclQtySOPrepared;
                filter.InclQtySOBooked = availSchemeRec.InclQtySOBooked;
                filter.InclQtySOShipping = availSchemeRec.InclQtySOShipping;
                filter.InclQtySOShipped = availSchemeRec.InclQtySOShipped;
                filter.InclQtyINIssues = availSchemeRec.InclQtyINIssues;
                filter.InclQtyINAssemblyDemand = availSchemeRec.InclQtyINAssemblyDemand;
                filter.InclQtyINAssemblySupply = availSchemeRec.InclQtyINAssemblySupply;
                filter.InclQtyProductionDemandPrepared = availSchemeRec.InclQtyProductionDemandPrepared;
                filter.InclQtyProductionDemand = availSchemeRec.InclQtyProductionDemand;
                filter.InclQtyProductionAllocated = availSchemeRec.InclQtyProductionAllocated;
                filter.InclQtyProductionSupplyPrepared = availSchemeRec.InclQtyProductionSupplyPrepared;
                filter.InclQtyProductionSupply = availSchemeRec.InclQtyProductionSupply;
                filter.InclQtySOBackOrdered = availSchemeRec.InclQtySOBackOrdered;
                filter.InclQtySOReverse = availSchemeRec.InclQtySOReverse;
                filter.BaseUnit = inventoryItemRec.BaseUnit;


                // QtyOnHand , QtyExpired , QtyLocNotAvail calculation :
                // simplified (without cost) version of code from IN401000
                PXSelectBase<INLocationStatus> calcStatusCmd = 
                    new PXSelectReadonly2<INLocationStatus,
                    //InnerJoin<INSiteStatus,
                    //  On<INSiteStatus.inventoryID, Equal<INLocationStatus.inventoryID>,
                    //  And<INSiteStatus.subItemID, Equal<INLocationStatus.subItemID>,
                    //  And<INSiteStatus.siteID, Equal<INLocationStatus.siteID>>>>>,
                                InnerJoin<InventoryItem,
                                        On<InventoryItem.inventoryID, Equal<INLocationStatus.inventoryID>>,
                                InnerJoin<INLocation,
                                        On<INLocation.siteID, Equal<INLocationStatus.siteID>,
                                                And<INLocation.locationID, Equal<INLocationStatus.locationID>>>,
                                InnerJoin<INSubItem,
                                        On<INSubItem.subItemID, Equal<INLocationStatus.subItemID>>,
LeftJoin<INLotSerClass,
    On<INLotSerClass.lotSerClassID, Equal<InventoryItem.lotSerClassID>>,
                                LeftJoin<INLotSerialStatus,
                                        On<INLotSerialStatus.inventoryID, Equal<INLocationStatus.inventoryID>,
        And<INLotSerClass.lotSerAssign, Equal<INLotSerAssign.whenReceived>,
                                                And<INLotSerialStatus.subItemID, Equal<INLocationStatus.subItemID>,
                                                And<INLotSerialStatus.siteID, Equal<INLocationStatus.siteID>,
                        And<INLotSerialStatus.locationID, Equal<INLocationStatus.locationID>,
                        And<INLotSerClass.lotSerClassID, IsNotNull,
                        And<INLotSerClass.lotSerTrack, NotEqual<INLotSerTrack.notNumbered>>>>>>>>,
                                InnerJoin<INSite,
                                        On<INSite.siteID, Equal<INLocationStatus.siteID>,
                        And<Match<IN.INSite, Current<AccessInfo.userName>>>>
                    >>>>>>,
                    Where<INLocationStatus.inventoryID, Equal<Current<InventoryAllocDetEnqFilter.inventoryID>>>,
                    OrderBy<Asc<InventoryItem.inventoryCD, 
                            Asc<INLocationStatus.siteID, 
                            Asc<INSubItem.subItemCD, 
                            Asc<INLocationStatus.locationID, 
                            Asc<INLotSerialStatus.lotSerialNbr>>>>>>>(this);

                if (!SubCDUtils.IsSubCDEmpty(filter.SubItemCD))
                    calcStatusCmd.WhereAnd<Where<INSubItem.subItemCD, Like<Current<InventoryAllocDetEnqFilter.subItemCDWildcard>>>>();

                if (filter.SiteID != null)
                    calcStatusCmd.WhereAnd<Where<INLocationStatus.siteID, Equal<Current<InventoryAllocDetEnqFilter.siteID>>>>();

                if (filter.LocationID != null)
                    calcStatusCmd.WhereAnd<Where<INLocationStatus.locationID, Equal<Current<InventoryAllocDetEnqFilter.locationID>>>>();

                if (!string.IsNullOrEmpty(filter.LotSerialNbr))
                    calcStatusCmd.WhereAnd<Where<INLotSerialStatus.lotSerialNbr, Like<Current<InventoryAllocDetEnqFilter.lotSerialNbrWildcard>>>>();

                PXResultset<INLocationStatus> calcStatusRecs = calcStatusCmd.Select();

                // only 3 values here : QtyOnHand, QtyOnLocNotAvail, QtyExpired
                foreach (PXResult<INLocationStatus, /*INSiteStatus,*/ InventoryItem, INLocation, INSubItem, INLotSerClass, INLotSerialStatus> it in calcStatusRecs)
                {
                    INLocationStatus ls_rec = it;
                    //INSiteStatus ss_rec = it;
                    InventoryItem ii_rec = it;
                    //INSubItem si_rec = it;  
                    INLocation l_rec = it;
                    INLotSerialStatus lss_rec = it;

                    filter.QtyOnHand += (lss_rec.QtyOnHand ?? ls_rec.QtyOnHand);

                    if (!(l_rec.InclQtyAvail ?? true))
                    {
                        filter.QtyNotAvail += lss_rec.QtyAvail ?? ls_rec.QtyAvail;
                    }
                    else
                    {
                        if ((lss_rec.ExpireDate != null) && (DateTime.Compare((DateTime)this.Accessinfo.BusinessDate, (DateTime)lss_rec.ExpireDate) > 0))
                        {
                            filter.QtyExpired += lss_rec.QtyOnHand;
                        }
                    }
                }

                foreach (InventoryAllocDetEnqResult it in this.ResultRecords.Select()) //???
                {
                    Aggregate(filter, it);
                }

                filter.QtyTotalAddition =
                    ((filter.InclQtyPOPrepared ?? false) ? filter.QtyPOPrepared : 0m)
                    + ((filter.InclQtyPOOrders ?? false) ? filter.QtyPOOrders : 0m)
                    + ((filter.InclQtyPOReceipts ?? false) ? filter.QtyPOReceipts : 0m)
                    + ((filter.InclQtyINReceipts ?? false) ? filter.QtyINReceipts : 0m)
                    + ((filter.InclQtyInTransit ?? false) ? filter.QtyInTransit : 0m)
                    + ((filter.InclQtyINAssemblySupply ?? false) ? filter.QtyINAssemblySupply : 0m)
                    + ((filter.InclQtyProductionSupplyPrepared ?? false) ? filter.QtyProductionSupplyPrepared : 0m)
                    + ((filter.InclQtyProductionSupply ?? false) ? filter.QtyProductionSupply : 0m);

                filter.QtyTotalDeduction =
                    filter.QtyExpired
                    + ((filter.InclQtySOPrepared ?? false) ? filter.QtySOPrepared : 0m)
                    + ((filter.InclQtySOBooked ?? false) ? filter.QtySOBooked : 0m)
                    + ((filter.InclQtySOShipping ?? false) ? filter.QtySOShipping : 0m)
                    + ((filter.InclQtySOShipped ?? false) ? filter.QtySOShipped : 0m)
                    + ((filter.InclQtyINIssues ?? false) ? filter.QtyINIssues : 0m)
                    + ((filter.InclQtyINAssemblyDemand ?? false) ? filter.QtyINAssemblyDemand : 0m)
                    + ((filter.InclQtyProductionDemandPrepared ?? false) ? filter.QtyProductionDemandPrepared : 0m)
                    + ((filter.InclQtyProductionDemand ?? false) ? filter.QtyProductionDemand : 0m)
                    + ((filter.InclQtyProductionAllocated ?? false) ? filter.QtyProductionAllocated : 0m)
                    + ((filter.InclQtySOBackOrdered ?? false) ? filter.QtySOBackOrdered : 0m);

                filter.QtyAvail = filter.QtyOnHand + filter.QtyTotalAddition - (filter.QtyTotalDeduction + filter.QtyNotAvail);
                filter.QtyHardAvail = filter.QtyOnHand - filter.QtyNotAvail - filter.QtyINIssues
                    - (filter.QtySOShipping - filter.QtySOShippingReverse) - (filter.QtySOShipped - filter.QtySOShippedReverse);
                filter.QtyActual = filter.QtyOnHand - filter.QtyNotAvail - (filter.QtySOShipped - filter.QtySOShippedReverse);
            }
        }
    }
    yield return cache.Current;
    cache.IsDirty = false;
}
公共PXFilter;
受保护的虚拟IEnumerable筛选器()
{
PXCache cache=this.Caches[typeof(InventoryAllocDetEnqFilter)];
if(缓存!=null)
{
InventoryAllocDetEnqFilter=缓存。当前为InventoryAllocDetEnqFilter;
if(过滤器!=null)
{
过滤器。QtyOnHand=0m;
filter.QtyTotalAddition=0m;
filter.QtyPOPrepared=0m;
filter.QtyPOOrders=0m;
filter.QtyPOReceipts=0m;
filter.qtyin=0m;
filter.qtyintransition=0m;
filter.qtyintransitotoso=0m;
过滤器.QTYINASSEMBLY供应=0m;
过滤器.qtyIntransitotoProduction=0m;
filter.QtyProductionSupplyPrepared=0m;
filter.QtyProductionSupply=0m;
filter.qtypofixedproductprepared=0m;
filter.QtyPOFixedProductionOrders=0m;
filter.qtyTotalDeception=0m;
filter.QtyHardAvail=0m;
过滤器。QTY实际值=0m;
filter.QtyNotAvail=0m;
filter.QtyExpired=0m;
filter.QtySOPrepared=0m;
过滤器。QTYSOBOKED=0m;
过滤器。QtySOShipping=0m;
filter.QtySOShippingReverse=0m;
过滤器。QtySOShipped=0m;
filter.QtySOShippedReverse=0m;
filter.qtyin=0m;
filter.qtyAssemblyDemand=0m;
filter.QtyProductionDemandPrepared=0m;
filter.QtyProductionDemand=0m;
filter.QtyProductionAllocated=0m;
filter.QtySOFixedProduction=0m;
filter.QtySOBackOrdered=0m;
filter.QtySOFixed=0m;
filter.QtyPOFixedOrders=0m;
filter.QtyPOFixedPrepared=0m;
filter.QtyPOFixedReceipts=0m;
过滤系数:QtySODropShip=0m;
filter.QtyPODropShipOrders=0m;
filter.qtypodropship=0m;
filter.QtyPODropShipReceipts=0m;
filter.QtyAvail=0m;
//InventoryId是必填字段
if(filter.InventoryID!=null)
{
//“包含”复选框
InventoryItem inventoryItemRec=PXSelect.Select(此);
不可用性方案可用方案EC=PXSelectJoin
.选择(此,inventoryItemRec.ItemClassID);
filter.InclQtyPOPrepared=可用模式rec.InclQtyPOPrepared;
filter.InclQtyPOOrders=availSchemeRec.InclQtyPOOrders;
filter.InclQtyPOReceipts=availSchemeRec.InclQtyPOReceipts;
filter.InclQtyINReceipts=availSchemeRec.InclQtyINReceipts;
filter.inclqtyTransit=availSchemeRec.inclqtyTransit;
filter.InclQtySOPrepared=availSchemeRec.InclQtySOPrepared;
filter.InclQtySOBooked=可用模式rec.InclQtySOBooked;
filter.InclQtySOShipping=可用模式ec.InclQtySOShipping;
filter.InclQtySOShipped=可用模式ec.InclQtySOShipped;
filter.inclqtyniissues=availSchemeRec.inclqtyniissues;
filter.inclqtyAssemblyDemand=availSchemeRec.inclqtyAssemblyDemand;
filter.inclqtyAssemblySupply=availSchemeRec.inclqtyAssemblySupply;
filter.InclQtyProductionDemandPrepared=可用方案ec.InclQtyProductionDemandPrepared;
filter.InclQtyProductionDemand=availSchemeRec.InclQtyProductionDemand;
filter.InclQtyProductionAllocated=可用模式rec.InclQtyProductionAllocated;
filter.InclQtyProductionSupplyPrepared=可用方案ec.InclQtyProductionSupplyPrepared;
filter.InclQtyProductionSupply=availSchemeRec.InclQtyProductionSupply;
filter.InclQtySOBackOrdered=availSchemeRec.InclQtySOBackOrdered;
filter.InclQtySOReverse=availSchemeRec.InclQtySOReverse;
filter.BaseUnit=inventoryItemRec.BaseUnit;
//QtyOnHand、QtyExpired、QtyLocNotAvail计算:
//IN401000中代码的简化(无成本)版本
PXSelectBase calcStatusCmd=
新PXSelectReadonly2(本);
如果(!subdutils.IsSubCDEmpty(filter.SubItemCD))
calcStatusCmd.wherend();
如果(filter.SiteID!=null)
calcStatusCmd.wherend();
if(filter.LocationID!=null)
calcStatusCmd.wherend();
如果(!string.IsNullOrEmpty(filter.LotSerialNbr))
calcStatusCmd.wherend();
PXResultset calcStatusRecs=calcStatusCmd.Select();
//这里只有3个值:QtyOnHand、QtyOnLocNotAvail、QtyExpired