in tree/master/cloud/src/solution/Microsoft.Legal.MatterCenter.Service/Microsoft.Legal.MatterCenter.Repository/Matter/MatterRepository.cs [1832:2030]
public string GetMatterProvisionExtraProperties(string contentTypeName, Client client)
{
try
{
var clientContext = spoAuthorization.GetClientContext(client.Url);
FieldCollection fieldCollection = contentTypeName.GetFieldsInContentType(clientContext);
//To get configuration settings...
var listQuery = string.Format(CultureInfo.InvariantCulture, camlQueries.MatterConfigurationsListQuery,
searchSettings.ManagedPropertyTitle, searchSettings.MatterConfigurationTitleValue);
ListItem settingsItem = spList.GetData(clientContext,
listNames.MatterConfigurationsList, listQuery).FirstOrDefault();
IList<MatterExtraFields> addFields = new List<MatterExtraFields>();
if (settingsItem != null)
{
Newtonsoft.Json.Linq.JObject settingConfig = (Newtonsoft.Json.Linq.JObject)
JsonConvert.DeserializeObject(WebUtility.HtmlDecode(Convert.ToString(
settingsItem.FieldValues["ConfigurationValue"])));
if (settingConfig != null && settingConfig.GetValue("AdditionalFieldValues") != null)
{
foreach (var objField in settingConfig.GetValue("AdditionalFieldValues"))
{
addFields.Add(new MatterExtraFields
{
FieldName = objField["FieldName"].ToString(),
IsDisplayInUI = String.IsNullOrWhiteSpace(objField["IsDisplayInUI"].ToString()) ? "false"
: objField["IsDisplayInUI"].ToString(),
IsMandatory = String.IsNullOrWhiteSpace(objField["IsMandatory"].ToString()) ? "false"
: objField["IsMandatory"].ToString()
});
}
}
}
//When the document is getting uploaded we have to send the default values of Additional Matter
//content type site columns so that the user can override/update those values for the document
//that is getting uploaded.
//Get all site columns that are present in 'Additional Matter Properties' content type.
Dictionary<string, string> matterExtraPropertiesDefaultValues = new Dictionary<string, string>();
CamlQuery query = new CamlQuery();
if (client.Name != null)
{
Web web = clientContext.Web;
ListCollection lists = web.Lists;
List selectedList = lists.GetByTitle(client.Name);
spContentTypes.AssignContentType(clientContext, contentTypeName, selectedList);
FieldCollection contentTypeFields = contentTypeName.GetFieldsInContentType(clientContext);
FieldCollection fields = spList.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 == contentTypesSettings.OneDriveContentTypeGroup)
{
string fieldValue = string.Empty;
if (field.TypeAsString.ToLower() == "datetime")
{
if (!string.IsNullOrEmpty(field.DefaultValue))
{
fieldValue = DateTime.Parse(field.DefaultValue).ToString("MM/dd/yyyy");
}
}
else
{
fieldValue = field.DefaultValue;
}
matterExtraPropertiesDefaultValues.Add(field.InternalName, fieldValue);
}
}
}
}
}
}
StringBuilder sb = new StringBuilder();
JsonWriter jw = new JsonTextWriter(new StringWriter(sb));
jw.Formatting = Formatting.Indented;
jw.WriteStartObject();
jw.WritePropertyName("Fields");
jw.WriteStartArray();
foreach (var field in fieldCollection)
{
if (field.Group == this.contentTypesSettings.OneDriveContentTypeGroup)
{
jw.WriteStartObject();
jw.WritePropertyName("name");
jw.WriteValue(field.Title);
jw.WritePropertyName("fieldInternalName");
jw.WriteValue(field.InternalName);
jw.WritePropertyName("required");
string isRequired= "false";
string required = "false";
string isDisplayInUI = "false";
foreach (var item in addFields)
{
if(item.FieldName== field.InternalName)
{
isRequired = addFields.Count > 0 ? addFields.Where(x => x.FieldName == field.InternalName).SingleOrDefault().IsMandatory : field.Required.ToString();
required = string.IsNullOrWhiteSpace(isRequired) ? false.ToString() : isRequired.ToLower();
isDisplayInUI = addFields.Count > 0 ? addFields.Where(x => x.FieldName == field.InternalName).SingleOrDefault().IsDisplayInUI : "false";
break;
}
}
jw.WriteValue(required);
jw.WritePropertyName("displayInUI");
isDisplayInUI = string.IsNullOrWhiteSpace(isDisplayInUI) ? "false" : isDisplayInUI;
jw.WriteValue(isDisplayInUI);
jw.WritePropertyName("originalType");
jw.WriteValue(field.TypeAsString);
jw.WritePropertyName("defaultValue");
if (client.Name!=null && matterExtraPropertiesDefaultValues!=null && matterExtraPropertiesDefaultValues.Count>0 && matterExtraPropertiesDefaultValues.ContainsKey(field.InternalName)) {
jw.WriteValue(matterExtraPropertiesDefaultValues[field.InternalName]);
}
else {
jw.WriteValue(field.DefaultValue);
}
jw.WritePropertyName("description");
jw.WriteValue(field.Description);
if (field.TypeAsString == "Choice")
{
jw.WritePropertyName("type");
jw.WriteValue(Convert.ToString(((Microsoft.SharePoint.Client.FieldChoice)field).EditFormat));
List<string> options = GetChoiceFieldValues(clientContext, field);
jw.WritePropertyName("values");
jw.WriteStartArray();
int optionCounter = 1;
foreach (string option in options)
{
jw.WriteStartObject();
jw.WritePropertyName("choiceId");
jw.WriteValue(optionCounter);
jw.WritePropertyName("choiceValue");
jw.WriteValue(option);
optionCounter++;
jw.WriteEndObject();
}
jw.WriteEndArray();
}
else if (field.TypeAsString == "MultiChoice")
{
jw.WritePropertyName("type");
jw.WriteValue(Convert.ToString(((Microsoft.SharePoint.Client.FieldMultiChoice)field).TypeAsString));
List<string> options = GetChoiceFieldValues(clientContext, field);
jw.WritePropertyName("values");
jw.WriteStartArray();
int optionCounter = 1;
foreach (string option in options)
{
jw.WriteStartObject();
jw.WritePropertyName("choiceId");
jw.WriteValue(optionCounter);
jw.WritePropertyName("choiceValue");
jw.WriteValue(option);
optionCounter++;
jw.WriteEndObject();
}
jw.WriteEndArray();
}
else
{
jw.WritePropertyName("type");
jw.WriteValue(Convert.ToString(field.TypeAsString));
}
jw.WriteEndObject();
}
}
jw.WriteEndArray();
jw.WriteEndObject();
return sb.ToString();
}
catch (Exception ex)
{
customLogger.LogError(ex, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, logTables.SPOLogTable);
throw;
}
}