Tag Archives: Sub-grid

Microsoft Dynamics 365: Hide and Show Buttons

In this article, we cover to how to hide buttons as well as how to show buttons that are hidden, in Microsoft Dynamics 365 Customer Engagement. To achieve this object, we will use an example with practical requirements. To implement what is in this article, the user must have a System Administrator security role in Dynamics 365.
Dynamics 365 Home Command Bar Buttons

Working with Ribbon Workbench for Dynamics 365

If you do not already have the Ribbon Workbench for Dynamics 365, go and download it: Ribbon Workbench for Dynamics 365. The Ribbon Workbench comes as a Microsoft Dynamics 365 managed solution. Therefore, after downloading it, you have to import it in your Dynamics 365 instance by going to: Settings >> Solutions >> Import. After successfully following the import dialogue to the end and successfully importing the solution, refresh the page and you will able to see the Ribbon Workbench button in the Solutions area of Dynamics 365:
Ribbon Workbench Button in Dynamics 365

Application Example: Hide Buttons

Below we will provide an example of practical client requirements and show step by step how the Ribbon Workbench for Dynamics can help us address these requirements.

Requirements

A national, provincial /state or city level education board that has a Microsoft Dynamics 365 Customer Engagement implementation that keeps track of all the schools and students in its jurisdiction. Each student in the system must be linked to a school and under no circumstance can a user of the system be able to create a student record that is not associated to a school record. This prevents the problem of creating of orphan student records in the system i.e. student records without an associated school record.

Implication of the Requirements

To implement these requirements, we will have to restrict the places where users can access the Student (logical name: contact ) entity’s New button and be able to create new student records. Student records should only be created in relation to a School (logical name: account) record i.e. from the School records’ Students sub-grids as shown in the image below.

  • The Student’s sub-grid on Schools’ form
    Create Student record via Form Sub-grid
  • The Student’s sub-grid on Schools’ related entities menu
    Related entities

    Create Student record via Form related entities

Therefore, after implementing the instructions provided under the sub-section “Implementation of the requirements” and section “Other Settings”, users will only be able to create student records from the from the Student entity’s sub-grids on the School records. Hence as a corollary, users will no longer be able to create Student records from:

  • Quick Create menu
    Create Student record via Quick Create
  • Advanced Find
    Create Student record via Advanced Find
  • Student entity’s Home Command Bar
    Create Student record via Home Command Bar
  • Student entity’s Form Command Bar
    Create Student record via Form Command Bar

Implementation of the requirements

  1. To Go to Settings >> Solutions, and create a new solution. Add the entities whose ribbons you wish to edit. In our example, we will be adding the Student (logical name: contact ) entity only to the new solution. Exclude all entity assets but include the entity’s metadata. Save and Publish All Customizations.Create Solution With Student Entity
  2. Under Settings >> Solutions, click on the Ribbon Workbench button to launch the Dynamics 365 Ribbon Workbench. Select the solution created in part 1 and click OK.
    Launch Ribbon Workbench
  3. After opening the solution in Ribbon Workbench, it will look like the image below. Ensure you are editing the intended entity (A in the image below). In our case, we intend to edit the ribbons for the Student (logical name: contact ) entity. On the Student (logical name: contact ) entity, we intend to hide all the New buttons except on the Student’s sub-grids (B in the image below).
    Ribbon Workbench - verify entity and identify except buttons
  4. To hide a button, right click on it and select “Hide”. After hiding all the Student (logical name: contact) entity New buttons, except on the Student’s sub-grid (highlighted in green in the image above), the solution in Ribbon Workbench will look like the image below:
    Hide New Button Except Sub-grid
  5. Click Publish. After the publishing process is done, the only place you will be able to see the New button, in your Dynamics instance, for the Student (logical name: contact) entity is on the sub-grids, as per the requirements above.

Application Example: Show Hidden Buttons

Months or years later, the requirements may change and the client may want to us to reverse the work done in the previous section and show the the hidden New buttons. To accomplish that:

  1. To Go to Settings >> Solutions, and create a new solution. Add the entities whose ribbons you wish to edit. In our example, we will be adding the Student (logical name: contact ) only to the new solution. Exclude all entity assets but include the entity’s metadata. Save and Publish All Customizations.Create Solution With Student Entity
  2. Under Settings >> Solutions, click on the Ribbon Workbench button to launch the Dynamics 365 Ribbon Workbench. Select the solution created in part 1 and click OK.
    Launch Ribbon Workbench
  3. After opening the solution in Workbench, it will look like the image below. Ensure you are editing the intended entity (A in the image below). In our case, we intend to edit the ribbons for the Student (logical name: contact ) entity. On the Student (logical name: contact ) entity, we intend to make visible the hidden buttons. In contrast to the “Application Example: Hide Button” section, the next time we load an entity in Ribbon Workbench, the hidden buttons are no longer shown command bars section (B in the image below) but are shown under the Hidden Actions section (C in the image below). To make visible these hidden buttons, right click on each button (C in the image below) and select “Un-hide”.
    Make hidden buttons visible
  4. Click Publish. After the publishing process is done, the “New” buttons that were previously hidden will become visible in your Dynamics 365 instance.

Other Settings

  • To fully ensure that there no orphan Student records are created, make sure the Student entity’s School field is set to Required and the field is added to all Student entity’s forms.
  • Quick Create: To stop users from creating the Student records from the Quick Create menu, remove the Quick Create option from the entity:
    1. Go to Settings >> Solutions
    2. Open the solution containing the entity
    3. In the solution, click on the entity. Remove the “Allow quick create” option.
      Remove the Quick Create option
    4. Save and publish the solution

Microsoft Dynamics 365: Counting Sub-grid Records and Enabling Users to Hide Empty Sub-grids

In Microsoft Dynamics 365, we can use sub-grids to present data to users in a tabular format. This is a nice and compact way of displaying data. However, sometimes there is no data in those sub-grids to display and the end users might prefer to get back that space and optimize the space on the form. In this blog post, we cover how we can dynamically obtain the number of records in a sub-grid using JavaScipt and use that information to give end users the flexibility to optimize the space on forms by hiding empty sub-grids.

There are two types of sub-grids on Dynamics 365 forms:

  • Read-only sub-grids: Show data in a tabular format but do not allow users to edit data directly on the sub-grid. To edit the data, users have to double click on the record in the grid to open the form, edit the data, and then save it.
  • Editable sub-grids: Apart from showing data in a tabular format, editable sub-grids offer rich inline editing capabilities on web and mobile clients including the ability to group, sort, and filter data within the same sub-grid so that you do not have to switch records or views. In addition to providing all these extensive editing capabilities, editable sub-grids still honor the read-only sub-grid metadata and field-level security settings as well as the general Microsoft Dynamics 365 security model.

Summary of the key syntax

Here is a high-level summary of the main Microsoft Dynamics 365 JavaScript syntax covered in this blog post.

  • Count the number of records in sub-grid, where <subgridName> is the logical name of the sub-grid :
    formContext.getControl("<subgridName>").getGrid().getTotalRecordCount();
  • Remove the blank option in an option set, where <optionsetName> is the logical name of the option set:
    formContext.getControl("<optionsetName>").removeOption("");
  • Get the option set’s selected value , where <optionsetName> is the logical name of the option set:
    formContext.getAttribute("<optionsetName>").getValue();
  • Set the selected value of an option set, where <optionsetName> is the logical name of the option set and <value> is the value the option set will be set to:
    formContext.getAttribute("<optionsetName>").setValue("<value>");
  • Enable/Disable a field, where <fieldName> is the logical name of the field and <Boolean> can be true or false (i.e. true disables field and false enables it):
    formContext.getControl("<fieldName>").setDisabled(<Boolean>);
  • Hide/Unhide section, where <nameOfTab> is the name of the tab containing the section, <nameOfSection> is the name of the section and <Boolean> can be true or false (i.e. true makes the section visible and false hides the section):
    formContext.ui.tabs.get("<nameOfTab>").sections.get("<nameOfSection>").setVisible( <Boolean>);

Application Example: Enabling Users to Hide Empty Sub-grids

Using the code below, we can give end users the flexibility to optimize the space on forms by hiding empty sub-grids. In the code below, the hideEmptyOfficesSubgrid function is the entry point and is called when saving the form and loading the form.

function hideEmptyOfficesSubgrid(executionContext) {  
    var formContext = executionContext.getFormContext();
    var operationsTabName = "tab_operations";
    var officeGridSectionName = "office_grid_section";
    var officeGridName = "office_subgrid";
    var enableOfficeGridName = "hos_enableofficesgrid";
    var no = 183840000;
    var yes = 183840001;
    formContext.getControl(enableOfficeGridName).removeOption(""); 

    setTimeout(function () {
        if (formContext.getControl(officeGridName) != null && formContext.getControl(officeGridName) != undefined) {
            var count = formContext.getControl(officeGridName).getGrid().getTotalRecordCount();
            var enableOfficeGrid = formContext.getAttribute(enableOfficeGridName);
            var enableOfficeGridCtrl = formContext.getControl(enableOfficeGridName);
            var officeGridSection = formContext.ui.tabs.get(operationsTabName).sections.get(officeGridSectionName);
            disableSubgridControlField(count, enableOfficeGridCtrl);
            hideEmptySubgrid(count, enableOfficeGrid, officeGridSection, no, yes);
        }
    }, 5000);      
}

function disableSubgridControlField(count, subgridCtrlField) {  
    if (count <= 0) 
        subgridCtrlField.setDisabled(false);       
    else if (count > 0) 
        subgridCtrlField.setDisabled(true);
}

function hideEmptySubgrid(count, subgridCtrlField, subgridSection, no, yes) {  
    if (areTheseTwoInputsIdentical(subgridCtrlField.getValue(), yes)) 
        subgridSection.setVisible(true);       
    else if (count <= 0 && (areTheseTwoInputsIdentical(subgridCtrlField.getValue(), no) || subgridCtrlField.getValue() == null)) 
        subgridSection.setVisible(false);
    else if (count > 0 && areTheseTwoInputsIdentical(subgridCtrlField.getValue(), no)) {
        subgridCtrlField.setValue(yes);
        subgridSection.setVisible(true);
    }
}

function areTheseTwoInputsIdentical(input1, input2) {
    if (input1 == input2) 
        return true;
    else 
        return false;
}

How the code works

In the first image below, the account record is not enabled for Offices (i.e. the value of Enable Office Grid option set is No). Therefore, Offices grid is empty and hidden.
Account record not enabled for Offices sub-grid

After enabling the account record for Offices by changing the value of the option set field, “Enable Offices Grid” to Yes, the Offices sub-grid shows up and we can add offices to the sub-grid as shown below. The “Enable Offices Grid” field controls the appearance and disappearance of the Offices sub-grid.
Account record enabled for Offices sub-grid

As shown in the image above, the Enabled Office Grid option set is locked as soon as we add and save records to the Offices sub-grid. This prevents a scenario of logic inconsistency where an account record has offices in it’s sub-grid and the user proceeds to change the value of the Enable Offices Grid field to No. Therefore, the Enable Office Grid field value can only be changed back to No and hide the Offices grid after the sub-grid emptied up and there are no more records in it. Therefore, using the solution above, end users can be empowered with the option of hiding empty sub-grids and optimize the space on the form.