转换表达式以与 FetchXML 报告兼容
Converting expression to be compatible with FetchXML report
我已将 SSRS 报告从 SQL 转换为本地 CRM 2011 使用的 FETCHXML。
现在报表使用CRM 2013作为数据源。
在这份报告的旧版本中,我们有这样的表达:
=String.Format(New System.Globalization.CultureInfo(1033), chrw(123)&"0"&chrw(125)&" "&chrw(40)&"Count"&chrw(58)&" "&chrw(123)&"1"&chrw(125)&chrw(41), IIf(IsNothing(Fields!stepname.Value), "Not specified", Fields!stepname.Value), CInt(Count("")).ToString(First(Fields!NumberFormat_0_Precision.Value, "DSNumberAndCurrencyInfo"), Code.GetCultureInfo()))
我需要更新此表达式以与在线实例兼容,但我不明白它应该做什么。
有人告诉我文化信息是静态的,不会改变,所以可以硬编码。
首先,Cint(Count("")) 是做什么的? 我不明白这个表达式的作用。
我可以提供解释
IIF(IsNothing(Fields!stepname.Value), "Not specified", Fields!stepname.Value), CInt(Count("")).ToString(First(Fields!NumberFormat_0_Precision.Value, "DSNumberAndCurrencyInfo"), Code.GetCultureInfo()))
不是为什么要按现在的方式完成,而是关于可能的输出
1) CInt(Count("") -
如果它在组总行中,这将给出当前组的行数,如果没有组存在,则它将始终给出 1 作为当前行数
2) ToString(First(Fields!NumberFormat_0_Precision.Value, "DSNumberAndCurrencyInfo"), Code.GetCultureInfo()) -
这里有两个参数
a) First(Fields!NumberFormat_0_Precision.Value)
它将是数字应该格式化的格式
b) 第二个来自
this系统class。但那是来自您的报告的自定义代码。您应该检查报告的自定义代码。
3) IIF(IsNothing(Fields!stepname.Value), "Not specified", Fields!stepname.Value)
此处表达式检查 stepname
列是否具有值,如果为空则为空则 return Not specified
否则为值。
所以我不确定为什么要这样做。如果您查看 Count,您可以进行更改,然后您会注意到您可以通过范围,这样就不会混淆下一个开发人员的地狱。然后,如果您的自定义函数 GetCultureInfo()
只是 returning CultureInfo
而没有任何条件或更改,那么您可以直接在表达式中传递它,如下所示。
.ToString(First(Fields!NumberFormat_0_Precision.Value, "DSNumberAndCurrencyInfo"), new System.Globalization.CultureInfo("en-US"))
您可以在 CultureInfo 上获得更多信息。
下一部分是表达式的开头
New System.Globalization.CultureInfo(1033)
在 .NET Framework 3.5 中,您可以使用反射强制对属性和方法的特定调用使用英语(美国)数据格式(区域设置 ID 1033)。所以它只是为了使用数据格式。
chrw(123)&"0"&chrw(125)&" "&chrw(40)&"Count"&chrw(58)&" "&chrw(123)&"1"&chrw(125)&chrw(41)
而这都是用来显示不同字符的,更多的是在这上面使用字符码here.
所以所有这些大表达式基本上都用于以数据库中指定的特定格式格式化字符串值,并使用某些条件。
我已将 SSRS 报告从 SQL 转换为本地 CRM 2011 使用的 FETCHXML。
现在报表使用CRM 2013作为数据源。
在这份报告的旧版本中,我们有这样的表达:
=String.Format(New System.Globalization.CultureInfo(1033), chrw(123)&"0"&chrw(125)&" "&chrw(40)&"Count"&chrw(58)&" "&chrw(123)&"1"&chrw(125)&chrw(41), IIf(IsNothing(Fields!stepname.Value), "Not specified", Fields!stepname.Value), CInt(Count("")).ToString(First(Fields!NumberFormat_0_Precision.Value, "DSNumberAndCurrencyInfo"), Code.GetCultureInfo()))
我需要更新此表达式以与在线实例兼容,但我不明白它应该做什么。
有人告诉我文化信息是静态的,不会改变,所以可以硬编码。
首先,Cint(Count("")) 是做什么的? 我不明白这个表达式的作用。
我可以提供解释
IIF(IsNothing(Fields!stepname.Value), "Not specified", Fields!stepname.Value), CInt(Count("")).ToString(First(Fields!NumberFormat_0_Precision.Value, "DSNumberAndCurrencyInfo"), Code.GetCultureInfo()))
不是为什么要按现在的方式完成,而是关于可能的输出
1) CInt(Count("") -
如果它在组总行中,这将给出当前组的行数,如果没有组存在,则它将始终给出 1 作为当前行数
2) ToString(First(Fields!NumberFormat_0_Precision.Value, "DSNumberAndCurrencyInfo"), Code.GetCultureInfo()) -
这里有两个参数
a) First(Fields!NumberFormat_0_Precision.Value)
它将是数字应该格式化的格式
b) 第二个来自 this系统class。但那是来自您的报告的自定义代码。您应该检查报告的自定义代码。
3) IIF(IsNothing(Fields!stepname.Value), "Not specified", Fields!stepname.Value)
此处表达式检查 stepname
列是否具有值,如果为空则为空则 return Not specified
否则为值。
所以我不确定为什么要这样做。如果您查看 Count,您可以进行更改,然后您会注意到您可以通过范围,这样就不会混淆下一个开发人员的地狱。然后,如果您的自定义函数 GetCultureInfo()
只是 returning CultureInfo
而没有任何条件或更改,那么您可以直接在表达式中传递它,如下所示。
.ToString(First(Fields!NumberFormat_0_Precision.Value, "DSNumberAndCurrencyInfo"), new System.Globalization.CultureInfo("en-US"))
您可以在 CultureInfo 上获得更多信息。
下一部分是表达式的开头
New System.Globalization.CultureInfo(1033)
在 .NET Framework 3.5 中,您可以使用反射强制对属性和方法的特定调用使用英语(美国)数据格式(区域设置 ID 1033)。所以它只是为了使用数据格式。
chrw(123)&"0"&chrw(125)&" "&chrw(40)&"Count"&chrw(58)&" "&chrw(123)&"1"&chrw(125)&chrw(41)
而这都是用来显示不同字符的,更多的是在这上面使用字符码here.
所以所有这些大表达式基本上都用于以数据库中指定的特定格式格式化字符串值,并使用某些条件。