private DocDef FindControlAttributeDocDef(BizControl control, DocDef parentDocDef, Guid attrId) { var docControl = control as BizDocumentControl; if (docControl != null) { if (docControl.AttributeDefId != null) { var docControlAttrDef = parentDocDef.Attributes.FirstOrDefault(a => a.Id == (Guid)docControl.AttributeDefId); if (docControlAttrDef != null && docControlAttrDef.DocDefType != null) { var docDef = _docDefRepo.Find(docControlAttrDef.DocDefType.Id); if (docDef != null) { if (docDef.Attributes.FirstOrDefault(a => a.Id == attrId) != null) { return(docDef); } if (docControl.Children != null) { foreach (var child in control.Children) { var attrDocDef = FindControlAttributeDocDef(child, docDef, attrId); if (attrDocDef != null) { return(attrDocDef); } } } } } } } else { var docList = control as BizDocumentListForm; if (docList != null) { if (docList.AttributeDefId != null) { var docListAttrDef = parentDocDef.Attributes.FirstOrDefault(a => a.Id == (Guid)docList.AttributeDefId); if (docListAttrDef != null && docListAttrDef.DocDefType != null) { var docDef = _docDefRepo.Find(docListAttrDef.DocDefType.Id); if (docDef != null) { if (docDef.Attributes.FirstOrDefault(a => a.Id == attrId) != null) { return(docDef); } if (docList.Children != null) { foreach (var child in control.Children) { var attrDocDef = FindControlAttributeDocDef(child, docDef, attrId); if (attrDocDef != null) { return(attrDocDef); } } } } } } else { var dlForm = docList.TableForm ?? (docList.FormId != null ? _formRepo.FindTableForm((Guid)docList.FormId) : null); if (dlForm != null && dlForm.DocumentDefId != null) { var docDef = _docDefRepo.Find((Guid)dlForm.DocumentDefId); if (docDef != null) { if (docDef.Attributes.FirstOrDefault(a => a.Id == attrId) != null) { return(docDef); } if (dlForm.Children != null) { foreach (var child in dlForm.Children) { var attrDocDef = FindControlAttributeDocDef(child, docDef, attrId); if (attrDocDef != null) { return(attrDocDef); } } } } } } } else { var tableColumn = control as BizTableColumn; if (tableColumn != null && tableColumn.AttributeDefId != null) { var tableColumnAttrDef = parentDocDef.Attributes.FirstOrDefault(a => a.Id == (Guid)tableColumn.AttributeDefId); if (tableColumnAttrDef != null && tableColumnAttrDef.DocDefType != null) { var docDef = _docDefRepo.Find(tableColumnAttrDef.DocDefType.Id); if (docDef != null) { if (docDef.Attributes.FirstOrDefault(a => a.Id == attrId) != null) { return(docDef); } if (tableColumn.Children != null) { foreach (var child in tableColumn.Children) { var attrDocDef = FindControlAttributeDocDef(child, docDef, attrId); if (attrDocDef != null) { return(attrDocDef); } } } } } } } } return(null); }