基于JavaScript在Dynamics CRM中根据布尔值控制字段显隐
针对Dynamics CRM表单字段控制需求的代码优化建议
你的代码已经搭建了基础逻辑框架,但还需要补充关键分支并修正细节以完整满足需求,以下是具体调整建议:
现有代码的待优化点
- 未处理
cr253_validationcomplete为**No(false)**时隐藏字段的逻辑 Date.now()返回毫秒级时间戳,Dynamics CRM日期字段需传入标准Date对象,且要确保是UTC时间格式- 注释内容与实际操作字段不符,易造成混淆
- 变量名未遵循JavaScript小驼峰命名规范
修正后的完整代码
function showValidationOnChange(executionContext) { // 获取表单上下文 const formContext = executionContext.getFormContext(); // 获取Validation Complete字段值 const validationComplete = formContext.getAttribute("cr253_validationcomplete").getValue(); // 获取Validated On字段的控件与属性对象 const validatedOnControl = formContext.getControl("cr253_validatedon"); const validatedOnAttribute = formContext.getAttribute("cr253_validatedon"); if (validationComplete === true) { // 显示字段并设置为当前UTC日期 validatedOnControl.setVisible(true); // 转换本地时间为UTC日期对象,适配Dynamics CRM字段要求 const currentUtcDate = new Date(); currentUtcDate.setMinutes(currentUtcDate.getMinutes() - currentUtcDate.getTimezoneOffset()); validatedOnAttribute.setValue(currentUtcDate); } else { // 隐藏字段 validatedOnControl.setVisible(false); // 可选:清空字段值(根据业务需求决定是否启用) // validatedOnAttribute.setValue(null); } }
关键细节说明
- 区分控件与属性:设置可见性用
getControl获取的控件对象,设置字段值用getAttribute获取的属性对象,逻辑更清晰规范 - UTC日期处理:通过
getTimezoneOffset()调整本地时间为UTC时间,避免时区差异导致的日期偏差 - 补充else分支:确保字段在Validation Complete设为No时自动隐藏,完整覆盖需求场景
- 可选清空值:如果业务要求取消验证时清除已填写的Validated On值,可取消对应代码的注释
内容的提问来源于stack exchange,提问作者Waq
相关产品推荐
相关产品推荐

