Logic App Sharepoint创建文件未按预期工作

时间:2018-03-19 23:10:33

标签: dynamics-crm sharepoint-online azure-logic-apps

我创建了一组逻辑应用程序,以便在D365 CE(CRM)和SharePoint之间进行非常专业的集成。我在CRM中使用Notes实体,允许用户使用本机CRM UI上传docx文件。 Logic应用程序找到该文件(使用“CRM列表项”操作)并将该文件作为base64编码的字符串返回。我能够查看Logic App执行日志以查看base64字符串,并且我能够成功解码它并在Word中打开它,所以我知道很多工作正常。

问题是当我尝试使用LA创建文件或更新文件操作创建或更新SharePoint文档时。导致SharePoint的文件具有正确的名称,但是当我尝试使用Word(任何版本)打开文件时出现错误。在上传到CRM并从SharePoint下载之前,我检查了docx文件,文件之间的字节存在一些差异 - 我的猜测是某些地方没有处理Unicode转换。在这张图片中,你看到docx的PK签名(感谢Phil Katz)出现在前两个字节中,并且出现了几个其他字符串,但是(我认为是高阶字符)没有正确转换(原始文件在顶部) ,从底部的SP下载后): enter image description here

更多技术细节...... 我尝试在逻辑应用程序中使用base64toBinary()将文件上传到SharePoint: create file in designer 由于UI隐藏了实际的表达式,因此该操作的代码如下所示(参见第5行): code for SP Create File action

问题是base64toBinary()没有返回文件的忠实表示,或者Create File不满意将docx文件作为参数获取二进制文件。我已经尝试将原始的base64字符串直接传递给SP,但它只是将它存储为base64并要求我在打开它之前下载/转换它,是的,我尝试过使用base64toString()。我还用纯文本文件测试了这个过程,这很好用。

我正在使用D365 v8.2.2和O365 SharePoint。

1 个答案:

答案 0 :(得分:1)

当然,在向世界发布问题然后睡个好觉之后,我找到了答案。问题在于Designer生成的JSON表示法。在上面的代码中,您可以看到我使用base64toBody()函数的位置。我意识到它在整个函数周围都有花括号,它将二进制文件转换为一个对象。通过删除大括号,文件现在正确地作为二进制文件传递给SP:

  

" body":" @ base64toBinary(item(' For_each_file_attached')?[' documentbody'])",

因此,如果您希望这个工作,我必须使用编辑器中的代码视图来使其正确。我有兴趣知道是否有办法从base64转换到二进制之间从CRM中检索它和使用Create File操作之前,以便它可以是更多的OOTB Designer。