从代码调用方法SalesLine.modifiedField时,错误的字段会重置

时间:2015-05-12 13:04:09

标签: axapta dynamics-ax-2012-r2

使用包含字段SalesLine.NameSalesLine.ExternalItemId的行填写任何销售订单。

然后运行以下作业,尝试修改与上述两者无关的任何字段:

SalesLine sl = SalesLine::findInventTransId('US01-000025', true);
ttsBegin;
sl.CustomerLineNum = 100; //any other field will serve as well
sl.modifiedField(fieldNum(SalesLine, CustomerLineNum)); //causes the issue
sl.update();
ttsCommit;

作业完成后,NameExternalItemId都将重置。

问题是由this.axInventDim().isFieldSet(fieldNum(InventDim, ConfigId))中的行\Classes\AxSalesLine\isCustExternalItemDescriptionFieldsSet引起的,该行始终返回true

因此,方法AxSalesLine.setNameAxSalesLine.setExternalItemId使用默认值填充相应字段。

有关使用Microsoft以这种方式编码的原因的任何建议,以及解决此问题的最佳方法吗?

P.S。我将问题缩小到R2 CU7中引入的方法\Classes\AxSalesLine\setRetailVariantId

2 个答案:

答案 0 :(得分:2)

这是一个在KB3061573上于4/30/15解决的基本错误。

https://fix.lcs.dynamics.com/Issue/Resolved?kb=3061573&bugId=3612128&qc=83c15cd8881ece605195acc30e039142

我认为完整的方法修复程序与您的方法很接近,但是修补程序也可能会调整其他方法。我希望这个修补程序令人满意,因为知道你并不疯狂。

public class SampleTwo {


public static void main(String[] args) throws Exception {
    final CamelContext camelContext = new DefaultCamelContext();
    camelContext.start();
    camelContext.addRoutes(new RouteBuilder() {

        @Override
        public void configure() throws Exception {          
            from("file://target/inbox?noop=true&fileName=test.csv").to("direct://start"); 
            from("direct://start").to("file://target/outbox");  //ADDED

        }
    });

    Thread.sleep(1000*6000);
}}

答案 1 :(得分:0)

正如我在后记中所提到的,我将问题缩小到方法\Classes\AxSalesLine\setRetailVariantId,这是在R2 CU7中引入的。

作为一种解决方法,我在代码中添加了一行,它解决了问题:

if (this.axInventDim().parmConfigId() != comb.inventDim().configId) // added check
    this.axInventDim().parmConfigId(comb.inventDim().configId);

我会等一段时间来获得更好的答案/修复。如果没有提供,我会接受这个答案。