我一直在努力让我的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
等,但它似乎仍无效。
答案 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”。