我已对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);
}
}
}
答案 0 :(得分:0)
我遇到了同样的问题,就我而言,这是执行自动化计划所使用的帐户与执行处理屏幕之间的权限差异。为了修复它,我添加了以下几行:
using (new PXImpersonationContext(PX.Data.Update.PXInstanceHelper.ScopeUser))
{
using (new PXReadBranchRestrictedScope())
{
}
}
第一次使用使用户名admin运行您的代码,第二次使用使您的代码运行并具有对必要分支的访问权限