/// <summary> /// Copies the file versioned. /// </summary> /// <param name="i">The i.</param> /// <param name="folderTo">The folder to.</param> /// <param name="srcFile">The version.</param> /// <param name="destUrl">The dest URL.</param> /// <returns></returns> private SPFile CopyFileVersioned(int i, SPFolder folderTo, SPFileVersion srcFile, string destUrl) { Debug.WriteLine("* Versioned "); Debug.WriteLine("i " + i); Debug.WriteLine("folderTo " + folderTo.Url); Debug.WriteLine("srcFile " + srcFile.VersionLabel); Debug.WriteLine("destUrl " + destUrl); Debug.WriteLine("EnsureCheckOut"); EnsureCheckOut(folderTo, i, srcFile.File, destUrl); Debug.WriteLine("Add File to new folder"); SPFile newFile = folderTo.Files.Add(destUrl, srcFile.OpenBinary(), true, srcFile.CheckInComment, false); EnsureCheckIn(newFile, srcFile.CheckInComment); CopyMetadata(srcFile.File, newFile, false); newFile.Item["Created"] = srcFile.Created; newFile.Item["Modified"] = srcFile.Created; newFile.Item["Author"] = srcFile.CreatedBy; newFile.Item.UpdateOverwriteVersion(); Debug.WriteLine("* COPIED " + newFile.Name + " "); return(newFile); }
public SPFileVersionInstance Construct(SPFileVersion fileVersion) { if (fileVersion == null) { throw new ArgumentNullException("fileVersion"); } return(new SPFileVersionInstance(InstancePrototype, fileVersion)); }
public FileVersionNode(SPFileVersion version) { this.Tag = version; this.Setup(); if (version.File.Item != null) { this.SPParent = version.File.Item.ParentList; } this.Nodes.Add(new ExplorerNodeBase("Dummy")); }
/// <summary> /// Gets the version. /// </summary> /// <param name="newVer">The new ver.</param> /// <returns>Version as string</returns> private string GetVersion(SPFileVersion newVer) { //string temp; string[] parts = newVer.Url.Split('/'); if (parts.Length >= 1) { return(parts[1]); } return(string.Empty); }
static void Main(string[] args) { using (SPSite site = new SPSite("https://sharepoint.domain.com")) using (SPWeb web = site.OpenWeb()) { SPList list = web.GetList($"{web.ServerRelativeUrl.TrimEnd('/')}/DocumentLibrary"); SPListItemCollection items = list.GetItems(new SPQuery()); foreach (SPListItem item in items) { object checkedOutTo = item[SPBuiltInFieldId.CheckoutUser]; if (checkedOutTo == null) { // Latest version Console.WriteLine($"{item.ID} | {item.Versions[0].VersionLabel}"); // Here are bytes of the file itself byte[] bytes = item.File.OpenBinary(); } else { // Find latest published version SPFileVersion version = item.File.Versions .Cast <SPFileVersion>() .OrderByDescending(v => v.ID) .Where(v => v.Level == SPFileLevel.Published) .FirstOrDefault(); if (version != null) { Console.WriteLine($"{item.ID} | {version.VersionLabel} | {checkedOutTo}"); // Here are bytes of the file itself byte[] bytes = version.OpenBinary(); } else { Console.WriteLine($"{item.ID} | No published version | {checkedOutTo}"); } } } } }
/// <summary> /// Returns true if the version of the file exists in SharePoint. Must be called in the context /// of appropriate permissions, as this method does not impersonate. /// </summary> private static bool FileExistsInSharePoint(SPFile spFile, int versionId) { if (spFile.Exists == false) { return(false); } // If there are no versions, or if the current version is the requested version if ((spFile.Versions.Count == 0) || spFile.UIVersion == versionId) { return((spFile.UIVersion == versionId) && spFile.Exists); } else { // The specified version isn't the current one SPFileVersion spFileVersion = spFile.Versions.GetVersionFromID(versionId); return((spFileVersion != null) && spFileVersion.File.Exists); } }
/// <summary> /// method to determine major/minor status /// of srcFileVersioned and publish accordingly /// </summary> /// <param name="num">parsed srcFileVersioned number from file's URL</param> /// <param name="folderTo">The folder to.</param> /// <param name="destUrl">The dest URL.</param> /// <param name="srcFileVersioned">The version.</param> private void CopyRightVersion(int num, SPFolder folderTo, string destUrl, SPFileVersion srcFileVersioned) { try { const int baseNum = 512; decimal d = num / baseNum; int i = (int)Math.Floor(d) * 512; Debug.WriteLine("* CRV " + i + " " + folderTo.Url + " (" + destUrl + ")"); // SPFile tempFile = destinationFolder.Files[file.Name]; SPFile copFileVers = CopyFileVersioned(i, folderTo, srcFileVersioned, destUrl); //major publish (eg 1.0, 2.0, 3.0) if (num == i) { if (SPContext.Current.List.EnableMinorVersions) { copFileVers.Publish(srcFileVersioned.CheckInComment); } } //minor (eg 0.1, 1.1, 2.3) else { } folderTo.Update(); } catch (Exception ex) { Debug.WriteLine("CRV"); Debug.WriteLine(ex); } }
static DateTime GetTimeStamp(SPFile file, int versionId) { if ((file.Versions.Count == 0) || file.UIVersion == versionId) { if (file.UIVersion != versionId) { throw new FileNotFoundException(String.Format(CultureInfo.CurrentCulture, Resources.SPFileNotFound, file.Name)); } return(file.TimeLastModified); } else { // The specified version isn't the current one SPFileVersion spFileVersion = file.Versions.GetVersionFromID(versionId); if (spFileVersion == null) { throw new FileNotFoundException(String.Format(CultureInfo.CurrentCulture, Resources.SPFileNotFound, file.Name)); } return(spFileVersion.Created); } }
public SPFileVersionInstance(ObjectInstance prototype, SPFileVersion fileVersion) : this(prototype) { m_fileVersion = fileVersion; }
/// Returns true if the correct version of the file exists in SharePoint. /// NOTE: This method checks file availability using elevated privileges. Be /// cautious when using this information in messages displayed to the user. private static bool FileExistsInSharePoint(string location) { SharePointFileLocation spFileLocation; bool fileExists = true; // assume it exists if (SharePointFileLocation.TryParse(location, out spFileLocation)) { SPSecurity.RunWithElevatedPrivileges(delegate() { // If the site does not exist, this throws FileNotFound using (SPSite spSite = new SPSite(spFileLocation.SiteId, SPContext.Current.Site.Zone)) { // If the web does not exist, this throws FileNotFound using (SPWeb spWeb = spSite.OpenWeb(spFileLocation.WebId)) { SPFile spFile = spWeb.GetFile(spFileLocation.FileId); if (!spFile.Exists) { fileExists = false; return; } // The file exists. Now check if the right version exists. DateTime lastModified; if ((spFile.Versions.Count == 0) || spFile.UIVersion == spFileLocation.VersionId) { // The requested version is the currect one if (spFile.UIVersion != spFileLocation.VersionId) { fileExists = false; return; } // It exists: check its timestamp lastModified = spFile.TimeLastModified; } else { // The specified version isn't the current one SPFileVersion spFileVersion = spFile.Versions.GetVersionFromID(spFileLocation.VersionId); if (spFileVersion == null) { fileExists = false; return; } // There is no 'last modified' of a version, so use the time the version was created. lastModified = spFileVersion.Created; } // If the timestamps are not the same, the file has been modified, so return false if (lastModified.CompareTo(spFileLocation.Timestamp) != 0) { fileExists = false; return; } } } }); } return(fileExists); }
internal String RenderHTMLForOneDocumentVersion(Dictionary <String, String> checklistTextMap, WBDocument document, String majorVersion, String minorVersion, int minorVersionIndex) { String html = ""; String versionNumber = majorVersion; if (!String.IsNullOrEmpty(minorVersion)) { versionNumber += "." + minorVersion; } String versionAsToggleID = versionNumber.Replace(".", "-"); String publishedDateString = ""; if (document.HasValue(WBColumn.DatePublished)) { publishedDateString = String.Format("{0:dd/MM/yyyy}", document[WBColumn.DatePublished]); } if (publishedDateString == "" && document.HasValue(WBColumn.Modified)) { publishedDateString = String.Format("{0:dd/MM/yyyy}", document[WBColumn.Modified]); } String publishedByString = "<unknown>"; SPUser publishedBy = document.GetSingleUserColumn(WBColumn.PublishedBy); if (publishedBy != null) { publishedByString = publishedBy.Name; } else { // If the published by column isn't set then we'll use the author column as a backup value: publishedBy = document.GetSingleUserColumn(WBColumn.Author); if (publishedBy != null) { publishedByString = publishedBy.Name; } } String modifiedByString = ""; String modifiedOnString = ""; if (document.IsSPListItemVersion) { SPFieldUserValue versionCreated = document.ItemVersion.CreatedBy; SPUser modifiedBy = versionCreated.User; if (modifiedBy != null) { WBLogging.Debug("Version created by lookup ID: " + versionCreated.LookupId); WBLogging.Debug("Version created by lookup Value: " + versionCreated.LookupValue); WBLogging.Debug("Version created by as string: " + versionCreated.ToString()); WBLogging.Debug("Version created by SPUser.Login: "******"Version created by SPUser.Name: " + modifiedBy.Name); modifiedByString = modifiedBy.Name; } modifiedOnString = String.Format("{0:dd/MM/yyyy}", document.ItemVersion.Created); } else { SPUser modifiedBy = document.GetSingleUserColumn(WBColumn.ModifiedBy); if (modifiedBy != null) { modifiedByString = modifiedBy.Name; } if (document.HasValue(WBColumn.Modified)) { modifiedOnString = String.Format("{0:dd/MM/yyyy}", document[WBColumn.Modified]); } } String approvedByString = document.GetMultiUserColumn(WBColumn.PublishingApprovedBy).WBxToPrettyString(); String iaoString = document.GetSingleUserColumn(WBColumn.IAOAtTimeOfPublishing).WBxToPrettyString(); long fileLength = (document.Item.File.Length / 1024); if (fileLength == 0) { fileLength = 1; } String fileLengthString = "" + fileLength + " KB"; String status = document[WBColumn.RecordSeriesStatus].WBxToString(); String extraStatusCSS = ""; if (String.IsNullOrEmpty(status)) { status = "Latest"; } if (minorVersionIndex > 0) { status = "(old metadata)"; extraStatusCSS = " wbf-old-metadata"; } String explainStatus = ""; if (status == "Latest") { if (document.ProtectiveZone == WBRecordsType.PROTECTIVE_ZONE__PUBLIC) { explainStatus = "(live on the public website)"; } else if (document.ProtectiveZone == WBRecordsType.PROTECTIVE_ZONE__PUBLIC_EXTRANET) { explainStatus = "(live on a public extranet website)"; } else { explainStatus = "(live on izzi intranet)"; } } else if (status == "Retired") { explainStatus = "(visible on izzi intranet searches)"; } else if (status == "Archived") { explainStatus = "(archived in the protected, master records library)"; } String reviewDateString = ""; if (document.HasValue(WBColumn.ReviewDate)) { reviewDateString = String.Format("{0:dd/MM/yyyy}", document[WBColumn.ReviewDate]); } String checkInComments = ""; if (document.IsSPListItemVersion) { int fileVersionsCount = document.Item.File.Versions.Count; WBLogging.Debug("File versions count: " + fileVersionsCount); WBLogging.Debug("minorVersionIndex = " + minorVersionIndex); int minorFileVersionIndex = fileVersionsCount - minorVersionIndex; WBLogging.Debug("minorFileVersionIndex = " + minorFileVersionIndex); if (minorFileVersionIndex >= 0 && minorFileVersionIndex < fileVersionsCount) { SPFileVersion fileVersion = document.Item.File.Versions[minorFileVersionIndex]; checkInComments = fileVersion.CheckInComment; } else { checkInComments = document.Item.File.CheckInComment; } } else { checkInComments = document.Item.File.CheckInComment; } String checklistCount = "0"; String checklistDiv = ""; String checklistCodes = document[WBColumn.PublishingApprovalChecklist].WBxToString(); if (!String.IsNullOrEmpty(checklistCodes)) { String[] codes = checklistCodes.Split(';'); checklistDiv = "<div id='wbf-checklist-" + versionAsToggleID + "' style='display: none;'>"; foreach (String code in codes) { if (checklistTextMap.ContainsKey(code)) { checklistDiv += "<input type='checkbox' enabled='false' checked disabled/>" + checklistTextMap[code] + "<br/>"; } else { checklistDiv += "<input type='checkbox' enabled='false' checked disabled/>" + code + " (couldn't decode this checklist item)<br/>"; } } checklistDiv += "</div>"; checklistCount = codes.Length.ToString(); } String issueOddOrEven = "odd"; if (majorVersion.WBxToInt() % 2 == 0) { issueOddOrEven = "even"; } html += "<tr>" + "<td class='wbf-record-series-summary-issue-" + issueOddOrEven + "'>" + versionNumber + "</td>" + "<td class='wbf-record-series-summary-detail wbf-record-series-detail-left'>" + document.Name + "</td>" + "<td class='wbf-record-series-summary-detail'>" + publishedDateString + "</td>" + "<td class='wbf-record-series-summary-detail'>" + publishedByString + "</td>" + "<td class='wbf-record-series-summary-detail'>" + modifiedOnString + "</td>" + "<td class='wbf-record-series-summary-detail " + extraStatusCSS + "'>" + status + "</td>" + "<td class='wbf-record-series-summary-detail wbf-record-series-detail-right'>" + fileLengthString + "</td>" + "<td class='wbf-record-series-summary-detail'><a href='#' class='wbf-more-or-less' id='wbf-more-or-less-" + versionAsToggleID + "' onclick='WBF_toggleByID(\"" + versionAsToggleID + "\");'><nobr>more ></nobr></a></td>" + "</tr>\n"; html += "<tr class='wbf-record-details' id='wbf-record-details-" + versionAsToggleID + "' style=' display: none;' ><td></td><td colspan='6' class='wbf-record-series-details-panel-cell'><table class='wbf-record-series-details-panel' width='100%'>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Title</td><td class='wbf-record-series-detail-odd'>" + document.Title + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Filename</td><td class='wbf-record-series-detail-even wbf-record-series-detail-left'>" + document.Filename + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Location</td><td class='wbf-record-series-detail-odd'>" + document.LibraryLocation + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Subject Tags</td><td class='wbf-record-series-detail-even'>" + document.SubjectTags.Names() + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Owning Team</td><td class='wbf-record-series-detail-odd'>" + document.OwningTeam.Name + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Involved Teams</td><td class='wbf-record-series-detail-even'>" + document.InvolvedTeamsWithoutOwningTeam.Names() + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Protective Zone</td><td class='wbf-record-series-detail-odd'>" + document.ProtectiveZone + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Status</td><td class='wbf-record-series-detail-even'>" + status + " " + explainStatus + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Approved By</td><td class='wbf-record-series-detail-odd'>" + approvedByString + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Approval Checklist</td><td class='wbf-record-series-detail-even'><a href='#' onclick='WBF_toggleChecklist(\"" + versionAsToggleID + "\");'>" + checklistCount + " checklist items were ticked</a>" + checklistDiv + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>IAO When Published</td><td class='wbf-record-series-detail-odd'>" + iaoString + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Intended Web Page URL</td><td class='wbf-record-series-detail-even'>" + document[WBColumn.IntendedWebPageURL].WBxToString() + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Review Date</td><td class='wbf-record-series-detail-odd'>" + reviewDateString + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Modified By</td><td class='wbf-record-series-detail-even'>" + modifiedByString + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Modified On</td><td class='wbf-record-series-detail-odd'>" + modifiedOnString + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Reason for Change</td><td class='wbf-record-series-detail-even'>" + checkInComments + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Record Series ID</td><td class='wbf-record-series-detail-odd'>" + document.RecordSeriesID + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Record ID</td><td class='wbf-record-series-detail-even'>" + document.RecordID + "</td></tr>"; html += "<tr><td class='wbf-record-series-detail-even' colspan='2' align='center'><input type='button' value='View Document' onclick='window.open(\"" + document.AbsoluteURL + "\", \"_blank\");' />"; if (minorVersionIndex <= 0 && status != "Archived") { html += " <input type='button' value='Edit Metadata' onclick='WBF_edit_records_metadata(\"" + document.RecordID + "\");'/>"; } html += "</td></tr>"; html += "</table>\n"; return(html); }
public static SPFile CopyFileAndHistory(SPFile sourceFile, SPFolder targetFolder, bool overwrite = false) { SPFile targetFile = targetFolder.ParentWeb.GetFile(SPUrlUtility.CombineUrl(targetFolder.ServerRelativeUrl, sourceFile.Name)); if (targetFile.Exists) { if (overwrite) { if (targetFile.RequiresCheckout) { if (targetFile.CheckOutType == SPFile.SPCheckOutType.None) { targetFile.CheckOut(); } else { targetFile.UndoCheckOut(); } } targetFile.Delete(); } else { return(targetFile); } } int countVersions = sourceFile.Versions.Count; for (int i = 0; i < countVersions; i++) { SPFileVersion sourceFileVer = sourceFile.Versions[i]; if (!sourceFileVer.IsCurrentVersion) { SPFile historyFile; using (Stream stream = sourceFileVer.OpenBinaryStream()) { string fileName = SPUrlUtility.CombineUrl(targetFolder.ServerRelativeUrl, sourceFileVer.File.Name); bool crossSite = (sourceFile.Web.Site.ID != targetFolder.ParentWeb.Site.ID); SPUser author; SPUser editor; if (crossSite) { author = targetFolder.ParentWeb.EnsureUser(sourceFileVer.CreatedBy.LoginName); editor = targetFolder.ParentWeb.EnsureUser(sourceFileVer.CreatedBy.LoginName); } else { author = sourceFileVer.CreatedBy; editor = sourceFileVer.CreatedBy; } historyFile = targetFolder.Files.Add( fileName, stream, sourceFileVer.Properties, author, editor, sourceFileVer.Created, sourceFileVer.Created, sourceFileVer.CheckInComment, true); } } } return(CopyFile(sourceFile, targetFolder, true)); }