Показать сообщение отдельно
Старый 09.02.2009, 16:28   #11  
Bakai Madybaev is offline
Bakai Madybaev
Участник
 
201 / 16 (1) ++
Регистрация: 22.04.2008
Написал для этих целей следующую функцию:
X++:
public object getObjectsByCondition(string entityName, Dictionary<int, Condition> conditionList, string[] requestAttributeName)
        {
            ColumnSet cols = new ColumnSet();

            cols.Attributes = requestAttributeName;

            ConditionExpression[] condition = new ConditionExpression[conditionList.Count];
            FilterExpression filter = new FilterExpression();

            filter.FilterOperator = LogicalOperator.And;

            for (int i = 0; i < conditionList.Count; i++)
            {
                condition[i] = new ConditionExpression();
                condition[i].AttributeName = conditionList[i].name;
                condition[i].Operator = ConditionOperator.Like;
                condition[i].Values = conditionList[i].values;
            }

            filter.Conditions = condition;

            QueryExpression query = new QueryExpression();

            query.EntityName = entityName;
            query.ColumnSet = cols;
            query.Criteria = filter;

            RetrieveMultipleRequest retrieve = new RetrieveMultipleRequest();

            retrieve.Query = query;
            RetrieveMultipleResponse retrieved;
            try
            {
                retrieved = (RetrieveMultipleResponse)service.Execute(retrieve);
            }
            catch (SoapException ex)
            {
                throw new Exception(ex.Detail.InnerText.ToString());
            }
            return retrieved.BusinessEntityCollection;
        }
ИСпользование функции:
X++:
conditionList.Clear();
            conditionList.Add(0, new Condition("itb_itn", new string[] { node.SelectSingleNode("INN").InnerText }));
            conditionList.Add(1, new Condition("new_lead_type", new string[] { "2" }));
            conditionList.Add(2, new Condition("new_address1_country", new string[] { node.SelectSingleNode("Country").InnerText }));
            BusinessEntityCollection companyCollection = (BusinessEntityCollection)getObjectsByCondition(EntityName.lead.ToString(), conditionList, new string[] { "leadid" });
Класс для хранения набора условий для атрибутов:
X++:
            public Condition(string _name, string[] _values)
            {
                name = _name;
                values = _values;
            }
За это сообщение автора поблагодарили: Dissident (1), IgorF (1).