CRM Portal is an interesting product, in a good way. One thing it doesn’t do very well however, is that a single Entity Form (or Web Form) cannot be used to handle both inserting and editing records for an entity.
This means you’d need a separate form to handle insert, and a separate form to handle edit – even if the two functionalities should work exactly the same way. This creates an issue as you’d need to duplicate any configuration and code associated with this form.
For a while now CRMQuickDeploy has been allowing you to work with code (JS, CSS, HTML, Liquid) for Portal artefacts in Visual Studio. A new feature has now been added to version 3.3 of this tool to help address the code duplication issue in this particular scenario.
New “link item” in CRMQuickDeploy 3.3
As a quick overview, you can now create a “link item” in your Visual Studio project that points to another item. When this “link item” is deployed, the content of the referenced item is used to update the Portal artefact in CRM.
Sound like “Add as Link” that comes OOTB with Visual Studio? Well, yes.. it is pretty much the same idea. “Add as Link” however does not work within the same project OOTB.
Creating “link item” and referencing source item
You can create a “link item” by creating a normal item for a Portal artefact like you normally would, and then append the “.link” extension to it. You specify the source item within the content of the link item using the INI file format. The INI key is sourceItemPath, and the value is the project-relative path to the source item.
So for example, a link item that holds the JavaScript for an Entity Form could be:
Form1 – Create.js.link
To specify its source content (in this case Form1 – Update.js), specify the following in the content of the link item:
sourceItemPath=PortalEntityForms\Form1 – Update.js
A more detailed example
Let say you have two Entity Forms to create and update Application with the following names in CRM:
- Application Form – Create
- Application Form – Update
Because OOTB a Web Page can only host one Entity Form, you also have two Web Pages with the following names in CRM:
- Application Page – Create
- Application Page – Update
Imagine you have some JavaScript attached to the Entity Form, and also some HTML/Liquid attached to the Web Page. Because the two functionalities (Create and Update Application) should function the same way, you’d need to duplicate the JavaScript and HTML/Liquid across these Entity Forms and Web Pages.
Using link items, your Visual Studio project would look like this:
Application Form – Create.js would contain the actual JavaScript to be deployed as normal.
Application Form – Update.js.link would contain:
sourceItemPath=PortalEntityForms\Application Form – Create.js
When a deployment is triggered on Application Form – Update.js.link, the target artefact will be deduced from the file name of the link item, in this case Application Form – Update. The content however will be drawn from the referenced source item, i.e. Application Form – Create.js.
Likewise, Application Page – Create.html would contain the actual HTML/Liquid to be deployed for the Web Pages.
Application Page – Update.js.link would contain:
sourceItemPath=PortalWebPages\Application Page – Create.html
Which artefact types are supported with link item?
The following artefact types are supported:
- Web Page (HTML/Liquid, CSS, JS)
- Entity Form (JS)
- Web Form Step (JS)
Download CRMQuickDeploy
You can download CRMQuickDeploy from the Visual Studio Marketplace.