public void SetUploadItemProperties()

in tree/master/cloud/src/solution/Microsoft.Legal.MatterCenter.Service/Microsoft.Legal.MatterCenter.Repository/SharePointInfo/SPList.cs [718:826]


        public void SetUploadItemProperties(ClientContext clientContext, string documentLibraryName, string fileName, 
            string folderPath, Dictionary<string, string> mailProperties, MatterExtraProperties matterExtraProperties)
        {
            try
            {
                ListItemCollection items = null;
                ListItem listItem = null;
                if (null != clientContext && !string.IsNullOrEmpty(documentLibraryName) && !string.IsNullOrEmpty(fileName) && !string.IsNullOrEmpty(folderPath) && null != mailProperties)
                {
                    Web web = clientContext.Web;
                    ListCollection lists = web.Lists;
                    CamlQuery query = new CamlQuery();
                    List selectedList = lists.GetByTitle(documentLibraryName);
                    string serverRelativePath = folderPath + ServiceConstants.FORWARD_SLASH + fileName;
                    query.ViewXml = string.Format(CultureInfo.InvariantCulture, camlQueries.GetAllFilesInFolderQuery, serverRelativePath);
                    items = selectedList.GetItems(query);
                    if (null != items)
                    {
                        clientContext.Load(items, item => item.Include(currentItem => currentItem.DisplayName, currentItem => currentItem.File.Name).Where(currentItem => currentItem.File.Name == fileName));
                        clientContext.ExecuteQuery();
                        if (0 < items.Count)
                        {
                            listItem = items[0];
                            if (null != mailProperties)
                            {
                                listItem[mailSettings.SearchEmailFrom] = !string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_SENDER_KEY]) ? mailProperties[ServiceConstants.MAIL_SENDER_KEY].Trim() : string.Empty;
                                if (!string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_RECEIVED_DATEKEY]))
                                {
                                    listItem[mailSettings.SearchEmailReceivedDate] = Convert.ToDateTime(mailProperties[ServiceConstants.MAIL_RECEIVED_DATEKEY].Trim(), CultureInfo.InvariantCulture).ToUniversalTime();
                                }
                                else
                                {
                                    listItem[mailSettings.SearchEmailReceivedDate] = null;
                                }
                                listItem[mailSettings.SearchEmailCC] = !string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_CC_ADDRESS_KEY]) ? mailProperties[ServiceConstants.MAIL_CC_ADDRESS_KEY].Trim() : string.Empty;
                                listItem[mailSettings.SearchEmailAttachments] = (string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_HAS_ATTACHMENTS_KEY]) || mailProperties[ServiceConstants.MAIL_HAS_ATTACHMENTS_KEY].Equals(ServiceConstants.TRUE, StringComparison.OrdinalIgnoreCase)) ? mailProperties[ServiceConstants.MAIL_ATTACHMENT_KEY].Trim() : string.Empty;
                                listItem[mailSettings.SearchEmailFromMailbox] = !string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_SEARCH_EMAIL_FROM_MAILBOX_KEY]) ? mailProperties[ServiceConstants.MAIL_SEARCH_EMAIL_FROM_MAILBOX_KEY].Trim() : string.Empty;
                                listItem[mailSettings.SearchEmailSubject] = !string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_SEARCH_EMAIL_SUBJECT]) ? mailProperties[ServiceConstants.MAIL_SEARCH_EMAIL_SUBJECT].Trim() : string.Empty;
                                listItem[mailSettings.SearchEmailTo] = !string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_RECEIVER_KEY]) ? mailProperties[ServiceConstants.MAIL_RECEIVER_KEY].Trim() : string.Empty;
                                listItem[mailSettings.SearchEmailImportance] = !string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_IMPORTANCE_KEY]) ? mailProperties[ServiceConstants.MAIL_IMPORTANCE_KEY].Trim() : string.Empty;
                                listItem[mailSettings.SearchEmailSensitivity] = !string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_SENSITIVITY_KEY]) ? mailProperties[ServiceConstants.MAIL_SENSITIVITY_KEY].Trim() : string.Empty;
                                listItem[mailSettings.SearchEmailHasAttachments] = !string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_HAS_ATTACHMENTS_KEY]) ? mailProperties[ServiceConstants.MAIL_HAS_ATTACHMENTS_KEY].Trim() : string.Empty;
                                listItem[mailSettings.SearchEmailConversationId] = !string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_CONVERSATIONID_KEY]) ? mailProperties[ServiceConstants.MAIL_CONVERSATIONID_KEY].Trim() : string.Empty;
                                listItem[mailSettings.SearchEmailConversationTopic] = !string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_CONVERSATION_TOPIC_KEY]) ? mailProperties[ServiceConstants.MAIL_CONVERSATION_TOPIC_KEY].Trim() : string.Empty;
                                listItem[mailSettings.SearchEmailCategories] = GetCategories(mailProperties[ServiceConstants.MAIL_CATEGORIES_KEY].Trim());
                                if (!string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_SENT_DATE_KEY]))
                                {
                                    listItem[mailSettings.SearchEmailSentDate] = Convert.ToDateTime(mailProperties[ServiceConstants.MAIL_SENT_DATE_KEY].Trim(), CultureInfo.InvariantCulture).ToUniversalTime();
                                }
                                else
                                {
                                    listItem[mailSettings.SearchEmailSentDate] = null;
                                }
                                listItem[mailSettings.SearchEmailOriginalName] = !string.IsNullOrWhiteSpace(mailProperties[ServiceConstants.MAIL_ORIGINAL_NAME]) ? mailProperties[ServiceConstants.MAIL_ORIGINAL_NAME] : string.Empty;
                                //Get all the fields of the document library to which document is getting uploaded.
                                if (matterExtraProperties != null)
                                {
                                    string contentTypeName = matterExtraProperties.ContentTypeName;
                                    //Get all site columns that are present in 'Additional Matter Properties' content type.                                
                                    spContentTypes.AssignContentType(clientContext, contentTypeName, selectedList);
                                    FieldCollection contentTypeFields = contentTypeName.GetFieldsInContentType(clientContext);
                                    FieldCollection fields = GetMatterExtraDefaultSiteColumns(clientContext, selectedList);
                                    if (fields != null && contentTypeFields != null && contentTypeFields.Count > 0)
                                    {
                                        foreach (var field in fields)
                                        {
                                            foreach (var contentTypeField in contentTypeFields)
                                            {
                                                //If document library field name is part of content type field name 
                                                //then update default value of tht column name to the value 
                                                //of that column name.
                                                if (field.InternalName == contentTypeField.InternalName)
                                                {
                                                    if (field.Group == contentTypesConfig.OneDriveContentTypeGroup)
                                                    {
                                                        string fieldValue = string.Empty;
                                                        if (matterExtraProperties != null && matterExtraProperties.Fields.Count > 0)
                                                        {
                                                            foreach (var extraProp in matterExtraProperties.Fields)
                                                            {
                                                                if (extraProp.FieldName == field.InternalName)
                                                                {
                                                                    fieldValue = extraProp.FieldValue != null && extraProp.FieldValue != string.Empty ? extraProp.FieldValue : field.DefaultValue;
                                                                }
                                                            }
                                                        }

                                                        listItem[field.InternalName] = fieldValue != string.Empty ? fieldValue : field.DefaultValue;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            listItem.Update();
                            clientContext.ExecuteQuery();
                            listItem.RefreshLoad();
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                customLogger.LogError(exception, MethodBase.GetCurrentMethod().DeclaringType.Name,
                    MethodBase.GetCurrentMethod().Name, logTables.SPOLogTable);
                throw;
            }
        }