# 보고서 실행

## Content

### 페이지 보고서 클래스

[페이지 보고서 클래스](https://demo.grapecity.co.kr/activereportsjs/api/classes/Core.PageReport)는 보고서 템플릿, 매개 변수 값 및 런타임 구성을 입력으로 사용하고 보고서 출력을 생성하는 속성 및 메서드를 제공하는 보고서 인스턴스를 나타냅니다.
페이지 보고서 클래스 생성자에는 세 가지 `options`속성이 있는 개체인 선택적 인수가 있습니다. 그 중 2개는 내부용이지만 `memoizeData`라는 세 번째 호출은 보고서 데이터를 저장하고 보고서의 후속 실행에서 재사용해야 하는지 여부를 결정합니다. 기본값인 `true`로 설정하면 보고서 데이터가 저장되고 이후 실행을 위해 재사용되므로 데이터를 다시 가져올 필요가 줄어들어 성능이 향상됩니다. `false`로 설정하면 보고서 데이터가 저장되지 않고 보고서가 실행될 때마다 새로 가져옵니다. 그러나 보고서의 데이터 바인딩이 동적이며 후속 실행에 따라 달라질 수 있는 [매개 변수](/activereportsjs/docs/v4.1/ReportAuthorGuide/Report-Parameters) 값에 따라 달라지는 경우 `memoizeData` 값이 무시됩니다.
다음은 새 `PageReport` 클래스 인스턴스를 초기화하는 코드 예입니다.

```ts
import {Core} from "@grapecity/activereports";

var report = new Core.PageReport({
    memoizeData: true
});
```

### 보고서 템플릿 로드 중

`load`클래스의 메소드를 사용하여 `PageReport`보고서 템플릿을 설정하고 보고서 실행에 필요한 런타임 환경을 구성할 수 있습니다. `load`메서드의 첫 번째 인수는 보고서 템플릿을 검색하는 URL이거나 [보고서 유형](https://kr-gc-document-site.azurewebsites.net/activereportsjs/docs/v4.0/DeveloperGuide/api/working-with-report-templates) 의 개체입니다 . 두 번째 인수는 선택 사항이며 여러 속성이 있는 개체입니다.

* `resourceLocator` - [리소스 로케이터](/activereportsjs/docs/v4.1/DeveloperGuide/ActiveReportsJSViewer/Loading-Reports/ResourceLocator)의 구현
* `environment` - `{&ReportName}` 식을 사용하여 보고서에서 참조할 수 있는 `ReportName` 속성이 있는 개체입니다.

`load`메서드는 원격 리소스에서 보고서 템플릿을 가져올 수 있으므로 [Promise 개체](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)를 검색합니다 . 결과적으로 `load` 메서드를 호출하는 코드는 반환된 약속이 이행될 때까지 기다려야 합니다.

예를 들면 다음과 같습니다.

```ts
import {Core} from "@grapecity/activereports";

var report = new Core.PageReport();
await report.load(`assets/Products.rdlx-json`, {
  environment: {
    ReportName: "Product Catalog",
  },
});
```

### 매개변수 값 설정

`PageReport class`에는 매개 변수 값을 설정, 유효성 검사 및 확인하는 메서드가 포함된 `reportParameters` 속성이 있습니다. 매개변수 값을 제공할 때 단일 값 매개변수의 경우에도 항상 원자 값(예: 숫자, 문자열, 부울 값 또는 날짜)의 배열을 사용하십시오.

다음은 `PageReport` 클래스의 인스턴스를 만들고, 보고서 템플릿을 로드하고, 매개 변수 값을 설정하는 방법을 보여주는 예입니다.

```ts
import {Core} from "@grapecity/activereports";
var report = new Core.PageReport();
// Load the report template and set parameter values
await report.load(`assets/Products.rdlx-json`, {
    reportParameters: [{
        Name: 'Header',
        Value: ['Product List'] // string single value parameter
    }, {
        Name: 'SupplierIds',
        Value: [1, 2, 3] // integer multi value parameter
    }]
});
```

또는 다양한 고급 시나리오에서 매개 변수 값을 설정하기 위해 `reportParameters` 개체의 `applySteps` 메서드를 사용할 수 있습니다.

```js
var report = new Core.PageReport();
await report.load(`assets/Products.rdlx-json`);

// Set parameter values using the applySteps method
report.reportParameters.applySteps([
  {
    Name: "Header",
    Value: ["Product List"], // string single value parameter
    Type: "Set",
  },
  {
    Name: "SupplierIds",
    Value: [1, 2, 3], // integer multi value parameter
    Type: "Set",
  },
]);
```

### 보고서 실행

보고서 템플릿이 로드되고 매개 변수 값이 설정되면 코드는 `PageReport` 인스턴스의 `run` 메서드를 호출할 수 있습니다. `PageDocument` 인스턴스로 이행되는 `Promise 객체`를 반환합니다.

```ts
import {Core} from "@grapecity/activereports";

const report = new Core.PageReport();
await report.load(`assets/Products.rdlx-json`);
report.parameters["Header"].values = ["Product List"];
const document = await report.run();
```