1

anytype オブジェクトに RecId を格納すると、番号が壊れます。私の実装では、ツリービュー アイテムのデータ値フィールドに 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) を使用してみました。そのように格納すると、数値は一致しますが、「代入/比較で精度が失われます」という警告がスローされます。それは大丈夫ですか、それとももっと良い方法がありますか?

ありがとう

4

2 に答える 2

3

Axapta のバージョン 3 以降、すべての RecId は 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));
于 2009-12-08T19:36:47.103 に答える
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

于 2009-12-08T07:33:38.180 に答える