1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003 |
- <?xml version="1.0" encoding="utf-8"?>
- <Script type="xscript4.0"><![CDATA[/***************************************************************************************
- * System Name :
- * Job Name :
- * File Name : ENRSignEngine.xjs
- * Creator :
- * Make Date :
- *
- * Description :
- *---------------------------------------------------------------------------------------
- * Modify Date Modifier Modify Description
- *---------------------------------------------------------------------------------------
- *---------------------------------------------------------------------------------------
- ****************************************************************************************/
- //=======================================================================================
- // xjs Include
- //---------------------------------------------------------------------------------------
- include "com_commodulexp::SSZFM01001.xjs";
- //---------------------------------------------------------------------------------------
- var Sign = new ENRSign;
- //Sign.init();
- var lgv_tabSpace = ' ';
- /****************************************************************************************
- * Argument :
- * Description : 간호 인증 모듈 객체 선언
- ****************************************************************************************/
- function ENRSign(){
- this.certreload = true;
- this.debug = false;
-
- this.CERT_YEAR = 1970;
- this.CERT_MONTH = 1;
- this.CERT_DATE = 1;
- this.CERT_UID = "";
- this.CERT_DN = "";
- this.errmsg = "[전자서명 에러]";
- this.errcode = new Array;
-
- this.certchkflag = "Y";
- this.tempstr = "";
- this.signedInfos = new Array; // 외부용
- this.signData = ""; // 내부용
- this.signedData = ""; // 내부용
- this.emptyattname = "xml:"; // XML Text 변환시 Attribute 빈값에 대한 prefix name
- this.nulldatastring = "-"; // Topinfo 및 Session 데이터가 null 일때 인증데이터에 표기할 String
- this.ATTRNAME_PATINFO = "환자정보";
- this.ATTRNAME_SIGNINFO = "인증정보";
- this.ATTRNAME_SESSIONINFO = "Session정보";
- this.DSNAME_BASICINFO = "ds_enrsign_basicinfo";
- this.DSNAME_SIGNINFO = "ds_enrsign_signinfo";
- this.DSNAME_SIGNINFO_TEMP = "ds_enrsign_tempinfo";
-
- // Sign KMI Communication & Verify Function
- this.init = enrfSign_Init;
- this.makesigndata = enrfSign_MakeSignData;
- this.verifysign = enrfSign_VerifySign;
-
- // ENR Sign Create Funtion
- this.getcommoninfo = enrfSign_GetCommonInfo;
- this.settaginfos = enrfSign_SetTagInfos;
- this.setsigninstance = enrfSign_SetSignInstance;
- this.addnode = enrfSign_addSignInfoTotal;
- this.addnodeset = enrfSign_addSignInfoTotalSet;
- this.addnodes = enrfSign_addSignInfo;
-
- this.addnode_dstoxml = enrfSign_addSignInfo_dstoxml;
-
- this.getsigndata = enrfSign_makeSignInfo;
- this.getsigndataArray = enrfSign_GetSignDataArray;
-
- this.signprocess = enrfSign_SignProcess; // core
- this.view_signprocess = enrfSign_ViewSignProcess; // core
-
- }
- /****************************************************************************************
- * Argument :
- * Description : 전자 인증 모듈 초기화
- ****************************************************************************************/
- function enrfSign_Init(){
- return zesf_InitSign(); // 전자서명관련 모듈 생성 및 초기화 [comm_inf.xjs 내 함수 호출]
- }
- /****************************************************************************************
- * Argument :
- * Description : 전자 서명 실행
- ****************************************************************************************/
- function enrfSign_MakeSignData(pOrgData, pUid, pReload) {
- if (this.certload == "true" || this.certload == true)
- {
- pReload = false;
- }
-
- // 로그인 시 지정한 인증서로드 체크
- if(gv_bCertLoad == "true"){
- pReload = false; //인증서 타지 않도록
- }
- // 로드된 인증서를 가지고 전자서명을 수행 [comm_inf.xjs 내 함수 호출]
- var m_signedData = zesf_SignData( pOrgData, pUid, pReload);
-
- this.signData = pOrgData;
- this.signedData = m_signedData;
- return m_signedData;
- }
- /****************************************************************************************
- * Argument :
- * Description : 전자서명된 데이터 복원검증 Process
- ****************************************************************************************/
- function enrfSign_VerifySign(pSignedData){
- var orgData = "";
-
- //if (this.version == "TF4"){
- if (pSignedData == null) pSignedData = this.signedData;
-
- if (pSignedData != ""){
- orgData = CertManX.VerifyDataB64(pSignedData, 0 );
-
- if( orgData == "" ) {
- var msg = "전자서명 검증에";
- messageBox( msg, "E009", this.errmsg + CertManX.GetLastErrorMsg());
- }
- }
- //}
-
- return orgData;
- }
- /****************************************************************************************
- * Argument :
- * Description : 전자 인증 데이터셋 구성
- ****************************************************************************************/
- function enrfSign_SetSignInstance()
- {
- var m_topinfo = "pid▦환자번호▩pname▦환자이름▩age▦나이성별▩body▦키몸무게▩btype▦혈액형▩insukind▦보험유형▩orddept▦진료과▩apntdr▦지정의▩attndr▦주치의▩";
- var m_sessioninfo = "userid▦사용자번호▩usernm▦사용자이름▩posinstnm▦소속기관명▩posdeptnm▦소속부서명▩dutplceinstnm▦근무지기관명▩dutplcenm▦근무지부서명▩jobkindnm▦직종명▩jobposnm▦직위명▩jobrespnm▦직책명▩prfshipflagnm▦교직구분명▩deptabbr▦부서약어▩systemnm▦시스템명칭▩systeminstnm▦시스템소속기관명▩logindt▦로그인시간▩";
-
- if(utlf_isNull(form.all[this.DSNAME_BASICINFO])){
- enrfSign_createDs(this.DSNAME_BASICINFO);
- form.all[this.DSNAME_BASICINFO].addColumn("taginfo1", "string");
- form.all[this.DSNAME_BASICINFO].addColumn("taginfo3", "string");
- form.all[this.DSNAME_BASICINFO].addColumn("taginfo4", "string");
- form.all[this.DSNAME_BASICINFO].addColumn("taginfo5", "string");
- }
-
- if(form.all[this.DSNAME_BASICINFO].rowcount > 0) form.all[this.DSNAME_BASICINFO].clearData();
-
-
- form.all[this.DSNAME_BASICINFO].enableevent = false;
-
- // Topinfo - 0th row
- dsf_addRow(form.all[this.DSNAME_BASICINFO],
- [{col:"taginfo1", val:this.settaginfos(1, m_topinfo, "TopInfo", false)} // 인증할 데이터 정보 (미기록 노드 제거된 정보)
- ,{col:"taginfo3", val:this.settaginfos(1, m_topinfo, "TopInfo", true)} // 인증할 데이터 정보 (미기록 노드 제거 전 원본 정보)
- ,{col:"taginfo4", val:this.settaginfos(2, m_topinfo, "TopInfo", true)} // [3]데이터(없는 노드 포함된)를 text 형태로 추출보기
- ,{col:"taginfo5", val:this.settaginfos(2, m_topinfo, "TopInfo", false)}]); // [1]데이터(없는 노드 제거된)를 text 형태로 추출보기
-
- // SessionInfo - 1th row
- dsf_addRow(form.all[this.DSNAME_BASICINFO],
- [{col:"taginfo1", val:this.settaginfos(1, m_sessioninfo, "SessionInfo", false)} // 인증할 데이터 정보 (미기록 노드 제거된 정보)
- ,{col:"taginfo3", val:this.settaginfos(1, m_sessioninfo, "SessionInfo", true)} // 인증할 데이터 정보 (미기록 노드 제거 전 원본 정보)
- ,{col:"taginfo4", val:this.settaginfos(2, m_sessioninfo, "SessionInfo", true)} // [3]데이터(없는 노드 포함된)를 text 형태로 추출보기
- ,{col:"taginfo5", val:this.settaginfos(2, m_sessioninfo, "SessionInfo", false)}]); // [1]데이터(없는 노드 제거된)를 text 형태로 추출보기
-
- form.all[this.DSNAME_BASICINFO].enableevent = true;
-
- // SignInfo
- if(utlf_isNull(form.all[this.DSNAME_SIGNINFO])){
- enrfSign_createDs(this.DSNAME_SIGNINFO);
- form.all[this.DSNAME_SIGNINFO].addColumn("taginfo1", "string");
- form.all[this.DSNAME_SIGNINFO].addColumn("taginfo3", "string");
- form.all[this.DSNAME_SIGNINFO].addColumn("taginfo4", "string");
- form.all[this.DSNAME_SIGNINFO].addColumn("taginfo5", "string");
- }
-
- if(form.all[this.DSNAME_SIGNINFO].rowcount > 0) form.all[this.DSNAME_SIGNINFO].clearData();
- }
- /****************************************************************************************
- * Argument : 1. pMode
- * 2. pKeyInfo
- * Description : 환자 (상단정보), 사용자 (세션정보) 조회
- ****************************************************************************************/
- function enrfSign_GetCommonInfo(pMode, pKeyInfo){
-
- var m_return = "";
-
- if (pMode == "TopInfo"){
-
- m_return = appf_getPatientInfo(pKeyInfo); // 환자정보
- if (utlf_isNull(m_return) || m_return == "null") m_return = this.nulldatastring;
-
- return m_return;
-
- } else if (pMode == "SessionInfo"){
- m_return = sysf_getUserInfo(pKeyInfo); // 사용자정보
- if(utlf_isNull(m_return) || m_return == "null") m_return = this.nulldatastring;
-
- return m_return;
- }
-
- }
- /****************************************************************************************
- * Argument : 1. bClearDs : DS 초기화 여부
- * Description : 전자 인증 실행
- ****************************************************************************************/
- function enrfSign_SignProcess(bClearDs){
-
- this.errcode[0] = 0;
- this.errcode[1] = 0;
- this.errcode[2] = 0;
- this.errcode[3] = 0;
- this.errcode[4] = 0;
-
- var bCheck = true;
- // var bResultArr = null; // (20140206) 사용하지 않는 변수 주석처리함
-
- // 인증결과 Clear Setting
- this.signedInfos[0] = false;
- this.signedInfos[1] = "";
- this.signedInfos[2] = "";
- this.signedInfos[3] = "";
- this.signedInfos[4] = "";
- this.signedInfos[5] = "";
-
- // model.removeNodeset(this.XPATH_SIGNBASE); // TF3,4
- enrfSign_clearDs(); // 전자 인증 데이터셋 초기화
-
- this.setsigninstance();
-
- try{
- // 인증 Process "fMake_SignData" CallBack 함수 : 사용자정의
- fMake_SignData();
-
- } catch(E){
- bCheck = false;
- sysf_messageBox("[Debug Mode] : ENR 인증데이터 생성함수(fMake_SignData)에 문제가 있습니다.", 'E');
- }
-
- this.errcode[0] = 300;
- if (bCheck == true){
- bCheck = this.getsigndataArray(this.CERT_UID, this.certreload); // Array 구조로 생성된 데이터를 돌려줌 : this.signedInfos
- }
-
- if (bClearDs == true){
- // 3. 인증을 위해 생성된 데이터 삭제
- enrfSign_clearDs();
- }
- return bCheck;
- }
- /****************************************************************************************
- * Argument : 1. bClearDs : DS 초기화 여부
- * Description : 전자 인증 실행 (통합기록조회용)
- ****************************************************************************************/
- function enrfSign_ViewSignProcess(bClearDs){
-
- //
- this.errcode[0] = 0;
- this.errcode[1] = 0;
- this.errcode[2] = 0;
- this.errcode[3] = 0;
- this.errcode[4] = 0;
-
- var bCheck = true;
- // 인증결과 Clear Setting
- this.signedInfos[0] = false;
- this.signedInfos[1] = "";
- this.signedInfos[2] = "";
- this.signedInfos[3] = "";
- this.signedInfos[4] = "";
- this.signedInfos[5] = "";
-
- //model.removeNodeset(this.XPATH_SIGNBASE); // TF3,4
- enrfSign_clearDs();
-
- this.setsigninstance();
-
- try{
- // 인증 Process "fMake_SignData" CallBack 함수 : 사용자정의
- fMake_ViewSignData();
- } catch(E){
- bCheck = false;
- sysf_messageBox("[Debug Mode] : ENR 인증데이터 생성함수(fMake_ViewSignData)에 문제가 있습니다.", "E");
- }
-
- this.errcode[0] = 300;
- if (bCheck == true){
- bCheck = this.getsigndataArray(this.CERT_UID, this.certreload); // Array 구조로 생성된 데이터를 돌려줌 : this.signedInfos
- }
-
- if (bClearDs == true){
- // 3. 인증을 위해 생성된 데이터 삭제
- enrfSign_clearDs();
- }
- return bCheck;
- }
- /****************************************************************************************
- * Argument : 1. pUid : User ID
- 2. pReload : User ID 초기화 여부
- * Description : 전자 인증 실행 (통합기록조회용)
- ****************************************************************************************/
- function enrfSign_GetSignDataArray(pUid, pReload) {
- var ls_enrinptsavetime = lf_getEMRHardCDList("Y", 450, 3);
- var ll_enrinptsavetime = utlf_isNull(ls_enrinptsavetime) ? 0 : parseInt(ls_enrinptsavetime) * -1;
- var mstatecheck = false;
- var mSignData1 = "";
- var mSignedData = "";
- var mSignData3 = "";
- var mViewData4 = "";
- var mViewData5 = "";
-
- this.errcode[1] = 300;
- try {
- this.errcode[1] = 310;
- mSignData3 = this.getsigndata(3); // 변경 xml 데이터저장패턴으로...
-
- this.errcode[1] = 320;
- mViewData4 = this.getsigndata(4); // 전자서명할 원문 데이터
-
- this.errcode[1] = 340;
- mSignData1 = this.getsigndata(1); // 변경 xml 데이터저장패턴으로...
-
- this.errcode[1] = 350;
- mViewData5 = this.getsigndata(5); // 전자서명할 원문 데이터
-
- this.errcode[1] = 360;
- // -----------------------(2010.08.18 센터)start--------------------
- //운영서버는 인증모듈 타고 그외서버는 인증모듈제외
- // 리허설로 인한 주석 해제 ( 2015.03.27 )
- } catch(E){
- sysf_messageBox("ENR 인증모듈 작업에 문제가 있습니다. 관리자에게 문의하세요 Code(" + this.errcode + ")...\n\n" + E, "E");
- return mstatecheck;
- }
- //if(sysf_getSystemInfo("devsystem") != 'true' && sysf_getSystemInfo("devsystem") != '1') {
- if(this.certchkflag == "Y") {
- if(ll_enrinptsavetime < 0 && sysf_getGlobalVariable("enrinptsavetime") >= utlf_getCurrentDateTime().toDate("YYYYMMDD hhmmss").getAddDate(ll_enrinptsavetime, "m").getDateFormat("YYYYMMDD hhmmss")){
- mSignedData = this.makesigndata(mSignData1, pUid, false);
- }else{
- mSignedData = this.makesigndata(mSignData1, pUid, pReload); //전자서명 popup호출
- }
- } else {
- mSignedData = mSignData1; //전자서명 없이 저장처리할 경우 설정 부분
- }
- //} else {
- // mSignedData = mSignData1; //전자서명 없이 저장처리할 경우 설정 부분
- // }
- // -----------------------(2010.08.18 센터)start--------------------
-
- try {
- this.errcode[1] = 370;
- if (utlf_isNull(mSignedData)) {
- this.signedInfos[0] = mstatecheck;
- this.signedInfos[1] = mSignData1; // 인증할 데이터 정보
- this.signedInfos[2] = mSignedData;
- this.signedInfos[3] = mSignData3;
- this.signedInfos[4] = mViewData4;
- this.signedInfos[5] = mViewData5;
-
- return false;
- }
-
- this.errcode[1] = 0;
- mstatecheck = true;
- } catch(E){
- sysf_messageBox("ENR 인증모듈 작업에 문제가 있습니다. 관리자에게 문의하세요 Code(" + this.errcode + ")...\n\n" + E, "E");
- return mstatecheck;
- }
-
- this.signedInfos[0] = mstatecheck; // [0] : 인증성공여부
- this.signedInfos[1] = mSignData1; // [1] : 인증할 데이터 정보 (미기록 노드 제거된 정보)
- this.signedInfos[2] = mSignedData; // [2] : 공인인증 처리후 데이터
- this.signedInfos[3] = mSignData3; // [3] : 인증할 데이터 정보 (미기록 노드 제거전 원본 노드)
- this.signedInfos[4] = mViewData4; // [4] : [3]데이터(없는 노드 포함된)를 text 형태로 추출보기
- this.signedInfos[5] = mViewData5; // [5] : [1]데이터(없는 노드 제거된)를 text 형태로 추출보기
-
- if(mstatecheck == true){
- if(ll_enrinptsavetime < 0 && sysf_getGlobalVariable("enrinptsavetime") >= utlf_getCurrentDateTime().toDate("YYYYMMDD hhmmss").getAddDate(ll_enrinptsavetime, "m").getDateFormat("YYYYMMDD hhmmss")){
-
- }else{
- sysf_setGlobalVariable("enrinptsavetime", utlf_getCurrentDateTime());
- }
- }
-
- return mstatecheck;
- }
- /****************************************************************************************
- * Argument : 1. pFlag : (1) xml 구조 return
- : (2) string 구조 return
- 2. sParStr : parsing될 데이터
- 3. pMode : 환자/사용자 정보 구분
- 4. bNullFlag : null value node 포함 여부
- * Description : 환자 상단정보 (TopInfo), 사용자 세션정보 (SessionInfo) 생성
- ****************************************************************************************/
- function enrfSign_SetTagInfos(pFlag, sParStr, pMode, bNullFlag){
-
- switch(pFlag){
- case 1: // xml구조
- var sHead = "";
- var sHeadEnd = "";
- var sAttrStr = ' name=';
-
- if(pMode == "TopInfo"){
- sHead = lgv_tabSpace + '<PatientInfo' + sAttrStr + "\"" + this.ATTRNAME_PATINFO + "\"" + '>\n';
- sHeadEnd = lgv_tabSpace + '</PatientInfo>' + '\n';
- }
- else if(pMode == "SessionInfo"){
- sHead = lgv_tabSpace + '<SessionInfo' + sAttrStr + "\"" + this.ATTRNAME_SESSIONINFO + "\"" + '>\n';
- sHeadEnd = lgv_tabSpace + '</SessionInfo>';
- }
- var sXML ="";
- sXML += sHead;
- var sGab = lgv_tabSpace + lgv_tabSpace;
-
- var arrParseInfo = sParStr.split("▩");
-
- for (var iCnt =0; iCnt < arrParseInfo.length; iCnt++){
- m_KeyName = arrParseInfo[iCnt].split("▦");
- if (!utlf_isNull(m_KeyName)){
- sXML+= sGab + '<' + m_KeyName[0] + sAttrStr + "\"" + m_KeyName[1] + "\"" + '>'
- + (utlf_transNullToEmpty(this.getcommoninfo(pMode, m_KeyName[0], iCnt)))
- //+ "테스트중" + iCnt
- + '</' + m_KeyName[0] + '>\n';
- }
- }
-
- sXML += sHeadEnd;
- break;
-
- case 2: // str 구조
- var sHead = "";
-
- if(pMode == "TopInfo"){
- sHead = this.ATTRNAME_PATINFO + '\n';
- }
- else if(pMode == "SessionInfo"){
- sHead = this.ATTRNAME_SESSIONINFO + '\n';
- }
- var sXML = "";
- sXML += sHead;
- var sGab = lgv_tabSpace;
-
- var arrParseInfo = sParStr.split("▩");
-
- for (var iCnt =0; iCnt < arrParseInfo.length; iCnt++){
- m_KeyName = arrParseInfo[iCnt].split("▦");
- if (!utlf_isNull(m_KeyName)){
-
- if(!bNullFlag && utlf_isNull(this.getcommoninfo(pMode, m_KeyName[0], iCnt)))
- continue;
- sXML+= sGab + m_KeyName[1] + ": "
- + utlf_transNullToEmpty(this.getcommoninfo(pMode, m_KeyName[0], iCnt));
- //+ "테스트중" + iCnt
- if(iCnt < arrParseInfo.length-1) sXML += '\n';
-
- }
- }
- break;
- }
-
- return sXML;
- }
-
- /****************************************************************************************
- * Argument : 1. sType : (1) 인증할 데이터 정보 (미기록 노드 제거된 정보)
- (3) 인증할 데이터 정보 (미기록 노드 제거 전 원본 정보)
- (4) 데이터(없는 노드 포함된)를 text 형태로 추출보기
- (5) 데이터(없는 노드 제거된)를 text 형태로 추출보기
- * Description : 전체 인증 정보 (SignData) 생성
- ****************************************************************************************/
- function enrfSign_makeSignInfo(sType){
-
- if(utlf_isNull(sType)) return;
-
- var sAttrStr = ' name=';
- var sTotalHead = '<SignData>\n';
- var sTotalHeadEnd = '\n</SignData>';
-
- var sSignHead = lgv_tabSpace + '<SignInfo' + sAttrStr + "\"" + this.ATTRNAME_SIGNINFO + "\"" + '>\n';
- var sSignHeadEnd = lgv_tabSpace + '</SignInfo>\n';
-
- var sXML = "";
-
- if(sType < 4) sXML += sTotalHead;
-
- // patinfo
- sXML += utlf_transNullToEmpty(form.all[this.DSNAME_BASICINFO].getColumn(0, "taginfo" + sType));
-
- // signinfo
- if(sType < 4) sXML += sSignHead;
- else sXML += this.ATTRNAME_SIGNINFO + '\n';
-
- for(var i=0; i<form.all[this.DSNAME_SIGNINFO].rowcount; i++){
- sXML += utlf_transNullToEmpty(form.all[this.DSNAME_SIGNINFO].getColumn(i, "taginfo" + sType));
- }
- if(sType < 4) sXML += sSignHeadEnd;
-
- // sessioninfo
- sXML += utlf_transNullToEmpty(form.all[this.DSNAME_BASICINFO].getColumn(1, "taginfo" + sType));
-
- if(sType < 4) sXML += sTotalHeadEnd;
-
- return sXML;
- }
-
- /****************************************************************************************
- * Argument : 1. sDepth : xml path (Array or String)
- 2. sSaveXML : dataset.saveXML() return data (Array or String)
- 3. flagCData : CData 사용여부(false:미사용, 그외:사용)
- * Description : 데이터 정보 (SignInfo) 생성
- ****************************************************************************************/
- function enrfSign_addSignInfoTotal(sDepth, sSaveXML, flagCData){
- if( utlf_isNull(flagCData) ){
- flagCData = true;
- }
-
- //try{
- form.all[this.DSNAME_SIGNINFO].enableevent = false;
- if(sSaveXML instanceof Array){
- for(var i in sSaveXML){
- dsf_addRow(form.all[this.DSNAME_SIGNINFO],
- [{col:"taginfo1", val:this.addnodes(1, false, sDepth[i], sSaveXML[i], false, flagCData)} // 인증할 데이터 정보 (미기록 노드 제거된 정보)
- ,{col:"taginfo3", val:this.addnodes(1, false, sDepth[i], sSaveXML[i], true, flagCData)} // 인증할 데이터 정보 (미기록 노드 제거 전 원본 정보)
- ,{col:"taginfo4", val:this.addnodes(2, false, sDepth[i], sSaveXML[i], true, flagCData)} // [3]데이터(없는 노드 포함된)를 text 형태로 추출보기
- ,{col:"taginfo5", val:this.addnodes(2, false, sDepth[i], sSaveXML[i], false, flagCData)}]); // [1]데이터(없는 노드 제거된)를 text 형태로 추출보기
- }
- }
- else{
- dsf_addRow(form.all[this.DSNAME_SIGNINFO],
- [{col:"taginfo1", val:this.addnodes(1, false, sDepth, sSaveXML, false, flagCData)} // 인증할 데이터 정보 (미기록 노드 제거된 정보)
- ,{col:"taginfo3", val:this.addnodes(1, false, sDepth, sSaveXML, true, flagCData)} // 인증할 데이터 정보 (미기록 노드 제거 전 원본 정보)
- ,{col:"taginfo4", val:this.addnodes(2, false, sDepth, sSaveXML, true, flagCData)} // [3]데이터(없는 노드 포함된)를 text 형태로 추출보기
- ,{col:"taginfo5", val:this.addnodes(2, false, sDepth, sSaveXML, false, flagCData)}]); // [1]데이터(없는 노드 제거된)를 text 형태로 추출보기
- }
- form.all[this.DSNAME_SIGNINFO].enableevent = true;
- //} catch(E){
- // sysf_messageBox("Sign.addnoode()의 파라미터를 확인하십시오.", 'E');
- //}
-
- }
- /****************************************************************************************
- * Argument : 1. sDepth : xml path (Array)
- 2. sSaveXML : dataset.saveXML() return data (Array)
- 3. flagCData : CData 사용여부(false:미사용, 그외:사용)
- * Description : 데이터 정보 (SignInfo) 생성
- ****************************************************************************************/
- function enrfSign_addSignInfoTotalSet(sDepth, sSaveXML, flagCData){
- if( utlf_isNull(flagCData) ){
- flagCData = true;
- }
-
- //try{
- form.all[this.DSNAME_SIGNINFO].enableevent = false;
- dsf_addRow(form.all[this.DSNAME_SIGNINFO],
- [{col:"taginfo1", val:this.addnodes(1, true, sDepth , sSaveXML, false, flagCData)} // 인증할 데이터 정보 (미기록 노드 제거된 정보)
- ,{col:"taginfo3", val:this.addnodes(1, true, sDepth , sSaveXML, true, flagCData)} // 인증할 데이터 정보 (미기록 노드 제거 전 원본 정보)
- ,{col:"taginfo4", val:this.addnodes(2, true, sDepth , sSaveXML, true, flagCData)} // [3]데이터(없는 노드 포함된)를 text 형태로 추출보기
- ,{col:"taginfo5", val:this.addnodes(2, true, sDepth , sSaveXML, false, flagCData)}]); // [1]데이터(없는 노드 제거된)를 text 형태로 추출보기
- form.all[this.DSNAME_SIGNINFO].enableevent = true;
- //} catch(E){
- // sysf_messageBox("Sign.addnoodeset()의 파라미터를 확인하십시오.", 'E');
- //}
-
- }
- /****************************************************************************************
- * Argument : 1. pFlag : (1) xml 구조 return
- : (2) string 구조 return
- 2. bAppendFlag : nodeset append 여부
- 2. sDepth : xml path
- 3. sSaveXML : dataset.saveXML() return data
- 4. bNullFlag : null value node 포함 여부
- * Description : 데이터 정보 (SignInfo) 생성
- ****************************************************************************************/
- var sBefDepthNm;
- var sAtfDepthNm;
- function enrfSign_addSignInfo(pFlag, bAppendFlag, sDepth, sSaveXML, bNullFlag, flagCData){
-
- if(utlf_isNull(sDepth)) return;
-
- if(utlf_isNull(sSaveXML)) return;
-
- var ds_enrsign_tempinfo = new Dataset;
- ds_enrsign_tempinfo.name = this.DSNAME_SIGNINFO_TEMP;
- form.addChild(this.DSNAME_SIGNINFO_TEMP, ds_enrsign_tempinfo);
-
- var sXML ="";
- var sGab = "";
-
- var sColumInfo = "";
- switch (bAppendFlag){
- case true: // addnodeset (서로 다른 depth의 dataset n개 이상 add할 경우)
-
- sBefDepthNm = "";
- sAtfDepthNm = "";
-
- var depth = sDepth;
-
- var sSttDepth = enrfSign_signDepth(pFlag, false, depth[0], "S");
- sXML += sSttDepth;
-
- // -----------------------------------------------------------
- //실질 컬럼정보생성
- var nArray, nLen;
- for(var i in sSaveXML){
-
- nArray = depth[i].split("/");
- nLen = nArray.length;
-
- sGab = enrfSign_getGab(pFlag, (utlf_isNull(nArray[nLen-1]) ? nLen-2 : nLen-1));
-
- ds_enrsign_tempinfo.clearData();
- ds_enrsign_tempinfo.loadXML(sSaveXML[i]);
-
- if(i>0) sBefDepthNm = depth[i-1].split("/")[nLen-2];
- if(i<sSaveXML.length-1) sAtfDepthNm = depth[Number(i)+1].split("/")[nLen-2];
- else sAtfDepthNm = "";
-
- if(sBefDepthNm != nArray[nLen-2]) sXML += enrfSign_signDepth(pFlag, bAppendFlag, depth[i], "S");
- sColumInfo = enrfSign_signColumnInfo(pFlag,ds_enrsign_tempinfo,nArray[nLen-1],sGab, bNullFlag, flagCData);
- sXML += sColumInfo;
- //if(sAtfDepthNm != "" && sAtfDepthNm != nArray[nLen-2]) sXML += enrfSign_signDepth(pFlag, bAppendFlag, depth[i], "E");
- // sAtfDepthNm 가 없는 마지막일경우 endflag 누락문제 차후 확인 필요
- // sAtfDepthNm != "" 조건삭제에 따른 문제 발생 시 MMR03700 마취기록지 인증저장기록 데이터 확인 필요
- if(sAtfDepthNm != nArray[nLen-2]) sXML += enrfSign_signDepth(pFlag, bAppendFlag, depth[i], "E");
-
- }
-
- // -----------------------------------------------------------
-
- if(pFlag == 1){
-
- var sEndDepth = enrfSign_signDepth(pFlag, false, depth[0], "E");
- sXML += sEndDepth;
- }
- break;
- case false: // addnode
- var depth = sDepth;
- var sSttDepth = enrfSign_signDepth(pFlag, bAppendFlag, depth, "S");
-
- sXML += sSttDepth;
-
- // -----------------------------------------------------------
- //실질 컬럼정보생성
-
- var nArray = depth.split("/");
- var nLen = nArray.length;
- sGab = enrfSign_getGab(pFlag, nLen-1);
-
- ds_enrsign_tempinfo.clearData();
- ds_enrsign_tempinfo.loadXML(sSaveXML);
-
- sColumInfo = enrfSign_signColumnInfo(pFlag,ds_enrsign_tempinfo,nArray[nLen-1],sGab, bNullFlag, flagCData);
-
- sXML += sColumInfo;
-
- // -----------------------------------------------------------
-
- if(pFlag == 1){
- var sEndDepth = enrfSign_signDepth(pFlag, bAppendFlag, depth, "E");
- sXML += sEndDepth;
- }
-
- break;
- }
-
- var rtn = form.all[this.DSNAME_SIGNINFO_TEMP];
- if(rtn) {
- var objDs = form.removeChild(this.DSNAME_SIGNINFO_TEMP);
- delete objDs;
- objDs = null;
- }
-
- return sXML;
- }
-
-
- /****************************************************************************************
- * Argument :
- * Description : depth 생성
- ****************************************************************************************/
- function enrfSign_signDepth(pFlag, bAppendFlag, sDepth, gb){
- if(utlf_isNull(sDepth)) return "";
- var nArray = sDepth.split("/");
- if(nArray.length == 0) return "";
-
- var sDepthInfo = "";
- var sGab="";
- if(gb == "S"){
- for(var i=1; i<nArray.length-1; i++){
- if(bAppendFlag && i==1) continue;
- if(bAppendFlag && utlf_isNull(nArray[nArray.length-1])) continue;
- sGab = enrfSign_getGab(pFlag,i);
- if(pFlag == 1) sDepthInfo += sGab +'<'+ nArray[i] +'>\n' ;
- else if(pFlag == 2) sDepthInfo += sGab + 'xml:' + nArray[i] +'\n' ;
- }
-
- }else{
- //alert(nArray + " : " + bAppendFlag + " : " + sDepth + " : " + gb);
- for(var i=nArray.length-2; i>0; i--){
- if(bAppendFlag && i==1) continue;
- if(bAppendFlag && utlf_isNull(nArray[nArray.length-1])) continue;
- sGab = enrfSign_getGab(pFlag,i);
- if(pFlag == 1) sDepthInfo += sGab + '</'+ nArray[i] +'>\n';
- }
- }
- return sDepthInfo;
- }
-
- /****************************************************************************************
- * Argument :
- * Description : 간격 (공백) 생성
- ****************************************************************************************/
- function enrfSign_getGab(pFlag, nLength){
-
- if(utlf_isNull(nLength)) return "";
- nLength = nLength+1;
-
- var nGab;
- if(pFlag == 1) nGab = lgv_tabSpace;
- else nGab = "";
-
- for(var i=0; i<nLength-1; i++){
- nGab += lgv_tabSpace;
- }
- return nGab;
- }
-
- //
- /****************************************************************************************
- * Argument :
- * Description : 인증 dataset 정보로 xml data 생성 (column)
- ****************************************************************************************/
- function enrfSign_signColumnInfo(pFlag, ds_sign,sEndDepth,sGab, bNullFlag, flagCData){
-
- var colCount = ds_sign.colcount;
- if (colCount == 0 ) return "";
-
- var rowCount = ds_sign.rowcount;
- if (rowCount == 0 ) return "";
-
- var objColumnInfo ="";
- var strColID = "";
-
- for(var i=0; i<ds_sign.rowcount; i++){
-
- if(!utlf_isNull(sEndDepth)){
- if(pFlag==1) objColumnInfo += sGab + '<'+sEndDepth + '>\n';
- else if(pFlag==2) objColumnInfo += sGab + 'xml:' + sEndDepth + '\n';
- }
-
- for(var ii=0; ii<colCount; ii++){
-
- strColID = ds_sign.getColID(ii);
- var tmp = ds_sign.getColumn(i,strColID);
-
- if(!bNullFlag && utlf_isNull(ds_sign.getColumn(i,strColID)))
- continue;
- if( ds_sign.getColumn(i,strColID) == "[object Binary]" )
- continue;
-
-
- if(pFlag==1){
- //CData 사용여부(false:미사용, 그외:사용)
- if( !utlf_isNull(flagCData) && flagCData == false ){
- objColumnInfo += sGab+ lgv_tabSpace + '<'+ strColID + '>' + utlf_transNullToEmpty(ds_sign.getColumn(i,strColID)) + '</'+strColID+'> \n';
- }else{
- objColumnInfo += sGab+ lgv_tabSpace + '<'+ strColID + '>' + enrfSign_setCDATA(utlf_transNullToEmpty(ds_sign.getColumn(i,strColID)), strColID) + '</'+strColID+'> \n';
- //objColumnInfo += sGab+ lgv_tabSpace + '<'+ strColID + '>' + enrfSign_setCDATA(utlf_trim(utlf_transNullToEmpty(ds_sign.getColumn(i,strColID)))) + '</'+strColID+'> \n';
- }
- }else if(pFlag==2){
- objColumnInfo += sGab+ lgv_tabSpace + 'xml:' + strColID + ': ' + utlf_transNullToEmpty(ds_sign.getColumn(i,strColID)) + '\n';
- }
- }
-
- if(!utlf_isNull(sEndDepth)){
- if(pFlag==1) objColumnInfo += sGab + '</' + sEndDepth + '>\n';
- //else if(pFlag==2) objColumnInfo += sGab + 'xml:' + sEndDepth + '\n';
- }
- }
-
- return objColumnInfo;
- }
-
- /****************************************************************************************
- * Argument :
- * Description : 인증 dataset 정보 clear
- ****************************************************************************************/
- function enrfSign_clearDs(){
-
- if(!utlf_isNull(form.all[this.DSNAME_BASICINFO])) form.all[this.DSNAME_BASICINFO].clearData(); // 환자, 사용자 정보
- if(!utlf_isNull(form.all[this.DSNAME_SIGNINFO])) form.all[this.DSNAME_SIGNINFO].clearData(); // 데이터 정보
-
- }
- function enrfSign_createDs(sDsName){
-
- //var objParam = utlf_args2Object(sParam);
-
- if(form.all[sDsName] != null){
- form.all[sDsName].clear();
- }else{
- var objDs = new Dataset;
- form.addChild(sDsName, objDs);
- objDs.name = sDsName;
- }
- return objDs;
-
- }
- function enrfSign_setCDATA(sVal, sCol)
- {
- var sRetVal = sVal; //컬럼값
- var sRetCol = sCol; //컬럼네임
- var domParser = new DomParser;
- var sTmpChkXmlType = domParser.parseFromString(sRetVal);
- var test = utlf_isSearchString(sRetVal, "</");
- var test1 = utlf_isSearchString(sRetVal, "/>");
-
- //하위없는 컬럼은 바로 CDATA처리
- //특수문자가 있으면서 컬럼 데이터가 XML TYPE 아닌 경우
- if(lf_checkSpecialChar(sVal) && sTmpChkXmlType == null && !utlf_isNull(sVal) && test == false && test1 == false)
- {
- sRetVal = "<![CDATA[" + sRetVal + "]]]]><![CDATA[>"; //cdata 처리
- }
- else if(sRetCol == "readrslt" || sRetCol == "inter" || sRetCol == "inter2" || sRetCol == "comments")
- {
- sRetVal = "<![CDATA[" + sRetVal + "]]]]><![CDATA[>"; //cdata 처리
- }
-
- return sRetVal;
- }
- /****************************************************************************************
- * Argument : lf_convertDsToXml (biz module 사용 - com/commodulexp/SSZFM01001.xjs 참조)
- * Description : 데이터 정보 (SignInfo) 생성
- ****************************************************************************************/
- function enrfSign_addSignInfo_dstoxml(sParamObjArr, lgv_sXML){
-
- //try{
- var sOptionObj = new Object(); // option용
-
- form.all[this.DSNAME_SIGNINFO].enableevent = false;
- sOptionObj.nullNodeYN = 'N';
- var sXML_DelNoVal = lf_convertDsToXml(sParamObjArr, lgv_sXML, sOptionObj); // 값 없는 노드 제거 후
-
- if('error' == sXML_DelNoVal) throw "";
- sXML_DelNoVal = lf_delLineBreakChr(sXML_DelNoVal);
-
-
- sOptionObj.nullNodeYN = 'Y';
- var sXML_All = lf_convertDsToXml(sParamObjArr, lgv_sXML, sOptionObj); // 값 없는 노드 제거 전
-
- if('error' == sXML_All) throw "";
- sXML_All = lf_delLineBreakChr(sXML_All);
-
-
- dsf_addRow(form.all[this.DSNAME_SIGNINFO],
- [{col:"taginfo1", val:sXML_DelNoVal} // 인증할 데이터 정보 (미기록 노드 제거된 정보)
- ,{col:"taginfo3", val:sXML_All} // 인증할 데이터 정보 (미기록 노드 제거 전 원본 정보)
- ,{col:"taginfo4", val:""} // [3]데이터(없는 노드 포함된)를 text 형태로 추출보기 - 추후 구현 필요
- ,{col:"taginfo5", val:""}]); // [1]데이터(없는 노드 제거된)를 text 형태로 추출보기 - 추후 구현 필요
-
- form.all[this.DSNAME_SIGNINFO].enableevent = true;
- //} catch(E){
- // sysf_messageBox("Sign.addnoode_dstoxml()의 파라미터를 확인하십시오.", 'E');
- //}
-
- }
- // 개행문자 제거 (첫 idx)
- function lf_delLineBreakChr(sStr){
-
- if(utlf_isNull(sStr)) return sStr;
-
- var sTmpStr = sStr.charAt(0);
-
- if(sTmpStr == '\n' ) sStr = (""+sStr).substring(1, sStr.length);
-
-
- return sStr;
- }
- /***************************************************************************************************
- * Function : lf_getEMRHardCDList
- * Description : 조회된 하드코드 리스트를 조회한다.
- * Argument : sOption [Stirng : Y/값을 리턴한다, N/데이터셋을 반환한다.]
- * : sHardCdNo [String : 하드코드 번호]
- * : sRtnValue [String : 변환형태 Flag]- sOption이 "Y"일 때만 관련있음.
- * : oDsRsltRef [Dataset : 대상 데이타셋]
- * return type : option = "N" 일 경우: 데이터셋 복사
- "Y" 일 경우: sRtnValue 변환형태플래그 [0:리턴값 반환하지 않음 (하드코드 값이 여러개일 때 선택, 1:hardcdno를 리턴, 2:hardcodenm 을 리턴
- 3:hardcd 를 리턴 4:hardcdnm를 리턴, 5:cdseqno를 리턴, 9:hardcd+ "|" + hardcdnm + "|" + cdseqno 형태로 리턴]
- * Creator :
- * ex) : lf_getEMRHardCDList("N", 60, null, oDsRsltRef);
- var rtnHardcd = lf_getEMRHardCDList("Y", 60, 1, null);
- ***************************************************************************************************/
- function lf_getEMRHardCDList(sOption, sHardCdNo, sRtnValue, oDsRsltRef)
- {
- var oDsHardCd = agv_objAppTopPath.form.dv_orderbasicinfo.lf_getHardcodeTable(sHardCdNo);
- var sHardCd;
- var sHardCdNm;
- var nCdSeqNo;
- if (!utlf_isNull(oDsHardCd)) {
- if (sOption == "Y") {
- try {
- var sHardCdNo = oDsHardCd[0].hardcdno;
- var sHardCodeNm = oDsHardCd[0].hardcodenm;
- sHardCd = oDsHardCd[0].hardcd;
- sHardCdNm = oDsHardCd[0].hardcdnm;
- nCdSeqNo = oDsHardCd[0].cdseqno;
- }
- catch(e) {
- trace("lf_getHardCDList Error : " + e);
- }
- if (sRtnValue == 1) {
- return sHardCdNo;
- }
- else if (sRtnValue == 2) {
- return hardcodenm;
- }
- else if (sRtnValue == 3) {
- return sHardCd;
- }
- else if (sRtnValue == 4) {
- return sHardCdNm;
- }
- else if (sRtnValue == 5) {
- return nCdSeqNo;
- }
- else if (sRtnValue == 9) {
- return sHardCd+ "|" + sHardCdNm + "|" + nCdSeqNo;
- }
- }
- else {
- var destListLen = oDsRsltRef.rowcount;
- // 한번이라도 복사된 내용이 있으면 다시 안하도록 수정 2011. 01.20 김영학
- if (destListLen < 1 ) {
- if (!utlf_isNull(oDsHardCd)) {
- // 하드코드 Object 갯수 만큼 loop 작업
- for (var i = 0; i < oDsHardCd.length; i++)
- {
- var nAddRow = oDsRsltRef.addRow();
- // Object의 property 갯수 만큼 loop 작업을 하면 Dataset의 컬럼생성 및 Row 값 설정
- for (var j in oDsHardCd[i])
- {
- oDsRsltRef.addColumn(j, "STRING");
- oDsRsltRef.setColumn(nAddRow, j, oDsHardCd[i][j]);
- }
- }
- oDsRsltRef.applyChange();
- }
- }
- }
- }
- }
- ]]></Script>
|