Разработка
17
Окт
0

Хранение любых файлов в Веб-ресурсах

По-хорошему Веб-ресурсы позволяю хранить ограниченный набор типов файлов. Но к счастью, CRM при сохранении файлов в Веб-ресурсе производит проверку только по его расширению – сам контент не проверяется. Поэтому Вы можете изменить расширение любого файла на XML и сохранить его в XML Веб-ресурсе.

После этого можете получить его программно следующим образом:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Client;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Runtime.Serialization;
using System.IO;

namespace AnyFileType
{
    class Program
    {
        static void Main(string[] args)
        {
            // Подключаемся к CRM
            ClientCredentials credentials = new ClientCredentials();
            credentials.Windows.ClientCredential = new System.Net.NetworkCredential("Administrator", "1qaz@WSX", "D2011");
            Uri uri = new Uri("http://crm2011:5555/superfirma/XRMServices/2011/Organization.svc");
            OrganizationServiceProxy proxy = new OrganizationServiceProxy(uri, null, credentials, null);
            proxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
            IOrganizationService service = (IOrganizationService)proxy;

            // Формируем запрос Веб-ресрса
            QueryExpression query = new QueryExpression()
            {
                EntityName = "webresource",
                ColumnSet = new ColumnSet("content", "displayname"),
                Criteria = new FilterExpression
                {
                    FilterOperator = LogicalOperator.And,
                    Conditions = 
                    {
                        new ConditionExpression
                        {
                            AttributeName = "name",
                            Operator = ConditionOperator.Equal,
                            Values = { "new_superPDF.pdf" } // Фильтрация по имени
                        }
                    }
                }
            };

            // Отправляем запрос
            RetrieveMultipleRequest rmr = new RetrieveMultipleRequest(); 
            rmr.Query = query;
            RetrieveMultipleResponse resp = (RetrieveMultipleResponse)service.Execute(rmr);
            Entity wr = resp.EntityCollection.Entities[0];
            
            // Сохраняем файл на диске
            byte[] filebytes = Convert.FromBase64String(wr["content"].ToString());
            FileStream fs = new FileStream(@"c:\test\" + wr["displayname"], FileMode.Create);
            foreach (byte b in filebytes)
            {
                fs.WriteByte(b);
            }
            fs.Close();

            Console.WriteLine("Файл " + wr["displayname"] + " сохранен на диске.");
            Console.WriteLine("Press <Enter> to exit.");
            Console.ReadLine();
        }
    }
}

Здесь мы делаем следующее:

  • Подключаемся к CRM;
  • Формируем запрос на возвращение определенного Веб-ресурса (отбираем его по имени);
  • Выполняем запрос и получаем результат;
  • Из пришедших имени файла и контента создаем файл на локальном диске.



Комментарии (0)

*

code