The ribbon item is dependent on ribbon control id

The ribbon item 'MSCRMAssistancePSA.invoice.grid.ApproveGroup.Approve.CustomAction' is dependent on ribbon control id='AssistancePSA.invoice.grid.ApproveGroup.Controls


I encountered this issue on Invoice entity. The invoice entity was referencing a PSA button which was a part of a third party solution installed in CRM. We had uninstalled this managed solution previously, but the invoice was still referencing this button on a hide action, and hence was not able to publish or import any customization. You cannot delete this hide action.

<HideCustomAction Location="AssistancePSA.invoice.grid.ApproveGroup.Button.Approve" HideActionId="MSCRMAssistancePSAAssistancePSA.invoice.grid.ApproveGroup.Button.Approve.HideAction" />

The location is the PSA button id it was referencing.

I followed this article. It was confusing. It did not directly help in solving the issue, but the idea was valid.
https://ribbonworkbench.uservoice.com/knowledgebase/articles/903018-could-not-publish-solution-due-to-ribbon-control-d

I followed the following approach to solve the issue.

1. Create a new solution, add only the invoice entity, without the data sets.
2. Export the solution and take a backup copy.
3. Open customizations.xml file, replace the following code between the RibbonDiffXml element. I was missing two references, hence the two buttons.
<RibbonDiffXml>
        <CustomActions>         
          <CustomAction Id="AssistancePSA.invoice.grid.ApproveGroup.Button.Approve.CustomAction" Location="Mscrm.Form.invoice.MainTab.Actions.Controls._children" Sequence="6">
            <CommandUIDefinition>
              <Button Id="AssistancePSA.invoice.grid.ApproveGroup.Button.Approve" LabelText="$LocLabels:AssistancePSA.invoice.grid.ApproveGroup.Button.Approve.LabelText" Sequence="6" />
            </CommandUIDefinition>
          </CustomAction>
          <CustomAction Id="AssistancePSA.invoice.grid.ApproveGroup.Controls.CustomAction" Location="Mscrm.Form.invoice.MainTab.Actions.Controls._children" Sequence="7">
            <CommandUIDefinition>
              <Button Id="AssistancePSA.invoice.grid.ApproveGroup.Controls" LabelText="$LocLabels:AssistancePSA.invoice.grid.ApproveGroup.Controls.LabelText" Sequence="7" />
            </CommandUIDefinition>
          </CustomAction>
        </CustomActions>
        <Templates>
          <RibbonTemplates Id="Mscrm.Templates"></RibbonTemplates>
        </Templates>
        <CommandDefinitions>
        </CommandDefinitions>
        <RuleDefinitions>
          <TabDisplayRules />
          <DisplayRules />
          <EnableRules>
          </EnableRules>
        </RuleDefinitions>
        <LocLabels>
          <LocLabel Id="AssistancePSA.invoice.grid.ApproveGroup.Button.Approve.LabelText">
            <Titles>
              <Title description="Approval" languagecode="1033" />
            </Titles>
          </LocLabel>
          <LocLabel Id="AssistancePSA.invoice.grid.ApproveGroup.Controls.LabelText">
            <Titles>
              <Title description="Approval" languagecode="1033" />
            </Titles>
          </LocLabel>
        </LocLabels>
      </RibbonDiffXml>

One important piece of information to remember is the location attribute. The location attribute references the location of the button. In this case, the button with the id 'AssistancePSA.invoice.grid.ApproveGroup.Button.Approve' will be displayed on the main tab (Mscrm.Form.invoice.MainTab) within  the 'Actions' group. You can locate this on the Ribbon Workbench on any existing button. I was making a mistake here repeatedly which kept me lingering on to this issue for few hours. You must add a button a label, all the remaining elements are optional.

However, if you have existing customization in place for a ribbon, the idea is still the same, you just need to create the controls you are missing.

4. Save and import the solution back to CRM.

Comments

Popular Posts