Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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);
            }
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #5
0
        /// <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);
                        }
                    }
                }
            }
        }
Beispiel #7
0
        // 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);
        }
Beispiel #8
0
        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();
                    }
                });
            }
        }
Beispiel #9
0
        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();
        }
Beispiel #10
0
        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);
            }
        }
Beispiel #11
0
        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);
    }
Beispiel #13
0
        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);
            }
        }
Beispiel #14
0
        public CALink(string lookupString)
        {
            SPFieldUrlValue value = new SPFieldUrlValue(lookupString);

            this.LinkName = value.Description;
            this.LinkUrl = value.Url;
        }
Beispiel #15
0
        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();
        }
Beispiel #16
0
        /// <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;
            }
        }
Beispiel #17
0
        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;
            }
        }
Beispiel #18
0
 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();
        }
Beispiel #20
0
        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();
            }
        }
Beispiel #24
0
        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();
            }
        }
Beispiel #26
0
        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;
        }
Beispiel #27
0
        /// <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);
        }
Beispiel #28
0
        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);
        }
Beispiel #31
0
        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();
                }
            });
        }
Beispiel #32
0
        //添加结果链接到结果库中
        /// <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); //传递参数,在事件中对新建的助手结果进行处理
        }
Beispiel #33
0
        /// <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;
        }
Beispiel #36
0
        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();
        }
Beispiel #37
0
        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>");
                }
            }
        }
Beispiel #38
0
        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;
            }
        }
Beispiel #42
0
        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);
            }
        }
Beispiel #48
0
        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);
            }
        }
Beispiel #49
0
        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");
                }

            }
             );
        }
Beispiel #50
0
        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);
        }
Beispiel #51
0
        /// <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;
        }
Beispiel #52
0
        /// <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;
        }
Beispiel #53
0
        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;
        }
Beispiel #54
0
        /// <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;
        }
Beispiel #55
0
        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 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;

                                        }
                                    }
                                }
                            }
                        }
                    }
                }

            });
        }
Beispiel #57
0
        /// <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();
            }
        }