自动化计划和“处理”页面上的“处理所有”操作之间的行为差​​异

时间:2019-05-22 15:32:18

标签: acumatica

我已对GLTran DAC进行了自定义,以具有用于“税区”的自定义字段,并且如果选中了“创建税收交易”复选框,则它将与税收类别和税收ID一起填充。我还自定义了“发布”以将该税区填充到TaxTran表中。

日记帐交易由一个自定义处理页面创建,该页面读取XML文件并创建日记帐交易文档并释放它。

在我的本地实例和沙盒实例上,一切正常。

在生产中,当我使用“处理”页面处理XML文件时,一切都很好。但是,当我创建自动化计划时,将创建日记帐交易记录,并填充税区,并且将文档发布而没有任何错误。但是,TaxTran表中未填充Tax Zone!

我在本地实例或沙箱中的自动化计划没有相同的问题。所有这些实例都具有相同版本的Acumatica。

public class GLTranExt : PXCacheExtension<PX.Objects.GL.GLTran>
    {
        #region UsrTaxZoneID
        [PXDBString(10)]
        [PXSelector(typeof(Search<TaxZone.taxZoneID>),
              typeof(TaxZone.taxZoneID),
              typeof(TaxZone.descr))]
        [PXUIField(DisplayName = "Tax Zone")]
        public virtual string UsrTaxZoneID { get; set; }
        public abstract class usrTaxZoneID : IBqlField { }
        #endregion
    }

public class PostGraph_Extension : PXGraphExtension<PostGraph>
    {
        public PXSelect<GLTran, Where<GLTran.batchNbr, Equal<Required<GLTran.batchNbr>>, And<GLTran.accountID, Equal<Required<GLTran.accountID>>, And<GLTran.subID, Equal<Required<GLTran.subID>>, And<GLTran.branchID, Equal<Required<GLTran.branchID>>>>>>> GLTransactions;
        public delegate void ReleaseBatchProcDelegate(Batch b, bool unholdBatch = false);
        [PXOverride]
        public void ReleaseBatchProc(Batch b, bool unholdBatch, ReleaseBatchProcDelegate baseMethod)
        {
            baseMethod(b, unholdBatch = false);
            foreach(TaxTran rec in Base.GL_GLTran_Taxes.Select(b.Module, b.BatchNbr))
            {
                GLTran glTran = GLTransactions.Select(rec.RefNbr, rec.AccountID, rec.SubID, rec.BranchID);
                GLTranExt glTranExt = PXCache<GLTran>.GetExtension<GLTranExt>(glTran);
                if (glTranExt != null)
                    rec.TaxZoneID = glTranExt.UsrTaxZoneID;
                Base.GL_GLTran_Taxes.Update(rec);
                Base.GL_GLTran_Taxes.Cache.Persist(PXDBOperation.Update);
            }
        }
}

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,就我而言,这是执行自动化计划所使用的帐户与执行处理屏幕之间的权限差异。为了修复它,我添加了以下几行:

using (new PXImpersonationContext(PX.Data.Update.PXInstanceHelper.ScopeUser))
{
                            using (new PXReadBranchRestrictedScope())
                            {
                            }
}

第一次使用使用户名admin运行您的代码,第二次使用使您的代码运行并具有对必要分支的访问权限