1

我想知道是否有一种方法可以通过使用 .NET 业务连接器从 AOT 获取所有表名,而无需在 AX 中调用 X++ 代码?

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

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

Axapta 类只有“GetRecordCount”,但没有获取记录名称。

请帮助

4

3 回答 3

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

于 2014-03-20T08:53:38.063 回答
0

您可以从 AX 列出一个列表,然后访问它

或者你可以使用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# 是微不足道的。

于 2013-01-24T08:40:36.037 回答
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;
}
于 2015-03-26T04:16:20.217 回答