private void DeployDependentLookupField(object modelHost, FieldCollection fields, DependentLookupFieldDefinition definition) { var context = fields.Context; var primaryLookupField = GetPrimaryLookupField(fields, definition); var dependentLookupField = GetDependentLookupField(fields, definition); if (dependentLookupField == null) { InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = null, ObjectType = typeof(FieldLookup), ObjectDefinition = definition, ModelHost = modelHost }); var internalName = fields.AddDependentLookup(definition.InternalName, primaryLookupField, definition.LookupField); dependentLookupField = GetDependentLookupField(fields, definition); dependentLookupField.Title = definition.Title; dependentLookupField.LookupList = primaryLookupField.LookupList; dependentLookupField.LookupWebId = primaryLookupField.LookupWebId; if (!string.IsNullOrEmpty(primaryLookupField.LookupList) && string.IsNullOrEmpty(dependentLookupField.LookupList)) { dependentLookupField.LookupList = primaryLookupField.LookupList; } if (string.IsNullOrEmpty(dependentLookupField.PrimaryFieldId)) { dependentLookupField.PrimaryFieldId = primaryLookupField.Id.ToString(); } dependentLookupField.ReadOnlyField = true; dependentLookupField.AllowMultipleValues = primaryLookupField.AllowMultipleValues; // unsuppoeted in CSOM yet //dependentLookupField.UnlimitedLengthInDocumentLibrary = primaryLookupField.UnlimitedLengthInDocumentLibrary; dependentLookupField.Direction = primaryLookupField.Direction; } else { InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = dependentLookupField, ObjectType = typeof(FieldLookup), ObjectDefinition = definition, ModelHost = modelHost }); } dependentLookupField.Title = definition.Title; dependentLookupField.LookupField = definition.LookupField; if (!string.IsNullOrEmpty(primaryLookupField.LookupList) && string.IsNullOrEmpty(dependentLookupField.LookupList)) { dependentLookupField.LookupList = primaryLookupField.LookupList; } dependentLookupField.LookupWebId = primaryLookupField.LookupWebId; dependentLookupField.Group = string.IsNullOrEmpty(definition.Group) ? "Custom" : definition.Group; dependentLookupField.Description = definition.Description ?? string.Empty; InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = dependentLookupField, ObjectType = typeof(FieldLookup), ObjectDefinition = definition, ModelHost = modelHost }); dependentLookupField.UpdateAndPushChanges(true); context.ExecuteQueryWithTrace(); }
private void DeployDependentLookupField(object modelHost, FieldCollection fields, DependentLookupFieldDefinition definition) { var context = fields.Context; var primaryLookupField = GetPrimaryLookupField(fields, definition); var dependentLookupField = GetDependentLookupField(fields, definition); if (dependentLookupField == null) { InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = null, ObjectType = typeof(FieldLookup), ObjectDefinition = definition, ModelHost = modelHost }); var internalName = fields.AddDependentLookup(definition.InternalName, primaryLookupField, definition.LookupField); dependentLookupField = GetDependentLookupField(fields, definition); dependentLookupField.Title = definition.Title; dependentLookupField.LookupList = primaryLookupField.LookupList; dependentLookupField.LookupWebId = primaryLookupField.LookupWebId; if (!string.IsNullOrEmpty(primaryLookupField.LookupList) && string.IsNullOrEmpty(dependentLookupField.LookupList)) { dependentLookupField.LookupList = primaryLookupField.LookupList; } if (string.IsNullOrEmpty(dependentLookupField.PrimaryFieldId)) dependentLookupField.PrimaryFieldId = primaryLookupField.Id.ToString(); dependentLookupField.ReadOnlyField = true; dependentLookupField.AllowMultipleValues = primaryLookupField.AllowMultipleValues; // unsuppoeted in CSOM yet //dependentLookupField.UnlimitedLengthInDocumentLibrary = primaryLookupField.UnlimitedLengthInDocumentLibrary; dependentLookupField.Direction = primaryLookupField.Direction; } else { InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = dependentLookupField, ObjectType = typeof(FieldLookup), ObjectDefinition = definition, ModelHost = modelHost }); } dependentLookupField.Title = definition.Title; dependentLookupField.LookupField = definition.LookupField; if (!string.IsNullOrEmpty(primaryLookupField.LookupList) && string.IsNullOrEmpty(dependentLookupField.LookupList)) { dependentLookupField.LookupList = primaryLookupField.LookupList; } dependentLookupField.LookupWebId = primaryLookupField.LookupWebId; dependentLookupField.Group = string.IsNullOrEmpty(definition.Group) ? "Custom" : definition.Group; dependentLookupField.Description = definition.Description ?? string.Empty; InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = dependentLookupField, ObjectType = typeof(FieldLookup), ObjectDefinition = definition, ModelHost = modelHost }); dependentLookupField.UpdateAndPushChanges(true); context.ExecuteQuery(); }