在Dynamics 365 CE中从流创建附件

发布:2024-09-06 23:12 阅读:33 点赞:1

在某些情况下,我们可能会接收到包含多个部分内容的HTTP响应,其中一个部分是一个流,我们需要从中提取数据,并将其作为PDF文件附加到Dynamics 365 Customer Engagement(CE)中的备注中。以下是如何实现这一过程的示例代码。

一、检查HTTP响应

首先,我们需要检查HTTP响应是否有效,并且状态码表示成功。

if (httReqresponse != null && httReqresponse.IsSuccessStatusCode)
{
    // 检查响应是否为空,并且状态码是否表示成功
    var multipartContent = await httReqresponse.Content.ReadAsMultipartAsync();
    if (multipartContent != null && multipartContent.Contents.Count > 1)
    {
        // 如果多部分内容存在并且至少有两个部分
        HttpContent secondPart = multipartContent.Contents[1];
        var streamContent = await secondPart.ReadAsStreamAsync();
        byte[] bytesArrary;
        using (MemoryStream ms = new MemoryStream())
        {
            // 将流复制到内存流中
            streamContent.CopyTo(ms);
            bytesArrary = ms.ToArray();
        }

        // 创建一个新的备注实体
        Entity notes = new Entity("annotation");
        // 设置父实体的引用
        notes["objectid"] = new EntityReference("<<Parenentitylookupname>>", <<guid>>);
        // 设置父实体类型代码
        notes["objecttypecode"] = "<<Name of parent entity>>";
        // 设置备注的主题
        notes["subject"] = "Notes Subject";
        // 将字节数组转换为Base64字符串并设置为文档主体
        notes["documentbody"] = Convert.ToBase64String(bytesArrary);
        // 设置MIME类型
        notes["mimetype"] = @"application/pdf";
        // 设置文件名
        notes["filename"] = "FileName.pdf";
        // 创建备注实体
        service.Create(notes);
    }
}

二、解析多部分内容

一旦我们确认了HTTP响应是有效的,并且包含了多部分的内容,我们可以开始解析这部分内容。在这个例子中,我们关注的是第二个部分,因为它很可能包含了我们要提取的流。

三、创建备注实体

接下来,我们创建一个备注实体,并设置相关的属性。这包括设置备注所属的父实体、备注的主题、文档体(这里是Base64编码的PDF内容)、MIME类型以及文件名。

四、保存到Dynamics 365 CE

最后,我们使用service.Create(notes)方法将备注实体保存到Dynamics 365 CE系统中。这样,我们就成功地从HTTP响应中的流创建了一个附件,并将其附加到了指定的实体上。

五、注意事项

  • 请确保替换代码中的<<Parenentitylookupname>><<guid>><<Name of parent entity>>为实际的父实体逻辑名称、GUID以及父实体名称。
  • 在实际应用中,可能需要添加错误处理代码来应对可能出现的各种异常情况。