Canvas Apps: Watch PCF Component
Apr01

Canvas Apps: Watch PCF Component

Historically, I had no projects where I could work with CanvasApps/Custom Pages. The basics that I learned during the App-in-the-day classes didn’t give me a full understanding of where such apps can be used and how to architect and build them. A few months back I was looking for a new project (if you have … The post Canvas Apps: Watch PCF Component appeared first on Andrew Butenko's… Continue Reading Andrew...

Read More
Dataverse “When an action is performed” trigger doesn’t fire – what to do
Nov06

Dataverse “When an action is performed” trigger doesn’t fire – what to do

I always considered myself a pro-developer so I don’t work with Canvas Apps or Powerautomate Flows on a daily basis like all citizen developers but this week I had an interesting experience playing with the “When an action is performed” trigger of the Powerautomate. I learned 2 lessons that I wanted to share with you, … The post Dataverse “When an action is performed” trigger doesn’t fire...

Read More
Synchronizing aggregation fields and subgrids data in MDA forms
Oct10

Synchronizing aggregation fields and subgrids data in MDA forms

In one of my current projects, I received the requirement to synchronize values that are calculated as aggregates from children’s records with the data in form subgrids. In this post, I will provide instructions on how this can be implemented in a model-driven app. Here is the scenario that I will demonstrate as an example: … The post Synchronizing aggregation fields and subgrids data in MDA… Continue Reading Andrew...

Read More
Validating current user privileges on the client side
Sep28

Validating current user privileges on the client side

Let’s say one has a scenario when some UI element (field, section, tab) has to be enabled/disabled or set to hidden/visible or functionality within PCF Component depending on some privilege of the current user. This post will demonstrate the code that might be used to check the particular privilege available to a user. This article … The post Validating current user privileges on the client… Continue Reading Andrew...

Read More

PCF: Design time vs run time

Recently I developed quite a complex and quite flexible PCF control for my customer. I did all the testing and everything was working fine for me according to the provided requirements. I notified the customer that the latest version of the control was pushed to the environment and started to wait on the feedback. In … The post PCF: Design time vs run time appeared first on Andrew Butenko's… Continue Reading Andrew...

Read More
PCF: Solving issue with lookupObjects and modal dialogs layering
Nov28

PCF: Solving issue with lookupObjects and modal dialogs layering

During my few last project I had to implement the same pattern: PCF control opens the Modal dialog Dialog has controls that use OOB lookupObjects function to enter the data Challenge – the panel that pops up when lookupObjects is executed is located under the initiating Dialog: In order to fix this issue it would … The post PCF: Solving issue with lookupObjects and modal dialogs layering… Continue Reading Andrew...

Read More
Showing indirectly related records in the form’s grid
Oct03

Showing indirectly related records in the form’s grid

During my recent project, I resolved a few similar tasks – the requirement was to show records that are not directly related to the current one. Depending on the scenario you can use one of 2 ways I provided in this post. No-Code way The first way is quite limited in possibilities and applicable scenarios … The post Showing indirectly related records in the form’s grid appeared first on

Read More
Applying UCI styling to a FluentUI Dropdown Component
Sep26

Applying UCI styling to a FluentUI Dropdown Component

Here is the next post of the series in regards to styling of FluentUI controls to look native in the UCI interface. Today my post is dedicated to Dropdown control that is now called “Choice” in Dataverse. Let’s compare uncustomized and UCI controls side-by-side in both enabled and disabled states: As you might see there … The post Applying UCI styling to a FluentUI Dropdown Component… Continue Reading...

Read More
Applying UCI Styling to a FluentUI DatePicker component
Sep19

Applying UCI Styling to a FluentUI DatePicker component

Back in February, I had in plan to share the series of articles that were dedicated to the styling of FluentUI controls and making them look like the native UCI controls. I had a chance to compose the post about the styling of TextField. Unfortunately, my plans changed and I had no time to work … The post Applying UCI Styling to a FluentUI DatePicker component appeared first on Andrew… Continue Reading Andrew...

Read More
Applying UCI Styling to a FluentUI TextField component
Feb14

Applying UCI Styling to a FluentUI TextField component

I have been working with Business Applications (and Dynamics CRM/Dynamics 365 for CE/Dataverse specifically) since the year 2008 and Dynamics CRM 4.0. When I just joined the game I was really impressed with the “UI Style Guide” documentation that was shipped as a part of SDK. This document contained detailed recommendations on how the custom … The post Applying UCI Styling to a FluentUI… Continue Reading Andrew...

Read More
Including additional JS files to your PCF Control
Feb07

Including additional JS files to your PCF Control

According to the best practices, it’s recommended to use TypeScript to build PCF Controls but in some exceptional situations the only way is to load files with JavaScript “on-demand”. Here are 3 examples I’m aware of and I highly encourage you to leave a comment under this post if you have another use-case scenario: When … The post Including additional JS files to your PCF Control appeared… Continue...

Read More
Adding a PCF Control to the Dataverse Application Navigation (SiteMap)
Jan31

Adding a PCF Control to the Dataverse Application Navigation (SiteMap)

At the moment unfortunately it’s not possible to put PCF directly to the SiteMap but I found a workaround you can use that I described in this post. Entity In order to place PCF Control to the Sitemap, you have to create a “stub” entity that will serve as a placeholder for a PCF Control. … The post Adding a PCF Control to the Dataverse Application Navigation (SiteMap) appeared first on

Read More
Let’s build Html WebResources faster and smarter, vol. 2
Jan24

Let’s build Html WebResources faster and smarter, vol. 2

In the previous post, I provided step-by-instructions on how to start developing HtmlWebResources using create-react-app. In this, I will share one more tip I got from Chris Groh that can speed up the development/testing process even greater. If you built React apps using create-react-app or PCF control and tested it using “npm start watch” you … The post Let’s build Html WebResources faster… Continue...

Read More
Let’s build Html WebResources faster and smarter
Jan17

Let’s build Html WebResources faster and smarter

I wrote the initial post on how to develop Html/JS webresources using modern frameworks almost 2 years ago. A few months back I got an email from my colleague Chris Groh who did a few brilliant recommendations on how to enhance the development process and in this post, I will provide an updated version of … The post Let’s build Html WebResources faster and smarter appeared first on Andrew… Continue Reading Andrew...

Read More
Migrate Azure Functions from .Net Framework (v1) to .Net Core (v3)
Jan10

Migrate Azure Functions from .Net Framework (v1) to .Net Core (v3)

As a developer, I built multiple integrations with Dataverse using Azure Functions. Historically, XrmTooling (the firstparty library to perform operations with Dataverse) is .Net Framework based, so to leverage this Package I had to use V1 Azure Functions. Microsoft released .Net Core version of the tooling for a public preview so at the moment it’s … The post Migrate Azure Functions from… Continue Reading Andrew...

Read More
Debugging Custom API plugins using Plugin Registration Tool
Jan03

Debugging Custom API plugins using Plugin Registration Tool

Custom API is a great feature that was brought to the platform to replace Actions developers used to use for years. Historically, Actions heavily rely on classic workflow infrastructure, and considering Microsoft’s efforts to deprecate classic workflows – Custom API is a brilliant alternative to Action that brought a few cool features like making CustomAPI … The post Debugging Custom API… Continue Reading...

Read More
HowTo: Open bulk editing of records using Xrm.Navigation.navigateTo
Oct14

HowTo: Open bulk editing of records using Xrm.Navigation.navigateTo

According to the documentation Xrm.Navigation.navigateTo method doesn’t have any option to open bulk editing but investigating the code I found the way to do that. Here is an example of the code that could be used to open Bulk Editing: [crayon-6168b3095ff0a834168962/] Key points here are passing “bulkedit” value to pageType, schema name of the entity … Continue Reading Andrew Butenko’s Article on their...

Read More
Create Trial Environment
Sep28

Create Trial Environment

The way how to create a trial environment keeps changing so in order to document all the steps to follow I decided to compose the post. I believe it will be helpful not only for myself but for others as well. Step 1 – open trials provision URL. Step 2 – choose one of the … Continue Reading Andrew Butenko’s Article on their blog https://butenko.pro/2021/09/28/create-trial-environment/ Blog Syndicated with Andrew...

Read More
JS: Access values of fields located on the “Form Component” PCF Control
Sep20

JS: Access values of fields located on the “Form Component” PCF Control

Today during one of the work sessions with my colleague I found an interesting feature – it’s possible to access/work with related entity fields that are shown using “Form Component”. According to the documentation of “Form Component”, it’s possible but I was not able to locate any examples of it so if you’re curious how … Continue Reading Andrew Butenko’s Article on their...

Read More
PCF: PowerAppsCLI v1.7.2, Lookup attributes and how to fix an issue in ManifestTypes generated file
Jun24

PCF: PowerAppsCLI v1.7.2, Lookup attributes and how to fix an issue in ManifestTypes generated file

If you read my blog I believe you may know that I love to develop different functionality to extend Dynamics CRM, Dynamics 365 for CE, CDS, DataFlex, CDS, Dataverse. The latest and funniest playground for me is PowerAppsComponent Framework and PCF Controls. Lookup attributes were not supported for a long time so I found few … Continue Reading Andrew Butenko’s Article on their blog PCF: PowerAppsCLI v1.7.2, Lookup...

Read More
Plugin: How to fix “The ‘Accept’ header must be modified using the appropriate property or method. Parameter name: name” error
May26

Plugin: How to fix “The ‘Accept’ header must be modified using the appropriate property or method. Parameter name: name” error

I was working on the integration between Dataverse and external Rest API. The scenario is simple as – “Send the JSON object to the API when the record is created”. In order to implement this, I decided to develop the plugin that will get the data from the context, transform it to the proper JSON … Continue Reading Andrew Butenko’s Article on their blog Plugin: How to fix “The ‘Accept’...

Read More
PCF: Lookup Attribute – Let’s take look under the hood
Mar21

PCF: Lookup Attribute – Let’s take look under the hood

Lookup attribute was unavailable for PCF for a long time but the moment when it’ll become available and fully supported for developers of PCF controls is coming. In this post, I will take a look under the hood. All operations I will perform are technically unsupported so don’t use approaches I will use in your … Continue Reading Andrew Butenko’s Article on their blog PCF: Lookup Attribute – Let’s...

Read More
PCF: 2 tips to minify the size of your PCF components (up to 15 times smaller)
Dec07

PCF: 2 tips to minify the size of your PCF components (up to 15 times smaller)

About a month ago I joined the project where my main duty is the development of PCF components. I was soooo waiting for such a project to polish my skills and extend the knowledge I got building PCF components for fun. Let me move closer to the subject. I was working on the component that … Continue Reading Andrew Butenko’s Article on their blog PCF: 2 tips to minify the size of your PCF components (up to 15 times smaller)...

Read More
How to get type of the instance (production/sandbox/something else) using code
Sep24

How to get type of the instance (production/sandbox/something else) using code

I was working on the plugin where logic had to work differently depending on the type of the instance, i.e. if code is executed in Sandbox environment – do A, if code is executed in Production – do B. I never developed anything similar before and search engines did not bring anything valuable. After research … Continue Reading Andrew Butenko’s Article on their blog How to get type of the instance...

Read More
JS: How to get the originating record reference in the form script of the Quick Create Form
Sep16

JS: How to get the originating record reference in the form script of the Quick Create Form

Just imagine that you need to define the context in which “Quick Create Form” was opened and depending on the context – to do some additional operations. In this short post I provide supported code you can use to define it. Create JavaScript webresource and add following code inside: [crayon-5f61756fa4e98564993926/] Add this webresource to the … Continue Reading Andrew Butenko’s Article on their blog JS:...

Read More
PCF: Adding external handlers to controls
Aug31

PCF: Adding external handlers to controls

After I published the initial version of my PCF Control Toolkit I was asked how I was able to use external JS files possible in one of the controls. In this post, I decided to provide follow along steps to enable the same possibility in controls you develop and demonstrate the approach on the example … Continue Reading Andrew Butenko’s Article on their blog PCF: Adding external handlers to controls After I published the...

Read More
Development of custom Html/JS Webresources with help of modern frameworks
Apr22

Development of custom Html/JS Webresources with help of modern frameworks

As you may know, Dialogs have been deprecated and are going away. I have a few customers who’ve asked me to replace their existing dialogs with something that would allow them to get the same result without loses in functionality. Microsoft recommends 2 techniques to replace Dialogs – BPF and Canvas Apps (embedded or opened … Continue Reading Andrew Butenko’s Article on their blog Development of custom Html/JS...

Read More
Populate Regarding and Activity Party Fields in the UCI Interface
Apr17

Populate Regarding and Activity Party Fields in the UCI Interface

There are a few different approaches developers used to prepopulate the “Regarding” and “Activity Party” fields of activities: The “Microsoft” way – the way the Classic UI worked to prepopulate fields – usage of undocumented parameters passed through the url and different variations around it. From Microsoft’s perspective this approach is unsupported. I’ve published 2…...

Read More
Open proper form based on record’s data – UCI way
Apr14

Open proper form based on record’s data – UCI way

A cool feature of the 2011 CRM version was the possibility to have multiple forms for the same entity. That feature is awesome but it has one drawback – it’s not possible to create some kind of dependency between the form to use in the context of data. Among developers, there were a few ways … Continue Reading Andrew Butenko’s Article on their blog Open proper form based on record’s data – UCI way A...

Read More
What’s new in D365 2020 Wave 1 release for front-end developers
Mar09

What’s new in D365 2020 Wave 1 release for front-end developers

There are a lot of different blog posts and video reviews of features available as a part of the Dynamics 365 2020 Wave 1 release. I played with this release a bit and found 2 client-side code enhancements that can be interesting (or even useful) for developers. I wrote that Xrm.Navigation.navigateTo can be used to … Continue Reading Andrew Butenko’s Article on their blog What’s new in D365 2020 Wave 1 release for...

Read More

Xrm.Navigation.navigateTo – gotchas, tricks and limitations

Here are ways that were used by developers to show Modal Dialogs: Xrm.Internal.openDialog Alert.js Custom Dialogs that used different frameworks like jQuery UI Dialog or similar But the main and common issue of options available was that those approaches can’t be considered as supported. And it stayed the same for years until Microsoft introduced Xrm.Navigation.navigateTo … Continue Reading Andrew Butenko’s Article...

Read More
Xrm.Utility.lookupObjects: Episode 3: The UCI strikes back
Oct21

Xrm.Utility.lookupObjects: Episode 3: The UCI strikes back

Today was the last day of the North America UGSummit. It was my 3rd UGSummit and I’m already prepared to pack my bags to travel to next year’s UGSummit in Nashville, TN. I like it a lot for many reasons – reconnecting with my MVP Family, thought-provoking sessions, networking, and the “CRMUG Medics” booth. For … Continue Reading Andrew Butenko’s Article on their blog Xrm.Utility.lookupObjects:...

Read More

Refreshing the ribbon – form vs grid – Andrew Butenko’s Blog

So today my colleague experienced issue refreshing grid of the grid. According to SDK formContext.ui.refreshRibbon had to to the trick but it did not work. After some digging and googling I found an answer – there is a global function using which it is possible to refresh the grid – refreshRibbon so here is tip for you: Use formContext.ui.refreshRibbon();

Read More

Installing D365CE 9.0 – step by step instruction – Andrew Butenko’s Blog

Microsoft released on-premise version of Dynamics 365 for Customer Engagement a month ago. In this post I share experience I got during installation. I used “single-box” server where I installed Windows Server 2016 with AD Controller, DNS and WebServer roles and SQL Server 2016 SP2. Don’t use this approach in productive environment because it’s not supported to install D365CE… Continue Reading Andrew Butenko’s Article on...

Read More

How to make 9.0 Classic Client a bit cleaner – 2 – Andrew Butenko’s Blog

In one of my previous posts I played with layout of new WebClient. Idea of this post I got from question was asked on CrmUG forum – is it possible to remove big gray areas under sections? I played a bit and found a way: Add following code to run on form load and that should do the trick. function reformatForm() { try… Continue Reading Andrew Butenko’s Article on their blog

Read More

Show ribbon button depending on Application running – Andrew Butenko’s Blog

Several days back I saw an email from Steve Mordue MVP asking if it is possible to filter ribbon elements based on application like it’s implemented for entities, views and forms. Answer was that at the moment there is no easy way to do it. In this post I will help Steve to resolve his issue using JavaScript and Ribbon Workbench. First of all to define what application is running

Read More

My YouTube channel – Andrew Butenko’s Blog

Leave a Reply Cancel reply Your email address will not be published. Required fields are marked * Comment Name: * Email * Website Notify me of follow-up comments by email.Notify me of new posts by email. Continue Reading Andrew Butenko’s Article on their blog

Read More

How to use Xrm.Utility.getResourceString in Html WebResources – Andrew Butenko’s Blog

I saw several threads on community forums that state “Xrm.Utility.getResourceString” functionality doesn’t work in Html webresources. I decided to spend some time digging to find out why it doesn’t work and how to make it work. During investigation I found out that Html window missed several objects that were available on regular entity form. Unfortunately… Continue Reading Andrew Butenko’s Article on their...

Read More

Data migration from ground to cloud – my experience – Andrew Butenko’s Blog

During last 12 month I participated in several migration projects from ground to cloud. In this post I will share my experience migrating customizations and data. First recommendation – if your instance is eligible for FastTrack – don’t even think regarding other options. There will be no need to develop migration packages, map users, original data audit logs will stay in-place,… Continue Reading Andrew Butenko’s Article...

Read More
Html Webresource, Classic UI vs UCI – story of broken functionality
Dec07

Html Webresource, Classic UI vs UCI – story of broken functionality

This morning started for me from bug I found really interesting. Product (custom visualization of data we did using Html/JS webresource developed for customer) didn’t work as it should on the UCI. The same time everything worked fine on the Classic UI Client. My investigation led to scary fact – OOB Api (even in your … Continue Reading Andrew Butenko’s Article on their blog Html Webresource, Classic UI vs UCI...

Read More
HowTo send record Url pointing to specific Model Driven Apps
Dec05

HowTo send record Url pointing to specific Model Driven Apps

Model Driven Apps were released as a part of 8.2 release (and were called just Apps that time). It’s really cool feature that allows you to build role-tailored applications that have functionality required for specific role. What is available through UI unfortunately is not available through workflows – there is no possibility to define specific … Continue Reading Andrew Butenko’s Article on their blog HowTo...

Read More
How to Retrieve Duplicates using WebApi
Dec03

How to Retrieve Duplicates using WebApi

In this post I provide 2 ways to retrieve duplicates – using plain JS way and with usage of Xrm.WebApi namespace that was introduced as a part of 9.0 release. So here is plain JS: [crayon-5d16ad0646a97950720616/] And here is Xrm.WebApi version: [crayon-5d16ad0646a9d889705896/]   Continue Reading Andrew Butenko’s Article on their blog How to Retrieve Duplicates using WebApi In this post I provide 2 ways to retrieve...

Read More

Showing ribbon button based on the result of async operation – Andrew Butenko’s Blog

var AccountRibbon = (function () {     //this variable stores if async operation was already completed    var isAsyncOperationCompleted = false;    //this variable stores the result – if button enabled or not    var isButtonEnabled = false;     function IsButtonEnabled(formContext) {        //If async operation was already completed I just return the result of it

Read More

Pass DateTime parameters to set field record values – Andrew Butenko’s Blog

Today I got requirement to open new record form with prepopulated DateTime field. This article describes how to pre-set Date field: The following sample sets the Est. Close Date field for a new opportunity to January 31, 2011. The unencoded value for the extraqs parameter is “estimatedclosedate=01/31/11”. No single word about time component. Luckily I found a way to make it work…. Continue Reading Andrew Butenko’s Article...

Read More

How to make 9.0 Classic Client a bit cleaner – Andrew Butenko’s Blog

At the moment I do migration for one of customers from 8.2 ground to 9.0 cloud. I migrated all the customizations and customer was not satisfied with layout of updated classic 9.0 client. The biggest complain was related to huge whitespaces around fields. Just compare the same default forms of account entity 8.2 on the left and 9.0 classic UI on the right: Obviously there was no… Continue Reading Andrew Butenko’s Article...

Read More

How to share record with user using WebApi – Andrew Butenko’s Blog

var target = { “accountid”: “ACAAB842-21C7-E811-A96F-000D3A16A41E”, //put <other record type>id and Guid of record to share here “@odata.type”: “Microsoft.Dynamics.CRM.account” //replace account with other record type}; var principalAccess = { “Principal”: { “systemuserid”: “d272654b-57f5-4564-8d0b-36d0d4c426c4”, //put teamid here and Guid of...

Read More

How to call QuerySchedule using WebApi – Andrew Butenko’s Blog

var context; if (typeof GetGlobalContext === “function”) {    context = GetGlobalContext();} else {    context = Xrm.Page.context;} var start = new Date(); //Put Start datetime here var end = new Date(); //Put End datetime hereend.setDate(end.getDate() + 1); var requestUrl = “/api/data/v8.2/QuerySchedule(ResourceId=@p1,Start=@p2,End=@p3,TimeCodes=@p4)”;requestUrl += “?@p1=” +

Read More
Read More
Read More
Read More