Iterating over any table

2019-08-05 02:10发布

问题:

I just started new job where they use dynamics ax 2009. I am new to this technology.

Is there a way in x++ to iterate over any table? I don't know where the data comes from, it's lenght nor field count.

What I mean by that is I need a function that would behave like this

void convert(Table anyTable) 
{
    int i=0; 
    int k=0;
    ;

    for(i; i < anyTable.Lenght; i++)
    {
        for(k; k < anyTable[i].Count; k++) 
        {
            //some xml processing 
        } 
    }
} 

(By Table i mean some kind of parent of all tables). And that basically is my question - is there a parent of all tables or something of such sort that can help me achieve something like this?

I am sorry for formatting, im typing this from mobile device

回答1:

The Common table is the base class for all tables. It does not contain any data. It is primarily used in X++ code to refer to any table in a polymorphic way. Please check Dictionary classes to solve your issue:

void convert(Common _common)
{
    DictTable       dictTable;
    FieldId         fieldId;
    anytype         value;
    ;

    dictTable = new dictTable(_common.TableId);

    if (dictTable)
    {
        while select _common
        {
            fieldId = dictTable.fieldNext(0);

            while (fieldId)
            {
                value = _common.(fieldId);

                //do processing

                fieldId = dictTable.fieldNext(fieldId);
            }
        }
    }
}


回答2:

See this answer. It involves use of class Dictionary and DictTable for reflection.



回答3:

Check out xml() method on Common class, it may help generate your XML representing the current record.