How to change items in cache

两盒软妹~` 提交于 2019-12-31 05:37:28

问题


Hello i want to change and alter values inside the cache of my acumatica cache i would like to know how to do it

for example i want to change the Ext. Cost value pro grammatically of the first line or the second line or can i check if there is already a "Data Backup" on transaction Descr.

 public delegate void PersistDelegate();
[PXOverride]
public void Persist(PersistDelegate baseMethod)
{
      if (Globalvar.GlobalBoolean == true)
        {
            PXCache cache = Base.Transactions.Cache;
        APTran red = new APTran();
        red.BranchID = Base.Transactions.Current.BranchID;
        red.InventoryID = 10045;
        var curyl = Convert.ToDecimal(Globalvar.Globalred);
        red.CuryLineAmt = curyl * -1;
        cache.Insert(red);

        }
        else
        {

        }

         baseMethod();
}

this code add a new line on persist but if it save again it add the same line agaub u wabt ti check if there is already a inventoryID =10045; in the cache

thank you for your help


回答1:


You can access your cache instance by using a view name or cache type. Ex: (Where 'Base' is the graph instance)

Base.Transactions.Cache

or

Base.Caches<APTran>().Cache

Using the cache instance you can loop the cached values using Cached, Inserted, Updated, or Deleted depending on which type of record you are looking for. You can also use GetStatus() on an object to find out if its inserted, updated, etc. Alternatively calling PXSelect will find the results in cache (PXSelectReadOnly will not).

So you could loop your results like so:

foreach (MyDac row in Base.Caches<MyDac>().Cache.Cached)
{
    // logic
}

If you know the key values of the cache object you are looking for you can use Locate to find by key fields:

var row = (MyDac)Base.Transactions.Cache.Locate(new MyDac
{
    MyKey1 = "",
    MyKey2 = ""
    // etc... must include each key field
});

As Mentioned before you can also just use a PXSelect statement to get the values.

Once you have the row to update the values you set the object properties and then call your cache Update(row) before the base persist and you are good to go. Similar if needing to Insert(row) or Delete(row).

So in your case you might end up with something like this in your persist:

foreach (APTran row in Base.Transactions.Cache.Cached)
{
    if (Globalvar.GlobalBoolean != true || row.TranDesc == null || !row.TranDesc.Contains("Data Backup"))
    {
        continue;
    }

    //Found my row
    var curyl = Convert.ToDecimal(Globalvar.Globalred);
    row.CuryLineAmt = curyl * -1;
    Base.Transactions.Update(row);
}


来源:https://stackoverflow.com/questions/57265292/how-to-change-items-in-cache

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!