public static ViewsRelationsObj getRelationObj(ViewExcelSheetsInfo sheetView, string entity, string fromAttribute)
        {
            ViewsRelationsObj obj = sheetView.relationsList.Where(x => x.relationFrom != null && x.entity.Equals(entity, StringComparison.InvariantCultureIgnoreCase) &&
                                                                  x.relationFrom.Equals(fromAttribute, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();

            if (obj == null)
            {
                ViewsRelationsObj             mainobj = sheetView.relationsList.Where(x => x.relationAlias == null).FirstOrDefault();
                OneToManyRelationshipMetadata rel     = mainobj.entityMetadata.ManyToOneRelationships
                                                        .Where(x => x.ReferencedEntity.Equals(entity, StringComparison.InvariantCultureIgnoreCase) &&
                                                               x.ReferencingAttribute.Equals(fromAttribute, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
                if (rel != null)
                {
                    obj = new ViewsRelationsObj()
                    {
                        entity         = entity.ToLower(),
                        entityMetadata = GlobalOperations.Instance.CRMOpHelper.RetriveEntityAtrribute(entity),
                        relationAlias  = string.Concat("a_", Guid.NewGuid().ToString().Replace("-", "")).ToLower(),
                        relationFrom   = rel.ReferencedAttribute.ToLower(),
                        relationTo     = fromAttribute.ToLower()
                    };
                    sheetView.relationsList.Add(obj);
                }
            }
            return(obj);
        }
        private static void removeUnnecessaryLinksAttributes(savedqueryLayoutxmlGrid viewFeo, ViewExcelSheetsInfo excelData)
        {
            FetchEntityType   currentEt = excelData.fetchObj.Items.Where(x => x is FetchEntityType).Select(x => (FetchEntityType)x).FirstOrDefault();
            ViewsRelationsObj obj       = excelData.relationsList.Where(x => x.relationAlias == null).FirstOrDefault();

            if (currentEt != null && obj != null)
            {
                List <object> array = currentEt.Items.ToList();
                for (int i = array.Count - 1; i > -1; i--)
                {
                    object currentItem = array[i];
                    if (currentItem is FetchLinkEntityType)
                    {
                        FetchLinkEntityType link = currentItem as FetchLinkEntityType;
                        removeUnnecessaryAttributesInner(link, viewFeo);
                        if (link == null || link.visible == false)
                        {
                            if (link == null || link.Items.Count() == 0)
                            {
                                array.RemoveAt(i);
                            }
                        }
                    }
                    else if (currentItem is FetchAttributeType)
                    {
                        FetchAttributeType attr = currentItem as FetchAttributeType;
                        if (!(viewFeo.row.cell.Where(x => x.name == attr.name).Count() > 0) && attr.name != obj.entityMetadata.PrimaryIdAttribute)
                        {
                            array.RemoveAt(i);
                        }
                    }
                }
                currentEt.Items = array.ToArray();
            }
        }
        public static void getFechAndLayouXml(ExcelMatrix dataMatrix, ViewExcelSheetsInfo sheetView, out string fetchXml, out string viewXml)
        {
            List <ViewFeo> viewFeoList = new List <ViewFeo>();

            for (int i = 0; i < dataMatrix.numberofElements; i++)
            {
                string[] row           = dataMatrix.getRow(i);
                string[] values        = getEntityRelation(row[ExcelColumsDefinition.VIEWATTRIBUTEENTITY]);
                string   attributeName = row[ExcelColumsDefinition.VIEWATTRIBUTENAME];
                if (attributeName.LastIndexOf("-") >= 0)
                {
                    attributeName = attributeName.Substring(attributeName.LastIndexOf("-") + 1, attributeName.Length - attributeName.LastIndexOf("-") - 1);
                    attributeName = attributeName.Trim();
                }
                string attributeEntity            = string.Empty;
                string attributeRelationAttribute = string.Empty;
                if (values != null && values.Count() == 2)
                {
                    attributeEntity            = values[0];
                    attributeRelationAttribute = values[1];
                }
                string            attributewidth = row[ExcelColumsDefinition.VIEWATTRIBUTEWIDTH];
                ViewsRelationsObj obj            = null;
                if (!string.IsNullOrEmpty(attributeEntity))
                {
                    obj = sheetView.relationsList.Where(x => x.relationAlias != null && x.entity.Equals(attributeEntity, StringComparison.InvariantCultureIgnoreCase) &&
                                                        x.relationTo.Equals(attributeRelationAttribute, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
                }
                else
                {
                    obj             = sheetView.relationsList.Where(x => x.relationAlias == null).FirstOrDefault();
                    attributeEntity = obj.entity;
                }

                ViewFeo viewFeo = new ViewFeo()
                {
                    AttributeName   = attributeName,
                    AttributeEntity = attributeEntity,
                    AttributeWidth  = attributewidth,
                    AttributeObj    = obj,
                };
                if (obj == null)
                {
                    setAttributesObj(viewFeo, sheetView.relationsList);
                }
                viewFeoList.Add(viewFeo);
            }
            viewXml = getViewXmlString(viewFeoList, sheetView.viewObj);
            removeUnnecessaryLinksAttributes(sheetView.viewObj, sheetView);
            fetchXml = getFecthXmlString(viewFeoList, sheetView.fetchObj);
        }
        private static void setAttributesObj(ViewFeo viewFeo, List <ViewsRelationsObj> relObj)
        {
            ViewsRelationsObj             mainobj = relObj.Where(x => x.relationAlias == null).FirstOrDefault();
            OneToManyRelationshipMetadata rel     = mainobj.entityMetadata.ManyToOneRelationships.Where(x => x.ReferencedEntity.Equals(viewFeo.AttributeEntity, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();

            if (rel != null)
            {
                viewFeo.AttributeObj = new ViewsRelationsObj()
                {
                    entity         = viewFeo.AttributeEntity.ToLower(),
                    entityMetadata = GlobalOperations.Instance.CRMOpHelper.RetriveEntityAtrribute(viewFeo.AttributeEntity),
                    relationAlias  = string.Concat("a_", Guid.NewGuid().ToString().Replace("-", "")).ToLower(),
                    relationFrom   = rel.ReferencedAttribute.ToLower(),
                    relationTo     = rel.ReferencingAttribute.ToLower()
                };
                relObj.Add(viewFeo.AttributeObj);
            }
        }
 private static void addNewAttributeToFech(FetchType fecthObj, string attributeName, ViewsRelationsObj currentEntity)
 {
     if (string.IsNullOrEmpty(currentEntity.relationAlias))
     {
         FetchEntityType currentEt = fecthObj.Items.Where(x => x is FetchEntityType && ((FetchEntityType)x).name.Equals(currentEntity.entity, StringComparison.InvariantCultureIgnoreCase)).Select(x => (FetchEntityType)x).FirstOrDefault();
         if (currentEt != null)
         {
             List <object>      items     = currentEt.Items.ToList();
             FetchAttributeType attribute = items.Where(x => x is FetchAttributeType && ((FetchAttributeType)x).name.Equals(attributeName)).Select(x => (FetchAttributeType)x).FirstOrDefault();
             if (attribute == null)
             {
                 List <object> objectList = currentEt.Items.ToList();
                 objectList.Add(new FetchAttributeType()
                 {
                     name = attributeName
                 });
                 currentEt.Items = objectList.ToArray();
             }
         }
     }
     else
     {
         FetchEntityType currentEt = fecthObj.Items.Where(x => x is FetchEntityType).Select(x => (FetchEntityType)x).FirstOrDefault();
         if (currentEt != null)
         {
             FetchLinkEntityType currentLink = currentEt.Items.Where(x => x is FetchLinkEntityType &&
                                                                     ((FetchLinkEntityType)x).alias.Equals(currentEntity.relationAlias, StringComparison.InvariantCultureIgnoreCase))
                                               .Select(x => (FetchLinkEntityType)x).FirstOrDefault();
             if (currentLink != null)
             {
                 List <object>      items     = currentLink.Items.ToList();
                 FetchAttributeType attribute = items.Where(x => x is FetchAttributeType && ((FetchAttributeType)x).name.Equals(attributeName)).Select(x => (FetchAttributeType)x).FirstOrDefault();
                 if (attribute == null)
                 {
                     List <object> objectList = currentLink.Items.ToList();
                     objectList.Add(new FetchAttributeType()
                     {
                         name = attributeName
                     });
                     currentLink.Items = objectList.ToArray();
                 }
             }
             else
             {
                 List <object> objectList = currentEt.Items.ToList();
                 objectList.Add(new FetchLinkEntityType()
                 {
                     Items              = new object[] { (new FetchAttributeType()
                         {
                             name = attributeName
                         }) },
                     name               = currentEntity.entity,
                     alias              = currentEntity.relationAlias,
                     linktype           = "outer",
                     from               = currentEntity.relationFrom,
                     to                 = currentEntity.relationTo,
                     intersect          = false,
                     intersectSpecified = false,
                     visible            = false,
                     visibleSpecified   = false,
                 });
                 currentEt.Items = objectList.ToArray();
             }
         }
     }
 }