我正在扩展AccountByPeriodEnq逻辑,我只想在屏幕上方添加一个按钮来修改所选的GL记录,但它只是不想显示,所以我不知道为什么。
这是我的代码:
namespace PX.Objects.GL
{
class AccountByPeriodEnqExtensions : PXGraphExtension<AccountByPeriodEnq>
{
#region Actions
public PXAction<AccountByPeriodFilter> Letter;
[PXUIField(Visible = true, DisplayName = "Lettrer")]
[PXButton(CommitChanges = true)]
protected virtual IEnumerable letter(PXAdapter adapter)
{
IReadOnlyCollection<GLTranR> selectedTrans = GetSelectedTrans();
if (selectedTrans.Any())
{
PXLongOperation.StartOperation(this, delegate ()
{
foreach(GLTranR line in selectedTrans)
{
// UpdateSomeFieldsAndPersists
}
});
}
else
{
throw new PXException("Error");
}
return Base.Filter.Select();
}
#endregion
#region Utility
private IReadOnlyCollection<GLTranR> GetSelectedTrans()
{
return Base.GLTranEnq.Cache.Updated
.Cast<GLTranR>()
.Where(tran => tran.Selected == true)
.ToArray();
}
#endregion
}
}
在这里我想念什么吗?
关于
编辑:
为澄清起见,我正在尝试自定义GL404000,帐户详细信息。并且使用检查器,我看到了业务逻辑在AccountByPeriodEnq图
中答案 0 :(得分:2)
使用Acumatica Inspect Element功能时,请注意“按期间计帐”屏幕(GL402000)未使用“ AccountByPeriodEnq”图。
它使用的是“ AccountHistoryByYearEnq”图,因此这就是您要定位的图:
您还需要在该图的主DAC上声明操作。
“ AccountHistoryByYearEnq”的名称比平常更难找到。
您可以使用Acumatica源代码页面并搜索'PXPrimaryGraph(typeof(AccountHistoryByYearEnq)':
在这种情况下,应使用AccountByYearFilter DAC:
[System.SerializableAttribute()]
[PXCacheName(Messages.Account)]
[PXPrimaryGraph(typeof(AccountHistoryByYearEnq), Filter = typeof(AccountByYearFilter))]
public partial class Account : PX.Data.IBqlTable, PX.SM.IIncludable
{
[…]
}
我认为这是过滤器的一种特殊情况,因为如果没有过滤器,则帐户将是用于操作的DAC。
现在您已经确定了屏幕的主图(AccountHistoryByYearEnq)和图的主DAC(AccountByYearFilter),它应该可以按预期工作:
public class AccountByPeriodEnq_Extension : PXGraphExtension<AccountHistoryByYearEnq>
{
public PXAction<AccountByYearFilter> letter;
[PXUIField(DisplayName = "Letter")]
[PXButton]
protected virtual IEnumerable Letter(PXAdapter adapter)
{
return adapter.Get();
}
}
编辑:
对于“帐户详细信息”页面(GL404000),请对不同的DAC和图形使用相同的代码:
using PX.Data;
using System.Collections;
namespace PX.Objects.GL
{
public class AccountByPeriodEnq_Extension : PXGraphExtension<AccountByPeriodEnq>
{
#region Actions
public PXAction<AccountByPeriodFilter> letter;
[PXUIField(DisplayName = "Letter")]
[PXButton]
protected virtual IEnumerable Letter(PXAdapter adapter)
{
return adapter.Get();
}
#endregion
}
}
请注意,您可以为按钮控件指定显式状态和查看权限,尽管如果您在开发人员实例中工作,我认为您的问题与访问权限无关:
[PXUIField(DisplayName = "Letter",
MapEnableRights = PXCacheRights.Select,
MapViewRights = PXCacheRights.Select)]
答案 1 :(得分:0)
我终于找到了问题,我错过了上课的公开成员。
namespace PX.Objects.GL
{
public class AccountByPeriodEnqExtensions : PXGraphExtension<AccountByPeriodEnq>
{
#region Actions
public PXAction<AccountByPeriodFilter> Letter;
感谢您回答HB,我会重用它。