1

我一直在尝试让我的 C# 程序使用 .NET 业务连接器将记录直接插入到Dynamics AX 2009 数据库中。

到目前为止,我可以轻松地插入一个字符串、int、int64、枚举(NoYes),但每次我尝试插入一个 dateTime 字段(在 AX 中该字段被定义为 UtcDateTime)时它都会失败,并出现错误:

提供的方法参数无效。

我敢肯定,这很简单,我只是想念。

代码片段:

    using (axRecord = ax.CreateAxaptaRecord("TempTable"))
        {
            // Fails on this line with error: The supplied method arguments are not valid.
            axRecord.set_Field("DateField", DateTime.Now);

            axRecord.Insert();

        }

我尝试过作为字符串传递并使用 adateTime.parseExact等,但它似乎仍然不起作用。

4

2 回答 2

1

你可以试试这个代码吗?

using (axRecord = ax.CreateAxaptaRecord("TempTable"))
{
    var xppDateTime = ax.CallStaticClassMethod("Global", "CLRSystemDateTime2UtcDateTime", DateTime.Now);

    axRecord.set_Field("DateField", xppDateTime);

    axRecord.Insert();

}
于 2011-06-06T16:40:28.927 回答
1

它应该工作。

我制作了一个静态助手类并将其包含在我的项目中:

public static class MyHelperExtensions 
{    
        public static DateTime ParseDateAsString(this string value)
        {
            var culture = new CultureInfo("nb-NO");
            var formats = new[] {"ddMMyyyy", "dd.MM.yyyy"};
            DateTime date;
            return DateTime.TryParseExact(value, formats, culture, DateTimeStyles.None, out date) ? date : DateTime.MinValue;
        }
}

然后我可以传入这样的值:

record.set_Field("StartDate", subscription.StartDate.ParseDateAsString());

现在,这个解决方案在整个系统中假设挪威文化。值“记录”是 AxaptaRecord 类型。

StartDate 是一个(最终)扩展 TransDate 的字段。

我不明白为什么这不适合你。这里有一些其他的提示:

  • 在事件查看器中查找错误

  • 在字符串中包含的变量中查找拼写错误(例如我的示例中的“StartDate”)。

  • 开始在 Visual Studio 和 x++ 代码中添加断点。:)
于 2011-06-06T17:30:32.177 回答