public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext) { var modelHost = modelHostContext.ModelHost; var model = modelHostContext.Model; var childModelType = modelHostContext.ChildModelType; var action = modelHostContext.Action; var folderHost = modelHost.WithAssertAndCast <FolderModelHost>("modelHost", value => value.RequireNotNull()); var moduleFile = model.WithAssertAndCast <ModuleFileDefinition>("model", value => value.RequireNotNull()); var web = folderHost.CurrentWeb; var file = ProcessFile(folderHost, moduleFile); var context = file.Context; if (childModelType == typeof(ListItemFieldValueDefinition)) { var fileListItem = file.ListItemAllFields; context.Load(fileListItem, i => i.Id, i => i.ParentList); context.ExecuteQueryWithTrace(); var list = fileListItem.ParentList; var item = list.GetItemById(fileListItem.Id); context.ExecuteQueryWithTrace(); var listItemPropertyHost = new ListItemModelHost { HostListItem = item }; action(listItemPropertyHost); item.Update(); context.ExecuteQueryWithTrace(); } else if (childModelType == typeof(PropertyDefinition)) { var propModelHost = new PropertyModelHost { CurrentFile = file }; action(propModelHost); context.ExecuteQueryWithTrace(); } else { action(file); context.ExecuteQueryWithTrace(); } }
private void ProcessProperty(PropertyModelHost host, PropertyDefinition property) { if (host.CurrentListItem != null) { ProcessListItemProperty(host.CurrentListItem, property); } else if (host.CurrentList != null) { ProcessListProperty(host.CurrentList, property); } else if (host.CurrentWeb != null) { ProcessWebProperty(host.CurrentWeb, property); } }