Вставьте поле dateTime в базу данных Dynamics AX через бизнес-коннектор - PullRequest
1 голос
/ 06 июня 2011

Я пытался заставить свою программу на C # вставлять записи непосредственно в базу данных Dynamics AX 2009 с помощью .NET business connect.

Пока что я могу легко вставить строку, 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 ]

1 голос
/ 06 июня 2011

Это должно работать.

Я создал статический вспомогательный класс и включил его в свой проект:

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 ++.:)
1 голос
/ 06 июня 2011

Можете ли вы попробовать этот код?

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

    axRecord.set_Field("DateField", xppDateTime);

    axRecord.Insert();

}
...