public static bool ValidData(string value, int row, ColumnMapping mapping, IVisualCollection collection, Dictionary<string, IEntityObject> navProperties, List<string> errorList) { bool bValid = false; IEntityType targetEntityType = mapping.TableField.EntityType; //Need to grab the entity set and check number of results we get IApplicationDefinition appModel = collection.Screen.Details.Application.Details.GetModel(); IEntityContainerDefinition entityContainerDefinition = (from ecd in appModel.GlobalItems.OfType<IEntityContainerDefinition>() where ecd.EntitySets.Any(es => object.ReferenceEquals(es.EntityType, targetEntityType)) select ecd).FirstOrDefault(); if (entityContainerDefinition == null) throw new Exception("Could not find an entity container representing the entity type: " + targetEntityType.Name); IEntitySetDefinition entitySetDefinition = (from es in entityContainerDefinition.EntitySets where object.ReferenceEquals(es.EntityType, targetEntityType) select es).First(); var dataService = (IDataService)collection.Screen.Details.DataWorkspace.Details.Properties[entityContainerDefinition.Name].Value; var entitySet = (IEntitySet)dataService.Details.Properties[entitySetDefinition.Name].Value; var dsQuery = entitySet.GetQuery(); //Search for the matching entity for the relationship IEnumerable<IEntityObject> var results = SearchEntityMethodInfo().MakeGenericMethod(dsQuery.ElementType).Invoke(null, new object[] { dsQuery, value, targetEntityType }) as IEnumerable<IEntityObject>; int searchCount = results.Count(); if (searchCount == 0) { bValid = false; errorList.Add(String.Format("Column:{0} Row:{1} Cannot find a matching '{2}' for '{3}'", mapping.OfficeColumn, row, mapping.TableField.DisplayName, value)); } else if (searchCount > 1) { bValid = true; errorList.Add(String.Format("Column:{0} Row:{1} Multiple matching '{2}' for '{3}'. Will select first match.", mapping.OfficeColumn, row, mapping.TableField.DisplayName, value)); navProperties[String.Format("{0}_{1}", mapping.TableField.Name, value)] = results.FirstOrDefault(); } else { bValid = true; navProperties[String.Format("{0}_{1}", mapping.TableField.Name, value)] = results.FirstOrDefault(); } return bValid; }
public static bool ValidData(string value, int row, ColumnMapping mapping, List<string> errorList) { dynamic convertedValue = null; bool isValid = TryConvertValue(mapping.TableField.TypeName, value, ref convertedValue); if (isValid == false) errorList.Add(String.Format("Column:{0} Row:{1} Cannot convert value({2}) to {3} for '{4}'", mapping.OfficeColumn, row, value, mapping.TableField.TypeName, mapping.TableField.DisplayName)); return isValid; }