Написал для этих целей следующую функцию:
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;
}