예제 #1
0
        private void GetDetailEntity(string entityName, Guid id, string subType, Guid tenantId, DataTable result)
        {
            var detailEntities = _iILayoutManager.GetDetailEntitiesFromDefaultLayoutForEntity(tenantId, entityName, (int)LayoutType.Form, subType, (int)LayoutContext.Edit);

            if (detailEntities != null && detailEntities.Any())
            {
                foreach (var detail in detailEntities)
                {
                    Guid targetId   = Guid.Parse(detail.Value); //value from selected view..
                    var  viewLayout = _iILayoutManager.GetLayoutsDetailsById(tenantId, targetId);
                    var  fields     = string.Empty;
                    if (viewLayout != null && viewLayout.ViewLayoutDetails != null && viewLayout.ViewLayoutDetails.Fields.Any())
                    {
                        foreach (var item in viewLayout.ViewLayoutDetails.Fields)
                        {
                            fields += item.Name + ",";
                        }
                        fields = fields.TrimEnd(',');
                    }
                    if (fields == string.Empty)
                    {
                        continue;
                    }
                    var relatedColumn = _iMetadataManager.GetRelatedColumnNameOfDetailEntity(entityName, detail.Key);
                    var filters       = new List <QueryFilter> ();
                    if (relatedColumn != null)
                    {
                        var queryFilter = new QueryFilter();
                        queryFilter.FieldName = relatedColumn.FieldName;
                        queryFilter.Operator  = "=";
                        queryFilter.Value     = id.ToString();
                        filters.Add(queryFilter);
                    }
                    var queryContext = new QueryContext {
                        Fields = fields, Filters = filters, PageSize = 10, PageIndex = 1
                    };
                    var detailEntity = _iEntityResourceManager.GetResult(tenantId, detail.Key, queryContext);
                    if (detailEntity == null || detailEntity.Rows.Count <= 0)
                    {
                        continue;
                    }
                    dynamic detailEntityRowCount = detailEntity.Rows[0]["totalRow"];
                    //newly introduced columns
                    result.Columns.Add(detail.Key, typeof(DataTable));
                    result.Columns.Add(detail.Key + "Count", typeof(int));
                    // add value to newly introduced columns
                    foreach (DataRow row in result.Rows)
                    {
                        row[detail.Key]           = detailEntity;
                        row[detail.Key + "Count"] = detailEntityRowCount;
                    }
                    ApiHelper.MapDynamicColumn(detailEntity.Columns);
                }
            }
        }