我想从dynamicsAx中提取SQL语句。
我遵循了这个教程: http://msdn.microsoft.com/en-us/library/gg844225.aspx
然后我将我的getEmployee方法更新为以下内容:
[SysEntryPointAttribute(true)]
public AA_PS_TableExchange getEmployee(int id)
{
AA_PS_TableExchange xchange;
Common buffer;
;
buffer = SysDictTable::newTableId(id).makeRecord();
select generateOnly buffer;
xchange = new AA_PS_TableExchange();
xchange.sql(buffer.getSQLStatement());
return xchange;
}
我的AA_PS_TableExchange看起来像这样:
[DataContractAttribute]
public class AA_PS_TableExchange
{
int tableId;
str sql;
}
[DataMemberAttribute]
public str sql(str _sql = sql)
{
sql = _sql;
return sql;
}
[DataMemberAttribute]
public int tableId(int _tableId = tableId)
{
tableId = _tableId;
return tableId;
}
现在,如果我从我的c#代码调用webservice,它将始终将sql设置为“1”而不是真正的sql语句。如果我改变这一行:
xchange.sql(buffer.getSQLStatement());
到
xchange.sql("an assignment");
它有效,我将在我的.Net代码中获得“分配”。
我在这里缺少什么想法? 我认为它可能与引用有关但我在这里没有任何线索。
感谢您的帮助!
答案 0 :(得分:1)
看起来这个问题只能出现在几个地方:
xchange.sql(...)
只接受基本的 AX 字符串类型吗?
您是否已执行增量CIL构建?
id
是否有有效的表格ID?
尝试将代码更改为此并执行增量CIL构建。
[SysEntryPointAttribute(true)]
public AA_PS_TableExchange getEmployee(int id)
{
AA_PS_TableExchange xchange;
Common buffer;
DictTable dictTable = new DictTable(id)
;
if (!dictTable)
throw error("Table not found");
buffer = dictTable.makeRecord();
select generateOnly buffer;
xchange = new AA_PS_TableExchange();
xchange.sql(buffer.getSQLStatement());
return xchange;
}