Dynamics CRM - 从C#中的笔记下载文件会导致使用FetchXML损坏文件

时间:2018-04-01 16:45:52

标签: dynamics-crm

我正在使用Dynamics CRM,并且我正在尝试从notes(注释)实体下载文件。我得到Base64字符串并转换为Byte [],如下所示:

 Convert.FromBase64String((string)item.Attributes["documentbody"]);

但是当我这样做并尝试打开文件时它已损坏。 Word文档和PDF拒绝打开。然而,图像部分打开。 IE浏览器。我得到大约3/4的图像,但图像的其余部分是纯灰色。

我猜FetchXML没有返回完整的字符串。有没有办法在FetchXML中执行此操作,超出限制?我有谷歌搜索,但看不到提到FetchXML限制?

这里有一个类似的问题:FetchXml Query Returns Trimmed DocumentBody?

但我在查询中并没有使用“distinct”。

这是我到目前为止所做的:

<fetch>
  <entity name="annotation" >
    <attribute name="documentbody" />
    <filter type="and" >
      <condition attribute="objectid" operator="eq" value="{D4FFE0CD-CDFA-E711-80E4-005056BA77B6}" />
      <condition attribute="isdocument" operator="eq" value="1" />  
    </filter>
    <order attribute="modifiedon" descending="true" />
  </entity>
</fetch>

2 个答案:

答案 0 :(得分:1)

你不会说你是如何保存或打开文件的,我怀疑这可能是个问题。

Re:&#34;我猜FetchXML没有返回完整的字符串&#34; - 我不认为这是正确的,我没有看到这种情况发生。

这是将文件保存到磁盘的工作示例。

Exporting Annotation (Note) Attachment

public void ExportDocuments(IOrganizationService service, String filePath)
{
     String fetch = @"<fetch mapping='logical' count='100' version='1.0'>
          <entity name='annotation'>
               <attribute name='filename' />
               <attribute name='documentbody' />
               <attribute name='mimetype' />
          </entity>
     </fetch>";

     foreach (Entity e in service.RetrieveMultiple(new FetchExpression(fetch)))
     {
          if (!String.IsNullOrWhiteSpace(e.Attributes["documentbody"].ToString()))
          {
               byte[] data = Convert.FromBase64String(e.Attributes["documentbody"].ToString());

               File.WriteAllBytes(filePath + e.Attributes["filename"].ToString(), data);
          }
     }
}

答案 1 :(得分:0)

我相信你的fetchXML查询存在问题。我也面临同样的问题,但SSRS报告中的图像。图像未正确加载/损坏。 我通过使用 distinct = false 更新获取XML查询来修复此问题,如下面的语句所示。

&#13;
&#13;
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" >
.....
</fetch>
&#13;
&#13;
&#13;