如何在Dynamics CRM 2016中基于表单禁用功能区按钮?
Hey there, let's tackle that frustrating null error you're seeing with your Approve TOP ribbon button. The issue boils down to timing: when your ribbon enable rule runs, the formSelector object might not be fully initialized yet in Dynamics CRM 2016, leading to those null references. Here's how to fix it:
Root Cause
The error happens because Xrm.Page.ui.formSelector or getCurrentItem() returns null when the rule executes too early (before the form's UI elements are fully loaded). Your original code doesn't account for this scenario, so it throws an error when trying to access getLabel() on a null value.
Modified Solution Code
Update your JavaScript function to include null checks, and use the form's unique name (more reliable than display labels) to avoid localization or label change issues:
function EnableDisableRibbon_ApproveTop() { try { // Guard clause: Exit early if formSelector isn't available yet if (!Xrm.Page.ui.formSelector) { return false; } var currForm = Xrm.Page.ui.formSelector.getCurrentItem(); // Guard clause: Exit early if current form item is null if (!currForm) { return false; } // Use form's unique name (found in Form Properties) instead of display label // Replace "Manager" with your actual Manager form's unique name var formUniqueName = currForm.getName(); return formUniqueName === "Manager"; // If you still prefer using the display label, uncomment this block: // var formLabel = currForm.getLabel(); // return formLabel === "Manager"; } catch (e) { // Log error to console instead of alerting (less intrusive) console.error("EnableDisableRibbon_ApproveTop error: ", e.message); // Return false to ensure button stays hidden if something goes wrong return false; } }
Key Tips for Success
- Use Form Unique Name: You can find the form's unique name in the Form Editor under Form Properties > Form tab. This is more stable than display labels, which can be modified or localized.
- Check Rule Trigger Timing: In your ribbon editor (like Ribbon Workbench), make sure the enable rule is set to trigger at the right time—avoid triggering it before the form is fully loaded.
- Clear Browser Cache: CRM caches JavaScript resources, so after updating your code, clear your browser cache to ensure the latest version loads.
- Test Both Forms: Verify the button shows up only on the Manager form and stays hidden on the Information form after applying the changes.
内容的提问来源于stack exchange,提问作者aminvincent

