Вставьте поле dateTime в базу данных Dynamics AX через бизнес-коннектор

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

До сих пор я могу легко вставить строку, 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 и т. д., но это все еще не работает.


person Zordey    schedule 06.06.2011    source источник


Ответы (2)


Он должен работать.

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

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++. :)
person Skaue    schedule 06.06.2011
comment
Спасибо за это, хотя изначально это не сработало. В конце концов я воссоздал таблицу и получил решение для работы. Я предполагаю, что я создал таблицу неправильно в первую очередь. Хотя оба ответа здесь сработали, я отметил этот как ответ, поскольку он, похоже, решает другую проблему, с которой я столкнулся с несколькими форматами даты и времени. - person Zordey; 07.06.2011
comment
Рад, что смог помочь. :) Также может быть что-то не так с типом данных этого столбца в предыдущей версии этой таблицы, но теперь это вода под мостом. - person Skaue; 08.06.2011

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

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

    axRecord.set_Field("DateField", xppDateTime);

    axRecord.Insert();

}
person 10p    schedule 06.06.2011
comment
Спасибо, проголосовал, так как это решение работает, но в конце концов решил использовать другое решение. - person Zordey; 07.06.2011