Dynamics 365(CRM) Organization Update Import Failed in perform Action Install of Solution=CustomControlsCore …

We encountered the following error while updating one of our client’s organization from 8.0 to 8.2x. Other organizations got updated without any issue but this one just won’t.

Error| Failed in perform Action Install of Solution=CustomControlsCore, FileName=CustomControls.zip, Version=, Action=Install for OrgId=xxx

Since other organizations are getting updated without a problem we can imagine the issue is with the organization’s database.
After a rigorous googling and getting through a lot of org. import/update issues we fixed the problem as follows:
Problem: Our CRM base language is danish but the SQL user performing org update has default language English…
Solution: change the user’s default language to danish as is of CRM.
To find user’s default language simple open SQL_Management_Studio and under Security select properties of the user and the default language will be shown in the bottom and simply change it to one which is of CRM, or run SQL:
SELECT default_language_name
FROM sys.server_principals
WHERE name = '<user>'

To find available language name in SQL server:
SELECT name,alias FROM sys.syslanguages WHERE name = '<user>'

To set the default language for the user:
Exec sp_defaultlanguage ‘<user>’,'<languageName>’

Try updating organization from Deployment Manager and it would go smooth 🙂

Dynamics 365(CRM) on-premise huge Attachments size SQL fix (Update/Delete)

While upgrading one of our client we found huge size of database where almost 75% of the DB size was taken by the Attachments table.
Her is the sql script which is actually just updating the body field to release size occupied by large attachments. Be careful while using it as it might take several hours depending on the number of records. Batch size is set to 1000 which can be modified according to the situation. Script processes emails with no activities for more than 2 years which can be adjusted as required.

DECLARE @Count INT=1, @Total INT=0
WHILE @Count>0
UPDATE dbo.Attachment
Body = ‘QXR0YWNobWVudCB3YXMgYXJjaGl2ZWQgLSA5LzIwMTku’, — BASE64 for “Attachment was archived – 9/2019.”
FileSize = 34,
MimeType = ‘text/plain’,
FileName = FileName + ‘.txt’
WHERE AttachmentId in (
select TOP 1000 ATT.AttachmentId — Batchsize=1000
FROM dbo.Attachment ATT
INNER JOIN ActivityMimeAttachment AS AMA ON ATT.AttachmentId = AMA.AttachmentId
INNER JOIN Email AS EML ON EML.ActivityId = AMA.ObjectId
INNER JOIN ActivityPointer AS ACT ON EML.ActivityId = ACT.ActivityId
AMA.ObjectTypeCode = 4202 — emails
AND ATT.FileSize > 50000
AND ACT.ModifiedOn < GETDATE() – 730 — older than 2 years
order by ATT.FileSize desc — to process larger attachments first
SET @Count= @@ROWCOUNT — effted rows
SET @Total = @Total + @Count
PRINT ‘Processed ‘ + CAST(@Total as varchar) + ‘ records.’

Her is the sql script to find out the top 10 tables with largest size:

select top 10 schema_name(tab.schema_id) + ‘.’ + tab.name as [table],
cast(sum(spc.used_pages * 8)/1024.00 as numeric(36, 2)) as used_mb,
cast(sum(spc.total_pages * 8)/1024.00 as numeric(36, 2)) as allocated_mb
from sys.tables tab
join sys.indexes ind
on tab.object_id = ind.object_id
join sys.partitions part
on ind.object_id = part.object_id and ind.index_id = part.index_id
join sys.allocation_units spc
on part.partition_id = spc.container_id
group by schema_name(tab.schema_id) + ‘.’ + tab.name
order by sum(spc.used_pages) desc;

Source: https://dataedo.com/kb/query/sql-server/list-10-largest-tables

Dynamics 365 2019 release wave 2. Some of long waited features in Sales and Customer Service (coming from Aug-Oct)

Following are some of the upcoming features finally coming after public voice. Though most of them are only available in unified interface.


  • Rich text editor on non-blocking pop-up for composing emails (only on UI)
    It helps writing email with context to the record we are working on and can have multiple working drafts at same time. Add attachments, navigate between records and so on.
  • Business card scan (only on UI in US and EU regions)
    Scan business card via mobile or web.
  • Customization of opportunity close dialog box (only on UI)
    This feature was on customer’s voice for several years and is finally heard by MS :). A lot of companies created their own html webresource to achieve this.
  • Lead qualification with options of creating relevant records (only on UI)

Customer Service:

  • Knowledge management inline image enhancementUsers can directly copy, paste, and drag and drop images, or select them from File Explorer and add them to knowledge articles, instead of sourcing them from links, as is done today.

For a full list of features please visit:



Dynamics 365 (CRM) Users, Security Roles and Assign/Delete Views

Dynamics 365 CRM gives out of the box functionality to view a user’s security role but what if we want to view all users who have a particular security role? we might have to build query using advanced find or something else…
Another situation can be if a user have left company but owns som important views. How to share those to other(s) or delete them?
To answer these questions we wrote a little utility that will help:
1. View a user’s security roles.
2. View users a particular security role is assigned to.
3. View a user’s personal views
4. Delete a user’s personal views
5. Assign a user’s views to another user (keeping both source user and target user updated instantly)
6. Swap between source and target user updating their views windows.

To install simply download the managed solution from github DownloadLink and import to organization v9.1 and open configuration page.

Below is a screenshot of utility.

Scribe Insight “Error opening data object ” (solved). Security update for microsoft windows (KB4512517)

If anyone is experiencing this error then there can be one of the following 2 reasons.
(If error just started showing up without any change and integration has been working fine before then jump straight to option 2)

  1. Rights issue
    – Check accound running scribe services have permissions to collaborations folder and Message queues
    – Check scribeinternal dns or file dns is of type system dns not user dns
  2. Security update for microsoft windows (KB4512517)
    If integration has been working fine and error showed up then there might be this security update installed. You can uninstall the update or contact scribe for other solution.


Hvis du lærer dette sparer du RIGTIG meget tid……

Vi oplever jævnligt, at større mængde nyt data (fx nye firmaer) bliver tastet manuelt ind i CRM systemet. Det er en unødvendig tidsrøver, men mange vælger den løsning fordi de tror, at det er for bøvlet og svært at importere data.

”Det er kun noget, som de der IT folk kan finde ud af….”

”Det er kun 30 nye kunder – det er hurtigere at bare taste det hele ind selv”

”Sidst jeg prøvede virkede det ikke”

Men det behøver heldigvis ikke at være sådan. Det er slet ikke så besværligt – det der data import.

Læs mere


…. Og hvad du kan gøre ved det.

Lad os bare være ærlige – om du er ny eller erfaren bruger i CRM, så lykkedes tingene ikke altid. (Jo, det driller af og til også os.)

Især visninger kan være tricky. Derfor vil vi gerne hjælpe dig på vej og dele ud af vores tricks; for vi ved godt, hvor frustrerende det er, når de ønskede resultater ikke fremkommer. Eller endnu værre….

Hvis du får forkerte resultater!

(bare rolig – hvis du slet ikke ved, hvad en CRM-visning er, så bare hæng på – det har vi en løsning til)

Lad os give dig et par eksempler på, hvor det ofte går galt:

Du opretter en visning over dine kunder i Århus, men du kan se, at du mangler nogle kunder i søgeresultaterne.

Du vælger måske her at finde dine bedste bandeord frem og supplere med et effektivt hårdt slag på din pc….. bare lige så den forstår alvoren!

Læs mere


At some point on the roadmap of every Dynamics 365 (CRM) developer’s life, one must have wished to press a button to call a Plugin.
A combination of Custom Actions introduced in CRM 2013 and webapi introduced in CRM 2016 made this wish very easy. Developers have used different techniques to achieve the same goal e.g. creating records of dummy enttities or updating dummy fields of an entity to call plugins.
There is a smarter way to do so using Custom Actions and here is how we can do it:
Our solution consists of 4 main parts:

1. A CRM custom action with input/output parameters (it can be bound(on an entity) or unbound(global) depending on your requirements)
2. A plugin registered on the custom action (this will perform the task and will set the outpur parameter with results)
3. Script under the button: this will use webapi to call custom action sending input parameters if necessary and will receive the results as output paramters
4. Ribbon button to call the javascript function

Læs mere


One of the workflow limitations is; it does not support access to its next related entity. One can only access the main entity or the related entities but not next related entity.

we have 3 entities Account, Contact and CustomEntityA.
Account is related to Contact and Contact is related to CustomEntityA. Account is not directly related to CustomEntityA.

If we want to update a field e.g. description on CustomEntityA on update of the description of Account, or if we want to update Account’s description from CustomEntityA’s description, we cannot do it with OOB workflow. We can either write plugin/customWorkflowActivity or there is another option without coding anything which is combination of Action and Workflow.
Læs mere


I oktober 2017 er der frigivet en sikkerhedsopdatering til Microsoft Outlook, som blevet rullet ud på alle maskiner via Windows update. Sikkerhedsopdateringen har en sideeffekt, som gør at den blokerer for at CRM klienten kan få kontakt til CRM systemet. Microsoft anbefaler ikke at man fjerner opdateringen for at løse udfordringen med Dynamcis 365, men har i stedet frigivet et fix, som virker på Microsoft Outlook 2010, 2013 og 2016. I praksis det som skal gøres er, at der skal tilføjes en registreringsnøgle til registreringsdatabasen i Windows. Dette kan gøres manuelt , eller via Group Policies.

Læs mere