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);
            }
        }
Example #2
0
        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;
        }