1

.NET ビジネス コネクタを使用して、C# プログラムで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、 などを使用してみましたが、まだ機能していないようです。

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());

現在、このソリューションは、システム全体でノルウェーの文化を想定しています。値「record」は AxaptaRecord 型です。

StartDate は、(最終的に) TransDate を拡張するフィールドです。

これがうまくいかない理由がわかりません。その他のヒントを次に示します。

  • イベント ビューアでエラーを探す

  • 文字列に含まれる変数のスペルミスを探します(私の例では「StartDate」など)。

  • Visual Studio と x++ コードの両方でブレークポイントの追加を開始します。:)
于 2011-06-06T17:30:32.177 に答える