Ignore Casing in dynamics CRM FetchXML - dynamics-crm

I am using the below FetchXML
<filter type="and">
<condition attribute="emailaddress" operator="eq" value="jon#gmail.com" />
</filter>
So is there a way to ignore casing in Fetch XML?

It depends on sql server Database Settings. Default is case insensitive.
Although it’s optional, consider accepting the SQL Server default settings for Collation Designator, Sort Order, and SQL Collation. Dynamics 365 for Customer Engagement supports the following collation orders:
Case-sensitive
Case-insensitive
Accent-sensitive
Accent-insensitive
Binary sort order (such as Latin1_General_100_BIN)
https://learn.microsoft.com/en-us/dynamics365/customer-engagement/on-premises/sql-server-requirements-recommendations

Related

Dynamics FetchXML condition checking text field beginning with pattern "xxABC"

In Microsoft Dynamics 365 FetchXML, is there a way to check a text field with the condition that it begins with "xxABC", where "xx" can be anything?
This is actually possible (to my surprise).
I created a few Account records, named:
"aacd"
"abcde"
"zxcdef"
Using _ as the placeholder for single characters I got the desired result:
<fetch top="50">
<entity name="account">
<attribute name="name" />
<filter>
<condition attribute="name" operator="like" value="__cd%" />
</filter>
</entity>
</fetch>
Under the hood this like condition appears to be translated into T-SQL. Take a look at the documentation LIKE (Transact-SQL) and have fun!

How to unmerge records which are merged from D365 OOB feature?

How to unmerge records which are merged from D365 OOB feature? Is there any custom code solution ?
Unfortunately, un-merging cannot be achieved in any OOB option and AFAIK, no community solutions are available.
As this is totally a rare requirement, we can build some console app for this.
We know that the master record will get/copy all the subordinate record field values after merging (based on choice in Merge screen), the subordinate record will get deactivated (still holding its original field values only). All the related records will be remapped to master record. So we have to reverse engineer all this for un-merging.
From my research, looks like the deactivated subordinate record will hold the master record as a link in masterid field. We have to pull all these records using the query below & iterate through each record, and then achieve what we want.
<fetch>
<entity name="contact" >
<attribute name="fullname" />
<attribute name="merged" />
<attribute name="masterid" />
<filter>
<condition attribute="merged" operator="eq" value="1" />
</filter>
</entity>
</fetch>

How to get records from multiple entities by text search in dynamics crm by javascript or api?

I want to retrieve records from multiple entities by matching text. Is it possible using fetchxml or web api? I want to use it by javascript.
This is certainly achievable using FetchXML. Specifically you want to use the like operator. For example the following Fetch Query searches contact name and email for a given value:
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
<entity name="contact">
<attribute name="fullname" />
<attribute name="contactid" />
<filter type="and">
<filter type="or">
<condition attribute="fullname" operator="like" value="%[Insert Dynamic Value]%" />
<condition attribute="emailaddress1" operator="like" value="%[Insert Dynamic Value]%" />
</filter>
</filter>
</entity>
</fetch>
Write a similar fetch query for each table you wish to search.
Is it possible to combine all entities together instead of requesting separately using fetchXml?
No, by design FetchXML does not support querying multiple unrelated records. Although you can query against related records in a single fetch expression, you are not able to enforce OR conditions across multiple tables. For example, you cannot write a FetchXML query comparable to the following SQL:
SELECT *
FROM contact
JOIN account on contact.accountid = account.accountid
WHERE contact.fullname like '%foo%'
OR account.name like '%foo%'
It appears to be possible, though unsupported, to access Relevance Search via an API: https://bguidinger.com/blog/relevance-search-api

Loading Data from Dynamics CRM to SQL Server

Not able to get optionset string from Dynamics CRM to SQL Server using Azure data factory.
I am using Azure data factory to move data from Dynamics CRM to SQL DB. I used fetchXML query to get the data from source (CRM). I am able to get normal string and guid type values without any issue.
But the optionset field from CRM is coming as Int32 type (ie, I am getting the value of optionset, not the string).
How can I fix this issue?
I'm going to have to sync the stringmaps entity too as I exceeded the link-entity limit for a given FetchXML query.
The following will bring in the textual value of an OptionSet selection.
<link-entity name="stringmap" from="attributevalue" to="____" visible="false" link-type="outer" alias="____">
<filter type="and">
<condition attribute="objecttypecode" operator="eq" value="___"/>
</filter>
<attribute name="value"/>
</link-entity>
to should be the name of the OptionSet column on the host/root entity
alias whatever you want to call the column in the output. I used the same value as to
value This is the object type code for your host/root entity. It is an integer value.
Probably you are using this approach to get the fetchxml resultset as Dynamics source to dumping into SQL using Azure Data factory. The problem you are facing is unable to consume the formatted text value for that picklist option.
We will do consume the formatted value using below syntax in code: Reference
//Option set
var industrycodeValue = accountDetails['industrycode'];
var industrycodeTextValue = accountDetails['industrycode#OData.Community.Display.V1.FormattedValue'];
If you cannot do such thing, then it’s better to dump another table in your SQL called stringmap which will store all the picklist options across the system.
Then you can inner join both tables to get the necessary data.
select INC.TicketNumber[Case ID],SMT.Value[Status Name], SMT.AttributeValue[Status Value]
from incident as INC inner join StringMap as SMT
on INC.StatusCode = SMT.AttributeValue
where SMT.AttributeName='statuscode' and SMT.ObjectTypeCode=112
Read more

Are composite joins possible using FetchXml in Microsoft Dynamics CRM 4.0?

I am using FetchXml to query CRM 4.0. We have a special case that will require a composite join between CRM entites. The FetchXml schema indicates that multiple link-entity elements are allowed, and it also indicates that multiple filter/condition elements can be added to a link-entity. The problem I'm facing is that the value attribute of the condition element does not appear to permit an entity/column name. It expects an explicitly declared value.
For example, FetchXml lets you specify this:
<link-entity name='myentity' from='column1' to='column2'/>
... which does the T-SQL equivalent of this:
JOIN myentity on column1 = column2
And it lets you specify this:
<link-entity name='myentity' from='column1' to='column2'>
<filter type='and'>
<condition attribute='column3' operator='eq' value='myvalue' />
</filter>
</link>
... which is the T-SQL equivalent of this:
JOIN myentity on column1 = column2 AND column3 = 'myvalue'
FetchXml does not appear, however, to provide an equivalent of this:
JOIN myentity on column1 = column2 AND column3 = column4
Note the difference. FetchXml provides for conditions in the join, but it does appear to provide for a composite join, that is, a join across multiple columns.
Has anyone out there in cyberspace been able to perform a composite join using FetchXml in CRM 4.0? Thanks!
More information:
I'm hunting an answer that uses FetchXml to accomplish this - not SQL or the QueryExpression syntax. The SQL above is there just to explain the concept.
No, it doesn't permit this. Fetch XML is pretty limited when it comes to anything non-basic in joins. If I'm curious I usually test my query using Stunnware Tools. If it is not exposed there it probably can't be done.
Unfortunately, in situations like these these I usually end up (am forced into) taking a multiple query approach to the problem.
I know you said you're not interested in this - but I'm pretty sure QueryExpression won't handle it either. In my experience it only offers a subset of the fetchxml functionality.

Resources