【问题标题】:D365 Clicked method on command buttonD365 命令按钮上的单击方法
【发布时间】:2019-08-23 21:39:30
【问题描述】:
在 D365 Finance and Operations 中,在表单 TaxExempt 的 General Section 中,有几个字段,例如 CodeType、CodeName、CompanyList(下拉菜单)。
用户应输入所需的值(类型和名称)。
在下一部分财产增值税 - 设置中有命令按钮新建。当单击该按钮时,它应该使用取自常规部分的值创建行:公司(来自公司列表选择)、销售税代码(来自代码类型)和名称(来自代码名称)。目前,它只创建空行。是否有一些建议如何执行?
【问题讨论】:
标签:
axapta
microsoft-dynamics
x++
dynamics-365-operations
【解决方案1】:
实现目标的方法是表单数据源上的 initValue。在 super() 调用之后,添加来自表单上其他字段的默认值。示例可能如下所示:
[DataSource]
class TaxExemptCodeTable
{
/// <summary>
/// Default values from other form controls/fields on new record creation
/// </summary>
public void initValue()
{
super();
TaxExemptCodeTable.Value = CustomFormControl.text();
//etc.
}
}
如果您正在创建一个扩展,实际上有多个事件取决于现有的基线代码。 OnInitValue 将是与上述非扩展解决方案进行比较的类比,但如果在此存在现有代码,并且 formdatasource 上已经存在默认逻辑,它可能会覆盖您的字段。这是因为该事件将作为框架在 super() 调用中调用的最后一个方法之一触发,但在放置在 super() 之后的任何代码之前。这使扩展方案复杂化。
如果是这种情况,您可以查看 OnCreated 事件的默认值,该事件将在之前的事件和这些方法和/或事件中可能已经存在的“基础”/“开箱即用代码”之后触发。这将使用您在 oncreated 事件中指定的值覆盖任何现有的默认/初始化逻辑,同时还为您提供要使用的表单的上下文(与似乎没有要使用的表单控件/值的表级事件相反必须满足您的要求)