Streamaccessors >> Can SharePoint 2010 BCS возвращает несколько вложений?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/49233

Вопрос

Can CharePoint 2010 BCS возвращает несколько вложений?У меня есть база данных, которая хранит несколько вложений на объект.Хотелось бы, чтобы все они были доступны, но у меня недостаточно опыта с BCS / BDC, чтобы сказать, возможно ли это возможно.

Это было полезно?

Решение

Да, вы можете иметь номер вложений с помощью метода StreamaCcessor.Смотрите код ниже, который имеет два метода.Один для подъема основного документа и других для подбора дополнительного документа.В коде позади вы можете использовать ту же функцию для возврата объекта потока.Дайте мне знать, если вам нужна дополнительная помощь, поскольку я уже много раз реализовал.

        <!-- start document StreamAccessor method -->
        <Method Name="ReadDocumentLink" IsStatic="false" LobName="ReadDocumentLink" IsCached="true">
          <Parameters>
            <Parameter Direction="In" Name="@Id">
              <TypeDescriptor TypeName="System.Int32" IdentifierName="ID" Name="ID" />
            </Parameter>
            <Parameter Name="StreamData" Direction="Return">
              <TypeDescriptor Name="StreamData" TypeName="System.IO.Stream" />
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="StreamAccessor" ReturnParameterName="StreamData" ReturnTypeDescriptorPath="StreamData" Default="true" Name="MainDataStream" DefaultDisplayName="Document">
              <Properties>
                <Property Name="MimeTypeField" Type="System.String">DocumentMimeType</Property>
                <Property Name="FileNameField" Type="System.String">DocumentFileName</Property>
                <Property Name="Extension" Type="System.String">DocumentExtension</Property>
              </Properties>
            </MethodInstance>
          </MethodInstances>
        </Method>
        <!-- end document StreamAccessor method -->


        <!-- start document StreamAccessor method -->
        <Method Name="ReadAdditionalDocumentLink" IsStatic="false" LobName="ReadAdditionalDocumentLink" IsCached="true">
          <Parameters>
            <Parameter Direction="In" Name="@Id">
              <TypeDescriptor TypeName="System.Int32" IdentifierName="ID" Name="ID" />
            </Parameter>
            <Parameter Name="StreamData" Direction="Return">
              <TypeDescriptor Name="StreamData" TypeName="System.IO.Stream" />
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="StreamAccessor" ReturnParameterName="StreamData" ReturnTypeDescriptorPath="StreamData" Name="AdditionalDataStream" DefaultDisplayName="Additional Document">
              <Properties>
                <Property Name="MimeTypeField" Type="System.String">AdditionalDocumentMimeType</Property>
                <Property Name="FileNameField" Type="System.String">AdditionalDocumentFileName</Property>
                <Property Name="Extension" Type="System.String">AdditionalDocumentExtension</Property>
              </Properties>
            </MethodInstance>
          </MethodInstances>
        </Method>
        <!-- end document StreamAccessor method -->
.

Другие советы

Если «несколькими вложениями на объект» вы имеете в виду, что у вас есть несколько бинарных столбцов в таблице SQL, то я предлагаю вам попробовать создавать методы Streamaccessor в вашей модели BCS для каждого столбца, подробности см. Рекомендацию:

XML-фрагмент: моделирование метода StreamaCcessor/ a>

Вы можете отображать ссылки на бинарный контент в веб-части Business Data с пользовательским XSLT, как это:

<a>
  <xsl:variable name="downloadUrl" select="concat($DownloadExternalDataUrl, ddwrt:UrlEncode('BCSStreamAccessorMethodInstanceName'), '&amp;IsXmlEncodedStreamName=true&amp;ItemId=', @*[name()=$ColumnKey])" />
  <xsl:attribute name="href">
    <xsl:value-of select="$downloadUrl" />
  </xsl:attribute>
  <xsl:attribute name="onclick">javascript:DownloadExternalData('BCSStreamAccessorMethodInstanceName', '<xsl:value-of select="@*[name()=$ColumnKey]" />', '<xsl:value-of select="concat($downloadUrl, '&amp;InvisibleFrame=true')" />'); return false;</xsl:attribute>
  <xsl:value-of select="@tpar_binary_fname" />
</a>
<span style="display:none">
  <iframe>
    <xsl:attribute name="name">
      <xsl:value-of select="concat('BCSStreamAccessorMethodInstanceName', @*[name()=$ColumnKey], 'DownloadFrame')" />
    </xsl:attribute>
  </iframe>
</span>
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top