Exemple #1
0
/*
 *      private static void IncludeAttribute(IQueryExpression query, DocAttribute attr)
 *      {
 *          var exp = query.And(attr.AttrDef.Name);
 *
 *          foreach (var sub in attr.Document.Attributes)
 *          {
 *              if (sub is DocAttribute)
 *              {
 *                  if (((DocAttribute) sub).Document != null && HasDocumentValue(((DocAttribute) sub).Document))
 *                  {
 *                      IncludeAttribute(exp, (DocAttribute) sub);
 *                  }
 *              }
 *              else if (sub is DocListAttribute)
 *              {
 *                  //                    if (((DocListAttribute)attr).AddedDocIds != null)
 *              }
 *              else if (sub.ObjectValue != null)
 *              {
 *                  if (sub is TextAttribute)
 *                  {
 *                      exp.Include(sub.AttrDef.Name).Contains(sub.ObjectValue.ToString());
 *                  }
 *                  else
 *                  {
 *                      exp.Include(sub.AttrDef.Name).Eq(sub.ObjectValue);
 *                  }
 *              }
 *          }
 *      }
 */
        private static void IncludeAttribute(IQueryCondition cond, DocAttribute attr)
        {
            foreach (var sub in attr.Document.Attributes)
            {
                if (sub is DocAttribute)
                {
                    if (((DocAttribute)sub).Document != null && HasDocumentValue(((DocAttribute)sub).Document))
                    {
                        IncludeAttribute(cond.Include(sub.AttrDef.Name), (DocAttribute)sub);
                    }
                }
                else if (sub is DocListAttribute)
                {
                    //                    if (((DocListAttribute)attr).AddedDocIds != null)
                }
                else if (sub.ObjectValue != null)
                {
                    if (sub is TextAttribute)
                    {
                        var txt = ((TextAttribute)sub).Value;
                        if (!String.IsNullOrEmpty(txt))
                        {
                            cond.Include(sub.AttrDef.Name).Contains(txt);
                        }
                    }
                    else
                    {
                        cond.Include(sub.AttrDef.Name).Eq(sub.ObjectValue);
                    }
                }
            }
        }
Exemple #2
0
        private static void IncludeDocControl(IQueryCondition cond, AttrDef attr, BizControl control)
        {
//            var exp = query.And(attr.Name);
            if (attr.DocDefType == null)
            {
                throw new ApplicationException(String.Format("Не могу сформировать запрос! Атрибут \"{0}\" не ссылается на класс документа", attr.Name));
            }

            var docDef = attr.DocDefType;

            foreach (var ctrl in control.Children)
            {
                if (!(ctrl is BizDataControl) || ((BizDataControl)ctrl).AttributeDefId == null)
                {
                    continue;
                }

                var attributeDefId = ((BizDataControl)ctrl).AttributeDefId;
                if (attributeDefId != null)
                {
                    var attrId = (Guid)attributeDefId;

                    var sub = docDef.Attributes.FirstOrDefault(a => a.Id == attrId);
                    if (sub != null)
                    {
                        if (ctrl is BizDocumentControl)
                        {
                            IncludeDocControl(cond, sub, ctrl);
                            continue;
                        }

                        if (((BizDataControl)ctrl).ObjectValue == null)
                        {
                            continue;
                        }

                        if (sub.Type.Id == (short)CissaDataType.Text)
                        {
                            var txt = ((BizDataControl)ctrl).ObjectValue.ToString();
                            if (!String.IsNullOrEmpty(txt))
                            {
                                cond.Include(sub.Name).Contains(txt);
                            }
                        }
                        else
                        {
                            cond.Include(sub.Name).Eq(((BizDataControl)ctrl).ObjectValue);
                        }
                    }
                }
            }
        }