Пример использования серверного поиска
Ниже приведён пример серверного поиска, выполняемого из скрипта карточки, по следующим данным карточки: части названия, автору и дате создания (должна быть больше указанной). Необходимые данные для серверного поиска получаем из соответствующих элементов управления.
private void Поиск_Click(System.Object sender, System.EventArgs e)
{
ICustomizableControl control = CardControl;
ILayoutPropertyItem cardName = control.FindPropertyItem<ILayoutPropertyItem>("Название");
ILayoutPropertyItem cardAuthorId = control.FindPropertyItem<ILayoutPropertyItem>("Автор");
ILayoutPropertyItem cardCreateBy = control.FindPropertyItem<ILayoutPropertyItem>("ДатаСозданияОт"); (1)
if(cardName = null || cardAuthorId = null || cardCreateBy = null) return;
SearchQuery searchQuery = this.Session.CreateSearchQuery(); (2)
CardTypeQuery cardTypeQuery = searchQuery.AttributiveSearch.CardTypeQueries.AddNew(CardDocument.ID);
SectionQuery sectionQuery = cardTypeQuery.SectionQueries.AddNew(CardDocument.MainInfo.ID);
sectionQuery.ConditionGroup.Operation = ConditionGroupOperation.And; (3)
string cardNameValue = cardName.ControlValue as string;
if(!string.IsNullOrEmpty(cardNameValue)) (4)
{
sectionQuery.ConditionGroup.Conditions.AddNew(CardDocument.MainInfo.Name, FieldType.Unistring, ConditionOperation.Contains, cardNameValue);
}
Guid cardAuthorIdValue = (Guid)cardAuthorId.ControlValue;
if(cardAuthorIdValue != Guid.Empty) (5)
{
sectionQuery.ConditionGroup.Conditions.AddNew(CardDocument.MainInfo.Author, FieldType.RefId, ConditionOperation.Equals, cardAuthorIdValue);
}
DateTime? cardCreateByValue = (DateTime?)cardCreateBy.ControlValue;
if(cardCreateByValue.HasValue) (6)
{
sectionQuery.ConditionGroup.Conditions.AddNew(CardDocument.MainInfo.RegDate, FieldType.Unistring, ConditionOperation.GreaterEqual, cardCreateByValue.Value.Date);
}
CardDataCollection result = Session.CardManager.FindCards(searchQuery.GetXml()); (7)
}
1 | Получение элементов управления, в которых указаны необходимые данные. |
2 | Организация атрибутивного поиска по секции MainInfo карточек типа Документ. |
3 | Искомые карточки должны удовлетворять всем условиям. |
4 | Добавление условия поиска по названию документа. |
5 | Добавление условия поиска по автору документа. |
6 | Добавление условия поиска по дате создания документа. |
7 | Результат поиска, который может быть выведен, к примеру, в список на карточке. |