private void InsertOrUpdateChildren(IDataContext dataContext, ICrossRefItemList crList) { var filters = new List<ColumnFilter>(); foreach (var fieldMapping in ChildMappings.Where(m => m.IsKey)) { ColumnFilter filter; if (!fieldMapping.TryCreateFilter(dataContext, out filter)) return; filters.Add(filter); } var itemIds = RuntimeDatabase.FindItems(ReferencedProcessName, filters); if (itemIds.Count > 0) { foreach (var id in itemIds) { UpdateChild(dataContext, id); if (!crList.Contains(id)) crList.Assign(id); } } else { var child = CreateChild(dataContext); if (!crList.Contains(child.Id)) crList.Assign(child.Id); } }
public static MultiCrossRefResult Create(ICrossRefItemList itemList, PropertyInfo property, int totalRowCount, int pageNumber) { var customAttribute = property.GetCustomAttribute<CrossRefFieldAttribute>(); var ColumnList = new List<ColumnItem>(); var displaySystemNameList = customAttribute.DisplayFieldList.Split('|'); if (itemList != null && itemList.Count != 0) { var baseType = itemList.GetType().BaseType; if (baseType != null) { if (itemList != null) { Type mcrType = baseType.GetGenericArguments()[1]; PropertyInfo[] properties = mcrType.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy); foreach (PropertyInfo prop in properties) { var displayAttribute = (DisplayAttribute)(from d in prop.GetCustomAttributes(typeof(DisplayAttribute), false) select d).FirstOrDefault(); if (displayAttribute == null || string.IsNullOrEmpty(displayAttribute.Name)) continue; var column = new ColumnItem(); column.Header = displayAttribute.GetName(); column.ColumnName = prop.Name.ToCamelCase(); column.ColumnType = prop.GetFieldType().ToString(); column.SystemName = prop.Name; ColumnList.Add(column); } } var itemType = baseType.GetGenericArguments()[1]; var multiCrossReferenceModel = new List<MultiCrossReferenceModel>(); foreach (var row in itemList) { var item = new MultiCrossReferenceModel { Id = (int)row.GetType().GetProperty(Constants.IdColumnName).GetValue(row) }; foreach (var column in ColumnList) { var propertyInfo = itemType.GetPropertyByFullName(column.SystemName); if (propertyInfo == null) continue; var columnValue = FieldValueExtractor.GetPropertyStringValue(propertyInfo, propertyInfo.GetValue(row), column.ColumnType); item.Values[column.SystemName] = columnValue; } multiCrossReferenceModel.Add(item); } return new MultiCrossRefResult { ItemList = multiCrossReferenceModel, ColumnList = ColumnList, TotalRowCount = totalRowCount, PageNumber = pageNumber }; } } return null; }