如何使用 X++ 自动填充基于其他字段的字段?

问题描述

我使用的是 D365 财务和运营。我有一个表单和四个字段。每次我输入这三个字段之一的新记录时,它们的值都应连接起来,并将组合文本放入第四个字段的“详细信息”字段。我想我需要为此使用 onupdateevent ,但我不知道如何。

我使用了 onmodifyingfield 事件处理程序,它可以工作,但仅当我输入并保存第二条记录时才有效。我的意思是我保存记录并且自动填充不起作用,但是当我保存第二条记录并刷新页面时,我可以看到第一条记录中的自动填充字段。这是我的代码

[DataEventHandler(tableStr(InventSite),DataEventType::ModifyingField)]
public static void InventSite_onModifyingField(Common sender,DataEventArgs e)
{
    MyTable myTable;

    update_recordset mytable setting Details = MyTable.Field1 + "," + MyTable.Field2;

如果有人能帮我解决这个问题,我将不胜感激。

解决方法

您可以将事件处理程序附加到表单数据源上的 Field1、Field2 和 Field3 Modified 事件,当它被触发时,只需检索当前记录,连接这些值并将它们写入 Details 字段。然后 DataSource 将处理将所有这些值插入或更新到数据库记录中:

[
    FormDataFieldEventHandler(formDataFieldStr(InventSite,InventSite,Field1),FormDataFieldEventType::Modified),FormDataFieldEventHandler(formDataFieldStr(InventSite,Field2),Field3),FormDataFieldEventType::Modified)
]
public static void Field1_OnModified(FormDataObject sender,FormDataFieldEventArgs e)
{
    // get the form DataSource
    FormDataSource dataSource = sender.datasource();
    
    // get current record
    InventSite inventSite = dataSource.cursor();
    
    // contatenate string values
    str details = strFmt("%1,%2,%3",inventSite.Field1,inventSite.Field2,inventSite.Field3);
    
    // update field value
    inventSite.Details = details;
}

注意:我不明白您的代码示例中的 MyTable myTable 缓冲区是什么,但在这种情况下,通过查看 DataEventHandler,我认为所有四个字段都是在 InventSite表。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...