使用XRM工具为Dynamics 365 Web应用添加删除记录功能遇错求助
问题描述
我正在为使用XRM工具更新/编辑Dynamics 365记录的Web应用添加删除记录功能,但一直遇到错误。当前报错截图如下:
点击删除按钮时通过字符串id关联对应目标记录,以下是相关代码:
CommonServices.cs 代码
public bool DeleteEmployeeRecord(new_EmploymentHubCollegues employmentHubCollegue) { CrmServiceClient serviceClient = GetCrmServiceClient(); serviceClient.Delete(employmentHubCollegue); return true; }
控制器代码
public ActionResult DeleteEmployee(string id) { ViewBag.Message = "Your application edit page."; new_EmploymentHubCollegues Delete = _Service.GetCollegue(id); return View(Delete); } [HttpPost] public ActionResult DeleteEmployee(new_EmploymentHubCollegues Delete) { ViewBag.Message = "Your application edit page."; if (_Service.DeleteEmployeeRecord(Delete) == true) { } return View(Delete); }
Services.cs 代码
bool DeleteEmployeeRecord(new_EmploymentHubCollegues employmentHubCollegue);
现有代码可正常执行新增和更新记录操作,但删除功能的实现存在疑问,比如是否无需返回bool类型。
问题修复方案
1. 核心错误原因
CrmServiceClient.Delete方法不支持直接传入实体对象,它需要的参数是实体逻辑名称和实体Guid类型的ID,当前调用方式参数不匹配,导致报错。
2. 修改CommonServices.cs的删除方法
public void DeleteEmployeeRecord(Guid employeeId) { CrmServiceClient serviceClient = GetCrmServiceClient(); // 替换成你实际的实体逻辑名称,可在Dynamics 365解决方案的实体属性中查看 serviceClient.Delete("new_employmenthubcollegues", employeeId); }
3. 更新Services.cs的接口定义
void DeleteEmployeeRecord(Guid employeeId);
4. 简化控制器的POST删除逻辑
不需要先查询整个实体,直接解析ID调用删除即可:
[HttpPost] public ActionResult DeleteEmployee(string id) { ViewBag.Message = "Your application edit page."; if (Guid.TryParse(id, out Guid employeeId)) { _Service.DeleteEmployeeRecord(employeeId); // 删除成功后建议跳转到列表页,示例:return RedirectToAction("EmployeeList"); } return View(); }
关于返回值的疑问
删除操作只要没有抛出异常就代表成功,不需要返回bool类型,用void更合适。如果需要处理异常,可以在方法内添加try-catch块,或者统一交给全局异常处理机制。
内容的提问来源于stack exchange,提问作者user9047069
相关产品推荐
相关产品推荐

