我在网上发现了几篇关于验证对话框中表单字段的帖子和文章,但我发现的所有例子似乎都没有正常工作.
有人可以发布一个完整,简洁的x ++代码示例,它生成一个包含单个文本字段的对话框,对其执行简单验证(如果text ="abc"),并在验证通过时关闭窗口(返回字段值)或如果验证失败,则在不关闭对话框的情况下生成Infolog警告.
对于我们这些刚开始使用x ++的人来说,我认为有一个实际的工作示例可以作为一个很好的起点.
谢谢!
我正在学习X ++,我有两个问题:
我不明白有什么用处ttsbegin and ttscommit!我必须使用它,实用程序是什么?
X ++标准:ttsBegin和ttsCommit AX 2012
这个运算符"〜"的用途是什么?
我需要在我的表单字段中创建动态查找,它应该显示来自两个不同数据源的字段.我正在尝试执行它:
public void lookup()
{
query = new Query();
sysTableLookup = SysTableLookup::newParameters(tableNum(smmBusRelTable), this);
qbds = query.addDataSource(tablenum(smmBusRelTable));
// qbds.addDataSource(tableNum(DirPartyTable));
//qbds.relations(true);
sysTableLookup.parmQuery(query);
sysTableLookup.addLookupField(fieldNum(smmBusRelTable, Busrelaccount));
//sysTableLookup.addLookupfield(fieldNum(DirPartyTable, Name));
sysTableLookup.performFormLookup();
}
Run Code Online (Sandbox Code Playgroud)
注释行是我试图添加不同数据源的操作.
我使用向导向导在AX 2012中创建了一个向导...现在我需要根据用户输入放置1个功能,即启用或禁用FINISH按钮.
我已经尝试过这3种方法但没有成功..
this.finishenabled() - 关于向导类的SetupNavigation方法
finishenabled [formrun.tabidx()] = false - 关于向导类的SetupNavigation方法
syswizard.finishenable(false,curtabidx(),false) - 在向导表单的Tabpage上
如果有人有解决方案,请回复....
哪个FormDataSource方法用于确定记录尚未保存?
即

我的意思是当我的网格线处于这种情况时,我希望我的mennuItemButton抛出错误.
谢谢...
我的任务是从AX 2009中删除所有物料清单(BOM)中的特定物品.
据我所知,该BOMTable表包含标题,BOM表中包含行.他们通过连接BOMId.
该BOM表保存一个字段ItemId这是InventTable.ItemId.
假设是正确的,从BOM表中删除所有行是否足够BOM.ItemId == InventTable.ItemId?还有什么需要考虑的吗?
任何帮助表示赞赏
我想选择并替换三个字符,比如"STR",除非它们在@符号之后.
我使用带有replace方法的文本缓冲区类.我可以替换这三个字符,但它也会替换三个字符前的字符.
这是我的代码:
static void simpleReplace(Args _args)
{
TextBuffer txtb = new TextBuffer();
txtb.setText(" STR @STR #STR");
txtb.regularExpressions(true);
txtb.replace("[^@]STR", "FOO");
info(txtb.getText());
}
Run Code Online (Sandbox Code Playgroud)
结果是"FOO @STR FOO".
我想要的结果是"FOO @STR #FOO",空格和#完好无损.
我认为问题在于我匹配四个字符但只想替换三个字符.我假设我需要一个非捕获组或一些外观.我在Debuggex中尝试了以下表达式:
[^@](?:(STR))
Run Code Online (Sandbox Code Playgroud)

如果它们不跟随@,这似乎可以工作并选择三个字符,但似乎不受Dynamics AX的支持.我查看了此页面以获得X ++ RegEx支持,但找不到任何可以解决我的问题的语法.
是否可以更改上面的作业以产生此输出:"FOO @STR #FOO".
我试图通过扩展CustTable在D365FO中使用新的"命令链"功能.
在将其记录到新表中之前,我们需要检查更新方法上的值是否已更改.
[ExtensionOf(tableStr(CustTable))]
final class CustTable_Extension
{
void update(boolean _updateSmmBusRelTable = true, boolean _updateParty =
true)
{
CustTable custTable_Orig = this.orig();
boolean hasChanged = this.CreditMax != custTable_Orig.CreditMax;
next update(_updateSmmBusRelTable, _updateParty);
if(hasChanged)
{
//do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在运行此代码时,我们得到"对象未设置为对象的实例"错误.发生错误是因为'this'对象为null.调用"next update(_updateSmmBusRelTable,_updateParty);"时也会出现同样的错误.
该文件指出:"这让扩大的公共和保护的方法逻辑,而无需使用事件处理程序当您缠绕的方法,您还可以访问其他公共和保护的方法和类的变量."
有任何想法吗?
我目前正在为一个更大的项目修复一些BestPractice-Warnings。我在某些情况下会调用表单并等待做更多的事情,这主要是一些对话框。为了等待表单,经常使用以下代码:
Object formRun;
//declare args and stuf...
formRun = classfactory.formRunClass(args);
formRun.init();
//call methods on formRun (display,run,etc...)
formRun.wait();
Run Code Online (Sandbox Code Playgroud)
我现在面临的问题是'wait()'似乎已被弃用,我不知道如何替换或解决此问题。我已经看到一些开发人员将表单声明为“对象”以摆脱此警告(顺便说一下,它仍然无法工作),但这是一个后期绑定调用,也应避免。 ..
其他人遇到过这个问题吗 ?我尝试使用system.reflection命名空间调用此方法,但这看起来不正确,并且在x ++中的代码也比这种简单任务所需的代码多得多。