Retrieve Record using Alternate Keys

Instead of retrieve a single record using

Entity IOrganizationService.Retrieve(string entityName, Guid id, ColumnSet columnSet);

You can easily retrieve the record using its alternate keys if you don’t have the id in advance:

var keys = new KeyAttributeCollection
{
	{ "new_parent", parentRef.Id },
	{ "new_code", "code01" }
};

var request = new RetrieveRequest
{
	ColumnSet = new ColumnSet("field_logical_name"),
	Target = new EntityReference("entity_logical_name", keys)
};

try
{
	var response = (RetrieveResponse)service.Execute(request);
	if (response.Entity != null)
	{
		service.Delete(response.Entity.LogicalName, response.Entity.Id);
	}
}
catch (Exception)
{	
}

Note that if there is no record matched the keys, an exception will be thrown, you’ll need to handle the exception in that case.

Advertisements

The attribute with AttributeId = ‘guid’ was not found in the MetadataCache

I encountered this error when trying to export the solution from Dev environment. There was little information in the exception or the log file, but I could guess that something had been deleted and it didn’t update the MetadataCache (or the solution) somehow.

After googling, I found the solution is to delete the attribute/component from the CRM solution.

private static void RemoveComponentFromSolution(IOrganizationService service, Guid componentId, int componentType, string solutionName)
{
	RemoveSolutionComponentRequest removeRequest = new RemoveSolutionComponentRequest()
	{
		// this is the Guid you have found within your Dynamics 365 trace files
		ComponentId = componentId,
		ComponentType = componentType,
		// This is the unique name, not the display name of the solution you are trying to export
		SolutionUniqueName = solutionName
	};

	var response = service.Execute(removeRequest);
}

The component type can be retrieved using FetchXML

<fetch top="50" &gt;
  <entity name="solutioncomponent" &gt;
    <all-attributes/&gt;
    <filter type="and" &gt;
      <condition attribute="objectid" operator="eq" value="component guid here" /&gt;
    </filter&gt;
  </entity&gt;
</fetch&gt;

Sync Office 365 User Photos to CRM Users with Flow

Background

I got a requirement that the client needs user profile photos in Office 365 to be synced to CRM Users. It is Dynamics 365 CE Online, and users don’t change profile photo often. There is no OOB way to achieve it so I need to develop custom synchronization.

Continue reading “Sync Office 365 User Photos to CRM Users with Flow”

Alternative to HttpUtility.UrlEncode in Dynamics CRM Online

If you try to use HttpUtility.UrlEncode in your plugin or workflow code, you’ll get a security error:

System.Security.SecurityException: That assembly does not allow partially trusted callers.

Because it’s not allowed in CRM Online.

Instead, we should use this one:

Uri.EscapeDataString