Miklix

在 Dynamics AX 2012 中的 SysOperation 数据契约类中使用查询

已出版: 2025年2月16日 UTC 01:23:11

本文详细介绍了如何在 Dynamics AX 2012(和 Dynamics 365 for Operations)中向 SysOperation 数据契约类添加用户可配置和可过滤的查询


为了使尽可能多的人能够访问本页面,本页面由英文机译而成。遗憾的是,机器翻译技术尚不完善,因此可能会出现错误。如果您愿意,可以在此处查看原始英文版本:

Using a Query in a SysOperation Data Contract Class in Dynamics AX 2012

本文中的信息基于 Dynamics AX 2012 R3。它可能对其他版本有效,也可能无效。(更新:我可以确认这也适用于 Dynamics 365 for Operations)

我似乎总是忘记如何在 SysOperation 框架中指定和初始化查询的细节。我想我做的大多数批处理作业都不是基于用户可配置的查询,但有时我确实需要做这样的批处理作业,所以这篇文章也供我自己参考。

首先,在数据契约类中,查询将以字符串形式存储。其 parm 方法必须使用 AifQueryTypeAttribute 属性进行修饰,如下所示(在此示例中,我使用了 SalesUpdate 查询,但您可以将其替换为任何 AOT 查询):

[
    DataMemberAttribute,
    AifQueryTypeAttribute('_packedQuery', queryStr(SalesUpdate))
]
public str parmPackedQuery(str _packedQuery = packedQuery)
{
    ;

    packedQuery = _packedQuery;
    return packedQuery;
}

如果您希望查询由控制器类决定,也可以使用空字符串。在这种情况下,您还需要实现几个辅助方法(当您需要访问查询时,您可能无论如何都应该实现这些方法以方便自己):

public Query getQuery()
{
    ;

    return new Query(SysOperationHelper::base64Decode(packedQuery));
}

public void setQuery(Query _query)
{
    ;

    packedQuery = SysOperationHelper::base64Encode(_query.pack());
}

如果需要初始化查询(例如,添加范围),则应该实现 initQuery 方法:

public void initQuery()
{
    Query queryLocal = this.getQuery();
    ;

    // add ranges, etc...

    this.setQuery(queryLocal);
}

您需要确保从控制器类调用此方法。

分享至 Bluesky在 Facebook 上分享在 LinkedIn 上分享在 Tumblr 上分享分享至 X在 LinkedIn 上分享在Pinterest上固定

米克尔·邦·克里斯滕森

关于作者

米克尔·邦·克里斯滕森
迈克尔 是 miklix.com 的创建者和所有者。他拥有 20 多年的专业计算机程序员/软件开发人员经验,目前全职受雇于一家大型欧洲 IT 公司。不写博客时,他把业余时间花在各种兴趣、爱好和活动上,这在一定程度上反映在本网站涵盖的各种主题上。