2

我正在尝试在 SharePoint 中的 BDC(业务数据目录)定义中使用千位分隔符格式化字段。

在 BDC XML 定义中似乎不可能,只能通过 SharePoint Designer(!)。我目前拥有的字段是 System.Decimal,因此它显示为 12345.98,但我希望它显示为 12,345.98。

你知道它是否可以通过 BDC XML 定义来实现吗?

    <Parameter Direction="Return" Name="@ContactTotals">
      <TypeDescriptor TypeName="System.Data.IDataReader, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" IsCollection="true" Name="Reader">
        <TypeDescriptors>
          <TypeDescriptor TypeName="System.Data.IDataRecord, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="Record">
            <TypeDescriptors>
              <TypeDescriptor TypeName="System.Int32" IdentifierName="dim_claims_key" Name="dim_claims_key" />
              <TypeDescriptor TypeName="System.Decimal" Name="total_outstanding" DefaultDisplayName="Total Outstanding (USD)" />
              <TypeDescriptor TypeName="System.Decimal" Name="total_paid" DefaultDisplayName="Total Paid (USD)" />
              <TypeDescriptor TypeName="System.Decimal" Name="total_incurred" DefaultDisplayName="Total Incurred (USD)" />
            </TypeDescriptors>
          </TypeDescriptor>
        </TypeDescriptors>
      </TypeDescriptor>
    </Parameter>
  </Parameters>

干杯

缺口

4

2 回答 2

4

XML 是一种元语言,不用于格式化或呈现信息,它描述和存储其他词汇表。记住这一点,答案是:不,仅使用 XML 无法实现您所要求的。

推荐的方法是在您正在使用的 BDC 列表视图或 BDC 项目视图 webpart 中使用 XSLT <xsl:decimal-format />元素。如果您通过其他方式使用数据,则可以在渲染期间轻松格式化输出。

假设您有这部分代码显示您的十进制类型:

<xsl:value-of select="$ColName_0" />

您需要使用以下内容封装它(基于链接中的示例):

<xsl:value-of select="format-number($ColName_0, '#.###,00', 'euro')"/>

您可以在“修改共享 Web 部件”菜单中找到 Web 部件的 XSLT,或者如您所说,使用 SharePoint Designer。

于 2009-12-04T16:34:20.043 回答
2

似乎可以定义Complex FormattingatTypeDescriptor元素。由于我没有正确测试此解决方案的环境,因此以下定义似乎是有效的并解决了您的特定情况:

    <Parameter Direction="Return" Name="@ContactTotals">
      <TypeDescriptor TypeName="System.Data.IDataReader, ..."
                      IsCollection="true" Name="Reader">

        <!-- note this -->
        <Properties>
            <Property Name="ComplexFormatting"
                      Type="System.String" />
        </Properties>

        <TypeDescriptors>
          <TypeDescriptor TypeName="System.Data.IDataRecord, ..." Name="Record">
            <TypeDescriptors>
              <TypeDescriptor TypeName="System.Int32"
                              IdentifierName="dim_claims_key"
                              Name="dim_claims_key" />
              <TypeDescriptor TypeName="System.Decimal"
                              Name="total_outstanding"
                              DefaultDisplayName="Total Outstanding (USD)" />

                  <!-- note this -->
                  <Properties>
                      <Property Name="FormatString"
                                Type="System.String">{0:#.###,00}</Property>
                  </Properties>
              </TypeDescriptor>
              ...
            </TypeDescriptors>
          </TypeDescriptor>
        </TypeDescriptors>
      </TypeDescriptor>
    </Parameter>
  </Parameters>

注意 MSDN 文档中的警告,"ComplexFormatting is slow". 也许最好坚持F.Aquino 的回答

于 2009-12-05T23:03:53.983 回答