Ejemplo n.º 1
0
        internal IEnumerable <NuGetPackageViewModel> FetchInstalledNuGetPackages(SharePointConnection connection)
        {
            var result  = new List <NuGetPackageViewModel>();
            var command = new NuGetListCommand();

            command.Url = connection.Url;

            if (connection.AuthMode.Id == SharePointConnectionAuthMode.SharePointOnline.Id)
            {
                command.SharePointVersion = "o365";

                command.UserName     = connection.UserName;
                command.UserPassword = connection.UserPassword;
            }
            else if (connection.AuthMode.Id == SharePointConnectionAuthMode.WindowsAuthentication.Id)
            {
                command.SharePointVersion = "sp2013";

                if (!string.IsNullOrEmpty(connection.UserName) &&
                    !string.IsNullOrEmpty(connection.UserPassword))
                {
                    command.UserName     = connection.UserName;
                    command.UserPassword = connection.UserPassword;
                }
            }

            command.Execute();

            foreach (var p in command.Packages)
            {
                result.Add(new NuGetPackageViewModel(p));
            }

            return(result);
        }
Ejemplo n.º 2
0
        private List <IPackage> FetchLocalNuGetPackages(SharePointConnection connection)
        {
            var repoUrl = "https://www.myget.org/F/subpointsolutions-ci/api/v2";

            var repo   = PackageRepositoryFactory.Default.CreateRepository(repoUrl);
            var result = new List <IPackage>();

            //try
            //{
            //    SPUtils.WithSharePointContext(connection.Url,
            //        connection.UserName,
            //        connection.UserPassword,
            //        context =>
            //        {
            //            var packageManager = new SPMeta2SolutionPackageManager(repo, context);

            //            result = packageManager.LocalRepository
            //                .GetPackages()
            //                .GroupBy(p => p.Id)
            //                .Select(g => g.Where(t => t.IsLatestVersion)
            //                    .OrderByDescending(p => p.Version)
            //                    .FirstOrDefault())
            //                .Where(a => a != null)
            //                .ToList();
            //        });
            //}
            //catch (Exception e)
            //{
            //    MessageBox.Show(e.ToString());
            //}

            return(result);
        }
Ejemplo n.º 3
0
        private List <IPackage> FetchOnlineNuGetPackages(SharePointConnection connection)
        {
            var repoUrl = "https://www.myget.org/F/subpointsolutions-ci/api/v2";
            var repo    = PackageRepositoryFactory.Default.CreateRepository(repoUrl);

            return(repo.GetPackages().Where(p => p.IsLatestVersion).ToList());
        }
Ejemplo n.º 4
0
        public ISharePointResult AddFiles(EntityReference regarding, IList <HttpPostedFileBase> files, bool overwrite = true, string folderPath = null)
        {
            var context = _dependencies.GetServiceContextForWrite();
            var entityPermissionProvider = new CrmEntityPermissionProvider();
            var result = new SharePointResult(regarding, entityPermissionProvider, context);

            if (files == null || !files.Any())
            {
                return(result);
            }

            var entityMetadata = context.GetEntityMetadata(regarding.LogicalName);
            var entity         = context.CreateQuery(regarding.LogicalName).First(e => e.GetAttributeValue <Guid>(entityMetadata.PrimaryIdAttribute) == regarding.Id);

            // assert permission to create the sharepointdocumentlocation entity
            if (!result.PermissionsExist || !result.CanCreate || !result.CanAppend || !result.CanAppendTo)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Create or Append document locations or AppendTo the regarding entity.");
                return(result);
            }

            var spConnection = new SharePointConnection(SharePointConnectionStringName);
            var spSite       = context.GetSharePointSiteFromUrl(spConnection.Url);

            var location = GetDocumentLocation(context, entity, entityMetadata, spSite);

            // assert permission to write the sharepointdocumentlocation entity
            if (!result.CanWrite)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Write document locations.");
                return(result);
            }

            var factory = new ClientFactory();

            using (var client = factory.CreateClientContext(spConnection))
            {
                // retrieve the SharePoint list and folder names for the document location
                string listUrl, folderUrl;

                context.GetDocumentLocationListAndFolder(location, out listUrl, out folderUrl);

                var folder = client.AddOrGetExistingFolder(listUrl, folderUrl + folderPath);

                foreach (var postedFile in files)
                {
                    using (var file = postedFile.InputStream)
                    {
                        // upload a file to the folder
                        client.SaveFile(file, folder, Path.GetFileName(postedFile.FileName), overwrite);
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 5
0
        public ISharePointResult AddFolder(EntityReference regarding, string name, string folderPath = null)
        {
            var context = _dependencies.GetServiceContextForWrite();
            var entityPermissionProvider = new CrmEntityPermissionProvider();
            var result = new SharePointResult(regarding, entityPermissionProvider, context);

            if (string.IsNullOrWhiteSpace(name))
            {
                return(result);
            }

            // Throw exception if the name begins or ends with a dot, contains consecutive dots,
            // or any of the following invalid characters ~ " # % & * : < > ? / \ { | }
            if (Regex.IsMatch(name, @"(\.{2,})|([\~\""\#\%\&\*\:\<\>\?\/\\\{\|\}])|(^\.)|(\.$)"))
            {
                throw new Exception("The folder name contains invalid characters. Please use a different name. Valid folder names can't begin or end with a period, can't contain consecutive periods, and can't contain any of the following characters: ~  # % & * : < > ? / \\ { | }.");
            }

            var entityMetadata = context.GetEntityMetadata(regarding.LogicalName);
            var entity         = context.CreateQuery(regarding.LogicalName).First(e => e.GetAttributeValue <Guid>(entityMetadata.PrimaryIdAttribute) == regarding.Id);

            // assert permission to create the sharepointdocumentlocation entity
            if (!result.PermissionsExist || !result.CanCreate || !result.CanAppend || !result.CanAppendTo)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Create or Append document locations or AppendTo the regarding entity.");
                return(result);
            }

            var spConnection = new SharePointConnection(SharePointConnectionStringName);
            var spSite       = context.GetSharePointSiteFromUrl(spConnection.Url);

            var location = GetDocumentLocation(context, entity, entityMetadata, spSite);

            // assert permission to write the sharepointdocumentlocation entity
            if (!result.CanWrite)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Write document locations.");
                return(result);
            }

            var factory = new ClientFactory();

            using (var client = factory.CreateClientContext(spConnection))
            {
                // retrieve the SharePoint list and folder names for the document location
                string listUrl, folderUrl;

                context.GetDocumentLocationListAndFolder(location, out listUrl, out folderUrl);

                client.AddOrGetExistingFolder(listUrl, "{0}{1}/{2}".FormatWith(folderUrl, folderPath, name));
            }

            return(result);
        }
Ejemplo n.º 6
0
        private LocalNuGetPackageCacheItem LookupCachedItem(SharePointConnection sharePointConnection)
        {
            if (sharePointConnection == null)
            {
                return(null);
            }

            if (!PackageCache.ContainsKey(sharePointConnection))
            {
                PackageCache.Add(sharePointConnection, new LocalNuGetPackageCacheItem());
            }

            return(PackageCache[sharePointConnection]);
        }
        private static Entity GetDocumentLocation(OrganizationServiceContext context, Entity entity, string folderName)
        {
            var spConnection = new SharePointConnection("SharePoint");
            var spSite       = context.GetSharePointSiteFromUrl(spConnection.Url);

            var entityPermissionProvider = new CrmEntityPermissionProvider();
            var result = new SharePointResult(entity.ToEntityReference(), entityPermissionProvider, context);

            if (!result.PermissionsExist || !result.CanCreate || !result.CanAppend || !result.CanAppendTo)
            {
                return(null);
            }

            return(context.AddOrGetExistingDocumentLocationAndSave <Entity>(spSite, entity, folderName));
        }
Ejemplo n.º 8
0
        public ISharePointResult DeleteItem(EntityReference regarding, int id)
        {
            var context = _dependencies.GetServiceContextForWrite();
            var entityPermissionProvider = new CrmEntityPermissionProvider();
            var result = new SharePointResult(regarding, entityPermissionProvider, context);

            // assert permission to delete the sharepointdocumentlocation entity
            if (!result.PermissionsExist || !result.CanDelete)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Create or Append document locations or AppendTo the regarding entity.");
                return(result);
            }

            var entityMetadata = context.GetEntityMetadata(regarding.LogicalName);
            var entity         = context.CreateQuery(regarding.LogicalName).First(e => e.GetAttributeValue <Guid>(entityMetadata.PrimaryIdAttribute) == regarding.Id);

            var spConnection = new SharePointConnection(SharePointConnectionStringName);
            var spSite       = context.GetSharePointSiteFromUrl(spConnection.Url);

            var location = GetDocumentLocation(context, entity, entityMetadata, spSite);

            var factory = new ClientFactory();

            using (var client = factory.CreateClientContext(spConnection))
            {
                // retrieve the SharePoint list and folder names for the document location
                string listUrl, folderUrl;

                context.GetDocumentLocationListAndFolder(location, out listUrl, out folderUrl);

                var list = client.GetListByUrl(listUrl);
                var item = list.GetItemById(id);
                item.DeleteObject();

                client.ExecuteQuery();
            }

            return(result);
        }
Ejemplo n.º 9
0
        internal void DeployNuGetPackageInternal(SharePointConnection connection, IPackage package, bool force)
        {
            var appDataServices = ShServiceContainer.Instance.GetAppDataService <MetaPackDataService>();

            var command = new DefaultInstallCommand();

            command.Url = connection.Url;

            if (connection.AuthMode.Id == SharePointConnectionAuthMode.SharePointOnline.Id)
            {
                command.SharePointVersion = "o365";
                command.SharePointApi     = "csom";

                command.UserName     = connection.UserName;
                command.UserPassword = connection.UserPassword;
            }
            else if (connection.AuthMode.Id == SharePointConnectionAuthMode.WindowsAuthentication.Id)
            {
                command.SharePointVersion = "sp2013";
                command.SharePointApi     = "csom";

                if (!string.IsNullOrEmpty(connection.UserName) &&
                    !string.IsNullOrEmpty(connection.UserPassword))
                {
                    command.UserName     = connection.UserName;
                    command.UserPassword = connection.UserPassword;
                }
            }

            command.PackageSources = appDataServices.NuGetConnections.Select(s => s.Url).ToList();
            command.Id             = package.Id;
            command.Version        = package.Version.ToString();
            command.PreRelease     = package.IsReleaseVersion();

            command.Force = force;

            command.Execute();
        }
Ejemplo n.º 10
0
        private static EntitiesGenerator.Definitions.Definition GetDefinitionFromSharePoint(string connectionString)
        {
            EntitiesGenerator.Definitions.Definition definition = new EntitiesGenerator.Definitions.Definition();
            SharePointConnection sharePointConnection = new SharePointConnection(connectionString);
            System.Data.DataTable tables = sharePointConnection.GetTables();
            SelectTableForm selectTableForm = new SelectTableForm();
            foreach (System.Data.DataRow dataRow in tables.Rows)
            {
                string tableName = dataRow["Title"] as string;
                ListViewItem item = new ListViewItem();
                item.Text = tableName;
                item.Tag = dataRow;
                item.ImageIndex = 0;
                item.Checked = true;
                selectTableForm.AddListViewItem(item);
            }
            if (selectTableForm.ShowDialog() == DialogResult.OK)
            {
                System.Windows.Forms.ListView.CheckedListViewItemCollection checkedItems = selectTableForm.GetCheckedItems();
                foreach (ListViewItem item in checkedItems)
                {
                    System.Data.DataRow dataRow = item.Tag as System.Data.DataRow;
                    string listUrl = (dataRow["RootFolderUrl"] as string);
                    EntitiesGenerator.Definitions.DataTable dataTable = new EntitiesGenerator.Definitions.DataTable();
                    dataTable.SourceName = listUrl;
                    dataTable.TableName = dataRow["Title"] as string;
                    System.Data.DataTable tableColumns = sharePointConnection.GetTable(listUrl);
                    foreach (System.Data.DataRow tableColumn in tableColumns.Rows)
                    {
                        EntitiesGenerator.Definitions.DataColumn dataColumn = new EntitiesGenerator.Definitions.DataColumn();
                        string columnName = tableColumn["InternalName"] as string;
                        Type dataType = tableColumn["FieldType"] as Type;
                        dataColumn.ColumnName = columnName;
                        dataColumn.SourceName = columnName;
                        dataColumn.DataType = TypeManager.GetWellKnownDataTypeName(dataType);
                        dataColumn.Type = dataColumn.DataType;
                        dataColumn.AllowDBNull = !((bool)tableColumn["Required"]);
                        dataColumn.PrimaryKey = (dataColumn.ColumnName == "ID");
                        //dataColumn.Length = GetDataColumnLength(column);
                        dataTable.Columns.Add(dataColumn);

                    }
                    definition.Tables.Add(dataTable);
                }
            }
            return definition;
        }
Ejemplo n.º 11
0
        public ISharePointCollection GetFoldersAndFiles(EntityReference regarding, string sortExpression = DefaultSortExpression, int page = 1, int pageSize = DefaultPageSize, string pagingInfo = null, string folderPath = null)
        {
            var context = _dependencies.GetServiceContextForWrite();
            var website = _dependencies.GetWebsite();
            var entityPermissionProvider = new CrmEntityPermissionProvider();
            var result = new SharePointResult(regarding, entityPermissionProvider, context);

            // assert permission to create the sharepointdocumentlocation entity
            if (!result.PermissionsExist || !result.CanCreate || !result.CanAppend || !result.CanAppendTo)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Create or Append document locations or AppendTo the regarding entity.");
                return(SharePointCollection.Empty(true));
            }

            var entityMetadata = context.GetEntityMetadata(regarding.LogicalName);
            var entity         = context.CreateQuery(regarding.LogicalName).First(e => e.GetAttributeValue <Guid>(entityMetadata.PrimaryIdAttribute) == regarding.Id);

            var spConnection = new SharePointConnection(SharePointConnectionStringName);
            var spSite       = context.GetSharePointSiteFromUrl(spConnection.Url);

            var location = GetDocumentLocation(context, entity, entityMetadata, spSite);

            if (!entityPermissionProvider.TryAssert(context, CrmEntityPermissionRight.Read, location))
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Read document locations.");
                return(SharePointCollection.Empty(true));
            }

            ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Read SharePoint Document Location Permission Granted.");

            var factory = new ClientFactory();

            using (var client = factory.CreateClientContext(spConnection))
            {
                // retrieve the SharePoint list and folder names for the document location
                string listUrl, folderUrl;

                context.GetDocumentLocationListAndFolder(location, out listUrl, out folderUrl);

                var sharePointFolder = client.AddOrGetExistingFolder(listUrl, folderUrl + folderPath);

                var list = client.GetListByUrl(listUrl);

                if (!sharePointFolder.IsPropertyAvailable("ServerRelativeUrl"))
                {
                    client.Load(sharePointFolder, folder => folder.ServerRelativeUrl);
                }

                if (!sharePointFolder.IsPropertyAvailable("ItemCount"))
                {
                    client.Load(sharePointFolder, folder => folder.ItemCount);
                }

                var camlQuery = new CamlQuery
                {
                    FolderServerRelativeUrl = sharePointFolder.ServerRelativeUrl,
                    ViewXml = @"
					<View>
						<Query>
							<OrderBy>
								<FieldRef {0}></FieldRef>
							</OrderBy>
							<Where></Where>
						</Query>
						<RowLimit>{1}</RowLimit>
					</View>"                    .FormatWith(
                        ConvertSortExpressionToCaml(sortExpression),
                        pageSize)
                };
                if (page > 1)
                {
                    camlQuery.ListItemCollectionPosition = new ListItemCollectionPosition {
                        PagingInfo = pagingInfo
                    };
                }
                var folderItems = list.GetItems(camlQuery);
                client.Load(folderItems,
                            items => items.ListItemCollectionPosition,
                            items => items.Include(
                                item => item.ContentType,
                                item => item["ID"],
                                item => item["FileLeafRef"],
                                item => item["Created"],
                                item => item["Modified"],
                                item => item["FileSizeDisplay"]));
                client.ExecuteQuery();

                var sharePointItems = new List <SharePointItem>();

                if (!string.IsNullOrEmpty(folderPath) && folderPath.Contains("/"))
                {
                    var relativePaths    = folderPath.Split('/');
                    var parentFolderName = relativePaths.Length > 2 ? relativePaths.Skip(relativePaths.Length - 2).First() : "/";

                    sharePointItems.Add(new SharePointItem()
                    {
                        Name       = @"""{0}""".FormatWith(parentFolderName),
                        IsFolder   = true,
                        FolderPath = folderPath.Substring(0, folderPath.LastIndexOf('/')),
                        IsParent   = true
                    });
                }

                if (folderItems.Count < 1)
                {
                    return(new SharePointCollection(sharePointItems, null, sharePointItems.Count()));
                }

                foreach (var item in folderItems)
                {
                    var id       = item["ID"] as int?;
                    var name     = item["FileLeafRef"] as string;
                    var created  = item["Created"] as DateTime?;
                    var modified = item["Modified"] as DateTime?;

                    long longFileSize;
                    var  fileSize = long.TryParse(item["FileSizeDisplay"] as string, out longFileSize) ? longFileSize : null as long?;

                    if (string.Equals(item.ContentType.Name, "Folder", StringComparison.InvariantCultureIgnoreCase))
                    {
                        sharePointItems.Add(new SharePointItem
                        {
                            Id         = id,
                            Name       = name,
                            IsFolder   = true,
                            CreatedOn  = created,
                            ModifiedOn = modified,
                            FolderPath = "{0}/{1}".FormatWith(folderPath, name)
                        });
                    }
                    else
                    {
                        sharePointItems.Add(new SharePointItem
                        {
                            Id         = id,
                            Name       = name,
                            CreatedOn  = created,
                            ModifiedOn = modified,
                            FileSize   = fileSize,
                            Url        = GetAbsolutePath(website, location, name, folderPath)
                        });
                    }
                }

                var pageInfo = folderItems.ListItemCollectionPosition != null
                                        ? folderItems.ListItemCollectionPosition.PagingInfo
                                        : null;

                return(new SharePointCollection(sharePointItems, pageInfo, sharePointFolder.ItemCount));
            }
        }
Ejemplo n.º 12
0
        public void ProcessRequest(HttpContext context)
        {
            if (!string.Equals(context.Request.HttpMethod, "GET", StringComparison.InvariantCultureIgnoreCase) ||
                SharePointFileUrl == null ||
                string.IsNullOrWhiteSpace(FileName))
            {
                context.Response.StatusCode = (int)HttpStatusCode.NotFound;
                return;
            }

            try
            {
                var spConnection = new SharePointConnection("SharePoint");
                var factory      = new ClientFactory();
                var request      = factory.CreateHttpWebRequest(spConnection, SharePointFileUrl) as HttpWebRequest;

                // make sure SharePoint receives the cache control headers from the browser

                var requestHeaders = _headersToRequest
                                     .Select(name => new { Name = name, Value = context.Request.Headers[name] })
                                     .Where(header => !string.IsNullOrWhiteSpace(header.Value))
                                     .ToList();

                foreach (var header in requestHeaders)
                {
                    request.Headers[header.Name] = header.Value;
                }

                request.Accept    = context.Request.Headers["Accept"];
                request.UserAgent = context.Request.Headers["User-Agent"];

                DateTime ifModifiedSince;
                if (DateTime.TryParse(context.Request.Headers["If-Modified-Since"], out ifModifiedSince))
                {
                    request.IfModifiedSince = ifModifiedSince;
                }

                WebResponse response;

                try
                {
                    response = request.GetResponse();
                }
                catch (WebException we)
                {
                    // handle non-200 response from SharePoint

                    var hwr = we.Response as HttpWebResponse;

                    if (hwr != null && hwr.StatusCode == HttpStatusCode.NotModified)
                    {
                        context.Response.StatusCode = (int)HttpStatusCode.NotModified;
                        return;
                    }

                    ADXTrace.Instance.TraceError(TraceCategory.Application, string.Format("Exception thrown trying to download {0}", SharePointFileUrl));
                    ADXTrace.Instance.TraceError(TraceCategory.Application, string.Format("ProcessRequest", "Exception details: {0}", we.ToString()));

                    context.Response.StatusCode = (int)HttpStatusCode.BadRequest;

                    return;
                }

                using (var stream = response.GetResponseStream())
                {
                    // forward SharePoint response headers back to the browser

                    var responseHeaders = _headersToRespond
                                          .Select(name => new { Name = name, Value = response.Headers[name] })
                                          .Where(header => !string.IsNullOrWhiteSpace(header.Value))
                                          .ToList();

                    foreach (var header in responseHeaders)
                    {
                        context.Response.AppendHeader(header.Name, header.Value);
                    }

                    context.Response.AppendHeader("Content-Disposition", @"attachment; filename=""{0}""".FormatWith(FileName));

                    int contentLength;

                    if (!int.TryParse(response.Headers["Content-Length"], out contentLength))
                    {
                        // indeterminant length
                        contentLength = -1;
                    }

                    if (contentLength == 0)
                    {
                        context.Response.StatusCode = (int)HttpStatusCode.NoContent;
                        return;
                    }

                    // start streaming file

                    context.Response.StatusCode = (int)HttpStatusCode.OK;

                    const int bufferSize = 65536;
                    var       buffer     = new byte[bufferSize];
                    int       bytesRead;

                    do
                    {
                        bytesRead = stream.Read(buffer, 0, bufferSize);
                        context.Response.OutputStream.Write(buffer, 0, bytesRead);
                    } while (bytesRead > 0);
                }
            }
            catch (Exception e)
            {
                ADXTrace.Instance.TraceError(TraceCategory.Application, string.Format("Exception thrown trying to download {0}", SharePointFileUrl));
                ADXTrace.Instance.TraceError(TraceCategory.Application, string.Format("Exception details: {0}", e.ToString()));

                context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
            }
        }
        public override object BeforeMethod(string method)
        {
            if (method == null)
            {
                return(null);
            }

            using (var serviceContext = PortalViewContext.CreateServiceContext())
            {
                try
                {
                    Entity location;

                    Guid id;

                    if (!Guid.TryParse(method, out id))
                    {
                        return(null);
                    }

                    if (!string.IsNullOrWhiteSpace(_folderName))
                    {
                        // Get documents based on provided folder name.

                        var entity = new Entity(LogicalName)
                        {
                            Id = id
                        };

                        location = GetDocumentLocation(serviceContext, entity, _folderName);
                    }
                    else
                    {
                        // Get documents based on "primary attribute_id" folder.

                        var metadata = serviceContext.GetEntityMetadata(LogicalName, EntityFilters.Attributes);

                        location = GetDocumentLocation(serviceContext, metadata, id);
                    }

                    if (location == null)
                    {
                        return(null);
                    }

                    var crmEntityPermissionProvider = new CrmEntityPermissionProvider();

                    if (!crmEntityPermissionProvider.TryAssert(serviceContext, CrmEntityPermissionRight.Read, location))
                    {
                        ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Read document locations.");

                        return(null);
                    }

                    ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Read SharePoint Document Location Permission Granted.");

                    var spConnection = new SharePointConnection("SharePoint");

                    var factory = new ClientFactory();

                    using (var client = factory.CreateClientContext(spConnection))
                    {
                        // retrieve the SharePoint list and folder names for the document location
                        string listName, folderName;

                        serviceContext.GetDocumentLocationListAndFolder(location, out listName, out folderName);

                        var folder = client.AddOrGetExistingFolder(listName, folderName);

                        var fileCollection = folder.Files;
                        client.Load(folder.Files);
                        client.ExecuteQuery();

                        var files = fileCollection.ToArray().OrderBy(file => file.Name);

                        if (!files.Any())
                        {
                            return(null);
                        }

                        return(files.Select(file => new SharePointDocumentDrop(this, file, location)));
                    }
                }
                catch (FaultException <OrganizationServiceFault> )
                {
                    return(null);
                }
            }
        }