获取表名.net业务连接器[AXAPTA]

时间:2013-01-24 05:56:36

标签: c# axapta dynamics-ax-2009 x++ business-connector

我想知道是否有办法在不调用AX中的X ++代码的情况下使用.NET业务连接器从AOT获取所有表名?

根据MSDN,我们必须提供表名。 [Link]

Axapta ax;
AxaptaRecord axRecord;
using (axRecord = ax.CreateAxaptaRecord(tableName));
{
    // Perform actions
}

Axapta Class只有" GetRecordCount"但没有什么可以得到记录名称。

请帮助

3 个答案:

答案 0 :(得分:0)

您可以从AX then access that制作一个列表!

或者你可以使用Dictionary类:

static void findTables(Args _args)
{
    Dictionary dictionary = new Dictionary();
    TableId tableId;
    TableName tableName;
    for (tableId = dictionary.tableNext(0); tableId; tableId = dictionary.tableNext(tableId))
    {
        tableName = dictionary.tableName(tableId);
        info(strfmt('%1 - %2', tableId, tableName));        
    }
}

这是X ++代码,但转换为C#是微不足道的。

答案 1 :(得分:0)

与上一个答案所述相反,可以使用.Net Business Connector返回表名列表。

此方法使用AxaptaRecord上的ExecuteStmt方法动态执行X ++代码。

从您的客户端代码

Axapta ax = new Axapta();
using (AxaptaRecord r = ax.CreateAxaptaRecord("SQLDICTIONARY")) 
{
    r.ExecuteStmt("SELECT NAME, TABID FROM %1 WHERE %1.NAME LIKE 'CUST*' && %1.FIELDID == 0");

    while (r.Found) 
    {
        Console.WriteLine((string)r.get_Field("NAME"));
    }
}

价:
http://msdn.microsoft.com/en-us/library/aa594213(v=ax.50).aspx http://www.stoneridgesoftware.com/using-like-in-x/
http://msdn.microsoft.com/EN-US/library/aa848113.aspx

答案 2 :(得分:0)

Axapta ax = new Axapta();
ax.LogonAs(name, domain, null,null,null,null,null);
AxaptaObject dictable = ax.CreateAxaptaObject("Dictionary");
int index = (int)dictable.Call("tableNext", 0);

while(index > 0) {
    AxaptaObject table = (AxaptaObject)dictable.Call("tableObject", index);
    string tableName = (string)table.Call("name");
    int next = (int)dictable.Call("tableNext", index);
    if (next <= index) 
        break;
    index = next;
}