如何更新ValidFrom - ValidTo表字段?

时间:2016-12-27 12:08:47

标签: axapta utc dynamics-ax-2012 x++

我必须使用 ValidTimeStateFieldType UTCDateTime 更新Table上的记录,但我只需要更新字符串字段。 如果我使用此代码:

while select forUpdate MyTable
{
  MyTable.StringField = "Test";
  MyTable_UPD.validTimeStateUpdateMode(ValidTimeStateUpdate::EffectiveBased);

  ttsbegin;
  MyTable.update();
  ttscommit;
}

在命令MyTable.update();之后更改表MyTable.ValidFrom或MyTable.ValidTo上的值。 我只需要更改 StringField 上的值,我不需要更改ValidFrom / To上的值。我想在UTC字段中保留相同的信息,我不想创建新记录。

如果我使用MyTable.validTimeStateUpdateMode(ValidTimeStateUpdate::Correction);,我会收到错误。

在ValueFrom / To字段中可以仅更改值并且不触及任何内容吗?

谢谢,

享受!

2 个答案:

答案 0 :(得分:2)

如果我没有弄错,则无法仅修改您的StringField,因为您在 索引 表格中已定义DateTime字段。

您需要使用validTimeStateUpdateMode功能,在您的代码中使用MyTable然后使用MyTable.update(),但您使用validTimeStateUpdateMode(ValidTimeStateUpdate::EffectiveBased); 中的MyTable_UPD而不是MyTable

试试这个:

ttsbegin;
while select forUpdate MyTable
{
    MyTable.StringField = "Test";
    MyTable.validTimeStateUpdateMode(ValidTimeStateUpdate::Correction);
    MyTable.update();

}
ttscommt;

答案 1 :(得分:0)

尝试在select语句中使用有效的时间范围。

这样的事情:

MyTable.validTimeStateUpdateMode(ValidTimeStateUpdate::Correction);

ttsbegin;
while select forUpdate validTimeState(1\1\1900, 31\12\2154) * from MyTable
{
  MyTable.StringField = "Test";
  MyTable.update();
}
ttscommit;

我使用此MSDN页面中的示例寻求帮助:https://msdn.microsoft.com/en-us/library/gg843767.aspx