当我将RecId存储在anytype对象中时,该数字已损坏。在我的实现中,我将RecId存储在树视图项的数据值字段中。每当我检索数据值时,我保存的数字总是会大大改变。有什么建议吗?
以下是一个例子:
void fillTree()
{
ABC_Menus _ABC_Menus;
TreeItemIdx parentItemIdx;
;
while select Prompt, RecId from _ABC_Menus
{
parentItemIdx = SysFormTreeControl::addTreeItem(formTreeControl, _ABC_Menus.Prompt, FormTreeAdd::Root, _ABC_Menus.RecId, 0, true);
}
}
public void endLabelEdit(int _idx, str _text, anytype _data)
{
FormTreeItem formTreeItem = this.getItem(_idx);
;
formTreeItem.text(_text);
this.setItem(formTreeItem);
info(_data); //this number comes out all wrong
super(_idx, _text, _data);
}
我将RecId存储在树值字段中。但是,如果我稍后检索它,会返回一个完全不同的数字
- 表中的RecId:5637144588
- 由endLabelEdit方法显示的RecId:202520592908288
在字段中存储RecId时,我也尝试使用num2str(ABC_Table.RecId,0,0,0)。以这种方式存储时,数字匹配,但抛出“分配/比较失去精度”警告。没关系,还是有更好的方法?
由于
答案 0 :(得分:3)
在Axapta的第3版之后,所有RecIds都是64位整数。 strFmt()函数能够将recId从int64强制转换为字符串,但您也可以使用int642str()函数将recId显式地转换为字符串。
RecId recId = 5637144577;
anytype a;
int64 b;
;
a = recId;
b = a;
info(int642str(a));
info(int642str(b));
info(int642str(recId));
答案 1 :(得分:2)
请提供完整的示例:
RefRecId recid = 5637144577;
anytype tmp;
;
info(strfmt('%1', recid));
tmp = recid;
info(strfmt('%1', tmp));
recid = tmp;
info(strfmt('%1', recid));
结果是:
5637144577
5637144577
5637144577