넥사크로 transaction 함수 #1. 조회(select)

형아·2025년 1월 10일

Nexacro

목록 보기
16/18

시작하기 전에 넥사크로의 특성에 대해 설명할 부분이 있다.

넥사크로는 클라이언트-서버 구조를 기반으로 하여, 클라이언트에서 발생하는 변경 사항(Dataset)은 서버와 동기화 하지 않으면 DB에는 반영되지 않는다.

Dataset에 반영된 데이터 변경사항을 서버로 전달하려면, 다시 transaction을 사용하여 서버와 동기화 해야한다.

반대로, DB에서 조회한 데이터는 클라리언트의 Dataset에 저장되므로, 데이터 조회와 UI 렌더링 사이의 연결점이 된다.

transaction 함수

넥사크로의 transaction함수는 클라리언트와 서버 간 데이터 통신을 처리하는 핵심 함수. 데이터를 서버로 전송하고, 서버에서 처리된 결과를 다시 클라이언트로 받아오는 과정을 관리한다.

주로 CRUD 작업(Create, Read, Update, Delete)을 수행할 때 사용되며, 데이터셋(DataSet)과 연동하여 데이터를 송수신하고, 다음의 주요 작업을 수행합니다.

  1. 서버 호출: 클라이언트에서 서버의 특정 URL(엔드포인트)로 요청을 보냄.
  2. 데이터 전송: 클라이언트에서 서버로 데이터를 전송(예: 데이터셋, 변수 등).
  3. 응답 처리: 서버에서 처리된 결과를 다시 클라이언트로 받아옴.
  4. 콜백 처리: 응답 후, 특정 콜백 함수에서 결과를 처리.

transaction 함수의 기본 문법

  • strSvcID : 요청을 구분하는 고유 ID.
    예) "saveData", "getList" 등.

  • strURL : 서버의 엔드포인트 URL. 내가 호출할 서비스.
    예) "http://example.com/api/data".

  • strInDatasets : 서버로 보낼 데이터셋. 입력 데이터셋
    포맷) "InputData=localDataset".

  • strOutDatasets : 서버에서 받을 데이터셋. 출력 데이터셋
    포맷) "OutputData=localDataset".

  • strArgument : 추가로 전달할 파라미터.
    포맷) "key1=value1 key2=value2".

  • strCallbackFunc : 서버 응답 후 실행할 콜백 함수 이름.
    예) "callbackFunction".

  • nDataType : 데이터 타입(XML, JSON, SSV 등).
    기본값) 0 (XML).
    옵션) 1 (Binary), 2 (SSV), 3 (JSON).

  • bCompress : 데이터 압축 여부.
    기본값) false.
    옵션) true (압축 활성화).

  • strAsync : 비동기/동기 여부.
    기본값) true (비동기).
    옵션) false (동기).

objApp.transaction(
    strSvcID,        // (필수) 서비스 ID: 요청을 구분하는 문자열
    strURL,          // (필수) 서버 URL: 서버와 통신할 엔드포인트
    strInDatasets,   // (필수:빈 값 가능) 서버로 보낼 데이터셋 (input dataset)
    strOutDatasets,  // (필수:빈 값 가능) 서버에서 받을 데이터셋 (output dataset)
    strArgument,     // (필수:빈 값 가능) 추가 전달할 파라미터
    strCallbackFunc, // (필수:빈 값 가능) 서버 응답 후 실행할 콜백 함수
    nDataType,       // (선택) 데이터 타입(XML, JSON, SSV 등).
    bCompress,       // (선택) 데이터 압축 여부.
    strAsync         // (선택) 비동기 여부. (true: 비동기, false: 동기) (기본값: true)
)

조회

참고로 조회할 때는 클라이언트의 Dataset에서 데이터를 바로 추가하는 것이 아니라, 서버(DB)에서 데이터를 가져온다.

transaction함수가 호출되면, 서버와 통신하여 필요한 데이터를 DB에서 조회한 후, 조회 결과를 Dataset에 매핑한다.

추가 / 삭제
추가 / 삭제 작업은 기본적으로 클라이언트의 Dataset에 반영된다. Dataset에 반영된 데이터 변경사항을 서버로 전달하려면, 다시 transaction을 사용해 서버와 동기화해야한다.

일단 Retrieve 버튼을 클릭하면 데이터 조회가 되는 이벤트를 만들어보자.

design탭에서 onclick 이벤트를 주고 싶은 컴포넌트를 더블클릭하면, script탭에서 onclick 이벤트가 자동으로 생성된다.

f1(도움말) > 색인(index) > transaction, Form > 하단 sample call
에 있는 다음과 같은 내용을 복사 하여 함수 안에 넣는다.

	this.transaction( 
	"MyService01",
	"DataSrv::samplexml.jsp",
	"input1=Dataset02",
	"Dataset03=output1",
	"a=b",
	"callbackFunction");


물론 이 코드 완전 그대로 사용하진 x . 조회하는 것에 맞게 수정할 것임.

  • strSelect ( strSvcID )
    : 한 transaction의 끝에는 callback함수를 호출하는데, 요청마다 callback함수를 만든다면 불필요한 script가 발생하기 때문에, callback함수는 하나를 사용하고, callback함수에서 이 ID를 parameter로 넘겨주어 어떤 요청의 결과인지 식별한다.

  • SvcURL::select_emp.jsp, ( strURL )
    : TypeDefinition > Services > User Service에 등록된SvcURL라는 서비스 이름
    백엔드 URL

(User Service : 작성한 폼을 저장할 디렉토리를 정의하는 곳)

Type
form : 화면
js : javascript
file : 이미지 모아둔 곳
JSP(java계열), ASP, SAP, bs, metadata, model : 서버 URL 경로 설정하는 변수값


URL
http://demo.nexacro.com/edu/nexacro17/
실제 코딩할 때는 해당되는 주소에 Service 파일명(jsp)까지 기술하는데
(이렇게 : "SvcURL::select_emp.jsp")
여기선 앞에 경로까지만 지정


PrefixId
http://demo.nexacro.com/edu/nexacro17/
다음의 url을, SvcURL 라고 정의
코딩할 때는 이 prefix 값을 가져와서 쓴다.


즉, TypeDefinition 설정에서 SvcURL가 실제 서버 경로(http://demo.nexacro.com/edu/nexacro17/)로 매핑되어 있다면, SvcURL::select_emp.jsphttp://demo.nexacro.com/edu/nexacro17/select_emp.jsp를 호출합니다.

  • input1=Dataset02 ( strInDatasets )
    : 클라이언트에서 서버로 전송할 데이터셋

    "input1": 서버에서 받을 변수 이름.
    "Dataset02": 클라이언트의 데이터셋 이름.
    실행 흐름: Dataset02의 데이터를 서버로 전송하며, 서버에서는 이를 input1로 처리합니다.

    다만, 지금은 select(조회)이기 때문에 넘겨줄 값은 없다. 그래서 비워둘 것임.
    (create, update, delete 일 경우에는 서버로 넘겨줄 값이 있겠지.)
  • ds_emp=out_emp ( strOutDatasets )
    : 서버에서 클라이언트로 받을 데이터 셋

    "ds_emp": 클라이언트의 데이터셋 이름. (화면에 만든거)
    "out_emp": 서버에서 반환할 데이터 변수 이름. (Service에서 넘겨주는 이름. 참고로 브라우저에서http://demo.nexacro.com/edu/nexacro17/select_emp.jsp로 가면 확인 가능)
    실행 흐름: 서버가 out_emp이라는 이름으로 데이터를 반환하면, 클라이언트의ds_emp에 저장됩니다.
  • arg1=1 arg2=2 ( strArgument )
    : 여기서는 조회조건을 넘기는 parameters
    post방식으로 값을 전달한다.
    서버로 arg1 이라는 이름의 변수에 1이라는 값,
    arg2 이라는 이름의 변수에 2라는 값을 전달한다.

    HTTP 프로토콜에서 데이터를 전송하는 두 가지 방법으로 Get, Post 가 있다.

    1. Get 방식

    • 예) "SvcURL::select_emp.jsp?key1=value1&key2=value2"
    • 쿼리스트링 방식으로 조건(parameters)을 넘기고, url에 포함된 값(key1=value1, key2=value2)이 서버에 전달됨
    • 브라우저나 프록시 서버에서 캐싱 가능해서 동일한 요청에 대해 성능이 향상
    • url에 데이터가 노출되어 보안에 취약
    • 변수와 변수 구분 &


      2. Post 방식
    • 데이터를 URL에 포함하지 않고 HTTP 요청의 본문에 담아 전송
    • 데이터 크기 제한 없고, JSON 형식 등으로 데이터 구조화 가능
    • 데이터가 HTTP 본문에 포함되므로 URL에 노출되지 않음 (단, HTTPS를 사용하지 않으면 여전히 안전하지 않음!)
    • (넥사크로만) 변수와 변수 구분 " " (space) :: 일반적으로는 & 사용

      - 참고
      arg3 = 3 2 처럼 데이터에 공백을 포함하는 데이터를 넘긴다면, pasing 오류가 남!!
      "arg3 =" + nexacro.wrapQuote("2 3") 이런식으로 작성해야 하나의 값으로 인식함
  • fn_callBack ( strCallbackFunc )
    : 서버 응답 후 실행할 콜백 함수의 이름.
    transaction 의 끝에는 callback함수를 호출한다.
    서버의 처리 결과를 확인하거나 데이터셋을 화면에 반영할 때 사용

fn_callBack은 다음과같은 형태로 정의될 수 있다.

 this.fn_callBack = function(strSvcId, nErrorCode, strErrorMsg)
 {
 	//nErrorCode >= 0 면 성공, nErrorCode < 0 면 실패 인데
	// 0 : 성공 / 그 외 : 실패
	if(nErrorCode != '0') {
		//실패 : errorCode와 errorMsg 보여줌
		alert("Error"+ nErrorCode + ":" + strErrorMsg);
	} else {
		//성공 :
		switch (strSvcId) {
			case "strSelect":
			alert(this.ds_emp.getRowCount() + " 건 조회");
		}
	}
 }

콜백 함수는 무조건 3개의 parameters가 넘어온다.

strSvcId
요청의 서비스 ID (strSelect)

nErrorCode
응답 상태 코드(0 이상이면 성공, -값이면 실패)

strErrorMsg
에러 메시지(또는 성공 메시지)


strSvcId는 클라이언트에서 트랜잭션을 호출할때, 전달하는 식별자 그대로 넘어옴.
nErrorCodestrErrorMsg 는 서버 JSP단에서 넘겨줌

데이터를 조회하는 코드를 보면 다음과 같다.

this.btn_retrieve_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.transaction( 
	"strSelect",
	"SvcURL::select_emp.jsp", //http://demo.nexacro.com/edu/nexacro17/select_emp.jsp
	"", //client -> server 저장(select 라서 비워둠) (server ds = client ds)
	"ds_emp=out_emp", //server -> client 조회 (client ds = server ds)
	"arg1=1 arg2=2", //조회 조건 parameter , 변수와 변수 구분은 ""(space)
	"fn_callBack");
};

this.fn_callBack = function(strSvcId, nErrorCode, strErrorMsg)
{
	//nErrorCode >= 0 면 성공, nErrorCode < 0 면 실패 인데
	// 0 : 성공 / 그 외 : 실패
	if(nErrorCode != '0') {
		//실패 : errorCode와 errorMsg 보여줌
		alert("Error"+ nErrorCode + ":" + strErrorMsg);
	} else {
		//성공 :
		switch (strSvcId) {
			case "strSelect":
			alert(this.ds_emp.getRowCount() + " 건 조회");
		}
	}
}

실행 화면

초기화면

Retrieve 버튼 클릭 후

뭔가 길어서 나눠쓰겠움;ㅋ

다음 : 넥사크로 transaction 함수 #2. 추가(create)

profile
개발새발

0개의 댓글