# 조건 트리

여러 열의 조건을 AND·OR 트리로 조합합니다. 예를 들어 APAC의 대량 주문 또는 특정 제품 주문처럼 업무 규칙을 표현할 수 있습니다.

Canonical: https://grid.syidax.com/ko/docs/features/advanced-filter/

<a id="understand"></a>

## 동작 원리와 선택 기준

조건 트리는 UI 입력값과 다른 구조입니다. ConditionGroup은 op와 children을 가지고 말단 조건은 종류에 맞는 필터 규칙을 가집니다. 잘못된 모델은 적용되지 않을 수 있습니다.

이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다.

코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요.

- [설치와 연결 · 공통 예제 데이터](https://grid.syidax.com/ko/docs/guides/getting-started.md)

<a id="example-1"></a>

## 예제 1. 조건 작성 도구 제공

코드를 직접 입력하지 않아도 사용자가 열과 비교 연산을 고를 수 있도록 도구를 켭니다.

```javascript
grid.conditionBuilder = true;
```

결과 확인: 조건 빌더가 나타납니다. 일반 열 필터·빠른 검색도 함께 적용될 수 있으므로 현재 활성 조건을 확인하세요.

<a id="example-2"></a>

## 예제 2. 조건 저장과 재적용

사용자가 만든 조건 트리를 읽어 같은 구조로 복원합니다.

```javascript
const condition = await grid.getConditionFilter();
console.log(condition);
await grid.setConditionFilter(condition);
```

결과 확인: AND·OR의 괄호 구조까지 유지합니다. (A AND B) OR C와 A AND (B OR C)는 다른 결과를 만듭니다.

<a id="example-3"></a>

## 예제 3. 고급 조건만 해제

전체 필터를 없애지 않고 고급 조건 트리만 지웁니다.

```javascript
await grid.setConditionFilter(null);
grid.addEventListener('conditionFilterChanged', event => console.log(event.detail));
```

결과 확인: 고급 조건이 해제되지만 다른 검색 조건은 남아 있을 수 있습니다. 결과 없음 상태에서 남은 조건을 함께 보여 주세요.

<a id="pitfalls"></a>

## 조합할 때와 문제를 해결할 때

서버 조회에서는 조건 트리를 서버가 같은 의미로 해석해야 합니다. 클라이언트 콜백을 서버에 직렬화해서 전달하는 방식은 사용할 수 없습니다.

조건을 저장할 때 사용자에게 읽을 수 있는 이름을 붙이면 재사용하기 쉽습니다. 저장된 조건이 삭제된 열을 참조하는 경우 복원 결과를 검사하세요.

<a id="related-api"></a>

## 이 기능에 사용하는 API

- [conditionBuilder](https://grid.syidax.com/ko/docs/options/conditionBuilder.md) — 여러 조건을 AND·OR로 묶는 조건 구성 UI를 표시합니다.
- [setConditionFilter](https://grid.syidax.com/ko/docs/methods/setConditionFilter.md) — AND·OR 트리 형태의 고급 조건 모델을 적용합니다. null로 해제하고 잘못된 모델은 적용 결과를 확인합니다.
- [getConditionFilter](https://grid.syidax.com/ko/docs/methods/getConditionFilter.md) — 현재 고급 조건 트리 또는 null을 읽습니다.
- [setConditionPresets](https://grid.syidax.com/ko/docs/methods/setConditionPresets.md) — 이름과 JSON으로 구성된 고급 조건 프리셋 목록을 설정합니다.
- [getConditionPresets](https://grid.syidax.com/ko/docs/methods/getConditionPresets.md) — 저장된 고급 조건 프리셋 목록을 읽습니다.
- [conditionFilterChanged](https://grid.syidax.com/ko/docs/events/conditionFilterChanged.md) — AND·OR 조건 트리가 바뀌었을 때 발생합니다. model이 null이면 고급 조건이 해제된 상태입니다.
- [conditionPresetsChanged](https://grid.syidax.com/ko/docs/events/conditionPresetsChanged.md) — 고급 조건 프리셋 목록이 바뀌었을 때 발생합니다. presets를 사용자 설정 저장에 연결합니다.

<a id="next"></a>

## 함께 읽기

- [행·열·ID의 관계](https://grid.syidax.com/ko/docs/guides/concepts.md)
- [결과와 이벤트 연결](https://grid.syidax.com/ko/docs/guides/data-event-access.md)
- [Features에서 살펴보기](https://grid.syidax.com/grid/advanced-filter) — 직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다.
