5 Interview Question of Power Platform {Dynamics 365 CRM Consultant}

Hello Reader,

Interview season never fades away. It’s one of the most important thing for interviewer and interviewee both needs question and answer. Here I am listed few of them which was asked to me during my interview.

Question 1: what is append and append to?

Answer: for example we have entity A and entity B and want to have entity B lookup on entity A. It could only be possible if we have append permission on Entity A and append to permission Entity B.

Question 2: What is the difference between Workflow, Plugin and Action.

Answer:

 S.No. Workflow Plugin Action
1.*wait condition can only be achieved through system Workflow wait condition can’t be achieved through plugin wait condition can’t be achieved through Action
2. It always work in Post operation. We have three stages in Plugin.
1.Prevalidation
2.Preoperation
3.Postoperation
 It works in Post operation only.
3.  It only works in online mode. It works in online/offline mode It works in online/offline mode
4. Messages are less than Plugin.
a. record is created
b. record status changes
c. record is assigned
d. record fields change
e. record is deleted.
Messages are more than Workflow.
a. create
b. update
c. delete
d. associate
e. disassociate
f. retrieve multiple
Custom Message

Note*: Sync/Async Plugin, Sync Workflow and Action executes within 2 minutes(Maggie Noodles :P)Therefore, Async workflow doesn’t bound with execution time and can wait until time. Hence, wait condition can only be run in Async Workflow.

Question3: What is CDS?

Answer: Definition: We all know CDS stands for Common Data Service, It is set of entities and entities set of records therefore, it is typically a data base which is stored data and metadata(entities and fields schema name and their relationships) of entities in the cloud.

Technical Definition: CDS is the central repository which stores data and meta data for D365 Dynamics products(Retails, Customer Engagements and Sales and while developing a apps it requires data from different source so just to make this process user friendly and ease, we just choose the connector and fetch the data.

Note: CDS is renamed to Microsoft Dataverse and Terminology has been changed like Entity is Table and field is Column and record is row and OptionSet is choice and Two Option is Yes/No

Question 4 : What is the difference between Power Automate and Azure Logic Apps

Answer: Mantra: If you don’t know from where to start then always go for Power Automate.

S.No. Power Automate Azure Logic Apps
1. SaaS PaaS
2. uses for Simple Integration uses for B2B(extended/Advanced)Integration for example BizTalk
3. Browser Based Designer a. Browser Designer or
b. Visual Studio Designer
4. Pay by run
(Office 365 subscription has 2k run/user/month)
Pay by action run and by connector run(A connector can trigger several action)
5. Select a Row
If you want to automate on select of row in SharePoint then it is only possible in Power automate.
Not available in Azure Logic App

Question 5: you are member of BU1 and want to ask BU2, How would you do it?(most commonly asked question)

Answer: is by using owner Team, for the owner teams, you can access entities based on the roles assigned to the user plus the roles assigned to the team that a user is member of. This allows a user to have privileges outside their business unit.

Hope it helps.

May Dynamics Power be with you.

Advertisement

{Power Apps Portal}how to make Section title as a hyperlink in Entity form

Hello Reader,

Hope you are enjoying festive season these days.

Whenever we click on the lookup field it opens up the record whereas it wasn’t performed the same functionality in the CRM portal. Therefore, this is the objective to achieve.

Let’s get started without any further delay.

For example, I have Entity Form A and having lookup of entity B and want to open up a Entity form of B Entity on click of section header.

Finance Information should be Clickable and navigate to Entity Form of entity B

Step1: Inspect the element by pressing F12 and get the tag to enhance it.

Step2: Select the element in code and replace the tag with hyperlink tag(Please refer the below code) and place the code in additional settings under the ready function in Entity Form A and save it.

If you do wonder that how to get the Entity form url then please refer the note below.

Note: Entity Form URL=[rootWebSite]/_portal/modal-form-template-path/[portalId]?id=[recordId]&entityformid=[entityFormId]

$(document).ready(function () 
{
$("legend:contains(Finance Information)").replaceWith("<legend class='section-title'><a onclick='onSectionTitle()'>Finance Information</a></legend>");
});
function onSectionTitle()
{
window.open("[rootWebSite]/_portal/modal-form-template-path/[portalId]?id=[recordId]&entityformid=[entityFormId]");
}

Please pass portalId, recordId and entityFormId as per your environment.

Step 3: Clear the cache see the final result as below.

Finance Information has become clickable and will open Entity form

Hope it helps.

May the Dynamics power be with you.

Improvement/Enhancement needed on Power Apps Portals

Hello Reader,

I am working on Power Apps Portals from past few months during this I personally feel that there is a couple of the area which could be enhanced more to give flexibility to the portal maker in order to achieve user utterance.

I listed few points which should be introduced in future releases of Power Apps Portals.

S.No.Wants More flexibility
1.Business Rule can’t be applied to portal form. If Microsoft brings business rule/something similar to that to entity form to automate the common show/hide, require/none require fields in upcoming releases. It will reduce the repetitive coding work of portal maker.
2.There is 15 minutes of time to happen sync between dynamics 365 CE and portal. It could be less or more sometimes, Perhaps 15 minutes time is documented in Microsoft document. This sync service should be synchronous because sometimes, user input on the portal and it does some calculation in the back end and doesn’t reflect immediately on the portal which kills the user experience.
3.The New File data type is not yet accessible in the portal. The file data type should be available in the portal as well. The reason behind it, Recently I met a requirement where users want to attach multiple files to one note in Dynamics 365 CE and portal both. If I would have file data type in portal then I was pretty close to fulfill user requirements without any code.
4.There is no way to take a backup of the portal yet. It is all waste, If we are unable to take a backup of individual components like a webpage, web template. Microsoft should bring something related to it.
5.After so many MS support tickets Microsoft has given _services/about for quick cache refreshment but still, sometimes changes don’t reflect immediately. This could be more improvised.
6.Odata service is available for retrieve call, It should be for CRUD operation too so that we could have done more in the portal.
7.Missing multi-select option set in the portal. 😦 as we miss in dynamics 365 before it’s arrival.
8.How could we forget about PCF 😦 Badly, want to have the PCF control in the portal too.

I will update the list as and when I find more updates to the Power Apps Portals in the future.

Please leave a comment if you find any missing functionality or any frustrating behaviour with the Power Apps Portals which is not listed above and I will include those in the list.

May the dynamics power be with you.

{Known Issue}Date and Time fields behaves differently in UCI on upgrade

Hello Reader,

I am writing this article to tell you about the known issue of date and time in UCI on upgrade from classic to UCI.

Before this, user had reported that button image and entity icon was shown as jigsaw in UCI for that I had written a blog where I elaborated the root cause and solution of it for reference please click here

Problem Statement: Business reported that written custom logic on date and time field is not working fine(One day less or more than expected) and users from different time zone are experiencing incorrect date value in field.

Root Cause: I tried to dig into it and went to the field properties. As we know that we have Format and Behavior for the field. So, In classic we don’t have control to change the behavior of field. it is Date only by default and this is the catch or in another word I would say this is the only root cause of problem. 🙂

when system upgrade from classic to UCI, the date and time field’s behavior becomes to “User Only” which shows data based on User local time.

Earlier mechanism was working on “Date Only” behavior and that’s why the user faced the data inconsistency.

screen from classic

Solution: Now in UCI, we have the flexibility to change the behavior as listed below:

1.User Only(It shows data based on the user time zone{If in case you have question that what is user time zone then it is nothing but your Laptop/Desktop time setting or your dynamics 365 CE personal setting.})

2.Date Only(It displays data from crm data base where it stores time as 12:00 A.M. always or in other words it shows date in UTC format )

3. Time Zone Independent(it is independent from any conversion and will show you the data exactly what is stored in data base.

Note*: In classic, date and time field’s default behavior is “Date Only”.On upgrade and on creation, date and time field behavior sets to “User Only” by default.

In terms of resolution, I have two option to fix it.

  1. Make the main form to Time-Zone Independent. Nothing to do with date and time field.
  2. Change the behavior of field to Date Only.

And I opted out the 2nd option and change the field behavior as same as in classic which is exactly sorted the problem.

This was challenging for me because I was unaware from the fact which I wrote down in note section.

Bonus Tip : It is advisable that birthday date should have the “Date Only “behavior. If Birthday is being used with time then behavior should be “Time-Zone Independent”

I am hoping that my experience will help you.

May the dynamics power be with you.

{Tip}Switch to Classic even if end users are using UCI [Dynamics 365 CE]

Hello Reader,

Hoping you are safe during this pandemic.

Apparently, users are using UCI(Unified Interface) and they had reported couple or the other defects in UCI. Therefore, I had to investigate and need to tell them whether it is UCI or a classic issue and what is the root cause of it.

In my scenario, entire system is working fine in Classic but couple of the things are not performing well in UCI.

Thus, I had to switch it back to classic for the investigation purpose without loosing any configuration and customization.

Fixed Configuration: My organization system setting is settled up for UCI(i.e.End user only will use UCI)

Question raises that how to switch to classic when you can’t loose any existing data,configuration/customization.

Answer is, Just append force classic to true and it will navigate to old school.

Note*: If you find that this tip is not working somehow. Try it incognito mode. Basically there shouldn’t be any browser history. You should start it fresh.

orgurl/main.aspx?forceclassic=1

Hope it helps.

May the dynamics power be with you.

[Power Apps Portals]Enable Global Search for Custom Entity

Hello Dynamics Enthusiasts,

Hope you are safe while wfh and enjoying your family:)

I am writing this article to explain how to configure custom entity for Global Search in powers apps portal. Microsoft has released this feature in wave 1 2020 portal release. With this feature, user can search across multiple entities and configure what column of entities would be searchable.

Note: This is subjected to change as the limit of the custom entities which can be configurable for global search is 10.

There are a couple of predefined records in “Site Settings” and “Content Snippets” which run the search in the portal and those are listed below:

Site Settings

S.No.Record’s NameDefault Value
1.Search/EnabledTrue
 2.Search/EnableAdditionalEntitiesFalse
 3.Search/FiltersContent:adx_webpage; Events:adx_event,adx_eventschedule; Blogs:adx_blog,adx_blogpost,adx_blogpostcomment;
Forums:adx_communityforum,adx_communityforumthread,
adx_communityforumpost;Ideas:adx_ideaforum,adx_idea,
adx_ideacomment; Issues:adx_issueforum
 4. Search/IndexQueryName Portal Search
 5. Search/Query +(@Query) _title:(@Query) _logicalname:adx_webpage~0.9^0.2 -_logicalname:adx_webfile~0.9 adx_partialurl:(@Query) _logicalname:adx_blogpost~0.9^0.1 -_logicalname:adx_communityforumthread~0.9
 6. Search/Stemmer English
 7. Search/FacetedView True
8.Search/IndexNotesAttachmentsTrue
9.Search/RecordTypeFacetsEntitiesBlogs:adx_blog,adx_blogpost;Forums:adx_communityforum,adx_communityforumthread,adx_communityforumpost;Ideas:adx_ideaforum,adx_idea;Downloads:annotation,adx_webfile
10.KnowledgeManagement/DisplayNotesTrue

Content Snippets

S.No.Record’s NameDefault Value
1.Header/Search/LabelSearch
 2.Header/Search/ToolTipSearch
 3.Search/Default/FilterText All
 4. Search/Facet/All All
 5. Search/Facet/ClearConstraints Clear All
 6. Search/Facet/Downloads Downloads
 7. Search/Facet/Less Show less
8.Search/Facet/ModifiedDateModified date
9.Search/Facet/MoreShow more
10.Search/Facet/ProductProducts
11.Search/Facet/RatingRating
12.Search/Facet/RecordTypeRecord Type
13.Search/Facet/SortOrder/AverageUserRatingAverage User Ratings
14.Search/Facet/SortOrder/Relevance
Relevance
15.Search/Facet/SortOrder/ViewsView Count

Before start to configure the custom entity for search. Please make sure that all the records of “Site Settings” and “Content Snippets” are the same as mentioned above, some of the values(Header/Search/Label, Header/Search/ToolTip) may be different based on your requirement.

Let’s get going and follow the steps as below:

Step 1: Add Search/EnableAdditionalEntities of True value in site setting.

Step 2: create/update the search/filters setting, and add the value Restaurants:new_restaurant.

Step 3: create a “Portal Search” view to the corresponding entity for which you are configuring the global search and all the added column to view will be searchable in the search.

Tip*: “Portal Search” is the default view name in Search/Index/QueryName entry of site setting, If in case you want to change the view name other than Portal Search then please don’t forget to update the new view name in Search/Index/QueryName entry of site setting and you need to maintain the same view name across the entities for which you want to configure search. 🙂

Step 4: Create/Update Entity Permission and associate web role(authenticated user) to it .

a)Entity Permission: Create/Update Entity Permission to the respective entity and you can set any scope as per your need, I have taken Global. Preferably, privileges should be Read only.

b) Go to the Related and assign Web role to it. Web role can be any of your choice if you want to show the result to anonymous user then assign anonymous role. Perhaps, it is not recommended due to data security concerns.

Step:5 Create search result web page to show your detailed information of entity record.

a) By attaching the Entity form. You can create your own web template as well and there don’t forget to pass the record id (I was completely new when I was configuring this and haven’t had idea how to pass the record id so just to make it ease for you :)). Here is the code

{% if page.adx_entityform %}
{% entityform id: page.adx_entityform.id %}
{% endif %}

for the demonstration purpose, I used “Default Studio Template”

Screen from Portal Studio
screen from model driven app

Step 6: Create a Site Maker record where you need to browse the search result page and name it as “entitylogicalname_SearchResultPage”

Now the time has come to “Clear cache” and “Rebuilt search index”

Therefore, I had covered all the steps to configure custom entity for Global search.In case you require any further assistance, can reach out to me on LinkedIn.

Oops,I forgot to show you the result. I typed RES and it showed me three records.

Now, clicked any of them and it will show the Search Result Page.

Hope it helps.

May be the dynamics power with you.

[Power Apps Portals]Change Portal Search Banner

When we start to implement the client requirement in order to match the customer’s branding,the primary requirement is to the change the out-of-the-box search banner.

In this article, I am going to show you how to change the search portal banner in the few steps.

Before we start, you might have look at it –

Let gets started and please follow the steps as below:

Step 1: Navigate to Portal Management

Step 2: Go to the “Web Files” and look for “searchhero.jpg” record.

Step 3: Replace the Notes Attachment with the new search banner image.

Step 4: Clear Cache /_services/about or else Restart the portal and Press the Ctrl+F5 and visualize your change.

for Portal Banner, you can follow the same steps as above and by replacing the image, Notes’s GUID will remain same which will not cause an error during portal deployment.

Hope it helps!

May the dynamics power be with you.

5 Interview Question of Dynamics 365 Customer Engagement {Consultant}

Hello Readers,

Since it is peak time of interview and all the seekers are being passed through with it. I have a few questions which had been asked in my recent interview. I also shared another set of 5 interview questions. You can click here to refer them.

Question 1: What is the Execution Order. Let’s say Execution order set 1 to asynchronous plugin and 2 to sync plugin. What will be the execution order.

Answer: Execution order is the order which run the plugin on the same message(create/update and etc).order will be the same as async plugin will trigger 1st with execution order 1 but it will not wait for its completion and sync will execute in second order.

Question 2: What are the changes which Microsoft has brought from 2011 upto now.

Answer: Since it is simple question with vast complexity and unfulfilled satisfaction of interviewer on it, as there are many more things to tell to your interviewer.Here I am highlighting few of them.

Advanced filtering,This capability brings a lot of Dynamics 365’s Advanced Find from classic web to unified interface. Advanced filtering is embedded on entity sub grid view, user need not to go to advance find every time for creating an expression.

Lookups in the Unified Interface now support the enhanced filtering capabilities which includes for only my records and related records only for web.

Unified Interface UCI gives flexibility to see/handle your CRM on handy mobile.Earlier Entity form was bound to web client now it is platform independent.

Model Driven App is nothing but your Dynamics CRM in app module.

Canvas App,where customization takes place separately.

Question 3: What is the security Model in Dynamics CRM?

Answer: To control data access, you must set up an organizational structure that both protects sensitive data and enables collaboration. You do this by setting up business units, security roles, and field security profiles.

So basically, it is assignment of security role to user based on Teams and BU.

Question 4: Let’s say security role is not assigned to user to see the particular entity, will that entity be visible in Advance Find.

Answer: Yes, Entity will be visible in Advance Find.

Question 5: While upgrading classic view to UCI what are the known issues?

Answer: Custom Ribbon Button showing jigsaw image{Solution: Add Modern image using svc webresource.}

Entity Icon not visible{Solution: Choose 16×16,32×32 images }

Getting form context error on page on load{Solution: Passed execution context by checking the check box.}

Button is not visible on subgrid.{Solution: Add Subgrid view of entity in Model Driven App.}

Hope it will help in your interview preparation.

May be the Dynamics Power with you.

{Tips -Tricks}While working on Client Scripting in Dynamics 365

Hello Reader,

Playing with Java Script is common to all Developers and Dynamics 365 Technical Consultant, Therefore, there are some of the tips and trick which should be followed while working with Java Script.

Some of the tips and tricks are listed below :

Tip 1* Create Namespace of Web-Resource: During working with Web-resource, It is a good practice to use Namespace. Sometimes, It becomes big task to investigate error in large and complex Implementation and that too frustrating if it is causing from the silly mistake and took millions of hours for investigation hahaha

One of the reason is, There are same name function in other Web-resources too. So, during compilation calling function gets confused which function to refer to as it is getting multiple references.

Let’s take an Example.

Scenario 1: If Namespace is not defined.

There are three Web-Resources A and B and C, function xyz is written in Web-Resources A and B, Web-Resource C’s function pqr is calling-function xyz,

During compilation function pqr gets confused as there are two different paths to refer. 

function pqr()
{
xyz();
}

Scenario 2: When Name space is defined

a is the namespace of Web resource A, b is the namespace of Web resource B and c is the namespace of Web resource C and taking the same scenario as above xyz function is being called by pqr with no confusion since Namespace is defined and there is only one way to traverse.😊

function pqr()
{
a.xyz();
}
function pqr()
{
b.xyz();
}

Tip 2* One Onload function: Keep all the function in one function, which is being called on-load event of form. It enhances System Performance and takes less time on load.

Page_OnLoad = function () {
mno();
stu();
xvw();
} 

Tip 3* Don’t register On-change Event handler programmatically: According to developer’s choice, Attribute on-change event should be configured on from. Try to avoid writing formContext.getAttribute(arg).addOnChange(function); in java Script.

To Configure follow the below steps:

>>Go to the Field Properties

>>Click on the Events tab(third from last)

>>Register your function.

Tip 4* Have Common Web-resource commonly used function like WebAPI Call: Should have common Web resource ready where you can have all the commonly used function like Web API Calling function for retrieve Multiple and Single Records or retrieve user access based on Security Role.

if (typeof (MSP) == "undefined")
{ MSP= { __namespace: true }; }
MSP.Common = {
    CommonLibrary: function () {
    },
    RetrieveSingleRecord: function (entityName, entityId, columns) {
        var results = null;
        var entityId = entityId.replace("{", "").replace("}", "");
        var req = new XMLHttpRequest();
        req.open("GET", encodeURI(Xrm.Page.context.getClientUrl() + "/api/data/v8.0/" + entityName + "(" + entityId + ")?$select=" + columns + ""), false);
        req.setRequestHeader("OData-MaxVersion", "4.0");
        req.setRequestHeader("OData-Version", "4.0");
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.setRequestHeader("Prefer", "odata.include-annotations=\"OData.Community.Display.V1.FormattedValue\"");
        req.onreadystatechange = function () {
            if (this.readyState === 4) {
                req.onreadystatechange = null;
                if (this.status === 200) {
                    results = JSON.parse(this.responseText);
                }
                else {
                    results = this.statusText;
                }
            }
        };
        req.send();
        return results;
    },

    RetrieveMultipleRecords: function (entityName, Columns, filter) {
        var results = null;
        var req = new XMLHttpRequest();
        req.open("GET", encodeURI(Xrm.Page.context.getClientUrl() + "/api/data/v8.0/" + entityName + "?$select=" + Columns + "&$filter=" + filter + ""), false);
        req.setRequestHeader("OData-MaxVersion", "4.0");
        req.setRequestHeader("OData-Version", "4.0");
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.setRequestHeader("Prefer", "odata.include-annotations=\"OData.Community.Display.V1.FormattedValue\"");
        req.onreadystatechange = function () {
            if (this.readyState === 4) {
                req.onreadystatechange = null;
                if (this.status === 200) {
                    results = JSON.parse(this.responseText);
                }
                else {
                    results = this.statusText;
                }
            }
        };
        req.send();
        return results;
    },

    __namespace: true
};

Tip 5* Try avoid to use Global variable: Due to conflict between functions sometimes global variables refers incorrect values which cause error in other function and creates unnecessary pain to developers.

Hope it helps.

May the Dynamics Power be with you!

Azure Logic Apps|synchronizing Teams with Blob storage

Hello Dynamics Enthusiast,

Working on cutting Edge technologies like Azure Logic Apps and contributing to the Dynamics community keeps me energetic. So Here I am, to provide you a step by step guide to sync Teams and Blob storage using Azure Logic Apps.  

Scenario: I came across a requirement where client wants synchronization between Teams and blob storage which should enable end user to attach file to Teams and attached file should be stored into Azure Blob Storage automatically.

Prerequisites: Azure Subscription, Storage Account in Azure Portal.

I am using trigger as SharePoint: When a file is created in folder because Teams Files are stored in SharePoint.It is easy to access the attached SharePoint site for the Teams.

Follow the below steps to achieve the objective.

#1: Logic Apps Blank Template creation

  • Sign in to the Azure portal with your Azure account credentials.
  • Go to the ‘Resource group’.(Either create a new ‘Resource group’ or use an existing one).
  • Create Logic app with blank Template.
  • Search for SharePoint trigger SharePoint: When a file is created in folder.

#2: Enter trigger information

  1. Site Address : Enter your share point site address.
  2. Folder Id : Browse the folder where the teams files are stored in share point.

Refer the below screen.

#3: Search for the blob storage action. I chose Create Blob action.

#4: Enter the action information.

  1. Select the folder path from blob storage (I chose container of blob storage. You can choose container or a folder within a container.)
  2. Select the Blob name.
  3. Select the Blob content.

Below is the summary screen of the Logic Apps to give you a better view.

Executed Logic Apps

Testing: It is important to test whatever you configured. So follow the below steps to validate your configuration.

#1: Before uploading the file, Teams and Blob storage view are as below.

Screen from Teams Before uploading the file.
Screen from Blob storage before the test execution.

#2: Upload a file in Teams.

While uploading the file in Teams
uploaded file

#3: Same file should be replicated in Blob Storage for successful validation of the configuration.

Bingo! Team and Blob synchronized successfully.

Hope it helps to some extent.

May the Dynamics Power be with you!