public static string GetWorkspaceUrl(Guid siteId, Guid webId, Guid listId, int itemId) { var url = string.Empty; SPSecurity.RunWithElevatedPrivileges(() => { using (var spSite = new SPSite(siteId)) { using (var spWeb = spSite.OpenWeb(webId)) { SPFieldUrlValue spUrl = null; try { spUrl = new SPFieldUrlValue(spWeb.Lists[listId].GetItemById(itemId)["WorkspaceUrl"].ToString()); } catch (Exception ex) { Trace.WriteLine(ex); } if (spUrl != null) { url = spUrl.Url; } } } }); return(url); }
/// <summary> /// An item was added. /// </summary> public override void ItemAdded(SPItemEventProperties properties) { try { SPList spList = properties.List; if (spList.Title.Equals("MSA Schedule")) { SPFieldUrlValue spFieldURL = new SPFieldUrlValue(); spFieldURL.Url = "/sites/ffl/Pages/MSA.aspx?SID=" + properties.ListItemId; spFieldURL.Description = "Please click here"; SPListItem spListItem = properties.ListItem; spListItem["MSAFormLink"] = spFieldURL; spListItem.Update(); } else { properties.Status = SPEventReceiverStatus.CancelNoError; } } catch (Exception ex) { SPDiagnosticsService.Local.WriteTrace(0, new SPDiagnosticsCategory("MSAEventReceiver", TraceSeverity.Unexpected, EventSeverity.Error), TraceSeverity.Unexpected, ex.Message, ex.StackTrace); } finally { base.ItemAdded(properties); } }
public static void CreateComposedLookListItem(SPWeb web, String customLook, SPFieldUrlValue masterUrl, SPFieldUrlValue themeUrl, SPFieldUrlValue fontUrl) { var match = false; var list = web.Lists["Composed Looks"]; var currentLooks = list.GetItems(); foreach (SPListItem itemUpdate in currentLooks.Cast <SPListItem>().Where(itemUpdate => itemUpdate.Name == customLook)) { match = true; itemUpdate["MasterPageUrl"] = masterUrl.Url; itemUpdate["ThemeUrl"] = themeUrl.Url; itemUpdate["FontSchemeUrl"] = fontUrl.Url; itemUpdate["DisplayOrder"] = 5; itemUpdate["ImageUrl"] = null; itemUpdate.Update(); } if (match) { return; } var newItem = list.AddItem(); newItem["Title"] = customLook; newItem["Name"] = customLook; newItem["MasterPageUrl"] = masterUrl.Url; newItem["ThemeUrl"] = themeUrl.Url; newItem["FontSchemeUrl"] = fontUrl.Url; newItem["DisplayOrder"] = 5; //newItem["ImageUrl"] = bgImageURL; newItem.Update(); }
public override void ItemAdded(SPItemEventProperties properties) { this.DisableEventFiring(); try { string _mimeType = GetMimeType(properties.ListItem.File.Name); if (_mimeType != null) { this.DisableEventFiring(); properties.ListItem["Content MimeType"] = _mimeType; properties.ListItem["Document Author(s)"] = properties.ListItem.File.Properties["vti_author"]; properties.ListItem["Publishable Status"] = "Draft"; SPFieldUrlValue value = new SPFieldUrlValue(); value.Description = "Private"; value.Url = SPHelper.GetRootUrl(SPContext.Current.Web.Url) + "_layouts/IMAGES/bizdataactionicon.gif"; properties.ListItem["Access Level"] = value; properties.ListItem.Update(); } } catch (Exception ex) { properties.Cancel = true; properties.ErrorMessage = "Unable attach metadata to this item " + ex.Message; } finally { this.EnableEventFiring(); base.ItemAdded(properties); } }
/// <summary> /// Writes a field value as an SPFolder's default column value /// </summary> /// <param name="folder">The folder for which we wish to update a field's default value</param> /// <param name="fieldValueInfo">The field and value information</param> public override void WriteValueToFolderDefault(SPFolder folder, FieldValueInfo fieldValueInfo) { var defaultValue = (UrlValue)fieldValueInfo.Value; MetadataDefaults listMetadataDefaults = new MetadataDefaults(folder.ParentWeb.Lists[folder.ParentListId]); if (defaultValue != null) { var sharePointFieldUrlValue = new SPFieldUrlValue { Url = defaultValue.Url, Description = defaultValue.Description }; this.log.Warn( "WriteValueToFolderDefault - Initializing {0} field (fieldName={1}) with default value \"{2}\"." + " Be aware that folder default values on {0}-type field are not well supported by SharePoint and that this default" + " value will not be editable through your document library's \"List Settings > Column default value settings\" options page.", fieldValueInfo.FieldInfo.FieldType, fieldValueInfo.FieldInfo.InternalName, sharePointFieldUrlValue.ToString()); listMetadataDefaults.SetFieldDefault(folder, fieldValueInfo.FieldInfo.InternalName, sharePointFieldUrlValue.ToString()); } else { listMetadataDefaults.RemoveFieldDefault(folder, fieldValueInfo.FieldInfo.InternalName); } listMetadataDefaults.Update(); }
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { InitializeWebAppProperties(); using (SPSite navSite = new SPSite(globalNavSiteName)) { using (SPWeb navWeb = navSite.OpenWeb()) { SPList navList = navWeb.Lists[globalNavListName]; foreach (SPListItem navLink in navList.Items) { HtmlGenericControl newLink = new HtmlGenericControl("li"); SPFieldUrlValue link = new SPFieldUrlValue(Convert.ToString(navLink["URL"])); HtmlGenericControl newAnchor = new HtmlGenericControl("a"); newAnchor.InnerText = link.Description; newAnchor.Attributes.Add("href", link.Url); newLink.Controls.Add(newAnchor); martaGlobalNav.Controls.Add(newLink); } } } } }
// Method to re-assign the actual document ID with a specific prefix. More awesomeness lives here! This is not as complete as OOTB approach AND not meant as original Doc ID Assignment public string AssignDocumentId(SPListItem listItem, string prefix) { string docId = GetDocumentIdForPrefix(listItem, prefix, true); /*obtained via reflector from Microsoft.Office.DocumentManagement.DocumentId - * not meant as shared code, but provides best known and quick * method of changing the doc id for an individual document */ Guid s_guidDocIdField = new Guid("{AE3E2A36-125D-45d3-9051-744B513536A6}"); Guid s_guidDocIdUrlField = new Guid("{3B63724F-3418-461f-868B-7706F69B029C}"); listItem[s_guidDocIdField] = docId; StringBuilder docUrl = new StringBuilder(1024); docUrl.Append(listItem.Web.Url); docUrl.Append("/_layouts/DocIdRedir.aspx?ID="); docUrl.Append(System.Web.HttpUtility.UrlEncode(docId)); SPFieldUrlValue sPFieldUrlValue = new SPFieldUrlValue(); sPFieldUrlValue.Description = docId; listItem[s_guidDocIdUrlField] = sPFieldUrlValue; listItem.SystemUpdate(); return(docId); }
public override void ItemUpdated(SPItemEventProperties properties) { var ct = properties.ListItem.ContentType; var setting = ct.GetCustomSettings <AutoCreationSettings>(AIAPortalFeatures.Infrastructure); var listItem = properties.ListItem; if (setting == null || !setting.RunOnCreated || !setting.EnableCreateList) { return; } if (setting.EnableCreateList) { SPSecurity.RunWithElevatedPrivileges(delegate() { var url = listItem[setting.UrlFieldName].ToString(); var arr = url.Split(new char[] { ',' }); SPFieldUrlValue fieldValue = new SPFieldUrlValue(url); fieldValue.Description = listItem.Title; //fieldValue.Url = arr[1]; using (DisableItemEvent disableItemEvent = new DisableItemEvent()) { listItem[setting.UrlFieldName] = fieldValue; listItem.SystemUpdate(); } }); } }
public static void Add(SPList lst, object e) { SPListItem item = lst.Items.Add(); foreach (PropertyInfo prop in e.GetType().GetProperties()) { FieldAttribute fa = GetFieldAttribute(prop); if (fa != null && !fa.PrimaryKey && !fa.ReadOnly) { object o = prop.GetValue(e, null); if (o == null) { continue; } if (fa.FieldType == FieldType.URL) { UrlValue uVal = (UrlValue)o; SPFieldUrlValue val = new SPFieldUrlValue(); val.Url = uVal.Url; val.Description = uVal.Description; item[fa.Field] = val; } else { item[fa.Field] = o; } } } item.Update(); }
public static void InheritTopSiteBranding(SPWeb currentWeb, SPWeb rootWeb, SPSite site, string webAppRelativePath) { var catalogMasterPage = CustomBranding.DeployComposedLookSiteNavEventReceiver_catalogMasterPage__catalogs_masterpage_; var masterPageName = CustomBranding.BrandingHelper_RemoveMasterPage_Custom_SP2013_master; var masterPageNameSiteNav = CustomBranding.BrandingHelper_RemoveMasterPage_Custom_SP2013CustomSiteNav_master; //if master page is applied change current spweb //need to check because must apply theme .spcolor from file path; need consistent results for end user if (rootWeb.MasterUrl == webAppRelativePath + catalogMasterPage + masterPageName || rootWeb.MasterUrl == webAppRelativePath + catalogMasterPage + masterPageNameSiteNav) { var themeUrl = new SPFieldUrlValue(); var fontUrl = new SPFieldUrlValue(); currentWeb.MasterUrl = rootWeb.MasterUrl; currentWeb.CustomMasterUrl = rootWeb.MasterUrl; themeUrl.Url = webAppRelativePath + CustomBranding.InheritBranding_WebProvisioned__catalogs_theme_15_Custom_spcolor; fontUrl.Url = webAppRelativePath + CustomBranding.InheritBranding_WebProvisioned__catalogs_theme_15_fontscheme002_spfont; currentWeb.SiteLogoUrl = webAppRelativePath + CustomBranding.InheritBranding_WebProvisioned__catalogs_masterpage_Custom_SP2013_LOGO_png; currentWeb.Update(); //apply font and color to current SPWeb var themeFile = rootWeb.GetFile(themeUrl.Url); var fontSchemeFile = rootWeb.GetFile(fontUrl.Url); var customLook = CustomBranding.InheritBranding_WebProvisioned_Custom_SP2013_ComposedLook; var theme = SPTheme.Open(customLook, themeFile, fontSchemeFile); theme.ApplyTo(currentWeb, true); } }
private SPFieldUrlValue WriteRoutineTaskDoc(SPItemEventProperties properties, string accountName, string typeName, string taskDocLibName) { //string //properties.ListItem["Title"] = documentName; SPSite site = properties.Site; SPWeb web = properties.Web; SPDocumentLibrary library = web.Lists[taskDocLibName] as SPDocumentLibrary; string docType = "Word文档.docx"; string templatePath = ""; string documentName = properties.ListItem.Title;//.Replace(properties.UserDisplayName,"") ;// 去掉用户的显示名称 string fileName = documentName + docType.Substring(docType.IndexOf(".")); string libraryRelativePath = library.RootFolder.ServerRelativeUrl; string libraryPath = site.MakeFullUrl(libraryRelativePath); //带网站集的url string documentPath = libraryPath + "/" + fileName; //创建的文档名称 templatePath = libraryPath + "/Forms/" + docType; // +fileType;// web.Url + "/" + library.DocumentTemplateUrl; SPFile file = web.GetFile(templatePath); //获取模板文件 Stream readStream = file.OpenBinaryStream(); documentName = GetRoutineDocName(accountName, typeName); fileName = documentName + docType.Substring(docType.IndexOf(".")); SPFieldUrlValue urlValue = UpdateDocumentToOnedrive(readStream, fileName, accountName); return(urlValue); }
public static SPListItem CreateLinkToDocumentFile(SPDocumentLibrary list, SPContentTypeId contentTypeId, string name, SPFieldUrlValue urlVal, string overrideIcon = null) { SPContentType contentType = list.ContentTypes[contentTypeId]; string extension = ""; if (urlVal != null && urlVal.Url != null) { extension = Path.GetExtension((urlVal.Url).Trim()).TrimStart(".".ToCharArray()); } SPFolder currentFolder = list.RootFolder; SPFileCollection files = currentFolder.Files; string fileUrl = string.Concat(currentFolder.Url, "/", name, ".aspx"); string fileTemplate = "<%@ Assembly Name='{0}' %>\r\n <%@ Register TagPrefix='SharePoint' Namespace='Microsoft.SharePoint.WebControls' Assembly='Microsoft.SharePoint' %>\r\n <%@ Import Namespace='System.IO' %>\r\n <%@ Import Namespace='Microsoft.SharePoint' %>\r\n <%@ Import Namespace='Microsoft.SharePoint.Utilities' %>\r\n <%@ Import Namespace='Microsoft.SharePoint.WebControls' %>\r\n <html>\r\n <head> <meta name='progid' content='SharePoint.Link' /> </head>\r\n <body>\r\n <form id='Form1' runat='server'>\r\n <SharePoint:UrlRedirector id='Redirector1' runat='server' />\r\n </form>\r\n </body>\r\n </html>"; StringBuilder fileContent = new StringBuilder(fileTemplate.Length + 400); fileContent.AppendFormat(fileTemplate, typeof(SPDocumentLibrary).Assembly.FullName); Hashtable properties = new Hashtable(); SPContentTypeId ctId = contentType.Id; properties["ContentTypeId"] = ctId.ToString(); SPFile file = files.Add(fileUrl, new MemoryStream((new UTF8Encoding()).GetBytes(fileContent.ToString())), properties, false, false); SPListItem item = file.Item; item[FLD_URL] = urlVal; if (list.Fields.Contains(g_guidIconOverride)) { item[g_guidIconOverride] = string.Concat("|", overrideIcon ?? extension, "|"); } item.IconOverlay = "linkoverlay.gif"; item.UpdateOverwriteVersion(); return(item); }
public void WriteValuesToListItem_WhenGivenNullUrl_ShouldCopyNullUrl() { using (ShimsContext.Create()) { // Arrange var expectedField = new UrlFieldInfo("InternalName", Guid.NewGuid(), null, null, null); var actualUrlValue = new SPFieldUrlValue(); var fakeListItemShim = new ShimSPListItem() { ItemSetStringObject = (internalName, value) => { actualUrlValue = value as SPFieldUrlValue; } }; IFieldValueWriter writer; var fakeListItem = fakeListItemShim.Instance; using (var scope = UnitTestServiceLocator.BeginLifetimeScope()) { writer = scope.Resolve <IFieldValueWriter>(); } // Act writer.WriteValueToListItem(fakeListItem, new FieldValueInfo(expectedField, null)); // Assert Assert.IsNull(actualUrlValue); } }
public CALink(string lookupString) { SPFieldUrlValue value = new SPFieldUrlValue(lookupString); this.LinkName = value.Description; this.LinkUrl = value.Url; }
private void LoadInstalled(SPWeb oWeb, SPList oList) { DataTable dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("Title"); dt.Columns.Add("Description"); dt.Columns.Add("Icon"); dt.Columns.Add("EXTID"); dt.Columns.Add("Version"); dt.Columns.Add("Visible"); dt.Columns.Add("Default"); dt.Columns.Add("InstallDate"); dt.Columns.Add("InstalledBy"); SPQuery query = new SPQuery(); query.Query = "<Where><And><IsNotNull><FieldRef Name='EXTID'/></IsNotNull><Or><Eq><FieldRef Name='Status'/><Value Type='Text'>Installed</Value></Eq><Eq><FieldRef Name='Status'/><Value Type='Text'>Install Failed</Value></Eq></Or></And></Where><OrderBy><FieldRef Name='Title'/></OrderBy>"; foreach (SPListItem li in oList.GetItems(query)) { string icon = GetProperty(oList, li, "Icon"); try { icon = new SPFieldUrlValue(icon).Url; } catch { } dt.Rows.Add(new object[] { li.ID.ToString(), li["Title"].ToString(), GetProperty(oList, li, "Description"), icon, GetProperty(oList, li, "EXTID"), GetProperty(oList, li, "AppVersion"), GetProperty(oList, li, "Visible"), GetProperty(oList, li, "Default"), GetProperty(oList, li, "Created"), GetProperty(oList, li, "Author") }); } GridView2.DataSource = dt; GridView2.DataBind(); }
/// <summary> /// 根据任务文档ID查找任务对应的文档的标题和地址 /// 一个任务对应一个文档,文档总数为1,直接显示到图片文档控件区域 /// </summary> /// <param name="taskId"></param> private void ShowTaskDocsByTaskID(int taskId) { SPListItem task = GetItemByItemID(taskId, webObj.TaskDoc); if (task != null) { if (task["TaskDoc"] != null) { fsdocs.Visible = true; SPFieldUrlValue tdoc = new SPFieldUrlValue(task["TaskDoc"].ToString()); string tdocTitle = tdoc.Description; string tdocLink = ConvertUrl(tdoc.Url); tdocLink = webObj.OOServer + "op/embed.aspx?src=" + tdocLink; string fileType = tdocLink.Substring(tdocLink.LastIndexOf('.') + 1); string tdocIcon = GetFileIconUrl(fileType, webObj.FileIcon); HtmlGenericControl div1 = new HtmlGenericControl("div") { InnerHtml = "<img src='" + tdocIcon + "' class='ez' href='" + tdocLink + "' alt='" + tdocTitle + "'><h4 style='text-align:center;'>" + tdocTitle + "</h4>" }; div1.Attributes.Add("class", "box"); DocsList.Controls.Add(div1); } else { fsdocs.Visible = false; } } else { fsdocs.Visible = false; } }
private void RenderDonorPanel(SPListItem item) { if (item["Donor"] != null) { var donor = new SPFieldLookupValue(item["Donor"].ToString()); try { var linkField = SPContext.Current.Web.Lists["Donors"].GetItemById(donor.LookupId); DonorLink.Text = donor.LookupValue; if (linkField["Website"] != null) { var link = new SPFieldUrlValue(linkField["Website"].ToString()); DonorLink.NavigateUrl = link.Url; DonorLink.Target = "_blank"; } DonorPanel.Visible = true; } catch (ArgumentException) { //throw new Exception(string.Format("The requested Donor \"{0}\" was not found for the item titled \"{1}\".", donor, item.Title)); DonorPanel.Visible = false; } } else { DonorPanel.Visible = false; } }
public virtual void SetUrlFieldValue(string fieldName, SPFieldUrlValue value) { if (value != null) { bool sameWebApplication = false; string normalizedUrl = value.Url; if (!String.IsNullOrEmpty(normalizedUrl)) { normalizedUrl = NormalizeUrl(normalizedUrl, out sameWebApplication); } if (value.Description == value.Url && sameWebApplication) { if (!String.IsNullOrEmpty(normalizedUrl)) { value.Description = new Uri(normalizedUrl).PathAndQuery; } else { value.Description = String.Empty; } } this[fieldName] = new SPFieldUrlValue { Url = normalizedUrl, Description = value.Description }; } else { this[fieldName] = new SPFieldUrlValue(); } }
private void AddAgendaToMeetingWorkspace(SPWeb boardWeb, string meetingWorkspaceURL, string agendaTitle, SPUser sponsor, int agendaID, string presenterName, int agendaOrder) { SPFieldUrlValue workspaceURL = new SPFieldUrlValue(meetingWorkspaceURL); SPMeeting meetingSites = SPMeeting.GetMeetingInformation(boardWeb); SPWebCollection meetingWorkspaces = meetingSites.GetWorkspacesToLinkTo(false); SPWeb meetingWeb = null; foreach (SPWeb meetingWorkspace in meetingWorkspaces) { if (workspaceURL.Url.Contains(meetingWorkspace.Url)) { meetingWeb = meetingWorkspace; break; } } SPList agendaList = meetingWeb.Lists["Agenda"]; SPListItem newAgenda = agendaList.AddItem(); boardWeb.EnsureUser(sponsor.LoginName); SPUser user = boardWeb.AllUsers[sponsor.LoginName]; newAgenda["Sponsor"] = user; newAgenda["Subject"] = agendaTitle; newAgenda["AgendaID"] = agendaID; newAgenda["Owner"] = presenterName; newAgenda["Item Number"] = agendaOrder; newAgenda.Update(); }
public List <FavoritesEntry> GetRemoteFavorites(string SiteCollection, string Site, string List) { List <FavoritesEntry> result = new List <FavoritesEntry>(); SPWeb web = ConnectToWeb(SiteCollection, Site); SPList list = web.Lists[List]; FavoritesEntry entry; foreach (SPListItem item in list.Items) { entry = new FavoritesEntry(); SPFieldUrlValue url = new SPFieldUrlValue(item["URL"].ToString()); entry.Url = url.Url; entry.Display = url.Description; if (item["Favorites Topic"] != null) { entry.Topic = item["Favorites Topic"].ToString(); } entry.SPID = item.UniqueId; entry.Modified = DateTime.Parse(item["Modified"].ToString()); result.Add(entry); } return(result); }
protected override void MapProperties(object modelHost, Hashtable fileProperties, ContentPageDefinitionBase definition) { base.MapProperties(modelHost, fileProperties, definition); var typedTemplateModel = definition.WithAssertAndCast<ItemControlTemplateDefinitionBase>("model", value => value.RequireNotNull()); if (typedTemplateModel.TargetControlTypes.Count > 0) { var multiChoiceValue = new SPFieldMultiChoiceValue(); foreach (var value in typedTemplateModel.TargetControlTypes) multiChoiceValue.Add(value); fileProperties["TargetControlType"] = multiChoiceValue.ToString(); } if (!string.IsNullOrEmpty(typedTemplateModel.PreviewURL)) { var htmlPreviewValue = new SPFieldUrlValue { Url = typedTemplateModel.PreviewURL }; if (!string.IsNullOrEmpty(typedTemplateModel.PreviewDescription)) htmlPreviewValue.Description = typedTemplateModel.PreviewDescription; fileProperties["HtmlDesignPreviewUrl"] = htmlPreviewValue.ToString(); } }
public void WriteValuesToListItem_WhenGivenNullUrl_ShouldCopyNullUrl() { using (ShimsContext.Create()) { // Arrange var expectedField = new UrlFieldInfo("InternalName", Guid.NewGuid(), null, null, null); var actualUrlValue = new SPFieldUrlValue(); var fakeListItemShim = new ShimSPListItem() { ItemSetStringObject = (internalName, value) => { actualUrlValue = value as SPFieldUrlValue; } }; IFieldValueWriter writer; var fakeListItem = fakeListItemShim.Instance; using (var scope = UnitTestServiceLocator.BeginLifetimeScope()) { writer = scope.Resolve<IFieldValueWriter>(); } // Act writer.WriteValueToListItem(fakeListItem, new FieldValueInfo(expectedField, null)); // Assert Assert.IsNull(actualUrlValue); } }
protected override void MapProperties(object modelHost, Hashtable fileProperties, ContentPageDefinitionBase definition) { base.MapProperties(modelHost, fileProperties, definition); var typedDefinition = definition.WithAssertAndCast<FilterDisplayTemplateDefinition>("model", value => value.RequireNotNull()); fileProperties[BuiltInInternalFieldNames.ContentTypeId] = "0x0101002039C03B61C64EC4A04F5361F38510660400F643FF79F6BD764F8A469B6F153396EE"; if (!string.IsNullOrEmpty(typedDefinition.CrawlerXSLFileURL)) { var crawlerXSLFileValue = new SPFieldUrlValue { Url = typedDefinition.CrawlerXSLFileURL }; if (!string.IsNullOrEmpty(typedDefinition.CrawlerXSLFileDescription)) crawlerXSLFileValue.Description = typedDefinition.CrawlerXSLFileDescription; fileProperties["CrawlerXSLFile"] = crawlerXSLFileValue.ToString(); } if (!string.IsNullOrEmpty(typedDefinition.CompatibleManagedProperties)) fileProperties["CompatibleManagedProperties"] = typedDefinition.CompatibleManagedProperties; if (typedDefinition.CompatibleSearchDataTypes.Count > 0) { var multiChoiceValue = new SPFieldMultiChoiceValue(); foreach (var value in typedDefinition.CompatibleSearchDataTypes) multiChoiceValue.Add(value); fileProperties["CompatibleSearchDataTypes"] = multiChoiceValue.ToString(); } }
protected override void MapProperties(object modelHost, Hashtable fileProperties, ContentPageDefinitionBase definition) { base.MapProperties(modelHost, fileProperties, definition); var typedTemplateModel = definition.WithAssertAndCast <ItemControlTemplateDefinitionBase>("model", value => value.RequireNotNull()); if (typedTemplateModel.TargetControlTypes.Count > 0) { var multiChoiceValue = new SPFieldMultiChoiceValue(); foreach (var value in typedTemplateModel.TargetControlTypes) { multiChoiceValue.Add(value); } fileProperties["TargetControlType"] = multiChoiceValue.ToString(); } if (!string.IsNullOrEmpty(typedTemplateModel.PreviewURL)) { var htmlPreviewValue = new SPFieldUrlValue { Url = typedTemplateModel.PreviewURL }; if (!string.IsNullOrEmpty(typedTemplateModel.PreviewDescription)) { htmlPreviewValue.Description = typedTemplateModel.PreviewDescription; } fileProperties["HtmlDesignPreviewUrl"] = htmlPreviewValue.ToString(); } }
protected override void MapProperties(object modelHost, Hashtable fileProperties, ContentPageDefinitionBase definition) { base.MapProperties(modelHost, fileProperties, definition); var typedDefinition = definition.WithAssertAndCast<JavaScriptDisplayTemplateDefinition>("model", value => value.RequireNotNull()); fileProperties[BuiltInInternalFieldNames.ContentTypeId] = "0x0101002039C03B61C64EC4A04F5361F3851068"; if (!string.IsNullOrEmpty(typedDefinition.Standalone)) fileProperties["DisplayTemplateJSTemplateType"] = typedDefinition.Standalone; if (!string.IsNullOrEmpty(typedDefinition.TargetControlType)) fileProperties["DisplayTemplateJSTargetControlType"] = typedDefinition.TargetControlType; if (!string.IsNullOrEmpty(typedDefinition.TargetListTemplateId)) fileProperties["DisplayTemplateJSTargetListTemplate"] = typedDefinition.TargetListTemplateId; if (!string.IsNullOrEmpty(typedDefinition.TargetScope)) fileProperties["DisplayTemplateJSTargetScope"] = typedDefinition.TargetScope; if (!string.IsNullOrEmpty(typedDefinition.IconUrl)) { var iconValue = new SPFieldUrlValue { Url = typedDefinition.IconUrl }; if (!string.IsNullOrEmpty(typedDefinition.IconDescription)) iconValue.Description = typedDefinition.IconDescription; fileProperties["DisplayTemplateJSIconUrl"] = iconValue.ToString(); } }
public void SetHyperlinkField(String collumn, String description, String defaultView) { var urlFieldValue = new SPFieldUrlValue(); urlFieldValue.Description = description; urlFieldValue.Url = listItemForm.ParentList.ParentWebUrl.ToString() + "/_layouts/FormServer.aspx?XMLLocation=" + listItemForm.ParentList.ParentWebUrl.ToString() + "/" + listItemForm.Url.ToString() + "&OpenIn=Browser&DefaultView=" + defaultView + "&Source=" + listItemForm.ParentList.ParentWebUrl.ToString() + "/SitePages/Schliessen.aspx"; listItemOrder[collumn] = urlFieldValue; }
/// <summary> /// For the specified object, attempt to create a SharePoint Field Values Hashtable based on the object's contents. /// </summary> /// <param name="properties"></param> /// <returns></returns> public static Hashtable GetFieldValuesHashtableFromPropertyObject(object properties) { Hashtable htProperties = null; if (properties != null && properties != Null.Value && properties is ObjectInstance) { var propertiesInstance = properties as ObjectInstance; htProperties = new Hashtable(); foreach (var property in propertiesInstance.Properties) { var propertyName = property.Name.ToString(CultureInfo.InvariantCulture); //TODO: Convert to appropriate FieldValues object propertyValue; if (property.Value is ObjectInstance && (property.Value as ObjectInstance).HasProperty("type")) { var fieldValue = (property.Value as ObjectInstance); var type = fieldValue.GetPropertyValue("type"); switch (type.ToString()) { case "Lookup": propertyValue = new SPFieldLookupValue(fieldValue.GetPropertyValue("fieldValue").ToString()); break; case "MultiChoice": propertyValue = new SPFieldMultiChoiceValue(fieldValue.GetPropertyValue("fieldValue").ToString()); break; case "MultiChoiceColumn": propertyValue = new SPFieldMultiColumnValue(fieldValue.GetPropertyValue("fieldValue").ToString()); break; case "Url": propertyValue = new SPFieldUrlValue(fieldValue.GetPropertyValue("fieldValue").ToString()); break; case "User": //TODO: Maybe get another web? propertyValue = new SPFieldUserValue(SPBaristaContext.Current.Web, fieldValue.GetPropertyValue("fieldValue").ToString()); break; default: propertyValue = fieldValue.ToString(); break; } } else { propertyValue = property.Value.ToString(); } htProperties.Add(propertyName, propertyValue); } } return(htProperties); }
public static void RemoveComposedLookTopSite(SPWeb topWeb, SPSite site, String webAppRelativePath) { var themeUrl = new SPFieldUrlValue(); var fontUrl = new SPFieldUrlValue(); var logoUrl = new SPFieldUrlValue(); //SPFieldUrlValue bgImageURL = new SPFieldUrlValue(); var masterUrl = new SPFieldUrlValue(); //if paths incorrect, files don't delete correct theme is not applied masterUrl.Url = webAppRelativePath + CustomBranding.BrandingHelper_RemoveComposedLookTopSite__catalogs_masterpage_seattle_master; themeUrl.Url = webAppRelativePath + CustomBranding.BrandingHelper_RemoveComposedLookTopSite__catalogs_theme_15_palette001_spcolor; fontUrl.Url = webAppRelativePath + CustomBranding.BrandingHelper_RemoveComposedLookTopSite__catalogs_theme_15_fontscheme002_spfont; logoUrl.Url = webAppRelativePath + CustomBranding.BrandingHelper_RemoveComposedLookTopSite__layouts_15_images_siteicon_png; //these paths must be web relative with serverrelative url 1-28 changed for root topWeb.CustomMasterUrl = webAppRelativePath + CustomBranding.BrandingHelper_RemoveComposedLookTopSite__catalogs_masterpage_seattle_master; topWeb.MasterUrl = webAppRelativePath + CustomBranding.BrandingHelper_RemoveComposedLookTopSite__catalogs_masterpage_seattle_master; topWeb.SiteLogoUrl = webAppRelativePath + CustomBranding.BrandingHelper_RemoveComposedLookTopSite__layouts_15_images_siteicon_png; topWeb.Update(); var themeFile = topWeb.GetFile(themeUrl.Url); var fontSchemeFile = topWeb.GetFile(fontUrl.Url); var theme = SPTheme.Open("Office", themeFile, fontSchemeFile); theme.ApplyTo(topWeb, true); //next two lines possibly redundant //topWeb.ApplyTheme(themeURL.Url.ToString(), fontURL.Url.ToString(), null, true); //topWeb.Update(); // Enumerate through each site and apply out of box branding. foreach (SPWeb web in site.AllWebs) { if (web.Url == topWeb.Url) { continue; } web.CustomMasterUrl = masterUrl.Url; web.MasterUrl = masterUrl.Url; web.SiteLogoUrl = logoUrl.Url; theme.ApplyTo(web, true); web.Update(); //next two lines possibly redundant // web.ApplyTheme(themeURL.Url.ToString(), fontURL.Url.ToString(), null, true); } var list = topWeb.Lists["Composed Looks"]; var currentLooks = list.GetItems(); foreach (SPListItem itemUpdate in currentLooks.Cast <SPListItem>().Where(itemUpdate => itemUpdate.Name == "Current")) { itemUpdate["MasterPageUrl"] = masterUrl; itemUpdate["ThemeUrl"] = themeUrl; itemUpdate["FontSchemeUrl"] = fontUrl; itemUpdate["ImageUrl"] = null; itemUpdate.Update(); } }
public override RecordPropertyValueCollection GetPropertyValues(Record rec, RecordProperty prop) { SPFieldUrl url; SPListItem relItem = rec.RelItem as SPListItem; SPField property = prop.Property as SPField; SPUser mainItem = rec.MainItem as SPUser; if (prop.Name == "roxVcardExport") { return(new RecordPropertyValueCollection(this, rec, prop, new object[] { UserDataSource.GetVcardExport(rec) }, null, null, null)); } if ((prop.Name == "roxSiteGroups") && (mainItem != null)) { List <object> list = new List <object>(); foreach (SPGroup group in ProductPage.TryEach <SPGroup>(mainItem.Groups)) { try { list.Add(group.Name); } catch { } } return(new RecordPropertyValueCollection(this, rec, prop, list.ToArray(), null, null, null)); } if (prop.Name == "roxUserPersonalUrl") { return(new RecordPropertyValueCollection(this, rec, prop, new object[] { base.GetPersonalUrl(rec) }, null, null, null)); } if (prop.Name == "roxUserPublicUrl") { return(new RecordPropertyValueCollection(this, rec, prop, new object[] { base.GetPublicUrl(rec) }, null, null, null)); } if ((relItem == null) || (property == null)) { return(null); } object obj2 = relItem[property.Id]; if (obj2 is DateTime) { obj2 = ((DateTime)obj2).ToUniversalTime(); } if (((url = property as SPFieldUrl) != null) && (obj2 is string)) { if (url.DisplayFormat == SPUrlFieldFormatType.Image) { obj2 = new SPFieldUrlValue(obj2 as string).Url; } else { obj2 = new SPFieldUrlValue(obj2 as string); } } return(new RecordPropertyValueCollection(this, rec, prop, (obj2 is object[]) ? (obj2 as object[]) : ((obj2 == null) ? new object[0] : new object[] { ((url != null) ? obj2 : property.GetFieldValueAsHtml(obj2)) }), null, null, null)); }
private DataTable GetDataTable() { DataTable dt = null; SPWeb oWeb = SPContext.Current.Web; sWebUrl = (oWeb.ServerRelativeUrl == "/") ? "" : oWeb.ServerRelativeUrl; sFullWebUrl = oWeb.Url; SPList oList = oWeb.Lists.TryGetList("Installed Applications"); if (oList != null) { dt = new DataTable(); dt.Columns.Add("QuickLaunchOrder"); dt.Columns.Add("ID"); dt.Columns.Add("Title"); dt.Columns.Add("Description"); dt.Columns.Add("Icon"); dt.Columns.Add("Visible"); dt.Columns.Add("Default"); SPQuery query = new SPQuery(); query.Query = "<Where><IsNull><FieldRef Name='EXTID'/></IsNull></Where><OrderBy><FieldRef Name='QuickLaunchOrder'/></OrderBy>"; Dictionary <string, int> dictOrder = new Dictionary <string, int>(); int index = 0; foreach (SPListItem li in oList.GetItems(query)) { string icon = GetProperty(oList, li, "Icon"); try { icon = new SPFieldUrlValue(icon).Url; } catch { } index++; if (GetProperty(oList, li, "QuickLaunchOrder") != "" && GetProperty(oList, li, "QuickLaunchOrder") != "-1" && GetProperty(oList, li, "QuickLaunchOrder") != "1000") { dictOrder[li["Title"].ToString()] = int.Parse(GetProperty(oList, li, "QuickLaunchOrder")); } else if (GetProperty(oList, li, "QuickLaunchOrder") == "1000") { dictOrder[li["Title"].ToString()] = index; } dt.Rows.Add(new object[] { GetProperty(oList, li, "QuickLaunchOrder"), li.ID.ToString(), li["Title"].ToString(), GetProperty(oList, li, "Description"), icon, GetProperty(oList, li, "Visible"), GetProperty(oList, li, "Default") }); } ViewState["dictOrder"] = dictOrder; } return(dt); }
private void GenerateReport() { SPSecurity.RunWithElevatedPrivileges(delegate() { WorkflowContext.Current.DataFields["Status"] = "Completed"; ISharePointService sps = ServiceFactory.GetSharePointService(true); SPListItem item = null; DataTable TravelDetails = this.DataForm1.dtTravelDetails; SPList list = sps.GetList(CAWorkFlowConstants.ListName.TravelApplication.ToString()); string rootweburl = ConfigurationManager.AppSettings["rootweburl"] + ""; if (string.IsNullOrEmpty(rootweburl)) { rootweburl = "https://portal.c-and-a.cn"; } foreach (DataRow dr in TravelDetails.Rows) { SPFieldUrlValue uv = new SPFieldUrlValue(); uv.Url = rootweburl + "/WorkFlowCenter/_layouts/CA/WorkFlows/TravelRequest/DisplayForm.aspx?List=" + SPContext.Current.ListId.ToString() + "&ID=" + SPContext.Current.ListItem.ID; uv.Description = DataForm1.WorkflowNumber; item = list.Items.Add(); item["Name"] = DataForm1.Name; item["Department"] = DataForm1.Department; item["WorkflowNumber"] = uv; item["TotalNumber"] = DataForm1.EstimateDays; item["Purpose"] = DataForm1.Purpose; item["Date"] = dr["FromDate"]; try { using (SPSite site = new SPSite(SPContext.Current.Site.ID)) { using (SPWeb web = site.OpenWeb(SPContext.Current.Site.RootWeb.ID)) { item.Web.AllowUnsafeUpdates = true; item.Update(); item.Web.AllowUnsafeUpdates = false; } } } catch (Exception ex) { Response.Write("An error occured while updating the items"); } //item.Web.AllowUnsafeUpdates = true; //item.Update(); } }); }
//添加结果链接到结果库中 /// <summary> /// /// </summary> /// <param name="action">添加链接;删除链接</param> /// <param name="lnkUrl">链接的地址1和说明0,添加时使用</param> /// <param name="id">要删除的结果ID</param> private void WriteResultToList(string action, string[] lnkUrl, int id, int rowIndex) { lblMsgNoResults.Visible = false; string assistantID = Page.Request.QueryString["ID"] == null ? "0" : Page.Request.QueryString["ID"]; SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite spSite = new SPSite(SPContext.Current.Site.ID)) { using (SPWeb sWeb = spSite.OpenWeb(SPContext.Current.Web.ID)) { SPList sList = sWeb.Lists[webObj.ListMediaRel]; SPListItem item; sWeb.AllowUnsafeUpdates = true; if (action == "add") { item = sList.Items.Add(); item["AssistantID"] = assistantID; SPFieldUrlValue urlValue = new SPFieldUrlValue(); item["标题"] = lnkUrl[0]; urlValue.Description = lnkUrl[0]; urlValue.Url = lnkUrl[1]; item["Result"] = urlValue; item["修改者"] = SPContext.Current.Web.CurrentUser.ID; item["创建者"] = SPContext.Current.Web.CurrentUser.ID; if (assistantID == "0")//新建 { item["创建时间"] = GetNewResultTime; } item.Update(); if (rowIndex >= 0)//直接上传附件不需要此操作 { tbContent.Rows.RemoveAt(rowIndex); } AddRowToTbContent(lnkUrl[1], lnkUrl[0], item.ID); } else { item = sList.GetItemById(id); item.Delete(); if (rowIndex >= 0) //直接上传附件不需要此操作 { tbResult.Rows.RemoveAt(rowIndex); //表格拆分两个 } } sWeb.AllowUnsafeUpdates = false; //WriteAttachments(); } } }); SetFlag(tbResult.Rows.Count); //传递参数,在事件中对新建的助手结果进行处理 }
/// <summary> /// /// </summary> /// <param name="filedataStream"></param> /// <param name="fileName"></param> /// <param name="lgUser">分配用户,也就是每二级的标题</param> /// <returns></returns> private SPFieldUrlValue UpdateDocumentToOnedrive(Stream filedataStream, string fileName, string lngAccount) { SPFieldUrlValue urlValue = null; try { string personalUrl = "http://localhost/personal/" + lngAccount;//进入个人网站 SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite spSite = new SPSite(personalUrl)) { using (SPWeb sWeb = spSite.OpenWeb()) { sWeb.AllowUnsafeUpdates = true; SPDocumentLibrary library = sWeb.Lists["文档"] as SPDocumentLibrary; string libraryRelativePath = library.Folders[0].Url; string libraryPath = spSite.MakeFullUrl(libraryRelativePath); //带网站集的url string documentPath = libraryPath + "/" + fileName; // documentName + fileType;//创建的文档名称 SPFile sFile; try { SPUser user = GetSPUser(lngAccount); sFile = sWeb.Files.Add(documentPath, filedataStream, true);// if (user != null) { sFile.Properties["Author"] = user.ID; sFile.Properties["Editor"] = user.ID; } sFile.Update(); sFile.CheckIn("", SPCheckinType.MajorCheckIn); sFile.Update(); } catch (Exception ex) { sFile = sWeb.GetFile(documentPath); } if (sFile.Exists) { urlValue = new SPFieldUrlValue(); int index = sFile.Name.IndexOf(".");//去掉扩展名 string docName = sFile.Name.Remove(index, sFile.Name.Substring(index).Length); docName = docName.Replace(lngAccount, ""); urlValue.Description = docName; urlValue.Url = documentPath; } } } }); } catch (Exception ex) { // "此文档已经存在或者文件类型被限制,请重新选择!"; } return(urlValue); }
private static string[] GetLinkField(SPListItem item, string fieldName) { string[] urlfieldValue = new string[2]; //Hyperlink or Picture 类型 SPFieldUrlValue urlfield = new SPFieldUrlValue(item[fieldName].ToString()); urlfieldValue[0] = urlfield.Description; urlfieldValue[1] = urlfield.Url; return(urlfieldValue); }
public SPFieldUrlValueInstance(ObjectInstance prototype, SPFieldUrlValue fieldUrlValue) : this(prototype) { if (fieldUrlValue == null) { throw new ArgumentNullException("fieldUrlValue"); } m_fieldUrlValue = fieldUrlValue; }
public static void ApplyMasterPageToRootWeb(SPWeb rootWeb, String webAppRelativePath, String catalogMasterPage, String masterPageName) { var masterUrl = new SPFieldUrlValue(); masterUrl.Url = webAppRelativePath + catalogMasterPage + masterPageName; rootWeb.MasterUrl = webAppRelativePath + catalogMasterPage + masterPageName; rootWeb.CustomMasterUrl = webAppRelativePath + catalogMasterPage + masterPageName; rootWeb.SiteLogoUrl = webAppRelativePath + catalogMasterPage + CustomBranding.ProvisionSiteThemeEventReceiver_FeatureActivated_Custom_SP2013_LOGO_png; rootWeb.Update(); }
private void generataSliderHTML(StringBuilder sb, SPList list, int lcid) { if (sb != null & list != null && list.Items.Count > 0) { SPQuery oQuery = new SPQuery(); int i = 1; int j = 1; SPListItemCollection collListItems; string LANG = lcid == 1033 ? "ENG" : "FRA"; oQuery.Query = "<Where><And><Eq><FieldRef Name='ShowInSlider' /><Value Type='Choice'>YES</Value></Eq><Eq><FieldRef Name='SlideLanguage' /><Value Type='Choice'>" + LANG + "</Value></Eq></And></Where><OrderBy><FieldRef Name='ItemOrder' Ascending='True' /></OrderBy></Query>"; collListItems = list.GetItems(oQuery); if (collListItems.Count > 0) { sb.Append("<section>"); sb.Append("<div class=\"span-6\">"); sb.Append("<div class=\"wet-boew-tabbedinterface auto-play embedded-grid tabs-style-6 animate cycle slide-horz\">"); sb.Append("<div class=\"tabs-panel\">"); foreach (SPListItem item in collListItems) { sb.Append("<div id=\"tab" + i.ToString() + "\" class=\"span-6 margin-bottom-none\"><section>"); string url = new SPFieldUrlValue(item["URL"].ToString()).Url.ToString(); sb.Append("<p><a href=\"" + url + "\"><img imgCustomclass class=\"imgCustomclass margin-bottom-none\" src=\"" + item.File.ServerRelativeUrl + "\"/></a></p>"); //if (lcid == 1036) //{ // sb.Append("<div class=\"span-6 position-left position-bottom opacity-90 background-dark\"><p>"); // sb.Append(item["French Description"].ToString()); // sb.Append("</p></div>"); //} //else //{ sb.Append("<div class=\"span-6 position-left position-bottom opacity-90 background-dark\"><p>"); sb.Append(item["Description"].ToString()); sb.Append("</p></div>"); // } i++; sb.Append("</section></div>"); } sb.Append("</div><ul class=\"tabs\">"); foreach (SPListItem item in collListItems) { sb.Append("<li class=\"img\"><a href=\"" + "#tab" + j.ToString() + "\"><img style=\"width:100px !important;\" class= \"image-actual\" src=\"" + item.File.ServerRelativeUrl + "\" /></a></li>"); j++; } sb.Append("</ul></div>");// div class wb-tabs sb.Append("</div></section>"); } } }
public static String GetDocumentId(SPListItem listItem) { string documentId = string.Empty; if (listItem.Fields.ContainsField(Resource.FieldDocumentId) && listItem.Fields[Resource.FieldDocumentId].Type == SPFieldType.URL) { SPFieldUrlValue urlValue = new SPFieldUrlValue((string)listItem[Resource.FieldDocumentId]); documentId = urlValue.Description; } return(documentId); }
private void GetUpcomingMeetings() { using (SPSite boardSite = new SPSite(boardSiteURL)) { using (SPWeb boardRootWeb = boardSite.OpenWeb()) { SPList meetingsList = boardRootWeb.Lists[boardMeetingListName]; DateTime meetingDate = DateTime.Today.AddDays(90); SPQuery query = new SPQuery() { Query = string.Format(@"<Query> <Where> <Eq> <FieldRef Name='EventDate' /> <Value IncludeTimeValue='FALSE' Type='DateTime'>{0}</Value> </Eq> </Where> </Query>", SPUtility.CreateISO8601DateTimeFromSystemDateTime(meetingDate)) }; List<BoardMeetings> boardMeetings = new List<BoardMeetings>(); foreach (SPListItem meeting in meetingsList.GetItems(query)) { if (DateTime.Parse(meeting["EventDate"].ToString()).Date == DateTime.Today) { BoardMeetings boardMeeting = new BoardMeetings() { MeetingID = meeting.ID, Title = meeting["Title"].ToString(), EventDate = meeting["EventDate"].ToString() }; SPFieldUrlValue meetingWorkspace = new SPFieldUrlValue(meeting["Workspace"].ToString()); string siteURL = meeting.ParentList.ParentWeb.Site.Url; string completeURL = meetingWorkspace.Url; //Get the index of the last slash int lastSlash = completeURL.LastIndexOf("/"); string relativeURL = completeURL.Substring(lastSlash); boardMeeting.Workspace = relativeURL; //meetingWorkspace.Url; boardMeetings.Add(boardMeeting); } } var sortedMeetings = boardMeetings.OrderBy(m => m.Title); grdMeetings.DataSource = sortedMeetings; grdMeetings.DataBind(); } } }
private void SetFieldUrl(SPListItem item, object valor, PropertyInfo prop, bool addPrefix) { var urlField = (Helpers.Data.UrlField)valor; var urlValue = new SPFieldUrlValue { Url = urlField.Url, Description = urlField.Description }; item[GetInternalName(prop.Name, addPrefix)] = urlValue; }
private void SetUrlFieldValue(SPListItem newItem, string fieldName, string url, string description) { if (!string.IsNullOrEmpty(url)) { var urlFieldValue = new SPFieldUrlValue { Url = url }; if (!string.IsNullOrEmpty(description)) urlFieldValue.Description = description; newItem[fieldName] = urlFieldValue; } }
private static void Log(string url, string message, string status) { IsError = false; Guid siteGuid = Guid.Parse(LogSiteId); if (siteGuid != Guid.Empty) { SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(siteGuid)) { using (SPWeb LogWeb = site.RootWeb) { if (LogWeb != null && LogWeb.Exists) { Recorder.Logger.TraceInformation(string.Format("Publishing content at {0} on site {1}", url, LogWeb.Url)); try { SPUser spUser = Utility.GetUserById(LogWeb, User); if (spUser != null) { SPList list = LogWeb.Lists[Constants.AuditLogList]; if (list != null) { LogWeb.AllowUnsafeUpdates = true; SPListItem newItem = list.AddItem(); newItem[Constants.AuditList.ActionDate] = DateTime.Now; SPFieldUrlValue itemUrl = new SPFieldUrlValue(); string[] urlValue = url.Split('|'); itemUrl.Description = urlValue[0]; itemUrl.Url = urlValue[1]; newItem[Constants.AuditList.Item] = itemUrl; newItem[Constants.AuditList.ActionTakenBy] = spUser; newItem[Constants.AuditList.Status] = status; newItem[Constants.AuditList.StatusDetail] = message; newItem.Update(); Recorder.Logger.TraceInformation("Content is published successfully"); } } } catch (Exception ex) { IsError = true; Recorder.Logger.TraceException(ex); } } } } }); } }
/// <summary> /// An item was added. /// </summary> public override void ItemAdded(SPItemEventProperties properties) { try { SPList spList = properties.List; if (spList.Title.Equals("MSA Schedule")) { SPFieldUrlValue spFieldURL = new SPFieldUrlValue(); spFieldURL.Url = "/sites/ffl/Pages/MSA.aspx?SID=" + properties.ListItemId; spFieldURL.Description = "Please click here"; SPListItem spListItem = properties.ListItem; spListItem["MSAFormLink"] = spFieldURL; SPGroup spGroup = properties.Web.SiteGroups["HSE-FFL"]; SPRoleDefinition spRole = properties.Web.RoleDefinitions["Contribute"]; SPRoleAssignment roleAssignment = new SPRoleAssignment(spGroup); roleAssignment.RoleDefinitionBindings.Add(spRole); if (Convert.ToString(spListItem["FFLEmailAddress"]) != null) { SPUser spUSer = properties.Web.SiteUsers.GetByEmail(Convert.ToString(spListItem["FFLEmailAddress"])); SPRoleDefinition spRole1 = properties.Web.RoleDefinitions["Read"]; SPRoleAssignment roleAssignment1 = new SPRoleAssignment(spUSer); roleAssignment1.RoleDefinitionBindings.Add(spRole1); spListItem.BreakRoleInheritance(false); spListItem.RoleAssignments.Add(roleAssignment); spListItem.RoleAssignments.Add(roleAssignment1); } spListItem.Update(); } else { properties.Status = SPEventReceiverStatus.CancelNoError; } } catch (Exception ex) { SPDiagnosticsService.Local.WriteTrace(0, new SPDiagnosticsCategory("MSAEventReceiver", TraceSeverity.Unexpected, EventSeverity.Error), TraceSeverity.Unexpected, ex.Message, ex.StackTrace); } finally { base.ItemAdded(properties); } }
private void LoadData() { SPWeb rootWeb = SPContext.Current.Site.RootWeb; SPList headerMenuList = rootWeb.GetList(rootWeb.ServerRelativeUrl.TrimEnd('/') + "/" + Constants.HEADER_MENU_LIST_URL.TrimStart('/')); if (headerMenuList != null) { StringBuilder htmlBuilder = new StringBuilder(); string caml = string.Empty; var expressionsAnd = new List<Expression<Func<SPListItem, bool>>>(); expressionsAnd.Add(x => ((bool)x[Constants.ACTIVE_COLUMN]) == true); caml = Camlex.Query().WhereAll(expressionsAnd).OrderBy(x => x[Constants.ORDER_NUMBER_COLUMN] as Camlex.Asc).ToString(); SPQuery spQuery = new SPQuery(); spQuery.Query = caml; SPListItemCollection items = headerMenuList.GetItems(spQuery); if (items != null && items.Count > 0) { htmlBuilder.Append("<ul>"); foreach (SPListItem item in items) { if (item["URL"] != null) { SPFieldUrlValue urlValue = new SPFieldUrlValue(item["URL"].ToString()); htmlBuilder.AppendFormat("<li><a href='{0}'>{1}</a></li>", urlValue.Url, item.Title); } else { htmlBuilder.AppendFormat("<li><a href='#'>{0}</a></li>", item.Title); } } htmlBuilder.Append("</ul>"); ltHeaderMenu.Text = htmlBuilder.ToString(); } } }
protected override void MapProperties(object modelHost, Hashtable fileProperties, ContentPageDefinitionBase definition) { base.MapProperties(modelHost, fileProperties, definition); var typedTemplateModel = definition.WithAssertAndCast<ControlDisplayTemplateDefinition>("model", value => value.RequireNotNull()); fileProperties[BuiltInInternalFieldNames.ContentTypeId] = "0x0101002039C03B61C64EC4A04F5361F385106601"; if (!string.IsNullOrEmpty(typedTemplateModel.CrawlerXSLFileURL)) { var crawlerXSLFileValue = new SPFieldUrlValue { Url = typedTemplateModel.CrawlerXSLFileURL }; if (!string.IsNullOrEmpty(typedTemplateModel.CrawlerXSLFileDescription)) crawlerXSLFileValue.Description = typedTemplateModel.CrawlerXSLFileDescription; fileProperties["CrawlerXSLFile"] = crawlerXSLFileValue.ToString(); } }
/// <summary> /// Converts the specified value. /// </summary> /// <param name="value">The value.</param> /// <param name="arguments">The arguments.</param> /// <returns> /// The converted value. /// </returns> public object Convert(object value, ConversionArguments arguments) { if (value == DBNull.Value) { return null; } var urlValue = value as SPFieldUrlValue; if (urlValue == null) { var stringValue = value as string; if (!string.IsNullOrEmpty(stringValue)) { urlValue = new SPFieldUrlValue(stringValue); } } return urlValue != null ? urlValue.Description : null; }
public void WriteValuesToListItem_WhenGivenValueAndDescription_ShouldCopyValueAndDescription() { using (ShimsContext.Create()) { // Arrange var actualFieldName = string.Empty; var expectedField = new UrlFieldInfo("InternalName", Guid.NewGuid(), null, null, null); var actualUrlValue = new SPFieldUrlValue(); var expectedUrlValue = new UrlValue() { Description = "Awesome sauce description!", Url = "http://www.gsoft.com/team" }; var fakeListItemShim = new ShimSPListItem() { ItemSetStringObject = (internalName, value) => { actualUrlValue = value as SPFieldUrlValue; actualFieldName = internalName; } }; IFieldValueWriter writer; var fakeListItem = fakeListItemShim.Instance; using (var scope = UnitTestServiceLocator.BeginLifetimeScope()) { writer = scope.Resolve<IFieldValueWriter>(); } // Act writer.WriteValueToListItem(fakeListItem, new FieldValueInfo(expectedField, expectedUrlValue)); // Assert Assert.AreEqual(expectedUrlValue.Url, actualUrlValue.Url); Assert.AreEqual(expectedUrlValue.Description, actualUrlValue.Description); Assert.AreEqual(expectedField.InternalName, actualFieldName); } }
private void StartWorkflowButton_Executing(object sender, CancelEventArgs e) { try { string taskTitle = string.Empty; WorkflowContext context = WorkflowContext.Current; WorkflowDataFields fields = WorkflowContext.Current.DataFields; var btn = sender as StartWorkflowButton; #region Save Common List Data List<string> fieldsList = new List<string>() {"Applicant", "ApplicantSPUser", "ChineseName", "Department", "EnglishName", "Mobile", "OfficeExt", "IDNumber"}; workflowNumber = TravelExpenseClaimCommon.SaveListFields(requestId, "Travel Request Workflow2", fields, fieldsList); #endregion if (string.Equals(btn.Text, "Save", StringComparison.CurrentCultureIgnoreCase)) { context.UpdateWorkflowVariable("IsSave", true); fields["Status"] = CAWorkflowStatus.Pending; context.UpdateWorkflowVariable("CompleteTaskTitle", "Please complete Travel Expense Claim"); } else { #region Set Users for Workflow var manager = new NameCollection(); SPUser applicantUser = SPContext.Current.Web.AllUsers.GetByID(Convert.ToInt32(fields["ApplicantSPUser"].AsString())); var managerEmp = WorkFlowUtil.GetNextApprover(applicantUser.LoginName); if (managerEmp == null) { if (!WorkflowPerson.IsCEO(applicantUser.LoginName)) { DisplayMessage("The manager is not set in the system."); e.Cancel = true; return; } else { List<string> cfos = WorkflowPerson.GetCFO(); if (cfos.Count == 0) { DisplayMessage("The init error about WorkflowPerson in the system."); e.Cancel = true; return; } managerEmp = UserProfileUtil.GetEmployeeEx(cfos[0]); } } TravelExpenseClaimCommon.GetTaskUsers(manager, managerEmp.UserAccount); fields["CurrManager"] = managerEmp.UserAccount; WorkflowContext.Current.UpdateWorkflowVariable("NextApproveTaskUsers", manager); WorkflowContext.Current.UpdateWorkflowVariable("IsSave", false); #endregion //Set NextApproveTask title for workflow //taskTitle = fields["EnglishName"].AsString() + "'s Travel Expense "; taskTitle = string.Format("{0} {1} {2}'s Travel Expense ", fields["WorkflowNumber"].AsString(), this.DataForm.TotalCost, fields["EnglishName"].AsString()); context.UpdateWorkflowVariable("NextApproveTaskTitle", taskTitle ); context.UpdateWorkflowVariable("ConfirmTaskTitle", taskTitle ); context.UpdateWorkflowVariable("IsSave", false); fields["Status"] = CAWorkflowStatus.InProgress; this.SendEmail("SubmitToApplicant"); } #region Save Details //Save the inputed data to datatable TravelExpenseClaimCommon.SaveDetails(this.DataForm, fields["WorkflowNumber"].AsString()); #endregion #region Save Form fields["Purpose"] = this.DataForm.Purpose; fields["TotalCost"] = this.DataForm.TotalCost; fields["CashAdvanced"] = this.DataForm.CashAdvanced; fields["PaidByCreditCard"] = this.DataForm.PaidByCreditCard; fields["NetPayable"] = this.DataForm.NetPayable; fields["TotalExceptFlight"] = this.DataForm.TotalExceptFlight; fields["ComparedToApproved"] = this.DataForm.ComparedToApproved; fields["Reasons"] = this.DataForm.Reasons; fields["SupportingSubmitted"] = this.DataForm.SupportingSubmitted; fields["SubmissionDate"] = this.DataForm.SubmissionDate; fields["FinanceRemark"] = this.DataForm.FinanceRemark; fields["HotelForm"] = this.DataForm.HotelForm; fields["MealAllowanceForm"] = this.DataForm.MealAllowanceForm; fields["TransportationForm"] = this.DataForm.TransportationForm; fields["SamplePurchaseForm"] = this.DataForm.SamplePurchaseForm; fields["OtherForm"] = this.DataForm.OtherForm; fields["HotelSubTotal"] = this.DataForm.HotelSubTotal; fields["MealSubTotal"] = this.DataForm.MealSubTotal; fields["TransSubTotal"] = this.DataForm.TransSubTotal; fields["SampleSubTotal"] = this.DataForm.SampleSubTotal; fields["OthersSubTotal"] = this.DataForm.OthersSubTotal; #endregion #region Set page URL for workflow //Set page url var editURL = "/_Layouts/CA/WorkFlows/TravelExpenseClaim2/EditForm.aspx"; var approveURL = "/_Layouts/CA/WorkFlows/TravelExpenseClaim2/ApproveForm.aspx"; context.UpdateWorkflowVariable("CompleteTaskFormURL", editURL); context.UpdateWorkflowVariable("NextApproveTaskFormURL", approveURL); context.UpdateWorkflowVariable("ConfirmTaskFormURL", approveURL); #endregion WorkFlowUtil.UpdateWorkflowPath(context); #region Update Travel Request Claim Link SPFieldUrlValue link = new SPFieldUrlValue(); link.Description = "Closed"; var rootweburl = GetRootURL(System.Configuration.ConfigurationManager.AppSettings["rootweburl"]); link.Url = rootweburl + "WorkFlowCenter/Lists/TravelExpenseClaim/MyApply.aspx"; SPList list = SPContext.Current.Web.Lists["Travel Request Workflow2"]; foreach (SPListItem item in list.Items) { if (item["WorkflowNumber"].ToString() == fields["TRWorkflowNumber"].ToString()) { item["Claim"] = link; item.Update(); } } #endregion e.Cancel = false; } catch (Exception exception) { e.Cancel = true; CommonUtil.logError(string.Format("Travel Expense Claim :: {0}", exception.Message)); throw new Exception(exception.Message); } }
void PushToReport() { SPSecurity.RunWithElevatedPrivileges(delegate() { WorkflowContext curContext = WorkflowContext.Current; WorkflowDataFields fields = curContext.DataFields; ISharePointService sps = ServiceFactory.GetSharePointService(true); SPList list = sps.GetList(CAWorkFlowConstants.WorkFlowListName.ChangeRequestReport); string rootweburl = ConfigurationManager.AppSettings["rootweburl"] + ""; if (string.IsNullOrEmpty(rootweburl)) { rootweburl = "https://portal.c-and-a.cn"; } SPFieldUrlValue uv = new SPFieldUrlValue(); //"https://cnshsps.cnaidc.cn/WorkFlowCenter/_layouts/CA/WorkFlows/ChangeRequest/DisplayForm.aspx?List=" uv.Url = rootweburl + "/WorkFlowCenter/_layouts/CA/WorkFlows/ChangeRequest/DisplayForm.aspx?List=" + SPContext.Current.ListId.ToString() + "&ID=" + SPContext.Current.ListItem.ID; uv.Description = fields["WorkflowNumber"] + ""; try { using (SPSite site = new SPSite(SPContext.Current.Site.ID)) { using (SPWeb web = site.OpenWeb(SPContext.Current.Site.RootWeb.ID)) { SPListItem item = list.Items.Add(); item["WorkflowNumber"] = uv; item["Change request number"] = fields["ChangeRequestNumber"]; item["Raised by"] = EnsureUser(new SPFieldLookupValue(fields["Created By"] + "").LookupValue);//SPContext.Current.Web.EnsureUser(new SPFieldLookupValue(fields["Created By"] + "").LookupValue); item["System"] = fields["System"]; item["Business Logic"] = fields["BusinessLogic"]; item["Subject"] = fields["Subject"]; item.Web.AllowUnsafeUpdates = true; item.Update(); item.Web.AllowUnsafeUpdates = false; } } } catch (Exception ex) { Response.Write("An error occured while updating the items"); } } ); }
private void Actions_ActionExecuting(object sender, ActionEventArgs e) { WorkflowContext context = WorkflowContext.Current; WorkflowDataFields fields = WorkflowContext.Current.DataFields; //定义标题 string taskTitle = fields["Applicant"] + "'s Travel Request "; switch (WorkflowContext.Current.Step) { case "NextApproveTask": if (e.Action.Equals("Approve", StringComparison.CurrentCultureIgnoreCase)) { //保存审批人信息 fields["Approvers"] = ReturnAllApprovers(fields["Managers"].ToString()); fields["ApproversSPUser"] = ReturnAllApproversSP("ApproversSPUser", fields["Managers"].ToString()); if (!SPContext.Current.Web.CurrentUser.LoginName.Equals(fields["Managers"].ToString(), StringComparison.CurrentCultureIgnoreCase)) { fields["ApproversSPUser"] = ReturnAllApproversSP("ApproversSPUser", SPContext.Current.Web.CurrentUser.LoginName); } string totalCostStr = fields["TravelTotalCost"].ToString(); string managerStr = fields["Managers"].ToString(); double total = Convert.ToDouble(totalCostStr); //获取配额 long quota = GetQuota(managerStr); //当前登录用户是否CEO bool isCEO = IsCEO(managerStr); if (total > quota & isCEO == false) { //获取下一个审批者 Employee managerEmp = GetNextApproverEmp(managerStr); if (managerEmp == null) { string errorMsg = @"The applicant\'s budget is greater than your approved amount limits, and your manager is not set in system"; DisplayMessage(errorMsg); e.Cancel = true; return; } //Get Task users include deleman var manager = new NameCollection(); TravelRequest3Common.GetTaskUsersByModule(manager, managerEmp.UserAccount, "TravelRequestWorkFlow"); context.UpdateWorkflowVariable("NextApproveTaskTitle", taskTitle + "needs approval"); context.UpdateWorkflowVariable("NextApproveTaskUsers", manager); context.UpdateWorkflowVariable("IsContinue", true); fields["Status"] = CAWorkflowStatus.InProgress; fields["Managers"] = managerEmp.UserAccount; } else { bool isBusiness = fields["FlightClass"].AsString().Equals("Business", StringComparison.CurrentCultureIgnoreCase); bool isApprove = e.Action.Equals("Approve", StringComparison.CurrentCultureIgnoreCase); //When the flight is Business class, the order should be checked by CEO. if (isCEO == false && isApprove && isBusiness) { var ceos = WorkFlowUtil.UserListInGroup("wf_CEO"); NameCollection nCollection = TravelRequest3Common.GetTaskUsersByModuleAndGroup("wf_CEO", "TravelRequestWorkFlow"); context.UpdateWorkflowVariable("NextApproveTaskTitle", taskTitle + "needs approval"); context.UpdateWorkflowVariable("NextApproveTaskUsers", nCollection); context.UpdateWorkflowVariable("IsContinue", true); fields["Ceos"] = string.Join(";", ceos.ToArray()); fields["Managers"] = nCollection[0]; } else { SendMail(false); context.UpdateWorkflowVariable("ConfirmTaskTitle", taskTitle + "needs confirm"); context.UpdateWorkflowVariable("ConfirmTaskUsers", TravelRequest3Common.GetTaskUsersByModuleWithoutDeleman("wf_ReceptionCtrip_TR", "TravelRequestWorkFlow")); context.UpdateWorkflowVariable("IsContinue", false); } } var receptionists = WorkFlowUtil.UserListInGroup("wf_ReceptionCtrip_TR"); fields["Receptionists"] = string.Join(";", receptionists.ToArray()); } else { if (!Validate(e.Action, e)) { return; } fields["Status"] = CAWorkflowStatus.Rejected; context.UpdateWorkflowVariable("CompleteTaskTitle", "please resubmit Travel Request"); context.UpdateWorkflowVariable("IsContinue", false); SendMail(true); } break; case "ConfirmTask": if (e.Action == "Confirm") { SendFinanceMail(); fields["Status"] = CAWorkflowStatus.InProgress; SaveToApprovers("Receptionists", "Approvers", "ApproversSPUser"); if (fields["IsCashAdvanced"].AsString().Equals("Yes")) { context.UpdateWorkflowVariable("IsNeedFinance", true); context.UpdateWorkflowVariable("FinanceConfirmTaskTitle", taskTitle + "needs confirm"); context.UpdateWorkflowVariable("FinanceConfirmTaskFormURL", "/_Layouts/CA/WorkFlows/TravelRequest3/ApproveForm.aspx"); context.UpdateWorkflowVariable("FinanceConfirmTaskUsers", TravelRequest3Common.GetTaskUsersByModuleWithoutDeleman(WorkflowGroupName.WF_FinanceConfirm, "TravelRequestWorkFlow")); } else { context.UpdateWorkflowVariable("IsNeedFinance", false); //if (TravelRequest3Common.IsLastTask(Request.QueryString["List"], Request.QueryString["ID"])) //{ fields["Status"] = CAWorkflowStatus.Completed; SPFieldUrlValue link = new SPFieldUrlValue(); link.Description = "Claim"; var rootweburl = GetRootURL(System.Configuration.ConfigurationManager.AppSettings["rootweburl"]); link.Url = rootweburl + "WorkFlowCenter/Lists/TravelExpenseClaim/NewForm.aspx?TRNumber=" + Server.UrlEncode(fields["WorkflowNumber"].ToString()); fields["Claim"] = link; //} } } break; case "FinanceConfirmTask": if (e.Action == "Confirm") { //if (TravelRequest3Common.IsLastTask(Request.QueryString["List"], Request.QueryString["ID"])) //{ fields["Approvers"] = ReturnAllApprovers(fields["Managers"].ToString()); fields["ApproversSPUser"] = ReturnAllApproversSP("ApproversSPUser", fields["Managers"].ToString()); if (!SPContext.Current.Web.CurrentUser.LoginName.Equals(fields["Managers"].ToString(), StringComparison.CurrentCultureIgnoreCase)) { fields["ApproversSPUser"] = ReturnAllApproversSP("ApproversSPUser", SPContext.Current.Web.CurrentUser.LoginName); } fields["Status"] = CAWorkflowStatus.Completed; SPFieldUrlValue link = new SPFieldUrlValue(); link.Description = "Claim"; var rootweburl = GetRootURL(System.Configuration.ConfigurationManager.AppSettings["rootweburl"]); link.Url = rootweburl + "WorkFlowCenter/Lists/TravelExpenseClaim/NewForm.aspx?TRNumber=" + Server.UrlEncode(fields["WorkflowNumber"].ToString()); fields["Claim"] = link; //} } break; default: break; } WorkFlowUtil.UpdateWorkflowPath(context); }
/// <summary> /// Get and return table with correct url /// </summary> /// <param name="categoryListName">categoryListName</param> /// <param name="items"></param> /// <returns></returns> public static DataTable GetTableWithCorrectUrl(string categoryListName, SPListItemCollection items) { var dataTable = items.GetDataTable(); if (!dataTable.Columns.Contains(FieldsName.CategoryId)) { dataTable.Columns.Add(FieldsName.CategoryId, Type.GetType("System.String")); } if (!dataTable.Columns.Contains(FieldsName.ArticleStartDateTemp)) { dataTable.Columns.Add(FieldsName.ArticleStartDateTemp, Type.GetType("System.String")); } if (items != null && items.Count > 0) { string imagepath = string.Empty; ImageFieldValue imageIcon; SPFieldUrlValue advLink; DateTime time = new DateTime(); for (int i = 0; i < items.Count; i++) { imagepath = Convert.ToString(items[i][FieldsName.NewsRecord.English.ThumbnailImage]); imageIcon = items[i][FieldsName.NewsRecord.English.PublishingPageImage] as ImageFieldValue; if (imageIcon != null) { dataTable.Rows[i][FieldsName.NewsRecord.English.ThumbnailImage] = GetThumbnailImagePath(imageIcon.ImageUrl); } else { if (imagepath.Length > 2) dataTable.Rows[i][FieldsName.NewsRecord.English.ThumbnailImage] = imagepath.Trim().Substring(0, imagepath.Length - 2); else { dataTable.Rows[i][FieldsName.NewsRecord.English.ThumbnailImage] = imagepath; } } if (items[i].Fields.ContainsField(FieldsName.NewsRecord.English.LinkAdv)) { advLink = new SPFieldUrlValue(Convert.ToString(items[i][FieldsName.NewsRecord.English.LinkAdv])); dataTable.Rows[i][FieldsName.NewsRecord.English.LinkAdv] = advLink.Url; } if (!string.IsNullOrEmpty(Convert.ToString(items[i][FieldsName.NewsRecord.English.CategoryName]))) { SPFieldLookupValue catLK = new SPFieldLookupValue(Convert.ToString(items[i][FieldsName.NewsRecord.English.CategoryName])); dataTable.Rows[i][FieldsName.CategoryId] = catLK.LookupId; } time = Convert.ToDateTime(dataTable.Rows[i][FieldsName.ArticleStartDates]); dataTable.Rows[i][FieldsName.ArticleStartDateTemp] = string.Format("Ngày {0}/{1}/{2}", time.Day, time.Month, time.Year); } } return dataTable; }
/// <summary> /// Get and return table with correct url /// </summary> /// <param name="items"></param> /// <returns></returns> public static DataTable GetTableWithCorrectUrlHotNews(SPListItemCollection items) { var dataTable = items.GetDataTable(); if (items != null && items.Count > 0) { string imagepath = string.Empty; ImageFieldValue imageIcon; SPFieldUrlValue advLink; for (int i = 0; i < items.Count; i++) { imageIcon = items[i][FieldsName.NewsRecord.English.PublishingPageImage] as ImageFieldValue; if (imageIcon != null) { dataTable.Rows[i][FieldsName.NewsRecord.English.ThumbnailImage] = imageIcon.ImageUrl; } else { if (imagepath.Length > 2) dataTable.Rows[i][FieldsName.NewsRecord.English.ThumbnailImage] = imagepath.Trim().Substring(0, imagepath.Length - 2); else { dataTable.Rows[i][FieldsName.NewsRecord.English.ThumbnailImage] = imagepath; } } if (items[i].Fields.ContainsField(FieldsName.NewsRecord.English.LinkAdv)) { advLink = new SPFieldUrlValue(Convert.ToString(items[i][FieldsName.NewsRecord.English.LinkAdv])); dataTable.Rows[i][FieldsName.NewsRecord.English.LinkAdv] = advLink.Url; } } } return dataTable; }
public static DataTable GetTableWithCorrectUrlHotNews(string categoryListName, DataTable dataTable) { var items = dataTable.Copy(); if (!dataTable.Columns.Contains(FieldsName.CategoryId)) { dataTable.Columns.Add(FieldsName.CategoryId, Type.GetType("System.String")); } if (!dataTable.Columns.Contains(Constants.ListCategoryName)) { dataTable.Columns.Add(Constants.ListCategoryName, Type.GetType("System.String")); } if (!dataTable.Columns.Contains(Constants.ListName)) { dataTable.Columns.Add(Constants.ListName, Type.GetType("System.String")); } if (items != null && items.Rows.Count > 0) { string imagepath = string.Empty; ImageFieldValue imageIcon; SPFieldUrlValue advLink; for (int i = 0; i < items.Rows.Count; i++) { if (items.Columns.Contains(FieldsName.NewsRecord.English.LinkAdv)) { advLink = new SPFieldUrlValue(Convert.ToString(items.Rows[i][FieldsName.NewsRecord.English.LinkAdv])); dataTable.Rows[i][FieldsName.NewsRecord.English.LinkAdv] = advLink.Url; } dataTable.Rows[i][FieldsName.NewsRecord.English.ShortContent] = StripHtml(Convert.ToString(dataTable.Rows[i][FieldsName.NewsRecord.English.ShortContent])); //if (!string.IsNullOrEmpty(Convert.ToString(items.Rows[i][FieldsName.NewsRecord.English.CategoryName]))) //{ // SPFieldLookupValue catLK = new SPFieldLookupValue(Convert.ToString(items[i][FieldsName.NewsRecord.English.CategoryName])); // dataTable.Rows[i][FieldsName.CategoryId] = catLK.LookupId; //} var list = SPContext.Current.Web.Lists.GetList(new Guid(Convert.ToString(dataTable.Rows[i]["ListId"])), true); var listUrl = list.RootFolder.ServerRelativeUrl.Split('/'); dataTable.Rows[i][Constants.ListName] = listUrl[listUrl.Length - 1]; SPFieldLookup catFile = (SPFieldLookup)list.Fields.GetFieldByInternalName(FieldsName.NewsRecord.English.CategoryName); listUrl = SPContext.Current.Web.Lists.GetList(new Guid(catFile.LookupList), true).RootFolder.ServerRelativeUrl.Split('/'); dataTable.Rows[i][Constants.ListCategoryName] = listUrl[listUrl.Length - 1]; var listItem = list.GetItemById(Convert.ToInt32(dataTable.Rows[i]["ID"])); imagepath = Convert.ToString(items.Rows[i][FieldsName.NewsRecord.English.ThumbnailImage]); imageIcon = listItem[FieldsName.NewsRecord.English.PublishingPageImage] as ImageFieldValue; if (imageIcon != null) { dataTable.Rows[i][FieldsName.NewsRecord.English.ThumbnailImage] = imageIcon.ImageUrl; } else { if (imagepath.Length > 2) dataTable.Rows[i][FieldsName.NewsRecord.English.ThumbnailImage] = imagepath.Trim().Substring(0, imagepath.Length - 2); else { dataTable.Rows[i][FieldsName.NewsRecord.English.ThumbnailImage] = imagepath; } } if (!string.IsNullOrEmpty(Convert.ToString(listItem[FieldsName.NewsRecord.English.CategoryName]))) { SPFieldLookupValue catLK = new SPFieldLookupValue(Convert.ToString(listItem[FieldsName.NewsRecord.English.CategoryName])); dataTable.Rows[i][FieldsName.CategoryId] = catLK.LookupId; } } } return dataTable; }
/// <summary> /// Get and return table with correct url /// </summary> /// <param name="categoryListName">categoryListName</param> /// <param name="items"></param> /// <returns></returns> public static DataTable GetTableWithCorrectUrl(string categoryListName, SPListItemCollection items, bool thumbnail) { var dataTable = items.GetDataTable(); if (!dataTable.Columns.Contains(FieldsName.CategoryId)) { dataTable.Columns.Add(FieldsName.CategoryId, Type.GetType("System.String")); } if (!dataTable.Columns.Contains(FieldsName.ArticleStartDateTemp)) { dataTable.Columns.Add(FieldsName.ArticleStartDateTemp, Type.GetType("System.String")); } if (!dataTable.Columns.Contains(Constants.ListCategoryName)) { dataTable.Columns.Add(Constants.ListCategoryName, Type.GetType("System.String")); } if (!dataTable.Columns.Contains(Constants.ListName)) { dataTable.Columns.Add(Constants.ListName, Type.GetType("System.String")); } if (items != null && items.Count > 0) { string imagepath = string.Empty; ImageFieldValue imageIcon; SPFieldUrlValue advLink; var time = new DateTime(); for (int i = 0; i < items.Count; i++) { var listUrl = items.List.RootFolder.ServerRelativeUrl.Split('/'); dataTable.Rows[i][Constants.ListName] = listUrl[listUrl.Length - 1]; SPFieldLookup catFile = (SPFieldLookup)items.List.Fields.GetFieldByInternalName(FieldsName.NewsRecord.English.CategoryName); listUrl = SPContext.Current.Web.Lists.GetList(new Guid(catFile.LookupList), true).RootFolder.ServerRelativeUrl.Split('/'); dataTable.Rows[i][Constants.ListCategoryName] = listUrl[listUrl.Length - 1]; imagepath = Convert.ToString(items[i][FieldsName.NewsRecord.English.ThumbnailImage]); imageIcon = items[i][FieldsName.NewsRecord.English.PublishingPageImage] as ImageFieldValue; if (imageIcon != null && thumbnail) { dataTable.Rows[i][FieldsName.NewsRecord.English.ThumbnailImage] = imageIcon.ImageUrl; } else { if (imagepath.Length > 2) dataTable.Rows[i][FieldsName.NewsRecord.English.ThumbnailImage] = imagepath.Trim().Substring(0, imagepath.Length - 2); else { dataTable.Rows[i][FieldsName.NewsRecord.English.ThumbnailImage] = imagepath; } } if (items[i].Fields.ContainsField(FieldsName.NewsRecord.English.LinkAdv)) { advLink = new SPFieldUrlValue(Convert.ToString(items[i][FieldsName.NewsRecord.English.LinkAdv])); dataTable.Rows[i][FieldsName.NewsRecord.English.LinkAdv] = advLink.Url; } if (!string.IsNullOrEmpty(Convert.ToString(items[i][FieldsName.NewsRecord.English.CategoryName]))) { SPFieldLookupValue catLK = new SPFieldLookupValue(Convert.ToString(items[i][FieldsName.NewsRecord.English.CategoryName])); dataTable.Rows[i][FieldsName.CategoryId] = catLK.LookupId; } if (items[i].Fields.ContainsField(FieldsName.NewsRecord.English.ShortContent)) { dataTable.Rows[i][FieldsName.NewsRecord.English.ShortContent] = StripHtml(Convert.ToString(dataTable.Rows[i][FieldsName.NewsRecord.English.ShortContent])); } var timeTemp = dataTable.Rows[i][FieldsName.ArticleStartDates]; if (timeTemp != null && !String.IsNullOrEmpty(Convert.ToString(timeTemp))) { time = Convert.ToDateTime(dataTable.Rows[i][FieldsName.ArticleStartDates]); dataTable.Rows[i][FieldsName.ArticleStartDateTemp] = string.Format(" {0}/{1}/{2}", time.Day, time.Month, time.Year); } } } return dataTable; }
public void PublishAgendaToBoard(int agendaID) { SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(emisSiteURL)) { using (SPWeb emisWeb = site.OpenWeb(emisSiteRelativeURl)) { SPList agendaList = emisWeb.Lists["Board Agenda"]; SPQuery query = new SPQuery() { Query = string.Format(@"<Query> <Where> <Eq> <FieldRef Name='ID' /> <Value Type='Counter'>{0}</Value> </Eq> </Where> </Query>", agendaID.ToString()) }; foreach (SPListItem agenda in agendaList.GetItems(query)) { if ((agenda["ID"].ToString() == agendaID.ToString()) && (agenda["Agenda Status"].ToString() == "Ready to Publish")) { int meetingID = int.Parse(agenda["CommitteeMeeting"].ToString()); string AgendaTitle = agenda["Title"].ToString(); SPFieldUrlValue docSetHomePage = new SPFieldUrlValue(agenda["DocumentWorkspace"].ToString()); string documentWorkspaceURL = docSetHomePage.Url.Substring(0, docSetHomePage.Url.IndexOf("Shared%20Documents")); using (SPWeb documentWorkspace = site.OpenWeb(documentWorkspaceURL)) { //Now get the list holding the document set. SPList sharedDocuments = documentWorkspace.Lists[libraryNameInDocumentWorkspace]; Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet sourceDocumentSet = Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet.GetDocumentSet(sharedDocuments.Items[0].Folder); //Once you have your meetingID, find the meetingWorkspace using (SPSite boardSite = new SPSite(boardSiteURL)) using (SPWeb boardWeb = boardSite.OpenWeb()) { SPList meetingsList = boardWeb.Lists["Board Meeting"]; //TODO: Get from configuration SPListItem meeting = meetingsList.GetItemById(meetingID); //Now Get the Meeting Workspace SPFieldUrlValue meetingWorkspaceURL = new SPFieldUrlValue(meeting["Workspace"].ToString()); using (SPWeb boardRootWeb = boardSite.OpenWeb()) { SPMeeting meetingSites = SPMeeting.GetMeetingInformation(boardWeb); SPWebCollection meetingWorkspaces = meetingSites.GetWorkspacesToLinkTo(false); SPWeb meetingWeb = null; foreach (SPWeb meetingWorkspace in meetingWorkspaces) { if (meetingWorkspaceURL.Url.Contains(meetingWorkspace.Url)) { meetingWeb = meetingWorkspace; break; } } SPList documentLibrary = meetingWeb.Lists["Document Library"]; meetingWeb.AllowUnsafeUpdates = true; string instanceID = "1"; Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet AgendaDocSetInMeetingWorkspace = CreateDocumentSet(documentLibrary, AgendaTitle); //AgendaDocSetInMeetingWorkspace.Item.Update(); documentLibrary.Update(); //Iterate through the source Document Set and copy the files over. ContentIterator docSetIterator = new ContentIterator(); docSetIterator.ProcessFilesInFolder(sourceDocumentSet.Folder, true, new ContentIterator.FileProcessor((SPFile file) => { //documentLibrary.RootFolder.SubFolders[instanceID].Files.Add(AgendaDocSetInMeetingWorkspace.Item.Folder.Url, file.OpenBinary(), true); if (bool.Parse(file.Properties["PublishDocumentToBoard"].ToString()) == true) { CopyFile(file, AgendaDocSetInMeetingWorkspace, AgendaTitle); meetingWeb.Update(); } }), new ContentIterator.FileProcessorErrorCallout((SPFile file, Exception ex) => { //TODO: Handle the error during iteration of files return false; }) ); //Also update that particular agenda with all the pertinetn information SPList agendaListInWorkspace = meetingWeb.Lists["Agenda"]; SPQuery agendaQuery = new SPQuery() { Query = string.Format(@"<Where> <Eq> <FieldRef Name='AgendaID'/> <Value Type='Number'>{0}</Value> </Eq> </Where>", agendaID) }; foreach (SPListItem agendaInWorkspace in agendaListInWorkspace.GetItems(agendaQuery)) { SPFieldUrlValue docsURLValue = new SPFieldUrlValue(); string URLValue = AgendaDocSetInMeetingWorkspace.ParentList.ParentWeb.Site.Url + AgendaDocSetInMeetingWorkspace.ParentList.ParentWebUrl + "/" + AgendaDocSetInMeetingWorkspace.Item.Url; URLValue = URLValue.Replace(" ", "%20"); docsURLValue.Url = URLValue; docsURLValue.Description = "Documents"; agendaInWorkspace["Documents"] = docsURLValue; //agendaInWorkspace["Documents"] = string.Format("{0}, Documents", AgendaDocSetInMeetingWorkspace.WelcomePageUrl); agendaInWorkspace.Update(); } agenda["Agenda Status"] = "Published to Board"; agenda.Update(); meetingWeb.AllowUnsafeUpdates = false; } } } } } } } }); }
/// <summary> /// 添加支付相关链接 /// </summary> /// <param name="fields"></param> void AddPaymentLink(WorkflowDataFields fields) { string sPONO = fields["PONumber"].ToString(); if (sPONO.EndsWith("R", StringComparison.InvariantCultureIgnoreCase)) { return; } SPFieldUrlValue linkInstall = new SPFieldUrlValue(); linkInstall.Description = "Payment"; linkInstall.Url = string.Concat("/WorkFlowCenter/lists/PaymentRequestItems/NewForm.aspx?PONO=", sPONO, "&IsFromPO=ture"); SPFieldUrlValue linkHistory = new SPFieldUrlValue(); linkHistory.Description = "Payment History"; linkHistory.Url = string.Concat("/WorkFlowCenter/_layouts/ca/workflows/PaymentRequest/HistoryForm.aspx?PONO=" , sPONO, "&IsFromPO=ture"); fields["Installment"] = linkInstall; fields["InstallmentHistory"] = linkHistory; }
/// <summary> /// Fixes the pages page layout url so that it points to the page layout in the container site collections master page gallery. /// </summary> /// <param name="publishingWeb">The target publishing web.</param> /// <param name="pageName">Name of the page.</param> /// <param name="pageLayoutUrl">The page layout URL.</param> /// <param name="searchRegex">The search regex.</param> /// <param name="replaceString">The replace string.</param> /// <param name="fixContact">if set to <c>true</c> [fix contact].</param> /// <param name="test">if set to <c>true</c> [test].</param> public static void FixPages(PublishingWeb publishingWeb, string pageName, string pageLayoutUrl, Regex searchRegex, string replaceString, bool fixContact, bool test) { if (!PublishingWeb.IsPublishingWeb(publishingWeb.Web)) return; PublishingPageCollection pages; int tryCount = 0; while (true) { try { tryCount++; pages = publishingWeb.GetPublishingPages(); break; } catch (InvalidPublishingWebException) { // The following is meant to deal with a timing issue when using this method in conjuction with other commands. When // used independently this should be unnecessary. if (tryCount > 4) throw; Thread.Sleep(10000); SPWeb web = publishingWeb.Web; SPSite site = web.Site; string url = site.MakeFullUrl(web.ServerRelativeUrl); site.Close(); site.Dispose(); web.Close(); web.Dispose(); publishingWeb.Close(); site = new SPSite(url); web = site.OpenWeb(Utilities.GetServerRelUrlFromFullUrl(url)); publishingWeb = PublishingWeb.GetPublishingWeb(web); } } foreach (PublishingPage page in pages) { if (!(string.IsNullOrEmpty(pageName) || page.Name.ToLower() == pageName.ToLower())) continue; if (page.ListItem[FieldId.PageLayout] == null) continue; Logger.Write("Progress: Begin processing {0}.", page.Url); Logger.Write("Progress: Current layout set to {0}.", page.ListItem[FieldId.PageLayout].ToString()); // Can't edit items that are checked out. if (Utilities.IsCheckedOut(page.ListItem) && !Utilities.IsCheckedOutByCurrentUser(page.ListItem)) { Logger.WriteWarning("WARNING: Page is already checked out by another user - skipping."); continue; } SPFieldUrlValue url; if (string.IsNullOrEmpty(pageLayoutUrl)) { if (searchRegex == null) { if (page.ListItem[FieldId.PageLayout] == null || string.IsNullOrEmpty(page.ListItem[FieldId.PageLayout].ToString().Trim())) { Logger.WriteWarning("WARNING: Current page layout is empty - skipping. Use the 'pagelayout' parameter to set a page layout."); continue; } // We didn't get a layout url passed in or a regular expression so try and fix the existing url url = new SPFieldUrlValue(page.ListItem[FieldId.PageLayout].ToString()); if (string.IsNullOrEmpty(url.Url) || url.Url.IndexOf("/_catalogs/") < 0) { Logger.WriteWarning("WARNING: Current page layout does not point to a _catalogs folder or is empty - skipping. Use the 'pagelayout' parameter to set a page layout Layout Url: {0}", url.ToString()); continue; } string newUrl = publishingWeb.Web.Site.ServerRelativeUrl.TrimEnd('/') + url.Url.Substring(url.Url.IndexOf("/_catalogs/")); string newDesc = publishingWeb.Web.Site.MakeFullUrl(newUrl); if (url.Url.ToLowerInvariant() == newUrl.ToLowerInvariant()) { Logger.Write("Progress: Current layout matches new evaluated layout - skipping."); continue; } url.Url = newUrl; url.Description = newDesc; } else { if (page.ListItem[FieldId.PageLayout] == null || string.IsNullOrEmpty(page.ListItem[FieldId.PageLayout].ToString().Trim())) Logger.Write("Progress: Current page layout is empty - skipping. Use the pagelayout parameter to set a page layout."); // A regular expression was passed in so use it to fix the page layout url if we find a match. if (searchRegex.IsMatch((string)page.ListItem[FieldId.PageLayout])) { url = new SPFieldUrlValue(page.ListItem[FieldId.PageLayout].ToString()); string newUrl = searchRegex.Replace((string)page.ListItem[FieldId.PageLayout], replaceString); if (url.ToString().ToLowerInvariant() == newUrl.ToLowerInvariant()) { Logger.Write("Progress: Current layout matches new evaluated layout - skipping."); continue; } url = new SPFieldUrlValue(newUrl); } else { Logger.Write("Progress: Existing page layout url does not match provided regular expression - skipping."); continue; } } } else { // The user passed in an url string so use it. if (pageLayoutUrl.ToLowerInvariant() == (string)page.ListItem[FieldId.PageLayout]) { Logger.Write("Progress: Current layout matches provided layout - skipping."); continue; } url = new SPFieldUrlValue(pageLayoutUrl); } string fileName = url.Url.Substring(url.Url.LastIndexOf('/')); // Make sure that the URLs are server relative instead of absolute. //if (url.Description.ToLowerInvariant().StartsWith("http")) // url.Description = Utilities.GetServerRelUrlFromFullUrl(url.Description) + fileName; //if (url.Url.ToLowerInvariant().StartsWith("http")) // url.Url = Utilities.GetServerRelUrlFromFullUrl(url.Url) + fileName; if (page.ListItem[FieldId.PageLayout] != null && url.ToString().ToLowerInvariant() == page.ListItem[FieldId.PageLayout].ToString().ToLowerInvariant()) continue; // No difference detected so move on. Logger.Write("Progress: Changing layout url from \"{0}\" to \"{1}\"", page.ListItem[FieldId.PageLayout].ToString(), url.ToString()); if (fixContact) { SPUser contact = null; try { contact = page.Contact; } catch (SPException) { } if (contact == null) { Logger.Write("Progress: Page contact ('{0}') does not exist - assigning current user as contact.", page.ListItem[FieldId.Contact].ToString()); page.Contact = publishingWeb.Web.CurrentUser; if (!test) page.ListItem.SystemUpdate(); } } if (test) continue; try { bool publish = false; if (!Utilities.IsCheckedOut(page.ListItem)) { page.CheckOut(); publish = true; } page.ListItem[FieldId.PageLayout] = url; page.ListItem.UpdateOverwriteVersion(); if (publish) { Common.Lists.PublishItems itemPublisher = new Common.Lists.PublishItems(); itemPublisher.PublishListItem(page.ListItem, page.ListItem.ParentList, false, "Automated fix of publishing pages page layout URL.", null, null); } } catch (Exception ex) { Logger.WriteException(new ErrorRecord(ex, null, ErrorCategory.NotSpecified, page)); } } }
public void FromEntity_WhenMappingToNewListItem_ShouldInitializeListItemFieldValues() { using (var testScope = SiteTestScope.BlankSite()) { // Arrange IntegerFieldInfo integerFieldInfo = new IntegerFieldInfo( "TestInternalNameInteger", new Guid("{12E262D0-C7C4-4671-A266-064CDBD3905A}"), "NameKeyInt", "DescriptionKeyInt", "GroupKey"); NumberFieldInfo numberFieldInfo = new NumberFieldInfo( "TestInternalNameNumber", new Guid("{5DD4EE0F-8498-4033-97D0-317A24988786}"), "NameKeyNumber", "DescriptionKeyNumber", "GroupKey"); CurrencyFieldInfo currencyFieldInfo = new CurrencyFieldInfo( "TestInternalNameCurrency", new Guid("{9E9963F6-1EE6-46FB-9599-783BBF4D6249}"), "NameKeyCurrency", "DescriptionKeyCurrency", "GroupKey"); BooleanFieldInfo boolFieldInfoBasic = new BooleanFieldInfo( "TestInternalNameBool", new Guid("{F556AB6B-9E51-43E2-99C9-4A4E551A4BEF}"), "NameKeyBool", "DescriptionKeyBool", "GroupKey"); BooleanFieldInfo boolFieldInfoDefaultTrue = new BooleanFieldInfo( "TestInternalNameBoolTrue", new Guid("{0D0289AD-C5FB-495B-96C6-48CC46737D08}"), "NameKeyBoolTrue", "DescriptionKeyBoolTrue", "GroupKey") { DefaultValue = true }; BooleanFieldInfo boolFieldInfoDefaultFalse = new BooleanFieldInfo( "TestInternalNameBoolFalse", new Guid("{628181BD-9B0B-4B7E-934F-1CF1796EA4E4}"), "NameKeyBoolFalse", "DescriptionKeyBoolFalse", "GroupKey") { DefaultValue = false }; DateTimeFieldInfo dateTimeFieldInfoFormula = new DateTimeFieldInfo( "TestInternalNameDateFormula", new Guid("{D23EAD73-9E18-46DB-A426-41B2D47F696C}"), "NameKeyDateTimeFormula", "DescriptionKeyDateTimeFormula", "GroupKey") { DefaultFormula = "=[Today]" }; DateTimeFieldInfo dateTimeFieldInfo = new DateTimeFieldInfo( "TestInternalNameDateDefault", new Guid("{016BF8D9-CEDC-4BF4-BA21-AC6A8F174AD5}"), "NameKeyDateTimeDefault", "DescriptionKeyDateTimeDefault", "GroupKey"); TextFieldInfo textFieldInfo = new TextFieldInfo( "TestInternalNameText", new Guid("{0C58B4A1-B360-47FE-84F7-4D8F58AE80F6}"), "NameKey", "DescriptionKey", "GroupKey"); NoteFieldInfo noteFieldInfo = new NoteFieldInfo( "TestInternalNameNote", new Guid("{E315BB24-19C3-4F2E-AABC-9DE5EFC3D5C2}"), "NameKeyAlt", "DescriptionKeyAlt", "GroupKey"); HtmlFieldInfo htmlFieldInfo = new HtmlFieldInfo( "TestInternalNameHtml", new Guid("{D16958E7-CF9A-4C38-A8BB-99FC03BFD913}"), "NameKeyAlt", "DescriptionKeyAlt", "GroupKey"); ImageFieldInfo imageFieldInfo = new ImageFieldInfo( "TestInternalNameImage", new Guid("{6C5B9E77-B621-43AA-BFBF-B333093EFCAE}"), "NameKeyImage", "DescriptionKeyImage", "GroupKey"); UrlFieldInfo urlFieldInfo = new UrlFieldInfo( "TestInternalNameUrl", new Guid("{208F904C-5A1C-4E22-9A79-70B294FABFDA}"), "NameKeyUrl", "DescriptionKeyUrl", "GroupKey"); UrlFieldInfo urlFieldInfoImage = new UrlFieldInfo( "TestInternalNameUrlImg", new Guid("{96D22CFF-5B40-4675-B632-28567792E11B}"), "NameKeyUrlImg", "DescriptionKeyUrlImg", "GroupKey") { Format = UrlFieldFormat.Image }; LookupFieldInfo lookupFieldInfo = new LookupFieldInfo( "TestInternalNameLookup", new Guid("{62F8127C-4A8C-4217-8BD8-C6712753AFCE}"), "NameKey", "DescriptionKey", "GroupKey"); LookupFieldInfo lookupFieldInfoAlt = new LookupFieldInfo( "TestInternalNameLookupAlt", new Guid("{1F05DFFA-6396-4AEF-AD23-72217206D35E}"), "NameKey", "DescriptionKey", "GroupKey") { ShowField = "ID" }; LookupMultiFieldInfo lookupMultiFieldInfo = new LookupMultiFieldInfo( "TestInternalNameLookupM", new Guid("{2C9D4C0E-21EB-4742-8C6C-4C30DCD08A05}"), "NameKeyMulti", "DescriptionKeyMulti", "GroupKey"); var ensuredUser1 = testScope.SiteCollection.RootWeb.EnsureUser(Environment.UserDomainName + "\\" + Environment.UserName); var ensuredUser2 = testScope.SiteCollection.RootWeb.EnsureUser("OFFICE\\maxime.boissonneault"); UserFieldInfo userFieldInfo = new UserFieldInfo( "TestInternalNameUser", new Guid("{5B74DD50-0D2D-4D24-95AF-0C4B8AA3F68A}"), "NameKeyUser", "DescriptionKeyUser", "GroupKey"); UserMultiFieldInfo userMultiFieldInfo = new UserMultiFieldInfo( "TestInternalNameUserMulti", new Guid("{8C662588-D54E-4905-B232-856C2239B036}"), "NameKeyUserMulti", "DescriptionKeyUserMulti", "GroupKey"); MediaFieldInfo mediaFieldInfo = new MediaFieldInfo( "TestInternalNameMedia", new Guid("{A2F070FE-FE33-44FC-9FDF-D18E74ED4D67}"), "NameKeyMedia", "DescriptionKeyMEdia", "GroupKey"); var testTermSet = new TermSetInfo(Guid.NewGuid(), "Test Term Set"); // keep Ids random because, if this test fails midway, the term // set will not be cleaned up and upon next test run we will // run into a term set and term ID conflicts. var levelOneTermA = new TermInfo(Guid.NewGuid(), "Term A", testTermSet); var levelOneTermB = new TermInfo(Guid.NewGuid(), "Term B", testTermSet); var levelTwoTermAA = new TermInfo(Guid.NewGuid(), "Term A-A", testTermSet); var levelTwoTermAB = new TermInfo(Guid.NewGuid(), "Term A-B", testTermSet); TaxonomySession session = new TaxonomySession(testScope.SiteCollection); TermStore defaultSiteCollectionTermStore = session.DefaultSiteCollectionTermStore; Group defaultSiteCollectionGroup = defaultSiteCollectionTermStore.GetSiteCollectionGroup(testScope.SiteCollection); TermSet newTermSet = defaultSiteCollectionGroup.CreateTermSet(testTermSet.Label, testTermSet.Id); Term createdTermA = newTermSet.CreateTerm(levelOneTermA.Label, Language.English.Culture.LCID, levelOneTermA.Id); Term createdTermB = newTermSet.CreateTerm(levelOneTermB.Label, Language.English.Culture.LCID, levelOneTermB.Id); Term createdTermAA = createdTermA.CreateTerm(levelTwoTermAA.Label, Language.English.Culture.LCID, levelTwoTermAA.Id); Term createdTermAB = createdTermA.CreateTerm(levelTwoTermAB.Label, Language.English.Culture.LCID, levelTwoTermAB.Id); defaultSiteCollectionTermStore.CommitAll(); TaxonomyFieldInfo taxoFieldInfo = new TaxonomyFieldInfo( "TestInternalNameTaxo", new Guid("{18CC105F-16C9-43E2-9933-37F98452C038}"), "NameKey", "DescriptionKey", "GroupKey") { TermStoreMapping = new TaxonomyContext(testTermSet) // choices limited to all terms in test term set }; TaxonomyMultiFieldInfo taxoMultiFieldInfo = new TaxonomyMultiFieldInfo( "TestInternalNameTaxoMulti", new Guid("{2F49D362-B014-41BB-9959-1000C9A7FFA0}"), "NameKeyMulti", "DescriptionKey", "GroupKey") { TermStoreMapping = new TaxonomyContext(levelOneTermA) // choices limited to children of a specific term, instead of having full term set choices }; var fieldsToEnsure = new List<BaseFieldInfo>() { integerFieldInfo, numberFieldInfo, currencyFieldInfo, boolFieldInfoBasic, boolFieldInfoDefaultTrue, boolFieldInfoDefaultFalse, dateTimeFieldInfoFormula, dateTimeFieldInfo, textFieldInfo, noteFieldInfo, htmlFieldInfo, imageFieldInfo, urlFieldInfo, urlFieldInfoImage, lookupFieldInfo, lookupFieldInfoAlt, lookupMultiFieldInfo, userFieldInfo, userMultiFieldInfo, mediaFieldInfo, taxoFieldInfo, taxoMultiFieldInfo }; ListInfo lookupListInfo = new ListInfo("sometestlistpathlookup", "DynamiteTestListNameKeyLookup", "DynamiteTestListDescriptionKeyLookup"); ListInfo listInfo = new ListInfo("sometestlistpath", "DynamiteTestListNameKey", "DynamiteTestListDescriptionKey") { FieldDefinitions = fieldsToEnsure }; // Note how we need to specify SPSite for injection context - ISharePointEntityBinder's implementation // is lifetime-scoped to InstancePerSite. using (var injectionScope = IntegrationTestServiceLocator.BeginLifetimeScope(testScope.SiteCollection)) { var listHelper = injectionScope.Resolve<IListHelper>(); // Lookup field ListId setup SPList lookupList = listHelper.EnsureList(testScope.SiteCollection.RootWeb, lookupListInfo); lookupFieldInfo.ListId = lookupList.ID; lookupFieldInfoAlt.ListId = lookupList.ID; lookupMultiFieldInfo.ListId = lookupList.ID; // Create the looked-up items var lookupItem1 = lookupList.Items.Add(); lookupItem1["Title"] = "Test Item 1"; lookupItem1.Update(); var lookupItem2 = lookupList.Items.Add(); lookupItem2["Title"] = "Test Item 2"; lookupItem2.Update(); // Create the first test list SPList list = listHelper.EnsureList(testScope.SiteCollection.RootWeb, listInfo); // Initialize the entity object with all the property values we want to apply on the new list item var entityBinder = injectionScope.Resolve<ISharePointEntityBinder>(); var entity = new TestItemEntityWithLookups() { IntegerProperty = 555, DoubleProperty = 5.5, CurrencyProperty = 500.95, BoolProperty = true, BoolDefaultTrueProperty = false, BoolDefaultFalseProperty = true, DateTimeFormulaProperty = new DateTime(2005, 10, 21), DateTimeProperty = new DateTime(2005, 10, 21), TextProperty = "Text value", NoteProperty = "Note value", HtmlProperty = "<p class=\"some-css-class\">HTML value</p>", ImageProperty = new ImageValue() { Hyperlink = "http://github.com/GSoft-SharePoint/", ImageUrl = "/_layouts/15/MyFolder/MyImage.png" }, UrlProperty = new UrlValue() { Url = "http://github.com/GSoft-SharePoint/", Description = "patate!" }, UrlImageProperty = new UrlValue() { Url = "http://github.com/GSoft-SharePoint/", Description = "patate!" }, LookupProperty = new LookupValue(1, "Test Item 1"), LookupAltProperty = new LookupValue(2, "2"), LookupMultiProperty = new LookupValueCollection() { new LookupValue(1, "Test Item 1"), new LookupValue(2, "Test Item 2") }, UserProperty = new UserValue(ensuredUser1), UserMultiProperty = new UserValueCollection() { new UserValue(ensuredUser1), new UserValue(ensuredUser2) }, MediaProperty = new MediaValue() { Title = "Some media file title", Url = "/sites/test/SiteAssets/01_01_ASP.NET%20MVC%203%20Fundamentals%20Intro%20-%20Overview.asf", IsAutoPlay = true, IsLoop = true, PreviewImageUrl = "/_layouts/15/Images/logo.png" }, TaxonomyProperty = new TaxonomyValue(createdTermB), TaxonomyMultiProperty = new TaxonomyValueCollection( new List<TaxonomyValue>() { new TaxonomyValue(createdTermAA), new TaxonomyValue(createdTermAB) }) }; // Act (create the list item and bind the Entity's values to it) var itemOnList = list.AddItem(); entityBinder.FromEntity<TestItemEntityWithLookups>(entity, itemOnList); itemOnList.Update(); // Assert // #1: validate ListItem field values on the mapped item object Assert.AreEqual(555, itemOnList["TestInternalNameInteger"]); Assert.AreEqual(5.5, itemOnList["TestInternalNameNumber"]); Assert.AreEqual(500.95, itemOnList["TestInternalNameCurrency"]); Assert.IsTrue((bool)itemOnList["TestInternalNameBool"]); Assert.IsFalse((bool)itemOnList["TestInternalNameBoolTrue"]); Assert.IsTrue((bool)itemOnList["TestInternalNameBoolFalse"]); Assert.AreEqual(new DateTime(2005, 10, 21), itemOnList["TestInternalNameDateFormula"]); Assert.AreEqual(new DateTime(2005, 10, 21), itemOnList["TestInternalNameDateDefault"]); Assert.AreEqual("Text value", itemOnList["TestInternalNameText"]); Assert.AreEqual("Note value", itemOnList["TestInternalNameNote"]); Assert.AreEqual("<p class=\"some-css-class\">HTML value</p>", itemOnList["TestInternalNameHtml"]); var imageFieldVal = (ImageFieldValue)itemOnList["TestInternalNameImage"]; Assert.IsNotNull(imageFieldVal); Assert.AreEqual("http://github.com/GSoft-SharePoint/", imageFieldVal.Hyperlink); Assert.AreEqual("/_layouts/15/MyFolder/MyImage.png", imageFieldVal.ImageUrl); var urlFieldVal = new SPFieldUrlValue(itemOnList["TestInternalNameUrl"].ToString()); Assert.AreEqual("http://github.com/GSoft-SharePoint/", urlFieldVal.Url); Assert.AreEqual("patate!", urlFieldVal.Description); var urlImageFieldVal = new SPFieldUrlValue(itemOnList["TestInternalNameUrlImg"].ToString()); Assert.AreEqual("http://github.com/GSoft-SharePoint/", urlImageFieldVal.Url); Assert.AreEqual("patate!", urlImageFieldVal.Description); var lookupFieldVal = new SPFieldLookupValue(itemOnList["TestInternalNameLookup"].ToString()); Assert.AreEqual(1, lookupFieldVal.LookupId); Assert.AreEqual("Test Item 1", lookupFieldVal.LookupValue); var lookupAltFieldVal = new SPFieldLookupValue(itemOnList["TestInternalNameLookupAlt"].ToString()); Assert.AreEqual(2, lookupAltFieldVal.LookupId); Assert.AreEqual("2", lookupAltFieldVal.LookupValue); // ShowField/LookupField is ID var lookupMultiFieldVal = new SPFieldLookupValueCollection(itemOnList["TestInternalNameLookupM"].ToString()); Assert.AreEqual(1, lookupMultiFieldVal[0].LookupId); Assert.AreEqual("Test Item 1", lookupMultiFieldVal[0].LookupValue); Assert.AreEqual(2, lookupMultiFieldVal[1].LookupId); Assert.AreEqual("Test Item 2", lookupMultiFieldVal[1].LookupValue); var userFieldVal = new SPFieldUserValue(testScope.SiteCollection.RootWeb, itemOnList["TestInternalNameUser"].ToString()); Assert.AreEqual(ensuredUser1.Name, userFieldVal.User.Name); // TODO: Make this work with ListItem converters var userMultiFieldVal = new SPFieldUserValueCollection(testScope.SiteCollection.RootWeb, itemOnList["TestInternalNameUserMulti"].ToString()); Assert.AreEqual(ensuredUser1.Name, userMultiFieldVal[0].User.Name); Assert.AreEqual("Maxime Boissonneault", userMultiFieldVal[1].User.Name); var mediaFieldVal = MediaFieldValue.FromString(itemOnList["TestInternalNameMedia"].ToString()); Assert.AreEqual("Some media file title", mediaFieldVal.Title); Assert.AreEqual(HttpUtility.UrlDecode("/sites/test/SiteAssets/01_01_ASP.NET%20MVC%203%20Fundamentals%20Intro%20-%20Overview.asf"), mediaFieldVal.MediaSource); Assert.IsTrue(mediaFieldVal.AutoPlay); Assert.IsTrue(mediaFieldVal.Loop); Assert.AreEqual("/_layouts/15/Images/logo.png", mediaFieldVal.PreviewImageSource); var taxoFieldValue = (TaxonomyFieldValue)itemOnList["TestInternalNameTaxo"]; Assert.AreNotEqual(-1, taxoFieldValue.WssId); Assert.AreEqual(levelOneTermB.Id, new Guid(taxoFieldValue.TermGuid)); Assert.AreEqual(levelOneTermB.Label, taxoFieldValue.Label); var taxoFieldValueMulti = (TaxonomyFieldValueCollection)itemOnList["TestInternalNameTaxoMulti"]; Assert.AreNotEqual(-1, taxoFieldValueMulti[0].WssId); Assert.AreEqual(levelTwoTermAA.Id, new Guid(taxoFieldValueMulti[0].TermGuid)); Assert.AreEqual(levelTwoTermAA.Label, taxoFieldValueMulti[0].Label); Assert.AreNotEqual(-1, taxoFieldValueMulti[1].WssId); Assert.AreEqual(levelTwoTermAB.Id, new Guid(taxoFieldValueMulti[1].TermGuid)); Assert.AreEqual(levelTwoTermAB.Label, taxoFieldValueMulti[1].Label); // #2: validate ListItem field values on the re-fetched list item var refetchedItemOnList = list.GetItemById(itemOnList.ID); Assert.AreEqual(555, refetchedItemOnList["TestInternalNameInteger"]); Assert.AreEqual(5.5, refetchedItemOnList["TestInternalNameNumber"]); Assert.AreEqual(500.95, refetchedItemOnList["TestInternalNameCurrency"]); Assert.IsTrue((bool)refetchedItemOnList["TestInternalNameBool"]); Assert.IsFalse((bool)refetchedItemOnList["TestInternalNameBoolTrue"]); Assert.IsTrue((bool)refetchedItemOnList["TestInternalNameBoolFalse"]); Assert.AreEqual(new DateTime(2005, 10, 21), refetchedItemOnList["TestInternalNameDateFormula"]); Assert.AreEqual(new DateTime(2005, 10, 21), refetchedItemOnList["TestInternalNameDateDefault"]); Assert.AreEqual("Text value", refetchedItemOnList["TestInternalNameText"]); Assert.AreEqual("Note value", refetchedItemOnList["TestInternalNameNote"]); Assert.AreEqual("<p class=\"some-css-class\">HTML value</p>", refetchedItemOnList["TestInternalNameHtml"]); imageFieldVal = (ImageFieldValue)refetchedItemOnList["TestInternalNameImage"]; Assert.IsNotNull(imageFieldVal); Assert.AreEqual("http://github.com/GSoft-SharePoint/", imageFieldVal.Hyperlink); Assert.AreEqual("/_layouts/15/MyFolder/MyImage.png", imageFieldVal.ImageUrl); urlFieldVal = new SPFieldUrlValue(refetchedItemOnList["TestInternalNameUrl"].ToString()); Assert.AreEqual("http://github.com/GSoft-SharePoint/", urlFieldVal.Url); Assert.AreEqual("patate!", urlFieldVal.Description); // proper Url description will never be set for Format=Hyperlink urlImageFieldVal = new SPFieldUrlValue(refetchedItemOnList["TestInternalNameUrlImg"].ToString()); Assert.AreEqual("http://github.com/GSoft-SharePoint/", urlImageFieldVal.Url); Assert.AreEqual("patate!", urlImageFieldVal.Description); // proper Url description will never be set for Format=Image either lookupFieldVal = new SPFieldLookupValue(refetchedItemOnList["TestInternalNameLookup"].ToString()); Assert.AreEqual(1, lookupFieldVal.LookupId); Assert.AreEqual("Test Item 1", lookupFieldVal.LookupValue); lookupAltFieldVal = new SPFieldLookupValue(refetchedItemOnList["TestInternalNameLookupAlt"].ToString()); Assert.AreEqual(2, lookupAltFieldVal.LookupId); Assert.AreEqual("2", lookupAltFieldVal.LookupValue); // ShowField/LookupField is ID lookupMultiFieldVal = new SPFieldLookupValueCollection(refetchedItemOnList["TestInternalNameLookupM"].ToString()); Assert.AreEqual(1, lookupMultiFieldVal[0].LookupId); Assert.AreEqual("Test Item 1", lookupMultiFieldVal[0].LookupValue); Assert.AreEqual(2, lookupMultiFieldVal[1].LookupId); Assert.AreEqual("Test Item 2", lookupMultiFieldVal[1].LookupValue); userFieldVal = new SPFieldUserValue(testScope.SiteCollection.RootWeb, refetchedItemOnList["TestInternalNameUser"].ToString()); Assert.AreEqual(ensuredUser1.Name, userFieldVal.User.Name); userMultiFieldVal = new SPFieldUserValueCollection(testScope.SiteCollection.RootWeb, refetchedItemOnList["TestInternalNameUserMulti"].ToString()); Assert.AreEqual(ensuredUser1.Name, userMultiFieldVal[0].User.Name); Assert.AreEqual("Maxime Boissonneault", userMultiFieldVal[1].User.Name); mediaFieldVal = MediaFieldValue.FromString(refetchedItemOnList["TestInternalNameMedia"].ToString()); Assert.AreEqual("Some media file title", mediaFieldVal.Title); Assert.AreEqual(HttpUtility.UrlDecode("/sites/test/SiteAssets/01_01_ASP.NET%20MVC%203%20Fundamentals%20Intro%20-%20Overview.asf"), mediaFieldVal.MediaSource); Assert.IsTrue(mediaFieldVal.AutoPlay); Assert.IsTrue(mediaFieldVal.Loop); Assert.AreEqual("/_layouts/15/Images/logo.png", mediaFieldVal.PreviewImageSource); taxoFieldValue = (TaxonomyFieldValue)refetchedItemOnList["TestInternalNameTaxo"]; Assert.AreNotEqual(-1, taxoFieldValue.WssId); Assert.AreEqual(levelOneTermB.Id, new Guid(taxoFieldValue.TermGuid)); Assert.AreEqual(levelOneTermB.Label, taxoFieldValue.Label); taxoFieldValueMulti = (TaxonomyFieldValueCollection)refetchedItemOnList["TestInternalNameTaxoMulti"]; Assert.AreNotEqual(-1, taxoFieldValueMulti[0].WssId); Assert.AreEqual(levelTwoTermAA.Id, new Guid(taxoFieldValueMulti[0].TermGuid)); Assert.AreEqual(levelTwoTermAA.Label, taxoFieldValueMulti[0].Label); Assert.AreNotEqual(-1, taxoFieldValueMulti[1].WssId); Assert.AreEqual(levelTwoTermAB.Id, new Guid(taxoFieldValueMulti[1].TermGuid)); Assert.AreEqual(levelTwoTermAB.Label, taxoFieldValueMulti[1].Label); } // Cleanup term set so that we don't pollute the metadata store newTermSet.Delete(); defaultSiteCollectionTermStore.CommitAll(); } }
public void ToEntity_WhenMappingFromListItem_AndItemPropertiesAreFilledWithValues_ShouldMapEntityWithAllItemValues() { using (var testScope = SiteTestScope.BlankSite()) { // Arrange IntegerFieldInfo integerFieldInfo = new IntegerFieldInfo( "TestInternalNameInteger", new Guid("{12E262D0-C7C4-4671-A266-064CDBD3905A}"), "NameKeyInt", "DescriptionKeyInt", "GroupKey"); NumberFieldInfo numberFieldInfo = new NumberFieldInfo( "TestInternalNameNumber", new Guid("{5DD4EE0F-8498-4033-97D0-317A24988786}"), "NameKeyNumber", "DescriptionKeyNumber", "GroupKey"); CurrencyFieldInfo currencyFieldInfo = new CurrencyFieldInfo( "TestInternalNameCurrency", new Guid("{9E9963F6-1EE6-46FB-9599-783BBF4D6249}"), "NameKeyCurrency", "DescriptionKeyCurrency", "GroupKey"); BooleanFieldInfo boolFieldInfoBasic = new BooleanFieldInfo( "TestInternalNameBool", new Guid("{F556AB6B-9E51-43E2-99C9-4A4E551A4BEF}"), "NameKeyBool", "DescriptionKeyBool", "GroupKey"); BooleanFieldInfo boolFieldInfoDefaultTrue = new BooleanFieldInfo( "TestInternalNameBoolTrue", new Guid("{0D0289AD-C5FB-495B-96C6-48CC46737D08}"), "NameKeyBoolTrue", "DescriptionKeyBoolTrue", "GroupKey") { DefaultValue = true }; BooleanFieldInfo boolFieldInfoDefaultFalse = new BooleanFieldInfo( "TestInternalNameBoolFalse", new Guid("{628181BD-9B0B-4B7E-934F-1CF1796EA4E4}"), "NameKeyBoolFalse", "DescriptionKeyBoolFalse", "GroupKey") { DefaultValue = false }; DateTimeFieldInfo dateTimeFieldInfoFormula = new DateTimeFieldInfo( "TestInternalNameDateFormula", new Guid("{D23EAD73-9E18-46DB-A426-41B2D47F696C}"), "NameKeyDateTimeFormula", "DescriptionKeyDateTimeFormula", "GroupKey") { DefaultFormula = "=[Today]" }; DateTimeFieldInfo dateTimeFieldInfoDefault = new DateTimeFieldInfo( "TestInternalNameDateDefault", new Guid("{016BF8D9-CEDC-4BF4-BA21-AC6A8F174AD5}"), "NameKeyDateTimeDefault", "DescriptionKeyDateTimeDefault", "GroupKey"); TextFieldInfo textFieldInfo = new TextFieldInfo( "TestInternalNameText", new Guid("{0C58B4A1-B360-47FE-84F7-4D8F58AE80F6}"), "NameKey", "DescriptionKey", "GroupKey"); NoteFieldInfo noteFieldInfo = new NoteFieldInfo( "TestInternalNameNote", new Guid("{E315BB24-19C3-4F2E-AABC-9DE5EFC3D5C2}"), "NameKeyAlt", "DescriptionKeyAlt", "GroupKey"); HtmlFieldInfo htmlFieldInfo = new HtmlFieldInfo( "TestInternalNameHtml", new Guid("{D16958E7-CF9A-4C38-A8BB-99FC03BFD913}"), "NameKeyAlt", "DescriptionKeyAlt", "GroupKey"); ImageFieldInfo imageFieldInfo = new ImageFieldInfo( "TestInternalNameImage", new Guid("{6C5B9E77-B621-43AA-BFBF-B333093EFCAE}"), "NameKeyImage", "DescriptionKeyImage", "GroupKey"); UrlFieldInfo urlFieldInfo = new UrlFieldInfo( "TestInternalNameUrl", new Guid("{208F904C-5A1C-4E22-9A79-70B294FABFDA}"), "NameKeyUrl", "DescriptionKeyUrl", "GroupKey"); UrlFieldInfo urlFieldInfoImage = new UrlFieldInfo( "TestInternalNameUrlImg", new Guid("{96D22CFF-5B40-4675-B632-28567792E11B}"), "NameKeyUrlImg", "DescriptionKeyUrlImg", "GroupKey") { Format = UrlFieldFormat.Image }; LookupFieldInfo lookupFieldInfo = new LookupFieldInfo( "TestInternalNameLookup", new Guid("{62F8127C-4A8C-4217-8BD8-C6712753AFCE}"), "NameKey", "DescriptionKey", "GroupKey"); LookupFieldInfo lookupFieldInfoAlt = new LookupFieldInfo( "TestInternalNameLookupAlt", new Guid("{1F05DFFA-6396-4AEF-AD23-72217206D35E}"), "NameKey", "DescriptionKey", "GroupKey") { ShowField = "ID" }; LookupMultiFieldInfo lookupMultiFieldInfo = new LookupMultiFieldInfo( "TestInternalNameLookupM", new Guid("{2C9D4C0E-21EB-4742-8C6C-4C30DCD08A05}"), "NameKeyMulti", "DescriptionKeyMulti", "GroupKey"); var ensuredUser1 = testScope.SiteCollection.RootWeb.EnsureUser(Environment.UserDomainName + "\\" + Environment.UserName); var ensuredUser2 = testScope.SiteCollection.RootWeb.EnsureUser("OFFICE\\maxime.boissonneault"); UserFieldInfo userFieldInfo = new UserFieldInfo( "TestInternalNameUser", new Guid("{5B74DD50-0D2D-4D24-95AF-0C4B8AA3F68A}"), "NameKeyUser", "DescriptionKeyUser", "GroupKey"); UserMultiFieldInfo userMultiFieldInfo = new UserMultiFieldInfo( "TestInternalNameUserMulti", new Guid("{8C662588-D54E-4905-B232-856C2239B036}"), "NameKeyUserMulti", "DescriptionKeyUserMulti", "GroupKey"); MediaFieldInfo mediaFieldInfo = new MediaFieldInfo( "TestInternalNameMedia", new Guid("{A2F070FE-FE33-44FC-9FDF-D18E74ED4D67}"), "NameKeyMedia", "DescriptionKeyMEdia", "GroupKey"); var testTermSet = new TermSetInfo(Guid.NewGuid(), "Test Term Set"); // keep Ids random because, if this test fails midway, the term // set will not be cleaned up and upon next test run we will // run into a term set and term ID conflicts. var levelOneTermA = new TermInfo(Guid.NewGuid(), "Term A", testTermSet); var levelOneTermB = new TermInfo(Guid.NewGuid(), "Term B", testTermSet); var levelTwoTermAA = new TermInfo(Guid.NewGuid(), "Term A-A", testTermSet); var levelTwoTermAB = new TermInfo(Guid.NewGuid(), "Term A-B", testTermSet); TaxonomySession session = new TaxonomySession(testScope.SiteCollection); TermStore defaultSiteCollectionTermStore = session.DefaultSiteCollectionTermStore; Group defaultSiteCollectionGroup = defaultSiteCollectionTermStore.GetSiteCollectionGroup(testScope.SiteCollection); TermSet newTermSet = defaultSiteCollectionGroup.CreateTermSet(testTermSet.Label, testTermSet.Id); Term createdTermA = newTermSet.CreateTerm(levelOneTermA.Label, Language.English.Culture.LCID, levelOneTermA.Id); Term createdTermB = newTermSet.CreateTerm(levelOneTermB.Label, Language.English.Culture.LCID, levelOneTermB.Id); Term createdTermAA = createdTermA.CreateTerm(levelTwoTermAA.Label, Language.English.Culture.LCID, levelTwoTermAA.Id); Term createdTermAB = createdTermA.CreateTerm(levelTwoTermAB.Label, Language.English.Culture.LCID, levelTwoTermAB.Id); defaultSiteCollectionTermStore.CommitAll(); TaxonomyFieldInfo taxoFieldInfo = new TaxonomyFieldInfo( "TestInternalNameTaxo", new Guid("{18CC105F-16C9-43E2-9933-37F98452C038}"), "NameKey", "DescriptionKey", "GroupKey") { TermStoreMapping = new TaxonomyContext(testTermSet) // choices limited to all terms in test term set }; TaxonomyMultiFieldInfo taxoMultiFieldInfo = new TaxonomyMultiFieldInfo( "TestInternalNameTaxoMulti", new Guid("{2F49D362-B014-41BB-9959-1000C9A7FFA0}"), "NameKeyMulti", "DescriptionKey", "GroupKey") { TermStoreMapping = new TaxonomyContext(levelOneTermA) // choices limited to children of a specific term, instead of having full term set choices }; var fieldsToEnsure = new List<BaseFieldInfo>() { integerFieldInfo, numberFieldInfo, currencyFieldInfo, boolFieldInfoBasic, boolFieldInfoDefaultTrue, boolFieldInfoDefaultFalse, dateTimeFieldInfoFormula, dateTimeFieldInfoDefault, textFieldInfo, noteFieldInfo, htmlFieldInfo, imageFieldInfo, urlFieldInfo, urlFieldInfoImage, lookupFieldInfo, lookupFieldInfoAlt, lookupMultiFieldInfo, userFieldInfo, userMultiFieldInfo, mediaFieldInfo, taxoFieldInfo, taxoMultiFieldInfo }; ListInfo lookupListInfo = new ListInfo("sometestlistpathlookup", "DynamiteTestListNameKeyLookup", "DynamiteTestListDescriptionKeyLookup"); ListInfo listInfo = new ListInfo("sometestlistpath", "DynamiteTestListNameKey", "DynamiteTestListDescriptionKey") { FieldDefinitions = fieldsToEnsure }; // Note how we need to specify SPSite for injection context - ISharePointEntityBinder's implementation // is lifetime-scoped to InstancePerSite. using (var injectionScope = IntegrationTestServiceLocator.BeginLifetimeScope(testScope.SiteCollection)) { var listHelper = injectionScope.Resolve<IListHelper>(); // Lookup field ListId setup SPList lookupList = listHelper.EnsureList(testScope.SiteCollection.RootWeb, lookupListInfo); lookupFieldInfo.ListId = lookupList.ID; lookupFieldInfoAlt.ListId = lookupList.ID; lookupMultiFieldInfo.ListId = lookupList.ID; // Create the looked-up items var lookupItem1 = lookupList.Items.Add(); lookupItem1["Title"] = "Test Item 1"; lookupItem1.Update(); var lookupItem2 = lookupList.Items.Add(); lookupItem2["Title"] = "Test Item 2"; lookupItem2.Update(); // Create the first test list SPList list = listHelper.EnsureList(testScope.SiteCollection.RootWeb, listInfo); list.EnableVersioning = true; list.Update(); // Create item on list var itemOnList = list.AddItem(); // Update with the field values through the SharePoint API itemOnList["Title"] = "Item under test"; itemOnList["TestInternalNameInteger"] = 555; itemOnList["TestInternalNameNumber"] = 5.5; itemOnList["TestInternalNameCurrency"] = 500.95; itemOnList["TestInternalNameBool"] = true; itemOnList["TestInternalNameBoolTrue"] = false; itemOnList["TestInternalNameBoolFalse"] = true; itemOnList["TestInternalNameDateFormula"] = new DateTime(1977, 7, 7); itemOnList["TestInternalNameDateDefault"] = new DateTime(1977, 7, 7); itemOnList["TestInternalNameText"] = "Text value"; itemOnList["TestInternalNameNote"] = "Note value"; itemOnList["TestInternalNameHtml"] = "<p class=\"some-css-class\">HTML value</p>"; itemOnList["TestInternalNameImage"] = new ImageFieldValue() { Hyperlink = "http://github.com/GSoft-SharePoint/", ImageUrl = "/_layouts/15/MyFolder/MyImage.png" }; itemOnList["TestInternalNameUrl"] = new SPFieldUrlValue() { Url = "http://github.com/GSoft-SharePoint/", Description = "patate!" }; itemOnList["TestInternalNameUrlImg"] = new SPFieldUrlValue() { Url = "http://github.com/GSoft-SharePoint/", Description = "patate!" }; itemOnList["TestInternalNameLookup"] = new SPFieldLookupValue(1, "Test Item 1"); itemOnList["TestInternalNameLookupAlt"] = new SPFieldLookupValue(2, "2"); itemOnList["TestInternalNameLookupM"] = new SPFieldLookupValueCollection() { new SPFieldLookupValue(1, "Test Item 1"), new SPFieldLookupValue(2, "Test Item 2") }; itemOnList["TestInternalNameUser"] = new SPFieldUserValue(testScope.SiteCollection.RootWeb, ensuredUser1.ID, ensuredUser1.Name); itemOnList["TestInternalNameUserMulti"] = new SPFieldUserValueCollection() { new SPFieldUserValue(testScope.SiteCollection.RootWeb, ensuredUser1.ID, ensuredUser1.Name), new SPFieldUserValue(testScope.SiteCollection.RootWeb, ensuredUser2.ID, ensuredUser2.Name) }; itemOnList["TestInternalNameMedia"] = new MediaFieldValue() { Title = "Some media file title", MediaSource = "/sites/test/SiteAssets/01_01_ASP.NET%20MVC%203%20Fundamentals%20Intro%20-%20Overview.asf", AutoPlay = true, Loop = true, PreviewImageSource = "/_layouts/15/Images/logo.png" }; var taxonomyField = (TaxonomyField)itemOnList.Fields.GetFieldByInternalName("TestInternalNameTaxo"); taxonomyField.SetFieldValue(itemOnList, createdTermB); var taxonomyMultiField = (TaxonomyField)itemOnList.Fields.GetFieldByInternalName("TestInternalNameTaxoMulti"); taxonomyMultiField.SetFieldValue(itemOnList, new[] { createdTermAA, createdTermAB }); itemOnList.Update(); var entityBinder = injectionScope.Resolve<ISharePointEntityBinder>(); var entityMappedFromSingleItem = new TestItemEntityWithLookups(); var entityMappedFromItemVersion = new TestItemEntityWithLookups(); // Act // Map from SPListItem entityBinder.ToEntity<TestItemEntityWithLookups>(entityMappedFromSingleItem, itemOnList); // Map from SPListItemVersion entityBinder.ToEntity<TestItemEntityWithLookups>(entityMappedFromItemVersion, itemOnList.Versions[0]); // Map from DataRow/SPListItemCollection var entitiesMappedFromItemCollection = entityBinder.Get<TestItemEntity>(list.Items); // Assert // #1 Validate straight single list item to entity mappings Assert.AreEqual(555, entityMappedFromSingleItem.IntegerProperty); Assert.AreEqual(5.5, entityMappedFromSingleItem.DoubleProperty); Assert.AreEqual(500.95, entityMappedFromSingleItem.CurrencyProperty); Assert.IsTrue(entityMappedFromSingleItem.BoolProperty.Value); Assert.IsFalse(entityMappedFromSingleItem.BoolDefaultTrueProperty); Assert.IsTrue(entityMappedFromSingleItem.BoolDefaultFalseProperty); Assert.AreEqual(new DateTime(1977, 7, 7), entityMappedFromSingleItem.DateTimeFormulaProperty); Assert.AreEqual(new DateTime(1977, 7, 7), entityMappedFromSingleItem.DateTimeProperty); Assert.AreEqual("Text value", entityMappedFromSingleItem.TextProperty); Assert.AreEqual("Note value", entityMappedFromSingleItem.NoteProperty); Assert.AreEqual("<p class=\"some-css-class\">HTML value</p>", entityMappedFromSingleItem.HtmlProperty); Assert.IsNotNull(entityMappedFromSingleItem.ImageProperty); Assert.AreEqual("http://github.com/GSoft-SharePoint/", entityMappedFromSingleItem.ImageProperty.Hyperlink); Assert.AreEqual("/_layouts/15/MyFolder/MyImage.png", entityMappedFromSingleItem.ImageProperty.ImageUrl); Assert.AreEqual("http://github.com/GSoft-SharePoint/", entityMappedFromSingleItem.UrlProperty.Url); Assert.AreEqual("patate!", entityMappedFromSingleItem.UrlProperty.Description); Assert.AreEqual("http://github.com/GSoft-SharePoint/", entityMappedFromSingleItem.UrlImageProperty.Url); Assert.AreEqual("patate!", entityMappedFromSingleItem.UrlProperty.Description); Assert.AreEqual(1, entityMappedFromSingleItem.LookupProperty.Id); Assert.AreEqual("Test Item 1", entityMappedFromSingleItem.LookupProperty.Value); Assert.AreEqual(2, entityMappedFromSingleItem.LookupAltProperty.Id); Assert.AreEqual("2", entityMappedFromSingleItem.LookupAltProperty.Value); // ShowField/LookupField is ID Assert.AreEqual(1, entityMappedFromSingleItem.LookupMultiProperty[0].Id); Assert.AreEqual("Test Item 1", entityMappedFromSingleItem.LookupMultiProperty[0].Value); Assert.AreEqual(2, entityMappedFromSingleItem.LookupMultiProperty[1].Id); Assert.AreEqual("Test Item 2", entityMappedFromSingleItem.LookupMultiProperty[1].Value); Assert.AreEqual(ensuredUser1.Name, entityMappedFromSingleItem.UserProperty.DisplayName); Assert.AreEqual(ensuredUser1.Name, entityMappedFromSingleItem.UserMultiProperty[0].DisplayName); Assert.AreEqual("Maxime Boissonneault", entityMappedFromSingleItem.UserMultiProperty[1].DisplayName); Assert.AreEqual("Some media file title", entityMappedFromSingleItem.MediaProperty.Title); Assert.AreEqual(HttpUtility.UrlDecode("/sites/test/SiteAssets/01_01_ASP.NET%20MVC%203%20Fundamentals%20Intro%20-%20Overview.asf"), entityMappedFromSingleItem.MediaProperty.Url); Assert.IsTrue(entityMappedFromSingleItem.MediaProperty.IsAutoPlay); Assert.IsTrue(entityMappedFromSingleItem.MediaProperty.IsLoop); Assert.AreEqual("/_layouts/15/Images/logo.png", entityMappedFromSingleItem.MediaProperty.PreviewImageUrl); Assert.AreEqual(levelOneTermB.Id, entityMappedFromSingleItem.TaxonomyProperty.Id); Assert.AreEqual(levelOneTermB.Label, entityMappedFromSingleItem.TaxonomyProperty.Label); Assert.AreEqual(levelTwoTermAA.Id, entityMappedFromSingleItem.TaxonomyMultiProperty[0].Id); Assert.AreEqual(levelTwoTermAA.Label, entityMappedFromSingleItem.TaxonomyMultiProperty[0].Label); Assert.AreEqual(levelTwoTermAB.Id, entityMappedFromSingleItem.TaxonomyMultiProperty[1].Id); Assert.AreEqual(levelTwoTermAB.Label, entityMappedFromSingleItem.TaxonomyMultiProperty[1].Label); // #2 Validate list item version mappings Assert.AreEqual(555, entityMappedFromItemVersion.IntegerProperty); Assert.AreEqual(5.5, entityMappedFromItemVersion.DoubleProperty); Assert.AreEqual(500.95, entityMappedFromItemVersion.CurrencyProperty); Assert.IsTrue(entityMappedFromItemVersion.BoolProperty.Value); Assert.IsFalse(entityMappedFromItemVersion.BoolDefaultTrueProperty); Assert.IsTrue(entityMappedFromItemVersion.BoolDefaultFalseProperty); Assert.AreEqual(new DateTime(1977, 7, 7), entityMappedFromItemVersion.DateTimeFormulaProperty); Assert.AreEqual(new DateTime(1977, 7, 7), entityMappedFromItemVersion.DateTimeProperty); Assert.AreEqual("Text value", entityMappedFromItemVersion.TextProperty); Assert.AreEqual("Note value", entityMappedFromItemVersion.NoteProperty); Assert.AreEqual("<p class=\"some-css-class\">HTML value</p>", entityMappedFromItemVersion.HtmlProperty); Assert.IsNotNull(entityMappedFromItemVersion.ImageProperty); Assert.AreEqual("http://github.com/GSoft-SharePoint/", entityMappedFromItemVersion.ImageProperty.Hyperlink); Assert.AreEqual("/_layouts/15/MyFolder/MyImage.png", entityMappedFromItemVersion.ImageProperty.ImageUrl); Assert.AreEqual("http://github.com/GSoft-SharePoint/", entityMappedFromItemVersion.UrlProperty.Url); Assert.AreEqual("patate!", entityMappedFromItemVersion.UrlProperty.Description); Assert.AreEqual("http://github.com/GSoft-SharePoint/", entityMappedFromItemVersion.UrlImageProperty.Url); Assert.AreEqual("patate!", entityMappedFromItemVersion.UrlProperty.Description); Assert.AreEqual(1, entityMappedFromItemVersion.LookupProperty.Id); Assert.AreEqual("Test Item 1", entityMappedFromItemVersion.LookupProperty.Value); Assert.AreEqual(2, entityMappedFromItemVersion.LookupAltProperty.Id); Assert.AreEqual("2", entityMappedFromItemVersion.LookupAltProperty.Value); // ShowField/LookupField is ID Assert.AreEqual(1, entityMappedFromItemVersion.LookupMultiProperty[0].Id); Assert.AreEqual("Test Item 1", entityMappedFromItemVersion.LookupMultiProperty[0].Value); Assert.AreEqual(2, entityMappedFromItemVersion.LookupMultiProperty[1].Id); Assert.AreEqual("Test Item 2", entityMappedFromItemVersion.LookupMultiProperty[1].Value); Assert.AreEqual(ensuredUser1.Name, entityMappedFromItemVersion.UserProperty.DisplayName); Assert.AreEqual(ensuredUser1.Name, entityMappedFromItemVersion.UserMultiProperty[0].DisplayName); Assert.AreEqual("Maxime Boissonneault", entityMappedFromItemVersion.UserMultiProperty[1].DisplayName); Assert.AreEqual("Some media file title", entityMappedFromItemVersion.MediaProperty.Title); Assert.AreEqual(HttpUtility.UrlDecode("/sites/test/SiteAssets/01_01_ASP.NET%20MVC%203%20Fundamentals%20Intro%20-%20Overview.asf"), entityMappedFromItemVersion.MediaProperty.Url); Assert.IsTrue(entityMappedFromItemVersion.MediaProperty.IsAutoPlay); Assert.IsTrue(entityMappedFromItemVersion.MediaProperty.IsLoop); Assert.AreEqual("/_layouts/15/Images/logo.png", entityMappedFromItemVersion.MediaProperty.PreviewImageUrl); Assert.AreEqual(levelOneTermB.Id, entityMappedFromItemVersion.TaxonomyProperty.Id); Assert.AreEqual(levelOneTermB.Label, entityMappedFromItemVersion.TaxonomyProperty.Label); Assert.AreEqual(levelTwoTermAA.Id, entityMappedFromItemVersion.TaxonomyMultiProperty[0].Id); Assert.AreEqual(levelTwoTermAA.Label, entityMappedFromItemVersion.TaxonomyMultiProperty[0].Label); Assert.AreEqual(levelTwoTermAB.Id, entityMappedFromItemVersion.TaxonomyMultiProperty[1].Id); Assert.AreEqual(levelTwoTermAB.Label, entityMappedFromItemVersion.TaxonomyMultiProperty[1].Label); // #3 Validate straight list item collection to entity mappings Assert.AreEqual(555, entitiesMappedFromItemCollection[0].IntegerProperty); Assert.AreEqual(5.5, entitiesMappedFromItemCollection[0].DoubleProperty); Assert.AreEqual(500.95, entitiesMappedFromItemCollection[0].CurrencyProperty); Assert.IsTrue(entitiesMappedFromItemCollection[0].BoolProperty.Value); Assert.IsFalse(entitiesMappedFromItemCollection[0].BoolDefaultTrueProperty); Assert.IsTrue(entitiesMappedFromItemCollection[0].BoolDefaultFalseProperty); Assert.AreEqual(new DateTime(1977, 7, 7), entitiesMappedFromItemCollection[0].DateTimeFormulaProperty); Assert.AreEqual(new DateTime(1977, 7, 7), entitiesMappedFromItemCollection[0].DateTimeProperty); Assert.AreEqual("Text value", entitiesMappedFromItemCollection[0].TextProperty); Assert.AreEqual("Note value", entitiesMappedFromItemCollection[0].NoteProperty); Assert.AreEqual("<p class=\"some-css-class\">HTML value</p>", entitiesMappedFromItemCollection[0].HtmlProperty); Assert.IsNotNull(entitiesMappedFromItemCollection[0].ImageProperty); Assert.AreEqual("http://github.com/GSoft-SharePoint/", entitiesMappedFromItemCollection[0].ImageProperty.Hyperlink); Assert.AreEqual("/_layouts/15/MyFolder/MyImage.png", entitiesMappedFromItemCollection[0].ImageProperty.ImageUrl); Assert.AreEqual("http://github.com/GSoft-SharePoint/", entitiesMappedFromItemCollection[0].UrlProperty.Url); Assert.AreEqual("patate!", entitiesMappedFromItemCollection[0].UrlProperty.Description); Assert.AreEqual("http://github.com/GSoft-SharePoint/", entitiesMappedFromItemCollection[0].UrlImageProperty.Url); Assert.AreEqual("patate!", entitiesMappedFromItemCollection[0].UrlImageProperty.Description); // No lookups or User fields because DataRow formatting screws up lookup values (we lose the lookup IDs) Assert.AreEqual("Some media file title", entitiesMappedFromItemCollection[0].MediaProperty.Title); Assert.AreEqual(HttpUtility.UrlDecode("/sites/test/SiteAssets/01_01_ASP.NET%20MVC%203%20Fundamentals%20Intro%20-%20Overview.asf"), entitiesMappedFromItemCollection[0].MediaProperty.Url); Assert.IsTrue(entitiesMappedFromItemCollection[0].MediaProperty.IsAutoPlay); Assert.IsTrue(entitiesMappedFromItemCollection[0].MediaProperty.IsLoop); Assert.AreEqual("/_layouts/15/Images/logo.png", entitiesMappedFromItemCollection[0].MediaProperty.PreviewImageUrl); Assert.AreEqual(levelOneTermB.Id, entitiesMappedFromItemCollection[0].TaxonomyProperty.Id); Assert.AreEqual(levelOneTermB.Label, entitiesMappedFromItemCollection[0].TaxonomyProperty.Label); Assert.AreEqual(levelTwoTermAA.Id, entitiesMappedFromItemCollection[0].TaxonomyMultiProperty[0].Id); Assert.AreEqual(levelTwoTermAA.Label, entitiesMappedFromItemCollection[0].TaxonomyMultiProperty[0].Label); Assert.AreEqual(levelTwoTermAB.Id, entitiesMappedFromItemCollection[0].TaxonomyMultiProperty[1].Id); Assert.AreEqual(levelTwoTermAB.Label, entitiesMappedFromItemCollection[0].TaxonomyMultiProperty[1].Label); } // Cleanup term set so that we don't pollute the metadata store newTermSet.Delete(); defaultSiteCollectionTermStore.CommitAll(); } }