Programmatically downloading images files from Dynamics CRM 2011
I came across an issue with an upgrade from CRM 4 to CRM 2011 where the images were all messed up, transparency was gone and had pixelated images, there were over 100 custom entities and download/uploading these manually was not an option.
Here’s a small bit of code to download image web resources from Dynamics CRM 2011.
private static void DownloadIcons(IOrganizationService sdk, string path)
{
QueryExpression qe = new QueryExpression("webresource");
qe.ColumnSet = new ColumnSet("name", "webresourcetype", "content", "displayname");
// 7 = gif, 10 = ico
qe.Criteria.AddCondition("webresourcetype", ConditionOperator.In, new int[] { 7, 10 });
Console.WriteLine("downloading, please wait...");
var results = sdk.RetrieveMultiple(qe);
var all = results.Entities.ToList();
Console.WriteLine("found: {0} web resources", all.Count);
if (!Directory.Exists(path)) { Directory.CreateDirectory(path); }
all.ForEach(a =>
{
var type = a.GetAttributeValue<OptionSetValue>("webresourcetype");
string name = a.GetAttributeValue<string>("name") + ((type.Value == 7) ? ".gif" : ".ico");
// remove any simulated paths using the schema name, eg: mag_/img/xyz.extension
if (name.IndexOf("/") > -1)
{
name = name.Substring(name.LastIndexOf("/") + 1);
}
var content = Convert.FromBase64String(a.GetAttributeValue<string>("content"));
File.WriteAllBytes(Path.Combine(path, name), content);
Console.WriteLine("downloaded: {0}", name);
});
Console.WriteLine("all done!");
}