# BizPopup (공통 팝업)

## 설명 <a href="#undefined" id="undefined"></a>

* \[PlusWin-Dev6 → 비즈니스 컴포넌트] 메뉴에서 '컨트롤 유형'이 "Popup"인 데이터

## 컴포넌트 ID 규칙 <a href="#component-id-rule" id="component-id-rule"></a>

* **영어 대문자, 숫자만 등록**하며 단어의 구분은 언더바( \_ )를 사용
* 컨트롤 유형의 첫 번째 문자를 접두어로 입력 (ex. 설비코드: **P**\_FXCODE)

## 비즈니스 컴포넌트 데이터 등록 규칙 <a href="#rules" id="rules"></a>

* WHERE 구문을 제외하고 \[[LookUp 유형](https://youngtae.gitbook.io/pluswin6/business-component#lookup)]과 작성법은 동일
* <mark style="color:blue;">ORDER BY 구문에는 최종 SELECT 결과 필드명으로 지정</mark> ( `custnm as customer_name` 와 같이 별칭(Alias)을 사용했다면 별칭인 `customer_name`을 ORDER BY 구문에 작성)
* 비즈니스 컴포넌트 데이터 참조 팝업에서 조회 조건용 컨트롤로 사용될 필드에 대하여 WHERE 문을 작성하며 조건용 필드는 <mark style="color:blue;">실제 테이블의 필드명이 아닌 '최종 SELECT 결과 필드명'이 기준</mark>이며, 중괄호(`{ }`)를 사용하여 구분 ( 아래 예시 \[이미지1, 2] 참고 )
* **조회 조건용 컨트롤은&#x20;**<mark style="color:blue;">**\[세부 항목 설정] 영역의 '컴포넌트ID (디자인)' 필드에 값을 지정하지 않은 경우 TextEdit 유형으로 기본 생성되기 때문에 이 경우 '코드명'으로 검색해야 하므로 '코드' 값이 아닌 '코드명'으로 조회되도록 쿼리를 작성**</mark>**&#x20;( \[이미지2]의 WHERE문에 '`{use_yn}`' 필드 참고 )**
* \[이미지3]은 \[이미지2]에 입력된 비즈니스 컴포넌트 정보의 데이터 참조 팝업 화면

<figure><img src="https://1258057271-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN7mAtb6b5ngySagoioAF%2Fuploads%2FHIjdHNk48MLNCeJ4HIhd%2Fimage.png?alt=media&#x26;token=b88b45f6-a6c6-4ea8-b6ac-36ab3688aeab" alt=""><figcaption><p>[ 이미지 1 ]</p></figcaption></figure>

<figure><img src="https://1258057271-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN7mAtb6b5ngySagoioAF%2Fuploads%2FQyVtxgEiiJvQmobIyGj4%2Fimage.png?alt=media&#x26;token=469ac472-9f32-4d57-b478-cf6f734d38c5" alt=""><figcaption><p>[ 이미지 2 ]</p></figcaption></figure>

<figure><img src="https://1258057271-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN7mAtb6b5ngySagoioAF%2Fuploads%2FwVmOsOHPhmzzUWNazYuW%2Fimage.png?alt=media&#x26;token=0a7ab9b3-8153-4e16-980a-a7216c374780" alt=""><figcaption><p>[ 이미지 3 ]</p></figcaption></figure>

## \[세부 항목 설정] - 컴포넌트ID (디자인) <a href="#design-bc-id" id="design-bc-id"></a>

<figure><img src="https://1258057271-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN7mAtb6b5ngySagoioAF%2Fuploads%2Fx009JJqGHPA8idItcYBc%2Fimage.png?alt=media&#x26;token=43cb2f08-673e-4697-9913-48f697e0aab8" alt=""><figcaption><p>[ 이미지 4 ]</p></figcaption></figure>

* 조회 조건용 컨트롤의 디자인을 `LookUpEdit`과 `RadioGroup`으로 적용하기 위해 비즈니스 컴포넌트에 등록된 <mark style="color:blue;">LookUp 또는 Radio 유형의 ID를 설정</mark>하는 필드
* '컴포넌트ID (디자인)'에 값이 지정된 필드는 팝업에서 조회 컨트롤 \[이미지 6]과 같이 해당 유형으로 디자인되며 코드로 값을 받아오기 때문에 WHERE문 작성에도 코드로 조건을 처리 ( \[이미지5] 참고 )

<figure><img src="https://1258057271-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN7mAtb6b5ngySagoioAF%2Fuploads%2FREnZvrIpAMmkNNLbT1mF%2Fimage.png?alt=media&#x26;token=0bcfa037-4fd4-4091-aec7-7908b3eb7cae" alt=""><figcaption><p>[ 이미지 5 ]</p></figcaption></figure>

<figure><img src="https://1258057271-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN7mAtb6b5ngySagoioAF%2Fuploads%2FnIu0Pfa22Ue99W3hxR3y%2Fimage.png?alt=media&#x26;token=2c8f2d70-91f9-41fe-afbb-ff5dcfdd4045" alt=""><figcaption><p>[ 이미지 6 ]</p></figcaption></figure>

## 커스텀 공통 팝업 개발 및 적용 <a href="#custom-biz-popup" id="custom-biz-popup"></a>

* 폼 템플릿을 '공통 팝업' 으로 선택하여 신규 생성 **(&#x20;**<mark style="color:blue;">**DevTool6 : v6.0.6.2 이후 버전**</mark>**&#x20;사용 )**
* 모든 공통 팝업은 BizComponentPopupBase 클래스를 상속 (GST.PlusWin6.Core.dll 참조)

<figure><img src="https://1258057271-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN7mAtb6b5ngySagoioAF%2Fuploads%2FcY7H8X0HqIWG23jXOmyd%2Fimage.png?alt=media&#x26;token=3d3623a0-1c21-4a7f-8d40-469a7661a6a7" alt=""><figcaption><p>[이미지 7]</p></figcaption></figure>

### 조회 조건 컨트롤 자동 생성 규칙

* `GroupControlEx`를 생성하고 Name 속성에 "grpTop"으로 지정하고 하위 컨트롤에 `LayoutControlEx` 생성 후 Name 속성을 "lcParams" 로 정의
* `OnLoad` 에서 `InitConditionArea` 메서드를 호출. 함께 자동 생성되는 조회 버튼(`SimpleButton`)을 Output 타입의 파라미터로 반환 받아 Click 이벤트 등록

```csharp
private SimpleButton _RetrieveButton = null;

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    grpList.Text = _BizComponentInfo.BizComponentName;

    InitConditionArea(out _RetrieveButton);
    InitGridColumn();

    _RetrieveButton.Click += OnClick;
}
```

### 결과 반환 처리

* BizComponentPopupBase 클래스에 정의된 DataRow 형식의 ResultDataRow 속성 멤버에 팝업에서 선택한 값을 할당

```csharp
private bool Confirm()
{
    if (gvwList.FocusedRowHandle < 0)
    {
        MessageForm.Show(Messages.NoDataSelected);
        return false;
    }

    ResultDataRow = gvwList.GetFocusedDataRow();

    return true;
}
```

### 공통 팝업 내 서브폼 개발 <a href="#sub-form" id="sub-form"></a>

* 일반 메뉴 폼 개발에서 서브 폼을 개발하는 방식과 동일하게 `BaseForm` 클래스(namespace GST.PlusWin6.Core.Forms)를 상속하여 개발하며 서브 폼 개체를 생성할 때도 마찬가지로 `CreateSubForm` 메서드를 이용하여 처리

### 적용 <a href="#apply" id="apply"></a>

* \[PlusWin-Dev6 - 코드 정보] 공통 팝업 정보 등록
* \[비즈니스 컴포넌트] 메뉴에서 컨트롤 유형이 "Popup"인 비즈니스 컴포넌트의 '팝업 폼' 항목에 공통 팝업 지정

<figure><img src="https://1258057271-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN7mAtb6b5ngySagoioAF%2Fuploads%2FhFEUfuoGJZbsfoP70tmB%2Fimage.png?alt=media&#x26;token=db27a037-3546-4c49-9bd9-366b248e5e8e" alt=""><figcaption><p>[이미지 8]</p></figcaption></figure>

<figure><img src="https://1258057271-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN7mAtb6b5ngySagoioAF%2Fuploads%2FiDAghcHLqF09SGcGAyOh%2Fimage.png?alt=media&#x26;token=5d10b21a-103a-41ca-a357-b4211d235470" alt=""><figcaption><p>[이미지 9]</p></figcaption></figure>

### 주의 사항

* 모든 디자인과 데이터 조회 기능을 수동으로 작업한 경우, ButtonEditEx의 자동 완성 기능을 사용하려 할 때 조회 조건용 컨트롤의 Tag 속성에 WHERE 구문에 입력한 조건용 필드명을 입력
* ex) txtItemcd (TextEditEx) 수동 생성 시 → `txtItemcd.Tag = "itemcd";`
