我正在使用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>
答案 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查询来修复此问题,如下面的语句所示。
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" >
.....
</fetch>
&#13;