Why is my PCF not in the list?

Did this ever happened to you: you’ve developed a PCF, uploaded it, but when you want to customize it for a control you don’t find it in the list? At this point you might be a little lost because you don’t get much information from your environment. I’ll describe the cases I’ve noted until now. They happened to me or were asked in the community forum. This a note to myself, but maybe will help you too in troubleshooting.

Let’s start with the obvious things… which still cost some time if you don’t realize it right away.

Uploaded to the wrong environment

It can easily happen. Started a PCF, designed the properties, bundled and uploaded using “pac pcf push” but then you don’t find the PCF in the list.

The problem: the power platform cli (pac) won’t ask every time to which environment should push the PCF. I like that I’m not asked every time, but that means that when I upload the first time in the morning, I need to check if I’m using the right connection.

The solution: read what the pac  cli is telling you. It’s the first line:

The data type of the first bound property counts

First of all, we need to define the right format (of-type) for the property. Sometimes the PCF is uploaded in the environment but we are searching for an attribute with the wrong data type or format. But we can define more properties for one PCF, which opens a lot of possibilities. But which one counts?

The field type PCF can be attached on model-driven forms only to the first bound property.

Each PCF has a special relation to the “first property”. The other bound properties will reflect the changes, but we cannot customize the PCF for them.

Let’s see one example of manifest:

Let’s extract the main keywords:

<property name="inputProperty" ... of-type="OptionSet" usage="input" />
<property name="singleText" ... of-type="SingleLine.Text" usage="bound" />
<property name="lookupProp" ... of-type="Lookup.Simple" usage="bound" />

Before you go on reading, take a moment, and try to find out for what type of columns will we be able to attach this control: an option set (choice), single line of text or a simple lookup? Or maybe for all of them?

The answer is: the second property, the single line of text (“SingleLine.Text”), because the rule is “first bound property

<property name="inputProperty" ... of-type="OptionSet" usage="input" />
<property name="singleText" ... of-type="SingleLine.Text" usage="bound" />
<property name="lookupProp" ... of-type="Lookup.Simple" usage="bound" />

The first property “inputProperty” is of type OptionSet, but it has ‘usage=”input”’, so we won’t be able to attach it to an optionset column (even if the control is designed to be read-only). The first one who counts is the “FIRST BOUND” property, so the “singleText”.

The third property is of type lookup, but we won’t be able to choose my control for a lookup. That’s because it’s not the first property. Still, after we choose the control for a text, we can bind the “lookupProp” to a lookup column.

My control “ALMTest” is not available for “industrycode” which is an optionset (choice) column
My PCF “ALMTest” cannot be found for a lookup column
We can bind it to a text column, and can also choose the optionset and lookup property

Remember the name or the translation

Sometimes the control is there, but we cannot spot it at first glance. The list of controls can be long, and we need to remember how we named the PCF. Maybe is a good practice to prefix the own components with the company prefix or something similar. This will make it easier to find them in the list.

Also, remember that in case you have translations, the name shown in the list of controls is the translated one. If you translate ist completely different, you might end up searching it in the list.

Let’s consider the manifest, where we have the control display-name-key=”ALMTest”

Since we have defined the translations files (resx)…

…and we have the “ALMTest” defined in the resx (ALMTest translated)

… the translated name is shown in the list:

You imported using an unmanaged solution but forgot to publish

That’s also an obvious one, but if you import the control using the new maker portal, there is no “publish” reminder after the import process. Sometimes that’s the reason we wonder why we don’t find the control in the list.

Now not that obvious reasons:

Field type PCF needs at least one bound property

If the PCF has only properties of type “input”, it won’t be shown in the list. As we saw before, the first bound property counts. If there is no one, we won’t be able to find the PCF in the list.

A dataset PCF combined with bound properties won’t work

When we define a PCF, we can choose from two types: field or dataset. But unfortunately, in model-driven if the PCF is of type dataset, we won’t be able to add more bound properties.  For the time being it seems to work only in canvas apps.

The effect: you won’t see the control in any list. Not for the field you defined, and not for the dataset (subgrid for instance).

This manifest won’t work

A combination that works: a PCF of type dataset and properties with usage “input”. But that means that you get the values for the input properties only in the beginning. If the value changes, the PCF won’t be notified about this change, even if the property is on the form.

Renaming a dataset property

Don’t rename a dataset property. The form seems completely broken after that, because you don’t get the chance to change the control anymore (or remove it). When you open the “control” tab, and nothing appears there except “Add control…” , you know that something is broken. The only way I could fix that, was to upload again the control with the parameters renamed back, remove it from the form, and start again from the beginning.

The current control is not showing … something is wrong with your previous uploaded control … you cannot delete it anymore from the form

Only one “usage” per property

For every property we should define the “usage” attribute only once. For now, a manifest declared like this

<property of-type=”SingleLine.Text” usage=”input” usage=”bound” />

… would be accepted for upload, but only the first usage will be taken into consideration. Since my first usage is “input”, the PCF doesn’t have any bound property, so we won’t see it in the list.

Hope this helps you to figure out how to troubleshoot when you don’t find the control in the list.

Photo by Jonas Stolle on Unsplash


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Website Powered by WordPress.com.

Up ↑

%d bloggers like this: