예제 #1
0
        /// <summary>
        /// </summary>
        public static bool GetSharePointFileFields(SpConnectionManager spConnection,
                                                   Guid listId,
                                                   string fileServerRelUrl,
                                                   out List <string> lstFieldNames,
                                                   out string msg)
        {
            msg           = "";
            lstFieldNames = new List <string>();

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var file = ctx.Web.GetFileByServerRelativeUrl(fileServerRelUrl);

                    ctx.Load(file, f => f.Name, f => f.ListItemAllFields, f => f.ServerRelativeUrl);
                    ctx.ExecuteQuery();

                    foreach (string fieldName in file.ListItemAllFields.FieldValues.Keys.OrderBy(x => x.Trim().ToLower()))
                    {
                        lstFieldNames.Add(fieldName);
                    }
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }
예제 #2
0
        /// <summary>
        /// </summary>
        public static bool CheckInSPFile(SpConnectionManager spConnection,
                                         Guid listId,
                                         string fileServerRelUrl,
                                         string comment,
                                         CheckinType checkinType,
                                         out string msg)
        {
            msg = "";

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var file = ctx.Web.GetFileByServerRelativeUrl(fileServerRelUrl);

                    ctx.Load(file, f => f.Name, f => f.ListItemAllFields, f => f.ServerRelativeUrl);
                    ctx.ExecuteQuery();

                    file.CheckIn(GenUtil.SafeTrim(comment), checkinType);
                    ctx.ExecuteQuery();
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }
예제 #3
0
        /// <summary>
        /// </summary>
        public static bool UndoCheckOutSPFile(SpConnectionManager spConnection,
                                              Guid listId,
                                              string fileServerRelUrl,
                                              out string msg)
        {
            msg = "";

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var file = ctx.Web.GetFileByServerRelativeUrl(fileServerRelUrl);

                    ctx.Load(file, f => f.Name, f => f.ListItemAllFields, f => f.ServerRelativeUrl);
                    ctx.ExecuteQuery();

                    file.UndoCheckOut();
                    ctx.ExecuteQuery();
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }
예제 #4
0
        /// <summary>
        /// </summary>
        public static bool UpdateSharePointFileFields(SpConnectionManager spConnection,
                                                      Guid listId,
                                                      string fileServerRelUrl,
                                                      Hashtable ht,
                                                      out string msg)
        {
            msg = "";

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var file = ctx.Web.GetFileByServerRelativeUrl(fileServerRelUrl);

                    ctx.Load(file, f => f.Name, f => f.ListItemAllFields, f => f.ServerRelativeUrl);
                    ctx.ExecuteQuery();

                    foreach (string key in ht.Keys)
                    {
                        file.ListItemAllFields[key] = ht[key].ToString();
                    }

                    file.ListItemAllFields.Update();
                    ctx.ExecuteQuery();
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }
예제 #5
0
        /// <summary>
        /// </summary>
        public static bool GetSitePropBagValues(SpConnectionManager spConnection,
                                                out List <string> keys,
                                                out string msg)
        {
            msg  = "";
            keys = new List <string>();

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var web      = ctx.Web;
                    var allProps = web.AllProperties;
                    ctx.Load(allProps);
                    ctx.ExecuteQuery();

                    foreach (var key in allProps.FieldValues.Keys)
                    {
                        keys.Add(key);
                    }
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }
예제 #6
0
        public static bool RenameSharePointFile(SpConnectionManager spConnection,
                                                string fileServerRelUrl,
                                                string newFileName,
                                                out string msg)
        {
            msg = "";

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var file = ctx.Web.GetFileByServerRelativeUrl(fileServerRelUrl);
                    ctx.Load(file,
                             f => f.ListItemAllFields);
                    ctx.ExecuteQuery();

                    file.ListItemAllFields["FileLeafRef"] = GenUtil.CleanFilenameForSP(newFileName, "");
                    file.ListItemAllFields.Update();
                    ctx.ExecuteQuery();
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }
예제 #7
0
        /// <summary>
        /// </summary>
        public static bool GetSitePropBagValue(SpConnectionManager spConnection,
                                               string key,
                                               out string value,
                                               out string msg)
        {
            msg   = "";
            value = "";

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var web      = ctx.Web;
                    var allProps = web.AllProperties;
                    ctx.Load(allProps);
                    ctx.ExecuteQuery();

                    if (allProps.FieldValues.ContainsKey(key))
                    {
                        value = allProps.FieldValues[key].SafeTrim();
                    }
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }
예제 #8
0
        /// <summary>
        /// </summary>
        public static bool CheckFolderExists(SpConnectionManager spConnection,
                                             string folderPath,
                                             out bool exists,
                                             out string msg)
        {
            msg = "";

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    Folder folder = ctx.Web.GetFolderByServerRelativeUrl(folderPath);
                    ctx.Load(folder, x => x.Name, x => x.ServerRelativeUrl);
                    ctx.ExecuteQuery();

                    exists = true;
                }
            }
            catch (Exception ex)
            {
                // if folder doesn't exist it throws a "File Not Found" exception
                exists = false;

                if (!ex.Message.Equals("File Not Found."))
                {
                    // some other error
                    msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
                }
            }

            return(msg == "");
        }
예제 #9
0
        public static bool GetSiteLists(SpConnectionManager spConnection, out List <SpLibrary> lstObjs, out string msg)
        {
            msg     = "";
            lstObjs = new List <SpLibrary>();

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var lists = ctx.Web.Lists;
                    ctx.Load(lists, l => l.Include(x => x.Title, x => x.Id, x => x.ContentTypes.Include(y => y.Name, y => y.Id)));

                    ctx.ExecuteQuery();

                    foreach (List list in lists)
                    {
                        bool match = false;
                        foreach (ContentType ct in list.ContentTypes)
                        {
                            if (ct.Id.ToString().StartsWith(DocumentLibraryContentTypeID))
                            {
                                match = true;
                                break;
                            }
                        }

                        if (match)
                        {
                            lstObjs.Add(new SpLibrary()
                            {
                                Id = list.Id, Title = list.Title
                            });
                        }
                    }

                    lstObjs = lstObjs.OrderBy(x => x.Title).ToList();
                }
            }
            catch (Exception ex)
            {
                //msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
                msg = ex.Message;
            }

            return(msg == "");
        }
예제 #10
0
        /// <summary>
        /// </summary>
        public static bool MoveSPFile(SpConnectionManager spConnection,
                                      string fileServerRelUrl,
                                      string newFileServerRelUrl,
                                      bool overwrite,
                                      out string msg)
        {
            msg = "";

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    File file = null;

                    if (!overwrite)
                    {
                        file = ctx.Web.GetFileByServerRelativeUrl(newFileServerRelUrl);

                        ctx.Load(file, f => f.Exists);
                        ctx.ExecuteQuery();

                        if (file.Exists)
                        {
                            msg = "File exists at destination.";
                            return(false);
                        }
                    }

                    file = ctx.Web.GetFileByServerRelativeUrl(fileServerRelUrl);

                    ctx.Load(file, f => f.Name, f => f.ListItemAllFields, f => f.ServerRelativeUrl);
                    ctx.ExecuteQuery();

                    file.MoveTo(newFileServerRelUrl, MoveOperations.Overwrite);

                    ctx.ExecuteQuery();
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }
예제 #11
0
        public ISpDownloadResult DownloadFileFromSharePoint(string fileServerRelUrl)
        {
            byte[] fileData = null;

            DownloadReult res = DownloadReult.GetSuccessResult(fileServerRelUrl);

            try
            {
                using (var ctx = _connection.GetContext())
                {
                    var fi = Sp.File.OpenBinaryDirect(ctx, fileServerRelUrl);
                    fileData = ReadFully(fi.Stream);
                }
                res.SetFinisced(fileData);
            }
            catch (Exception ex)
            {
                res.SetError(ex);
            }

            return(res);
        }
예제 #12
0
        public static bool DeleteFolderFromSharePoint(SpConnectionManager spConnection,
                                                      string folderServerRelUrl,
                                                      out string msg)
        {
            msg = "";

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var folder = ctx.Web.GetFolderByServerRelativeUrl(folderServerRelUrl);
                    folder.DeleteObject();

                    ctx.ExecuteQuery();
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }
예제 #13
0
        /// <summary>
        /// </summary>
        public static bool SetSitePropBagValue(SpConnectionManager spConnection,
                                               string key,
                                               string value,
                                               out string msg)
        {
            msg = "";

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var web = ctx.Web;
                    web.AllProperties[key] = value;
                    web.Update();
                    ctx.ExecuteQuery();
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }
예제 #14
0
        public static bool CreateFolderInSharePoint(SpConnectionManager spConnection,
                                                    string folderName,
                                                    string parentFolderUrl,
                                                    out string msg)
        {
            msg = "";

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var folder    = ctx.Web.GetFolderByServerRelativeUrl(parentFolderUrl);
                    var newFolder = folder.Folders.Add(folderName);

                    ctx.ExecuteQuery();
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }
예제 #15
0
        /// <summary>
        /// </summary>
        public static bool GetListAllFilesFolderLevel(SpConnectionManager spConnection,
                                                      Guid?listId,
                                                      string folderServerRelPath,
                                                      ref List <SpFileSystemItem> lstObjs,
                                                      out string msg)
        {
            // get all files (recursiveall) from a sub folder in a list
            // will be used for bulk operations (checkin, checkout, move, copy, update file fields, etc.)
            msg = "";

            if (lstObjs == null)
            {
                lstObjs = new List <SpFileSystemItem>();
            }

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var list = ctx.Web.Lists.GetById(listId.Value);

                    ListItemCollectionPosition pos = null;

                    while (true)
                    {
                        var cq = new CamlQuery();

                        cq.DatesInUtc = false;

                        var strViewFields = "<FieldRef Name='ID' /><FieldRef Name='FileLeafRef' /><FieldRef Name='FileDirRef' /><FieldRef Name='FileRef' /><FieldRef Name='FSObjType' />";
                        var strQuery      = "<Query></Query>";

                        var strViewXml = $"<View Scope='RecursiveAll'>{strQuery}<ViewFields>#{strViewFields}</ViewFields><RowLimit>{Consts.MAX_ROW_LIMIT}</RowLimit></View>";

                        cq.ListItemCollectionPosition = pos;
                        cq.ViewXml = strViewXml;
                        cq.FolderServerRelativeUrl = folderServerRelPath;

                        ListItemCollection lic = list.GetItems(cq);
                        ctx.Load(lic);
                        ctx.ExecuteQuery();

                        pos = lic.ListItemCollectionPosition;

                        foreach (ListItem item in lic)
                        {
                            var fsType = Convert.ToInt32(item["FSObjType"]);
                            if (fsType == 0)
                            {
                                var folderLevel = item["FileRef"].SafeTrim().ToCharArray().Count(x => x == '/');

                                lstObjs.Add(new SpFileSystemItem()
                                {
                                    treeNodeType = NodeType.FILE,
                                    name         = item["FileLeafRef"].SafeTrim(),
                                    url          = item["FileRef"].SafeTrim(),
                                    dtModified   = null,
                                    length       = 0,
                                    folderLevel  = folderLevel
                                });
                            }
                        }

                        if (pos == null)
                        {
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }
예제 #16
0
        public static bool RenameSharePointFolder(SpConnectionManager spConnection,
                                                  Guid listId,
                                                  string folderServerRelUrl,
                                                  string newFolderName,
                                                  out string msg)
        {
            msg = "";

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var oldFolderParentUrl = folderServerRelUrl.Substring(0, folderServerRelUrl.LastIndexOf('/'));
                    var oldFolderName      = folderServerRelUrl.Substring(folderServerRelUrl.LastIndexOf('/') + 1);

                    var list = ctx.Web.Lists.GetById(listId);

                    var query = new CamlQuery();
                    query.FolderServerRelativeUrl = oldFolderParentUrl;
                    query.ViewXml = "<View Scope=\"RecursiveAll\"> " +
                                    "<Query>" +
                                    "<Where>" +
                                    "<And>" +
                                    "<Eq>" +
                                    "<FieldRef Name=\"FSObjType\" />" +
                                    "<Value Type=\"Integer\">1</Value>" +
                                    "</Eq>" +
                                    "<Eq>" +
                                    "<FieldRef Name=\"FileLeafRef\"/>" +
                                    "<Value Type=\"Text\">" + oldFolderName + "</Value>" +
                                    "</Eq>" +
                                    "</And>" +
                                    "</Where>" +
                                    "</Query>" +
                                    "</View>";

                    var items = list.GetItems(query);

                    ctx.Load(items,
                             x => x.Include(
                                 y => y["Title"],
                                 y => y["FileLeafRef"]));

                    ctx.ExecuteQuery();

                    if (items.Count != 1)
                    {
                        throw new Exception("Folder not found: " + folderServerRelUrl);
                    }

                    items[0]["Title"]       = newFolderName;
                    items[0]["FileLeafRef"] = newFolderName;
                    items[0].Update();
                    ctx.ExecuteQuery();
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }
예제 #17
0
        /// <summary>
        /// </summary>


        /// <summary>
        /// </summary>
        public static bool GetListFoldersFilesRootLevel(SpConnectionManager spConnection,
                                                        Guid?listId,
                                                        int sortCol,
                                                        int rowLimit,
                                                        out string rootFolderPath,
                                                        out List <SpFileSystemItem> lstObjs,
                                                        out string msg)
        {
            msg            = "";
            lstObjs        = new List <SpFileSystemItem>();
            rootFolderPath = "";

            // make sure caml row limit is never more than 5000
            var camlRowLimit = rowLimit > Consts.MAX_ROW_LIMIT ? Consts.MAX_ROW_LIMIT : rowLimit;
            var i            = 0;

            try
            {
                using (var ctx = spConnection.GetContext())
                {
                    var list = ctx.Web.Lists.GetById(listId.Value);

                    ctx.Load(list, x => x.Title);
                    ctx.Load(list.RootFolder, x => x.ServerRelativeUrl);
                    ctx.ExecuteQuery();

                    rootFolderPath = list.RootFolder.ServerRelativeUrl;

                    ListItemCollectionPosition pos = null;

                    while (true)
                    {
                        var cq = new CamlQuery();

                        cq.DatesInUtc = false;

                        var strViewFields = "<FieldRef Name='ID' /><FieldRef Name='FileLeafRef' /><FieldRef Name='FileDirRef' /><FieldRef Name='FileRef' /><FieldRef Name='FSObjType' /><FieldRef Name='Created' /><FieldRef Name='Modified' /><FieldRef Name='File_x0020_Size' />";
                        var strQuery      = "<Query></Query>";

                        var strViewXml = "<View Scope='All'>#QUERY#<ViewFields>#VIEWFIELDS#</ViewFields><RowLimit>#ROWLIMIT#</RowLimit></View>"
                                         .Replace("#ROWLIMIT", camlRowLimit.ToString())
                                         .Replace("#QUERY#", strQuery)
                                         .Replace("#VIEWFIELDS#", strViewFields);

                        cq.ListItemCollectionPosition = pos;
                        cq.ViewXml = strViewXml;
                        cq.FolderServerRelativeUrl = list.RootFolder.ServerRelativeUrl;
                        //cq.FolderServerRelativeUrl = "/sites/Zen20/EffLib/folder1"; // for sub folder

                        ListItemCollection lic = list.GetItems(cq);
                        ctx.Load(lic);
                        ctx.ExecuteQuery();

                        pos = lic.ListItemCollectionPosition;

                        foreach (ListItem item in lic)
                        {
                            i++;

                            var fsType = Convert.ToInt32(item["FSObjType"]);
                            if (fsType == 0)
                            {
                                var created  = (DateTime?)GenUtil.SafeToDateTime(item["Created"]);
                                var modified = (DateTime?)GenUtil.SafeToDateTime(item["Modified"]);

                                if (created.Value.Year == 1900)
                                {
                                    created = null;
                                }
                                if (modified.Value.Year == 1900)
                                {
                                    modified = null;
                                }
                                if (!modified.HasValue && created.HasValue)
                                {
                                    modified = created;
                                }

                                var filesize = (int?)GenUtil.SafeToNum(SafeGetFileSize(item));
                                if (filesize == -1)
                                {
                                    filesize = null;
                                }

                                lstObjs.Add(new SpFileSystemItem()
                                {
                                    treeNodeType = NodeType.FILE,
                                    name         = item["FileLeafRef"].SafeTrim(),
                                    url          = item["FileRef"].SafeTrim(),
                                    dtModified   = modified,
                                    length       = filesize
                                });
                            }
                            else
                            {
                                lstObjs.Add(new SpFileSystemItem()
                                {
                                    treeNodeType = NodeType.FOLDER,
                                    name         = item["FileLeafRef"].SafeTrim(),
                                    url          = item["FileRef"].SafeTrim()
                                });
                            }
                        }

                        if (pos == null || i >= rowLimit)
                        {
                            break;
                        }
                    }

                    if (sortCol == 0)
                    {
                        lstObjs = lstObjs.OrderBy(x => x.treeNodeType).ThenBy(x => x.name).ToList();
                    }
                    else if (sortCol == 1)
                    {
                        lstObjs = lstObjs.OrderBy(x => x.treeNodeType).ThenBy(x => x.length).ThenBy(x => x.name).ToList();
                    }
                    else if (sortCol == 2)
                    {
                        lstObjs = lstObjs.OrderBy(x => x.treeNodeType).ThenBy(x => x.dtModified).ThenBy(x => x.name).ToList();
                    }
                }
            }
            catch (Exception ex)
            {
                msg = SHOW_FULL_ERRORS ? ex.ToString() : ex.Message;
            }

            return(msg == "");
        }