有时在Dynamics NAV开发期间,使用SQL Server快速查看数据会很有帮助。但是由于类型选项的任何字段都是枚举,因此在SQL Server中获得的只是数值。我需要一种快速而肮脏的方法来获取选项文本值。
答案 0 :(得分:0)
为了使操作更轻松一些,我创建了一个启用宏的Excel文件,该文件将Dynamics NAV字段选项字符串解析为Sql Server T-Sql Case语句。它提供了水平或垂直的case语句,并将字段名称用作Sql Server中的列别名。享受...
这里是指向Excel文件的链接 Excel File
答案 1 :(得分:0)
在NAV中,您可以读取FieldReference的OPTIONSTRING属性。这是一个逗号分隔的字符串。可以计划一个作业,该作业将按编号循环遍历所有表(在表上过滤的对象虚拟表),找到选项字符串并将其添加到表中。然后在查询中,可以找到“表”,“字段编号”和“字段值”的选项文本值。
RecRef.OPEN(TableNo);
FOR i := 1 TO RecRef.FIELDCOUNT DO BEGIN
FieldRef := RecRef.FIELDINDEX(i);
IF FORMAT(FieldRef.TYPE) = 'Option' THEN BEGIN
optionstring := FieldRef.OPTIONSTRING;
c := NumberofOptions(optionstring);
FOR o := 1 TO c DO BEGIN
OptionsTable.INIT;
OptionsTable."Table No" := TableNo;
OptionsTable."Field No" := FieldRef.NUMBER;
OptionsTable."Option Value" := o-1;
OptionsTable."Option Text" := SELECTSTR(o, optionstring);
OptionsTable."Field Name" := FieldRef.NAME;
IF NOT OptionsTable.INSERT THEN OptionsTable.DELETE;
END;
END;
END;
答案 2 :(得分:0)
我经常遇到这个问题。我创建了一个包含选项值(int)和名称(字符串)的表。主键是代码,值。因此,您也可以使用它来解析其他系统的幻数。然后,您可以轻松加入此表:
select Type, i.[Option] [Option Name]
from Object o
join [xxx$IntegerToOption] i on i.Code = 'OBJEKT TYP' and i.Integer = o.Type
order by o.Name
输出:
Type Option Name
5 Codeunit
2 Form
1 Table
2 Form
2 Form
1 Table
2 Form
5 Codeunit
3 Report