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

ActivityMimeAttachment插件预验证触发异常与预操作修改失效求助

Dynamics 365 ActivityMimeAttachment创建前修改Body不生效的解决方法

问题背景

需要在ActivityMimeAttachment记录创建前修改其body字段内容,但遇到以下问题:

  • 插件注册在Create Pre-Operation步骤时,代码无报错但修改不生效
  • 切换到Pre-Validation步骤时修改生效,但该步骤仅在手动创建邮件附件时触发;外部邮件带附件进入系统时,仅触发ActivityMimeAttachment的Pre-Operation和Post-Operation步骤,Pre-Validation不触发

解决方案

方案1:修复Pre-Operation步骤的修改逻辑

你的业务逻辑本身无错误,可通过以下调整确保修改生效:

  1. 确认插件执行模式:必须设置为同步(Synchronous),异步模式下Pre-Operation的修改无法影响主创建操作
  2. 检查插件过滤条件:注册时不要设置针对body字段的过滤(或确保过滤条件包含该字段),避免因字段未被触发而跳过逻辑
  3. 显式处理实体属性:替换原代码中修改body的逻辑,确保属性被正确更新:
    if (target.Contains("body"))
    {
        SharepointService.Initialize(provider);
    
        var uploadedDocument = SharepointService.UploadAttachment(target);
    
        if (!string.IsNullOrEmpty(uploadedDocument.ID))
        {
            string document = Serializer.SerializeObject<UploadedDocument>(uploadedDocument);
            string newBody = Convert.ToBase64String(Encoding.UTF8.GetBytes(document));
            
            // 显式更新属性
            if (target.Attributes.ContainsKey("body"))
            {
                target.Attributes["body"] = newBody;
            }
            else
            {
                target.Attributes.Add("body", newBody);
            }
            provider.Trace(newBody);
        }
    }
    
  4. 验证跟踪日志:通过provider.Trace输出确认序列化后的字符串已正确转为Base64,排除业务逻辑层面的问题

方案2:拦截关联主实体的操作

外部邮件进入系统时,ActivityMimeAttachment通常随Email实体同步创建,可通过拦截Email的Create操作实现修改:

  • 将插件注册到Email实体的Create Pre-Operation步骤
  • 在插件中遍历关联的附件集合,直接修改ActivityMimeAttachment的body字段
  • 示例代码:
    if (target.Contains("attachments"))
    {
        EntityCollection attachments = (EntityCollection)target["attachments"];
        foreach (Entity attachment in attachments.Entities)
        {
            if (attachment.LogicalName.Equals("activitymimeattachment", StringComparison.OrdinalIgnoreCase) && attachment.Contains("body"))
            {
                SharepointService.Initialize(provider);
                var uploadedDocument = SharepointService.UploadAttachment(attachment);
                
                if (!string.IsNullOrEmpty(uploadedDocument.ID))
                {
                    string document = Serializer.SerializeObject<UploadedDocument>(uploadedDocument);
                    attachment["body"] = Convert.ToBase64String(Encoding.UTF8.GetBytes(document));
                    provider.Trace((string)attachment["body"]);
                }
            }
        }
    }
    

额外检查项

  • 确认插件运行的上下文用户拥有修改ActivityMimeAttachment的body字段的权限
  • 查看Dynamics 365插件跟踪日志,确认Pre-Operation步骤已被触发,且修改后的body值已传递到后续流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:13:16