Dynamics AX 2012附带单元测试支持.
要进行有意义的测试,需要提供一些测试数据(存储在数据库中的表中).
为了获得单元测试的可重现结果,我们需要在每次运行测试时将相同的数据存储在表中.现在的问题是,我们怎样才能做到这一点?
我了解到有可能将TestSuite的隔离级别设置为SysTestSuiteCompanyIsolateClass.这将创建一个空公司,并在测试运行后删除公司.在setup()方法中,我可以使用insert语句将我的testdata填充到表中.这适用于小场景,但如果你有一个真实的项目,它会很快变得很麻烦.
我想知道是否有任何人在实际场景中如何使用X ++单元测试框架的实用解决方案.任何输入都非常感谢.
unit-testing x++ axapta dynamics-ax-2012 dynamics-ax-2012-r3
我有一个包含许多物品的容器,其中一些是容器.我需要获得那些内部容器.什么是最好的做法?
我的解决方案对我来说有点难看:(
container a = [1, 2, ["one","two","three"]];
container b;
int i;
;
for (i = 1; i <= conLen(a); i++)
{
try
{
b = conPeek(a, i);
info(strFmt("%1", conPeek(b,1)));//here should be some logic with b items
}
catch
{
info(strFmt("NOT A CONTAINER %1", conPeek(a, i)));
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我创建了我的是/否EDT,名为IsSpecialCustomer.当我选择Extends属性时NoYesId,它会触发数据库同步.
如果我使用基本枚举NoYes,它将不会触发同步.有没有理由NoYesId在NoYes枚举上使用EDT ?
我理解为什么我会使用它,如果我扩展SalesQty为例,但因为NoYes是一个低级别的枚举,你永远不会添加Maybe,我可以使用枚举,仍然是最好的做法?
有没有理由NoYesId在枚举上使用EDT NoYes?
我想选择并替换三个字符,比如"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".
我尝试构建某种X ++脚本执行器,因此可以使用runbuf函数.只要我传入的X ++代码有效,它就可以工作,但是当我传递无效代码时,它只会抛出一个错误,它无法编译代码但没有进一步的细节.例如,当我尝试以下代码时
runbuf('void dynAdd(int lhs, int rhs) { return lhs + rhs; }');
Run Code Online (Sandbox Code Playgroud)
它因错误而失败
无法编译"void dynAdd(int lhs,int rhs){return lhs + rhs;}".
有没有办法获得有关错误的更多信息?
提前致谢
x++ axapta dynamics-ax-2009 dynamics-ax-2012 dynamics-ax-2012-r3
我们中的许多人正在审查AX 2012中的优化问题.在许多情况下,流程相关代码中的优化问题没有像我们在报告中有许多其他方法那样的解决方案.
案例:我有一个案例,我只需点击一下按钮就可以在AX 2012中执行多个销售订单的确认.在确认该销售订单后,我们需要执行一些其他"定制"流程,这是在遵循代码实践并最大限度地优化编码方法之后的一个漫长的过程.所以我对如何通过多线程处理这种场景提出了疑问
multithreading x++ axapta dynamics-ax-2012 dynamics-ax-2012-r3
我正在尝试通过以下方式在构建的xml中强制执行编码:
XmlWriterSettings xmlSetting = new XmlWriterSettings();
XmlWriter xmlWriter;
Str res;
xmlSetting.encoding ('UTF-8');
xmlWriter = XmlWriter::newXml(xmlSetting);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement('root');
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
xmlWriter.flush();
res = xmlWriter.writeToString();
info(res);
Run Code Online (Sandbox Code Playgroud)
但是,这在我的系统中的结果是:
<?xml version="1.0" encoding="utf-16"?><root />
Run Code Online (Sandbox Code Playgroud)
将编码强制为UTF-8的正确方法是什么?
文档未提供示例:https : //docs.microsoft.com/zh-cn/previous-versions/dynamics/ax-2012/system-classes/gg929065(v%3dax.60)
PurchPackingSlipJournalCreate 类 -> initHeader 方法有一行;
vendPackingSlipJour.PackingSlipId = purchParmTable.Num;
但我希望当我在 Num 区域复制并粘贴“FDG 2020”(所有空白均为制表符)并单击确定时,将此值写入 vendPackingSlipJour 表的 PackagingSlipId 字段中为“FDG2020”。
我试过 -> vendPackingSlipJour.PackingSlipId = strRem(purchParmTable.Num, " "); 但不适用于制表符。
如何从字符串中删除所有空格字符?
我正在尝试执行以下代码:
static void ProjTableQuery(Args _args)
{
Query query;
QueryBuildDataSource qbds1;
QueryBuildDataSource qbds2;
QueryBuildRange qbr1;
QueryBuildRange qbr2;
QueryRun queryRun;
ProjTable projTable;
query = new Query();
qbds1 = query.addDataSource(tableNum(ProjTable));
qbds1.addSortField(
fieldNum(ProjTable, Name),
SortOrder::Ascending);
//qbr1 = qbds1.addRange(fieldNum(ProjTable, Type));
//qbr1.value(queryValue(ProjType::FixedPrice));
qbr2 = qbds1.addRange(fieldNum(ProjTable, ProjId));
qbr2.value(queryValue('0') + '*');
qbds2 = qbds1.addDataSource(tableNum(ProjEmplTrans));
qbds2.relations(true);
qbds2.joinMode(JoinMode::InnerJoin);
queryRun = new QueryRun(query);
while (queryRun.next())
{
projTable = queryRun.get(tableNum(ProjTable));
info(strFmt("%1 %2 %3", projTable.ProjId, projTable.Name, projTable.Type));
}
}
Run Code Online (Sandbox Code Playgroud)
注释掉的那两行可以正常工作.但是,如果我取消注释它们,它将不再运行,并且不会显示任何错误消息.
就我所见,ProjType是一个枚举,我确信我在SQL中检查了FixedPrice值.
我想在选择网格列表上的记录时启用/禁用Confirm(MenuItemButtonName: ButtonUpdateConfirmation) 按钮Sales and marketing -> Common -> Sales quotation -> All quotation -> Follow up。目前,Confirm分别在发送/创建报价状态时启用/禁用该按钮。Confirm当所选销售报价达到信用额度时,我想改变我的禁用/启用按钮的这种行为。
问题是,我找不到按钮启用/禁用位置的行为。有谁知道它在哪里?我目前正在查看SalesQuotationListPage表格
我写了一个查询如下,我想在查询中阻止对 accountnum 的多项选择。有没有办法在代码中做到这一点?
Query = new Query();
qbdsVendTransOpen = Query.addDataSource(tableNum(VendTransOpen));
qbdsVendTrans = qbdsVendTransOpen.addDataSource(tableNum(VendTrans));
qbdsVendTrans.relations(true);
qbdsVendTrans.joinMode(JoinMode::InnerJoin);
qbdsVendTable = qbdsVendTrans.addDataSource(tableNum(VendTable));
qbdsVendTable.relations(true);
qbdsVendTable.joinMode(JoinMode::InnerJoin);
qbdsVendTable.addRange(fieldNum(VendTable,accountNum));
Run Code Online (Sandbox Code Playgroud) 我创建了一个包含单个数据源的表单:InventJournalTable.
我还在其上添加了一个网格和数据源中的两个字段:JournalType和JournalId
该ActionPane有一个按钮,并在其点击的事件处理程序,我试图做到以下几点:
1. add a new data source and join it with the current one on JournalId
2. add to fields from the newly added data source to the current Grid.
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的...仅用于测试..我试图访问数据源并添加范围.它工作得很好,也许连接也在工作,但我怎么能添加这两个字段?
void clicked()
{
Query query;
QueryBuildDataSource qbdsInventJournalTable;
QueryBuildDataSource qbdsvwInventJournals;
super();
query = InventJournalTable_ds.query();
qbdsInventJournalTable = query.dataSourceTable(tableNum(InventJournalTable));
qbdsInventJournalTable.addRange(fieldNum(InventJournalTable, JournalType)).value(queryValue(InventJournalType::LossProfit));
qbdsvwInventJournals = qbdsInventJournalTable.addDataSource(tableNum(vwInventAdjJrnlCostAmount));
qbdsvwInventJournals.addLink(fieldNum(InventJournalTable, JournalId), fieldNum(vwInventAdjJrnlCostAmount, JournalId));
qbdsvwInventJournals.joinMode(JoinMode::OuterJoin);
//gridOverview.addDataField(
InventJournalTable_ds.executeQuery();
}
Run Code Online (Sandbox Code Playgroud)
还有一件事,我计划添加另一个名为"删除详细信息"的按钮,它将删除第二个数据源,并且网格应该返回其初始状态.
我至少在正确的轨道上吗?我可以得到一些关于此的提示吗?
microsoft-dynamics x++ axapta dynamics-ax-2012 dynamics-ax-2012-r3