Dynamics AX以编程方式引用View中的查询字段

时间:2015-12-29 03:49:41

标签: axapta dynamics-ax-2012 x++ sql-view

要创建一个生成计算列的视图方法,可以使用以下代码:

private static server str createMySqlScript()
{
    str cellName = SysComputedColumn::returnField(tableStr(MyViewName), identifierStr(MyDataSourceName), fieldStr(TableName, ColumnName));
    return strFmt('LEFT(%1, 5)', cellName);
}

适用于常规视图,使用常规数据源。

但是,当您使用带有查询源的视图而不是传统数据源时,整个事情就会崩溃。

On the first line: "Stack trace: The method has been called with an invalid number of parameters."

任何人都知道如何在视图中调用查询字段的名称而不是数据源字段?

2 个答案:

答案 0 :(得分:0)

returnField的代码为:

public static client server str returnField(TableName _viewName, str _dataSourceName, FieldName _fieldName)
{
    DictView dictView = new DictView(tableName2id(_viewName));
    return dictView.computedColumnString(_dataSourceName ,_fieldName, FieldNameGenerationMode::FieldList);
}

该方法的第二个参数必须引用有效的数据源名称:

  

视图上数据源的名称,该名称包含将该值用作返回值的字段。

对于联合查询,它必须是查询中的第一个数据源。默认情况下,会追加查询数据源名称并附加_1后缀,必须在第二个参数中提供包含后缀的数据源的全名。 查看视图以获取正确的名称;视图字段将在Datasource属性中具有该名称。

请注意,内部函数identifierStr无法验证输入参数,而不是tableStr等其他函数。

答案 1 :(得分:0)

对于基于联合查询的视图,将整数参数传递给计算列方法:

private static server str createMySqlScript(int iDatasource) {
str cellName = SysComputedColumn::returnField(tableStr(MyViewName), identifierStr(MyDataSourceName), fieldStr(TableName, ColumnName));
return strFmt('LEFT(%1, 5)', cellName);
}

如果你没有定义这个参数,会发生奇怪的事情...... 见https://msdn.microsoft.com/en-us/library/gg846293.aspx