*프로젝트폴더 동위에 js파일모음폴더가 위치하고
프로젝트 실행 위치는 해당 프로젝트 통째로 열어서 실행
문제풀이 1. ds 정보 구하고 컬럼 추가
this.Dataset1.getColCount();
this.Dataset1.getRowCount();
trace(); 로그창에 찍는 함수
this.txtareaBtn.set_value("결과는 "+....
this.Dataset1.addColumn("컬럼명", "타입");
데이터셋 생성 삭제 등 스크립트로 권장 X
데이터셋의 컬럼 정보는 한쪽(서비스)에서만 관리하는 것이 베스트 (서버프레임워크에서 SQL문으로 관리)
컬럼은 더미로 만들면됨
this.Dataset1.getColID(인덱스값); //컬럼명
this.Dataset1.getColInfo(인덱스값); //데이터 셋의 모든 컬럼 정보 (.id, .type, .size... )
문제풀이 2. row위치 검색 (단일조건/ 복합조건// 목록구하기)
두개는 여러개 건수가 있어도 첫 번째 index정보만 리턴 //
this.Dataset1.findRow("찾는컬럼명", "찾는값"); row인덱스 리턴
this.Dataset.getColumn(인덱스, "찾는컬럼명"); 인덱스로 컬럼의값 가져오기
this.Dataset1.findRowExpr("컬럼1명 == '값' && 컬럼2명 <= 숫자"); // expression을 이용해서 씀. 인덱스를 리턴
역시 getColumn으로 해당 컬럼의 값 가져와야
단일조건 역시 이거로 검색가능하쥬
목록으로 리턴받으려면
this.Dataset1.extractRows("expression도 쓸 수 있고 "); //return은 Array(배열)
for문 돌려서 arr.length만큼 .getColumn(arr[i], "컬럼명");
* 마이플랫폼에 없던 메소드라 기존에는 .findRow("컬럼명","값", startrow index, endrow index); 세네번째 인자는 생략가능
* 단일조건 dataset의 lookup 메소드로 한줄로 줄일 수 있음
문제풀이3. 평균(빈 레코드가 있는 경우 계산에서 제외하는 true 디폴트, false 포함)
getCaseAvg Dataset에 해당하는 정보 확인 F1
급여 보너스 합한 평균 .getAvg("칼럼명1+칼럼명2"); //컬럼끼리 연산 가능
정렬(sort)
.set_keystring("그루핑G소팅S:내림차순-오름차순+(디폴트)정렬기준1+정렬기준2"); 데이터셋의 keystring 속성
set이니까 속성값변경인걸 알아차려야쥐
필터링(결과 내 검색) db통해서 가져온거 아니고
.filter("Expr기술");
like filter는 따로 메소드 없어서 기능구현해야 .indexOf를 이용해서
sText는 ''든 ""로 싸든 상관없네
사용자가 찾고자 하는 값 this.Edit0.value; 익스프레션을 쓴 때 사용자가 입력하는 데이터로 변화 발생 고려해야
오류가 나는 이유
filter 내의 expression은 문자열의 조합이기 때문에 '값이 들어오면 오류 발생함
'값이 들어왔을 때 문자 연산에 오류 없는지 코딩해야
컬럼타입을 바로 넣지 않고 한번 체크해야 숫자나 데이트 타입이면 문제가 생기니까
'값이 들어온 경우 특수문자 처리할 수 있도록 변환(탈출문자\)
필터된 레코드개수와 원본 데이터 개수
현재 화면에 보여지는 레코드 수 this.Dataset1.getRowCount();
원본 레코드 수 this.Dataset1.getRowCountNF(); 필터링되지 않은 수
스텝을 리로드 했을 때 고정해놓는 방법
Form 속성에 stepindex
ㅡ
ㅡ
문제풀이4
레코드 상태값 확인가능 넥사크로 엔진이 자동관리해줌(디버깅과 업로드... )
trace(this.Dataset4.getRowType(this.Dataset4.insertRow(0));
Insert Rowtype 2
UpdateRowtype 4
처음 db에서 가져온 상태 얻을 때 getOrgColumn(idx, "컬럼명");
>
데이터셋에서 인덱스번호 3,4,5 레코드 멀티 삭제시 가장 먼저 삭제되는 건 뒤에서부터
3부터 지우면 건수가 총 6이라고 할 때 5
4지우면 4
5지우면 3
이렇게 하면 6건중 반인 3개까지는 지워지는데 뒤에 있는 값을 지울수없음
건수는 줄어드니까 index번호가 바뀌니까?
ds 변경 여부 확인(메소드 없고 코딩), 폼 닫을 때 확인하는 창 띄우는 event
삭제확인
신규, 변경 확인 레코드를
돌면서 타입 확인
>ㅡ
**응용 데이터셋마다 이벤트 걸어서 코딩 할 수 없으니까 함수로 빼기
>ㅡ
어떤 db가 들어와서 사용할 수 있도록 매개변수로 교체
폼닫기 확인 창 폼의 onbeforeclose 이벤트로 처리
>
일반적으로 사용자 확인은 this.confirm 메소드를 쓰는데 onbeforeclose 이벤트에서는 먹히지 않으니까
출력 메세지 return "출력메세지" 해야함.
문제풀이5
ds 복사 : 공통코드를 글로벌 ds에 놓고 필요한 폼에 사져다 쓸 때 사용
copyData 데이터는 복사되지만 row type은 복사되지 않고 1(초기조회상태)로 세팅됨
>ㅡ
*createFormat 데이터를 그리드에 바인딩할 때 마우스로 끌어다 놓는 것과 동일한 스크립트
assign 데이터도 복사하고 row type 입력 수정정보도 복사
>
둘 차이 transaction 저장옵션 :U 수정신규타입만 서버로 올리는 작업에 반영되려면 assign을 해야 서버로 넘어감
>ㅡ
copyRow 특정 레코드만 복사하기(많이씀) / 특정 칼럼만 복사하기(파마미터에 옵션하나 추가)
>ㅡ
ㅡ
문제풀이6
>
이벤트처리
>
스크립트 순서 디버깅 할 때 trace로 봐야 로그 찍히는 순서 확인 가능함
>
ds의 이벤트 순서 cancolumnchange -> oncolumnchanged
key값 중복값 입력시 오류메세지 후 다시 원래 값으로 돌릴 때 can이 더 효율적
can은 ds에 반영하기 전에 반영없이 그냥 끝내면돼
on은 ds에 이미 반영이 되어버리니까 돌려주는 스크립트를 다시 짜야하니까
코드
>ㅡ
입력값이 다른 로우에 있는지, 있으면 취소
for문으로 값을 바꾸는 로직으로 바꾼 다음 칼럼 모두 바꾸면
값만 바뀌는 게 아니고 엔진이 can row 이벤트까지 작동함
set_enableevent로 이벤트 끄고 작업 후 다시 true로 켜야 성능문제향상! (100건에 10초-> 100건에 1초미만)
>ㅡ
댓글