通过业务连接器将dateTime字段插入Dynamics AX数据库

时间:2011-06-06 14:25:12

标签: c# dynamics-ax-2009 business-connector

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

到目前为止,我可以很容易地插入一个字符串,int,int64,enum(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();

        }

我尝试过以字符串形式传递并使用dateTime.parseExact等,但它似乎仍无效。

2 个答案:

答案 0 :(得分:1)

你能试试这段代码吗?

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

    axRecord.set_Field("DateField", xppDateTime);

    axRecord.Insert();

}

答案 1 :(得分: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());

现在,这个解决方案在整个系统中都采用了挪威文化。 值“record”的类型为AxaptaRecord。

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

我不明白为什么这不适合你。 以下是其他一些提示:

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

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

  • 开始在两者中添加断点 Visual Studio和您的x ++代码。 :)