You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于现有C#代码向Dynamics 365批量上传文件至注释与附件?

批量向Dynamics 365注释上传多个文件的实现方案

要实现批量上传,核心是复用单文件上传的逻辑,同时借助Dynamics 365的ExecuteMultipleRequest批量提交请求——这种方式能减少API调用次数,比循环调用单次Create更高效,尤其适合多文件场景。

完整实现代码

// 1. 准备待上传的文件集合(实际场景可从本地、数据库等读取)
var filesToUpload = new List<(string FileName, string Base64Content)>
{
    ("工单日志.txt", Convert.ToBase64String(File.ReadAllBytes(@"C:\uploads\log.txt"))),
    ("故障报告.pdf", Convert.ToBase64String(File.ReadAllBytes(@"C:\uploads\report.pdf"))),
    ("现场截图.png", Convert.ToBase64String(File.ReadAllBytes(@"C:\uploads\screenshot.png")))
};

// 2. 配置关联的实体信息(这里关联Incident工单)
string entityTypeAttachment = "incident";
Guid incidentGuid = new Guid("替换为目标工单的GUID"); // 改成实际要关联的记录ID

// 3. 创建批量请求对象
var executeMultipleRequest = new ExecuteMultipleRequest
{
    Settings = new ExecuteMultipleSettings
    {
        ContinueOnError = true, // 单个文件上传失败不中断整个批量任务
        ReturnResponses = true // 返回每个请求的执行结果,方便排查问题
    },
    Requests = new OrganizationRequestCollection()
};

// 4. 遍历文件,生成对应的Annotation(注释)创建请求
foreach (var file in filesToUpload)
{
    Entity noteAttachment = new Entity("annotation");
    noteAttachment["objectid"] = new EntityReference(entityTypeAttachment, incidentGuid);
    noteAttachment["filename"] = file.FileName;
    noteAttachment["isdocument"] = true;
    noteAttachment["documentbody"] = file.Base64Content;
    // 可选:给注释添加描述文本,方便后续识别
    noteAttachment["notetext"] = $"批量上传附件:{file.FileName}";

    // 将单个创建请求加入批量集合
    executeMultipleRequest.Requests.Add(new CreateRequest { Target = noteAttachment });
}

// 5. 执行批量请求
var response = (ExecuteMultipleResponse)svc.Execute(executeMultipleRequest);

// 可选:遍历响应结果,打印上传状态
foreach (var responseItem in response.Responses)
{
    if (responseItem.Fault != null)
    {
        Console.WriteLine($"文件【{filesToUpload[responseItem.RequestIndex].FileName}】上传失败:{responseItem.Fault.Message}");
    }
    else
    {
        Console.WriteLine($"文件【{filesToUpload[responseItem.RequestIndex].FileName}】上传成功,注释ID:{((CreateResponse)responseItem.Response).id}");
    }
}

关键细节说明

  • 文件格式要求:Dynamics 365要求文件内容必须是Base64编码字符串,所以本地文件需要先用Convert.ToBase64String转换。
  • 批量请求优势:ExecuteMultipleRequest会把多个请求打包成单次API调用,避免频繁请求导致的性能损耗,同时支持错误隔离。
  • 参数灵活配置:如果希望某个文件失败就终止全部任务,可把ContinueOnError设为false;不需要返回结果的话,ReturnResponses设为false能减少数据传输量。

内容的提问来源于stack exchange,提问作者Rangarajakrishnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:53:24