ActivityMimeAttachment插件预验证触发异常与预操作修改失效求助
Dynamics 365 ActivityMimeAttachment创建前修改Body不生效的解决方法
问题背景
需要在ActivityMimeAttachment记录创建前修改其body字段内容,但遇到以下问题:
- 插件注册在Create Pre-Operation步骤时,代码无报错但修改不生效
- 切换到Pre-Validation步骤时修改生效,但该步骤仅在手动创建邮件附件时触发;外部邮件带附件进入系统时,仅触发
ActivityMimeAttachment的Pre-Operation和Post-Operation步骤,Pre-Validation不触发
解决方案
方案1:修复Pre-Operation步骤的修改逻辑
你的业务逻辑本身无错误,可通过以下调整确保修改生效:
- 确认插件执行模式:必须设置为同步(Synchronous),异步模式下Pre-Operation的修改无法影响主创建操作
- 检查插件过滤条件:注册时不要设置针对
body字段的过滤(或确保过滤条件包含该字段),避免因字段未被触发而跳过逻辑 - 显式处理实体属性:替换原代码中修改
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); } } - 验证跟踪日志:通过
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
相关产品推荐
相关产品推荐

