11.XPLATFORM을 이용하여 Application개발시 고려사항

해당 문서의 내용은 XPLATFORM을 이용하여 Application 개발시 기본적으로 알고 있어야 할 지식을 정리하였습니다. 따라서 고객사의 상황에 따라 설정값 등 구현방법은 달라질 수 있으므로 개발시 참고용으로 사용하시기 바랍니다.

11.1xadl/Style/Themes/TypeDefinition

11.1.1XPLATFORM STYLE 적용 순서

XPLATFORM에서 STYLE은 테마, CSS파일, Properties, 스크립트에서 지정을 할 수가 있는데 이때 적용되는 순서에 대하여 설명합니다
  1. Xtheme 값

  2. ADL에 CSS 설정된 값

  3. Form 에 CSS 설정된 값

  4. Properties 에 설정된 값

  5. Script에서 속성값 변경

반영되는 순서는 위와 같고, 
각 파일에 같은 항목이 있을 경우는 아래에 있는 값이 적용됩니다.
즉, xtheme에 Button에 대한 정의가 2개 이상 있을때 위에서부터 차례로 적용되어 제일 아래에 있는 값이 overwrite 되는 형식으로 적용됩니다.
ex)
Button
{ align : left top;
  visible : true;
}
Button
{ visible : false; }

위와 같이 같은 css 2개가 연달아 있는 경우 최종적으로 
Button
{ 
  align : left top;
  visible : false;
}
로 적용이 됩니다.
Style 적용순서가 어떻게 되나요?

11.1.2XPLATFORM의 Definition 의 버전정보 표현방법

XPLATFORM의 기본 TypeDefinition의 버전은 1000으로 되어 있는데 버전 변경시에는 각 모듈(dll 등)의 파일버전을 기술해 주면 됩니다.

예) CyActiveX.dll : 2009,10,19,1

그림 11-120120501_155354125_xx_typedefine

TypeDefinition의 버전정보 표현방법

11.1.3xadl 파일에서 참조되는 값을 동적변경방법

xadl 파일에서 참조되는 값들을 동적으로 변경하고자 할때는 xadl을 jsp 로 감싸서 변수처리 하실 수 있습니다.
<%@ page contentType="text/xml; charset=utf-8" %><%
             String path = request.getParameter("a");
%><?xml version="1.0" encoding="utf-8"?>
<ADL version="1.0">
<TypeDefinition url="default_typedef.xml"/>
<GlobalVariables url="globalvars.xml"/>
<Application id="test_20100623" codepage="utf-8" language="Korean" themeid="default.xtheme"
 loginformurl="" loginformstyle="" windowopeneffect="" windowcloseeffect="" version=""
 onload="application_onload" filesecurelevel="all" networksecurelevel="all">
<Layout>
<MainFrame id="mainframe" title="maintitle" defaultfont="" resizable="true" showtitlebar="true" 
showstatusbar="true" position="absolute 0 0 1024 768" titletext="test" onactivate="MainFrame_onactivate">
<VFrameSet id="VFrameSet0" separatesize="125,*">
<Frames>
<ChildFrame id="ChildFrame0" showtitlebar="false" formurl="Base::top.xfdl" position="absolute 0 0 0 125"/>
</Frames>
</VFrameSet>
</MainFrame>
</Layout>
</Application>
<Script type="xscript4.0"><![CDATA[
function application_onload(obj:Object, e:LoadEventInfo)
{
             var a = "<%=path%>";
             alert(a);
}
]]></Script>
</ADL>
사용자에 따라 xadl에서 참조되는 값이 다른 경우 처리 방법은?

11.1.4TypeDefinition에 정의된 Service 정보 확인

XPLATFORM 환경파일 TypeDefinition에 정의된 Service정보를 얻는 방법에 대해 기술합니다.

설명

그림 11-220130116_114508638_tyoedefinition

소스

for(var i=0; i<application.services.length; i++)
{
    trace(application.services[i] + " : " + application.services[i].url);
}
[ 결 과] 
[object Service] : ./Base/
uxs (1108): [object Service] : http://211.241.150.135:8080/Next_JSP/CS_XPLATFORM_MGR/
uxs (1108): [object Service] : ./script_lib/
uxs (1108): [object Service] : ./UserComponent
uxs (1108): [object Service] : ./TabPage/
uxs (1108): [object Service] : ./Grid/
uxs (1108): [object Service] : ./ListBox/
uxs (1108): [object Service] : ./Animation
uxs (1108): [object Service] : ./CheckBox
uxs (1108): [object Service] : ./Splitter
uxs (1108): [object Service] : ./Dataset
uxs (1108): [object Service] : ./Excel/
uxs (1108): [object Service] : ./Shape/
uxs (1108): [object Service] : ./Calendar
uxs (1108): [object Service] : ./Combo
uxs (1108): [object Service] : ./Radio
uxs (1108): [object Service] : ./PopupDiv
uxs (1108): [object Service] : ./Div
uxs (1108): [object Service] : ./Form
uxs (1108): [object Service] : ./script
uxs (1108): [object Service] : ./ProgressBar
uxs (1108): [object Service] : ./Spin
uxs (1108): [object Service] : ./Button
TypeDefinition에 정의된 Services정보를 얻을 수 있나요?

11.2Cache기능

11.2.1XPLATFORM의 디폴트 Cache방식

XPLATFORM에서 사용하는 디폴트 Cache방식에 대해 기술합니다.

UxStudio의 Cache설정방법

그림 11-320130116_131753089_xp_cachetype

XPLATFORM의 Cache를 설정하지 않을 경우 디폴트 Cache방식은 dynamic을 사용합니다.

참고사항

UxStudio에서 Quick등을 통해 실행시에는 none으로 동작을 하지만 실제 XPLATFORM환경에서 실행시
디폴트 Cache방식은 dynamic를 사용하므로 간혹 UxStudio와 서버에 반영하여 실행시 데이터 조회시
Transaction이 한번만 실행되는 경우가 발생합니다.
화면의 경우 dynamic으로 설정해도 문제는 되지 않으나, 서비스 부분은 반드시 Cache를 none으로 설정을 해주어야 합니다.
Cache설정방법
XPLATFORM 디폴트 Cache가 어떻게 되나요?

11.3XPLATFORM 통신

11.3.1통신방식

XPLATFORM의 통신방식은 무엇인가요?

11.3.2XPLATFORM 통신시 사용자가 ESC키를 눌러 통신을 중단시키는 것을 막는방법

통신시 사용자가 ESC키를 눌러 통신을 중단시키는것을 막는 방법입니다.

구현방법

ADL의 onerror 구현

XPLATFORM Project를 오픈 한 후 ADL의 onerror에서 아래아 같이 기술해 주시면 됩니다.

소스 예)
ADL의 onerror에서 아래와 같이 하여 주시면 됩니다. 
function application_onerror(obj:Object, e:ErrorEventInfo)
{
    if( e.errorcode == "-2147418039"  ){  //ESC키를 눌렀을때 들어오는 ErrorCode
        return true;
    } 
}

참고사항

XPLATFORM에서통신시 사용자가 ESC키를 눌러 통신을 중단시키는것을 막는 방법

11.4XPLATFORM 확장자(xdemo.xadl, globalvars.xml, default_typedef.xml) 등을 변경시 참고사항

XPLATFORM에서 사용하는 확장자 xadl, xml등의 확장자를 반드시 동일하게 사용할 필요는 없습니다. 
즉 확장자를 jsp형태로 사용이 가능합니다. 
 
단 XPLATFORM이 지원하는 데이터 포멧 형태를 유지해야 합니다.

11.4.1주의사항

<?xml version="1.0" encoding="utf-8"?>
<FDL version="1.2">
  <TypeDefinition url="..\..\default_typedef.xml"/> 
    // 확장가 변경되면 모든 소스 변경발생
  <Form id="Button_Basic" classname="Button_Basic" inheritanceid="" cachelevel="" 
      position="absolute 0 0 761 430" version="" titletext="New Form">
    <Layout>
      <Static id="Static05" text="Binding" class="sta_WF_subtitle" position="absolute 15 15 298 30"/>
      <Grid id="Grid01" taborder="1" binddataset="Dataset00" autofittype="col" position="absolute 27 42 170 140">
        <Formats>
              … 중략…
XPLATFORM의 확장자 변경이 가능한가?

11.5IE브라우저에 임베드시 ActiveX 최대 크기

IE브라우저에 XPLATFORM을 임베드 하는 경우 ActiveX 크기는 최대 IE임베디드시 height를 33000이상으로 커지지가 않습니다
사용 예)
//Xplatform소스
div_workMain.position.height = 
div_workMain.Edit00.value;
this.position.height = 35000;  //<- 이 부분 
this.resetScroll();
application.userNotify("1",div_workMain.Edit00.value);
해당 내용은 XPLATFORM뿐 아니라, ActiveX형태의 컴포넌트는 제약을 가집니다
ActiveX 최대 크기가 33000이상 커지지 않습니다.

11.6XPLATFORM 소스 컴파일(Compiled XML)방법

XPLATFORM으로 개발된 Application을 운영시 소스 1차 보안 및 사이즈를 최소화 하기 위한 방법으로
컴파일 기능을 통해 작업이가능합니다.  

컴파일시 주의사항 및 작업방법을 기술합니다.

11.6.1작성된 Application 소스 컴파일을 권장하는 이유

XPLATFORM 으로 개발된 화면 및 스크립트를 작성하게 되면 XML과 자바스크립트 형태로 소스가 생성됩니다.  

이때 웹브라우저를 통해 접근시 소스가 보이게 됩니다.

그림 11-420120501_163037676_xx_compiled_1

위와 같이 URL로 접근시 소스가 보이는 문제가 있을 수 있습니다. 
(해당 소스는 마이플랫폼 구조를 알아야 소스 파악을 할 수는 있으나, 
해당 소스 노출시 문제가 발생할 수 있는 부분에 대한 사전 보안작업이라 할 수 있겠습니다.)

11.6.2소스 최적화

소스를 컴파일하게 되는 경우 바이너리 압축형태의 소스가 컴파일 되므로 컴파일 작업을 하지 않았을 때 보다 최대 약 60~ 80% 가량 사이즈가 작게 됩니다.

소스 컴파일 전 사이즈 및 소스형태

그림 11-520120501_163111319_xx_compiled_2

소스 컴파일 후 사이즈 및 소스형태

그림 11-620120501_163136197_xx_compiled_3

11.6.3소스 컴파일 방법 (전체 프로젝트)

그림 11-720120501_163151477_xx_compiled_4

그림 11-820120501_163203279_xx_compiled_5

그림 11-920120501_163219231_xx_compiled_6

그림 11-1020120501_163241174_xx_compiled_7

그림 11-1120120501_163259390_xx_compiled_8

11.6.4XPLATFORM Client License 컴파일 방법

XPLATFORM Client License 파일은 기본 포멧이 XML로 표시으로 발급이 되고 있습니다. 
해당 파일 포멧일 컴파일 하는 방법에 대해 기술합니다.

컴파일 방법

그림 11-12license_compiled

그림 11-13license_compiled1

* Compile 된 output 폴더에 확인 시에 XPLATFORM_Client_License.xml 이 생성이 된것을 확인 하실수가 있습니다. (xml 파일을 open 해서 확인 시에 Comiled 된 것을 확인 하실 수가 있습니다.)

그림 11-14license_compiled

해당 파일에 내용은 기본 프로젝트명, 도메인, IP정보 등이 포함되어 있습니다.

11.6.5Compiled결과

Compiled 전

그림 11-15컴파일_전

Compiled 후

그림 11-16컴파일_후

11.6.6컴파일 작업시 주의사항

Application 소스 컴파일 방법
화면 소스 컴파일 방법
라이센스 컴파일
Client License컴파일 방법

11.7XPLATFORM에서 스크립트를 이용한 Application을 종료하는 방법

XPLATFORM Application을 종료하는 방법은 exit(); 메소들 통해 종료가 가능합니다.
//사용 예)
application.exit();
XPLATFORM 스크립트를 이용한 Application 종료방법

11.8부동소수점 처리방법

XPLATFORM에서 소수점 이하 계산시 부동소소점 처리방법에 대해 기술합니다.

11.8.1Runtime, Ajax의 차이점 (Runtime 전용처리)

Math.round(nNumber[, nFractionDigit]) : Runtime
Math.round(nNumber) : Runtime,Ajax
nFractionDigit > 0 : 주어진 소수점 자릿수에 반올림
nFractionDigit <= 0 : 0자리 소수점 자릿수에 반올림

11.8.2JavaScript의 Round 처리방식 (HTML5/Runtime 공용처리)

function roundDight(n, digits)
{
    if (digits >= 0) 
    {
        return parseFloat(n.toFixed(digits)); 
    } else {
        digits = Math.pow(10, digits); 
        var t = Math.round(n * digits); // digits;
        return parseFloat(t.toFixed(0));
    }
}
nFractionDigit >= 0 : 주어진 소수점 자릿수에 반올림
nFractionDigit < 0 : 정수부 자릿수에 반올림
function roundDight(n, digits)
{
    if (digits > 0) 
    {
        return parseFloat(n.toFixed(digits)); 
    } else {
        return parseFloat(n.toFixed(0)); 
    }
}
nFractionDigit > 0 : 주어진 소수점 자릿수에 반올림
nFractionDigit <= 0 : 0자리 소수점 자릿수에 반올림
소수점 계산시 값이 이상합니다.

11.9XPLATFORM 값 전달방법

11.9.1웹 쿠키

웹브라우저의 쿠키 정보를 XPLATFORM에 전달방법

웹브라우저를 실행하여 XPLATFORM을 실행하는 경우 브라우저 쿠키 정보를 전달해 주고자 하는 경우에 대해 설명합니다.

메소드 설명

addWebInfo()  : 현재 브라우저의 쿠키정보를 자동으로 globalvariable의 cookie변수에 추가해 주는 Method입니다.
//전용브라우저에 전달 
XPLauncher.addWebInfo();  //Launcher에 메소드 추가 
// 임베드 형태의 전달방법
XPlatformAX.addWebInfo(); // IE브라우저에 임베드시 메소드 추가 방법
소스 예)
document.cookie="CookieName=Value";
//document.cookie="CookieName=Value,ID=userid,NAME=name";
XPlatformAXCtrl.key = sKey;
XPlatformAXCtrl.xadl = Server_Path + "/XFInfo.xadl";
XPlatformAXCtrl.usewininet = true;
XPlatformAXCtrl.addWebInfo();      
//<--- run 실행전에 설정해 주어야 합니다. 
XPlatformAXCtrl.run();

XPLATFORM에서 값을 확인하고자 할 경우에는 alert(CookieName)를 통해 확인할 수 있습니다.

참고사항

addWebInfo를 통해 추가되는 Global변수의 usecookie속성은 true로 설정됩니다.

11.9.2XPLATFORM 실행중인 전용브라우저에 값 전달방법

IE브라우저에서 XPLATFORM을 전용브라우저로 실행시킨 후 실행중인 상태에 값을 전달하는 방법에 대해 기술합니다.

XLauncher 속성 onlyone

onlyone : 전용브라우저 실행을 한번만 실행하도록 설정하는 옵션

XPLATFORM의 onduplicateexcution 이벤트

//전용브라우져를 띄우는 html
XLauncher.globalvalue  = "GV_1:g='A',GV_2:g='B',GV_3:g='C',GV_4:g='D',GV_5:g='E',";
XLauncher.xadl = "C:\\aa.xadl";
XLauncher.onlyone = true;
XLauncher.download();
XLauncher.launch(); // 전용브라우저 구동
//adl의 onduplicateexcution 이벤트
최초 GlobalValue 값은 adl의 onload 이벤트에서 아래와 같이 GV_1, GV_2와 같이 꺼낼 수 있습니다.
 
function application_onduplicateexcution(obj:Object, e:DuplicateExcutionEventInfo)
{
    var temp =e.arguments; // GlobalValue의 Collection Property 입니다.
    alert("onduplicateexcution Event");
    for (var i=0; i <temp.length;i++){
        alert("::::::::::id:"+temp[i].name+"::::::::::value:"+temp[i].value);
    }
}
실행중인 Application에 값을 전달 할 수 있는가?

11.10엑스플랫폼에서 IIF, DECODE 사용방법

엑스플랫폼에서 IIF, DECODE 구문 사용 방법입니다.
엑스 플랫폼에서는 마이플랫폼의 IIF, DECODE 와 같은 메소드가 제공되지 않습니다.
이를 구현하기 위한 방법입니다.

11.10.1IIF 구문은 자바스크립트의 삼항연산자를 사용합니다.

(1) Condition은 조건을 나타내는 식이 온다.
(2) X는 조건이 참일 때 수행할 수식
(3) Y는 조건이 거짓일 때 수행할 수식
사용 예)
Column0 == “a” ? “a입니다.” : “a가 아닙니다”

11.10.2DECODE 구문은 자바스크립트의 삼항연산자를 중첩하여 사용합니다.

사용 예)
Column0 == “a” ? “a입니다.” : Column0 == “b” ? “b입니다.” : “a,b 모두 아닙니다.”

IIF문과 DECODE 역할을 하는 함수로 만들어 사용합니다.

/*******************************************************************************
 ★ 설명
    iif 비교 함수크
 ★ Parameter 
    1. arg0   : true / false 를 판단 하는 값 ( 예 : 1 == 2 )
    2. arg1   : true 일경우 리턴
    3. arg2   : false 일경우 리턴됨)
 ★ return 
    - true 일경우 arg1 리턴
    - false 일경우 arg1 리턴
 ******************************************************************************/
function iif()
{
             var varRtnValue = null;
             var arrArgument = iif.arguments;
             if(arrArgument[0]) {
                          return arrArgument[1];
             } else {
                          return arrArgument[2];
             }
}
/*******************************************************************************
 ★ 설명
    decode 비교 함수
 ★ Parameter 
    1. arg0   : 비교 할 변수
    2. arg1   : 비교 대상 변수
    3. arg2   : 비교 대상 변수가 같을 경우 리턴할 값
    4. 반복..
 ★ return 
    - 비교 대상 변수가 같을 경우 값 리턴
 ******************************************************************************/
function decode()
{
             var varRtnValue = null;
             var arrArgument = decode.arguments;
             var varValue = arrArgument[0];
             var bIsDefault = false;
             var nCount = 0;
             if((arrArgument.length % 2) == 0) {
                          nCount = arrArgument.length - 1;
                          bIsDefault = true;
             } else {
                          nCount = arrArgument.length;
                          bIsDefault = false;
             }
             for(var i = 1; i < nCount; i+=2) {
                          if(varValue == arrArgument[i]) {
                                       varRtnValue = arrArgument[i+1];
                                       i = nCount;
                          }
             }
             if(varRtnValue == null && bIsDefault) {
                          varRtnValue = arrArgument[arrArgument.length-1];
             }
             return varRtnValue;
}

11.11XPLATFORM 구동시 이미지, 조회시 이미지 변경

XPLATFORM 구동시 기본 splashimage, loadingimage를 변경하는 방법입니다.

그림 11-1720120626_114151625_image1

그림 11-1820120626_114205903_image2

11.11.1상세설명

Index.html 초기 구동 파일에서 해당 설정(전용브라우져)

var XPLauncher = document.getElementById("XPLauncher");
XPLauncher.splashimage = “http://www.miplatform.co.kr/splashimge.gif”;
XPLauncher.loadingimage= “http://www.miplatform.co.kr/loadingimage.gif”;
XPLauncher.xadl = “http://www.miplatform.co.kr/test.xadl”;
XPLauncher.key = “testkey”;
XPLauncher.download();
XPLauncher.launch();

Index.html 초기 구동 파일에서 해당 설정(임베디드).

임베디드의 경우 해당 프로퍼티가 없기 때문에 앞에 미리 호출이 필요합니다.

var XPLauncher = document.getElementById("XPLauncher");
XPLauncher.splashimage = “http://www.miplatform.co.kr/splashimge.gif”;
XPLauncher.loadingimage= “http://www.miplatform.co.kr/loadingimage.gif”;
XPLauncher.xadl = “http://www.miplatform.co.kr/test.xadl”;
XPLauncher.key = “testkey”;
XPLauncher.download();
var XPlatformCtrl = document.getElementById("XPlatformCtrl");
XPlatformCtrl.xadl “http://www.miplatform.co.kr/test.xadl”;
XPlatformCtrl.key = testkey”;                       
XPlatformCtrl.autosize = false;                               
XPlatformCtrl.run();

도움말

UXSTUDIO의 help를 활용합니다.

그림 11-1920120626_114223740_image3

주의사항

splashimage와 loadingimage 설정방법
임베디드에서 설정 하는 방법

11.12frame 동기화 처리 방법

Frame의 로딩 순서가 랜덤하게 결정되어 sync 문제가 생길 경우 동기화시킬 수 있는 방안.
1). Global변수에 Count변수를 선언합니다. 
     예: gFCnt=0; 
2). 프레임 정의 상단 프레임이 A라 가정하고 실제 함수가 포함되어 있다 가정 B프레임 실해 함수를 호출하는 프레임이라 가정 
     A의 프레임의 onLoad이벤트에서 다음과 같이 체크 
     if(gFCnt==1) {
        //B프레임이에서 이미 호출을 한번 했었다는 의미 그럼 자기자신의 함수를 호출 해줌 
     } else { 
        gFCnt=1; //아직 B에서 호출하기 전 
     }
     B의 프레임의 onLoad이벤트에서 다음과 같이 체크 
     if(gFCnt==1) {
        //A가 정상적으로 먼저 Load가 된 경우 그럼 자기자신의 함수를 호출 해줌 
     } else { 
        gFCnt=1; //아직 A가 호출하기 전
     }
위와 같이 처리를 하면 반드시 순서에 상관없이 실행이 가능합니다. 

즉 원하는 페이지가 Load되었으면 함수를 호출하고 
Load된 이면 gFCnt에 값 1로 변경해 주고 해당 페이지가 Load되면 자기 자신의 함수를 호출해 주는 것입니다.

만약 반드시 B프레임에서 호출을 해야 하는 경우라면 
A프레임에서 자기자신을 호출하는 것이 아니라 B프레임이 함수를 호출하여 다시 실행되도록 하면 되겠습니다.
Frame 동기화 방법

11.13Alert 창에서 타이틀이 한글이 깨져서 나올때

Alert창 confirm창에서 타이틀이 한글이 특수문자로 깨져서 나올 때 대처방법에 대해 기술합니다.

11.13.1현상

그림 11-2020120626_111454034_alert1

해당 현상은 alert창 만이 아닌 css에서 한글로 된 부분은 모두 깨져서 나오게 됩니다.

11.13.2원인

11.13.3해결방법

그림 11-2120120626_111517561_alert2

Alert 타이틀이 깨져서 나옵니다.
Css 한글이 깨져서 나옵니다.

11.14XPLATFORM 개발(Trial) 라이선스 사용방법

XPLATFORM을 구입 후 고객사에서 개발시 개발자(PC)에서 개발을 하기 위해 (Trial)버전을 사용하는 경우가 있습니다. 
 
이때 개발 라이센스에 대한 업데이트 주기 및 적용방법에 대해 기술합니다.

11.14.1개발 라이선스가 필요 한 이유

11.14.2개발 라이선스 다운로드 위치

개발 라이선스 다운로드 위치는 다음과 같습니다

1) www.xplatform.co.kr (www.miplatform.co.kr) 접속
2) 로그인
3) 위치
   -  Download -> XPLATFORM

그림 11-2220120501_162651702_xx_license_1

- 기타배포 페이지

그림 11-2320120501_162704959_xx_license_2

- 다운(아이콘)을 눌러 아래 화면이 나오면 [다운로드 받기] 를 통해 다운로드 가능합니다.

그림 11-2420120501_162720309_xx_license_3

- 다운로드 받아 압축을 해제 하면 다음의 파일정보를 확인할 수 있습니다.

그림 11-2520120501_162734891_xx_license_4

표 11-1파일설명

파일명

설명

비고

XPLATFORM_Client_License.xml

Client 라이선스 (ADL접속시 사용)

2011년1월 이후 사용자

XPLATFORM_Client_License_201012

Client 라이선스 (ADL접속시 사용)

2010년12월 버전 사용자

XPLATFORM_License.xml

UxStudio 라이선스 정보 및 각 파일에 대한 간략설명 첨부


XPLATFORM_Server_License.xml

Server 라이선스


라이센스는 크게 3개의 파일이 제공됩니다.

1) XPLATFORM_Client_License.xml

해당 파일은 프로그램을 개발하여 WEB서버에 올리는 파일입니다.

즉 UxStudio를 이용하여 개발시에는 UxStudio에서 라이센스가 체크되므로 라이센스 체크가 가능하나 TOOL를 통해 개발이 완료되면 WEB서버에 올려 일반사용자가 사용할 수 있도록 하게 되는데 이때 라이센스를 체크하기 위해 필요합니다.

주로 해당 라이센스 파일은 WEB서버의 소스 ADL경로에 위치하게 됩니다.

(위치는 고객사의 소스 위취 정책에 따라 변경될 수 있음)

2) XPLATFORM_Service_License.xml

해당 파일은 X-API에 대한 라이센스를 체크하는 파일입니다.

따라서 X-API를 사용하게되는 WAS서버에 위치하게 되면 X-API가 위치한 폴더에 함께 위치합니다.

(위치는 고객사의 소스 위취 정책에 따라 변경될 수 있음)

3) XPLATFORM_License.txt

해당 파일은 UxStudio를 사용할 수 있는 라이센스 정보가 기록되어 있습니다.

11.14.3개발 라이선스 변경 주기

본 라이센스는 2개월 동안 사용이 가능하며, 매월 첫주에 갱신된 파일이 첨부됩니다.

XPLATFORM 라이선스 갱신방법
XPLATFORM 라이선스 갱신주기

11.14.4정식라이센스와 개발라이센스는 무엇이 다른가?

라이센스에 따라 제품의 기능 제약은 발생하지 않습니다.
다만 제품을 구매한 고객사에서 구매담당자와 개발담당자가 분리되어 있는 경우가 많아
라이센스를 확인이 어려워 이를 조금이나마 해결하고자 개발라이센스를 발행하고 있습니다.
정식라이센스와 개발라이센스의 다른점은?

11.14.5라이센스가 만료되면 어떻게 되나요?

해당 내용은 2013년 10월29일자를 기준으로 다릅니다. 
2013년10월29일 이전 버전의 경우 라이센스 만료 및 장애발생시 Application 즉 
프로그램을 사용할 수 없게 됩니다. 

그러나 2013년10월29일 이후 버전부터는 라이센스 오류가 발생하게 되면 
Application은 가능하나 실행시마다 라이센스 만료 오류메시지가 한번씩 출력이 됩니다.
그러나 시스템을 사용할 수 없도록 멈추지는 않습니다.

Client (XPLATFORM) 오류메시지

그림 11-26client_error

Server(X-API) 오류메시지

그림 11-27serverError

적용버전

Client (Tool) 버전 : 2013년 10월29일 버전 이상
Server (X-API) 버전 : 2013년4월30일 버전 이상
개발라이센스 또는 라이센스 장애가 발생하게 되면 어떤증상이 발생하나요?

11.15XLauncher

11.15.1loadingimage, splashimage 안보이게 하는 방법

XPLATFORM에서 실행시 loading, splash이미지를 보이지 않토록 설정하는 방법을 알아봅니다.
아래와 같이 설치페이지에서 loadingimage, splashimage 속성에 유효하지 않은 경로를 지정하여 주시면 됩니다.
index.html 설정 예)
XLauncher.loadingimage = "null"
XLauncher.splashimage  = "null"
XLauncher.download();
loadingimage, splashimage 안보이게 하는 방법

11.15.2XPlauncher의 onlyone기능

XPLATFORM에서 제공되는 모듈 XPLauncher의 onlyone속성에 대해 알아봅니다.

onlyone 속성

index.html 설정 예)
XLauncher.key = "AAAA";
XLauncher.xadl = xapl_Path;
XLauncher.onlyone = true;
XLauncher.download();
XLauncher.launch(); // 전용브라우저 구동
XPLATFORM 실행을 한번만 할 수 있나요?

11.16대용량 처리

11.16.1firstrow 방식 이용한 샘플 (HttpPartPlatformResponse 사용)

HttpPartPlatformResponse객체를 이용하여 전송을 하며 
Dataset생성하기 전에 ErrorCode와 ErrorMsg를 sendVariable해야 합니다.
// HttpPartPlatformResponse 생성
//HttpPartPlatformResponse res = new HttpPartPlatformResponse(response, PlatformType.CONTENT_TYPE_BINARY);
HttpPartPlatformResponse res = new HttpPartPlatformResponse(response, PlatformType.CONTENT_TYPE_XML);
  
int nErrorCode = 0;
String strErrorMsg = "SUCC";
res.sendVariable( Variable.createVariable("ErrorCode", nErrorCode));
res.sendVariable( Variable.createVariable("ErrorMsg", strErrorMsg));

http://www.miplatform.co.kr/faq/data/docs/FirstRow_XPLATFORM_Sample.zip

Firstrow_partResponse.xfdl : XPLATFORM 소스
xp_partResponse.jsp : 서비스 jsp소스
//XPLATFORM 소스 중 JSP경로 변경 필요
var const_url="http://localhost:8080/MiAPI/";  
var arrTimes ;
var startTime ;

11.17폴더권한문제

11.17.1파일 읽기/쓰기 작업

XPLATFORM 에서는 데이터 쓰기/읽기 작업시 Personal 폴더 에서만  가능합니다.
(XPLATFORM은 SandBox개념에 준하여 보안정책을 지원합니다. )

상세설명

로컬 pc의 파일을 읽기/쓰기 작업시 "내문서" 폴더인 경우만 가능 합니다. 
(ADL의 filesecurelevel 속성값이 private 인 경우 - Default값)

"내문서"를 제외한 경로도 접근하여 작업이 가능하나 "filesecurelevel" 속성값 이 "all" 로 설정되어 있어야  합니다.

"내문서" 이외의 경로 접근시는 사용자에게 "안전하지 않은 파일에 접근합니다.\n계속 진행하시겠습니까?"라고 접근 여부를 물어보는 confirm 창이 뜨게 됩니다.

그림 11-28confirm

체크박스에 체크시 이후부터는 confirm창이 뜨지 않으나 최초 한번은 무조건 뜨게 됩니다.
파일 읽기/쓰기 작업시 반응이 없습니다.
엑셀 export시 "export error"가 발생 됩니다.

11.17.2파일 작업시 confirm 창을 띄우고 싶지 않음

로컬 pc에 파일 작업시 "안전하지 않은 파일에 접근합니다.\n계속 진행하시겠습니까?"라고 물어보는
확인창 없이 작업을 하고 싶은 경우의 우회 방법 입니다.

상세설명

XPALTFORM 에서는 Personal 폴더(내문서) 이외의 경로에 접근시 뜨는 확인창을 제어할 수는 없습니다. (보안상의 이유로 임의 제어를 할수 없습니다.)
이 경우 ExtCommon 파일을 이용하여 우회 처리를 할 수가 있습니다. 
우선 "내문서"폴더로 파일 작업을 한 후 실제 지정한 target 폴더로 해당 파일을 옮기게 하여 작업을 하시면 됩니다.

소스코드

var DownObj;
var downFolder =
FileDialog00.open("file download",FileDialog.SELFOLDER); // 폴더 선택

var objExt = new ExtCommon;
DownObj = objExt.readFile(system.convertRealPath("%DOCUMENT%")+파일명,"OBJ");
objExt.writeFile(downFolder+"\\"+파일명, DownObj);
지정된 임의의 폴더에 파일을 생성시 확인창 없이 작업은 안되나요?
파일 다운로드시 사용자가 지정한 폴더로 확인창 없이 다운로드 받는 방법이 없나요?

11.17.3내문서"폴더로 작업시에도 확인창이 뜨는 현상

파일 다운로드시나 엑셀로 출력시 "내문서" 폴더로 지정을 하여도 확인창이 뜨는 경우는 
해당 pc에서 내문서 폴더에 접근권한이 있는지를 확인해야 합니다. 
내문서 폴더에 접근권한이나 내문서 폴더가 없는 경우도 확인창이 뜨게 됩니다.
특정 pc에서 내문서 폴더로 다운로드시에 확인창이 뜹니다.

11.17.4추가파일 배포시 배포가 되지 않는 경우

XPLATFORM 에서 추가로 파일을 배포할 경우 TypeDefinition에 정보를 추가하여 배포 가능합니다.
(다운로드만 가능합니다.)

상세설명

XPLATFORM에서 파일 배포시 TypeDefinition에 관련 정보를 추가하여 주셔야 합니다. 
target에는 경로 지정 및 alias를 기술하여 배포 할 수 있습니다.

그림 11-29adddown

ADL의 "filesecurelevel"속성값이 private 인 경우는 내문서 경로로 다운로드가 가능합니다.
"filesecurelevel" 속성값을 all 로 지정시는 다운로드는 가능하나 확인창이 뜨게 됩니다.

그림 11-30confirm1

"filesecurelevel" 속성값을 all 로 지정시는 컴포넌트 폴더로는 확인창 없이 다운로드를 할 수 있습니다. 
( targetpath="%COMPONENT%\" )

소스코드

<Update>
    <Item systemtype="win32" url="../Component_92/">
      <Os type="default" url="" engineurl="" enginesetupkey="" engineversion="">
        <Device type="default" url="" engineurl="" enginesetupkey="" engineversion="" desc="">
<Resource type="File" file="./KillProcessA.exe" targetpath="%DOCUMENT%\" version="2014,1,3,1" failpass="false"/>
        </Device>
      </Os>
    </Item>
  </Update>
파일 다운로드가 되지 않아요?

11.17.5파일 다운로드가 되지 않습니다

파일 접근이 가능한 경로는 내문서 폴더가 기본입니다. 
내문서 이외에 접근시에는 ADL의 filesecurelevel속성값을 all 로 설정하여야 합니다.
다운로드를 받는 서버가 실행중인 서버의 주소가 IP와 도메인으로 각각 타입이 다를 경우 설정값이 private이면 접근이 허용되지 않습니다.
이 경우에도 all로 설정을 하여야 합니다.
파일 다운로드가 되지 않습니다

11.18XPLATFORM 사용을 위한 PC사양

11.18.1Server

Servlet/Web Service/JSP/PHP/ASP/.NET 등모든환경에서가용

11.18.2Client(사용자)

OS

최소사양 : Windows XP SP3
권장사양 : Windows7 Home Premium (32bit지원) sp1

PC

[ 최소사양 ]
Intel® Pentium® 4 1.4GHz,
메모리 1GB 이상,
HDD 8G이상

[ 권장사양 ]
Intel® Pentium i3-330M, 2.13GHz,
메모리 4GB DDR3,
30GB - 5400rpm

11.18.3Client(개발자)

[ 최소사양 ]
Intel® Pentium® 4 1.4GHz,
메모리 1GB 이상,
HDD 8G이상

[ 권장사양 ]
Intel® Pentium i3-330M, 2.13GHz,
메모리 4GB DDR3,
30GB - 5400rpm

11.18.4각 (인터넷)브라우저별 사양

해당 브라우저별 사양은 2015년8월3일자 기준으로 작성되었습니다.

표 11-2사양

브라우저

최소사양

권장사양

비고

Internet Explorer

Runtime : 8 이상

HTML5 : 8 이상

Runtime : 10 이상

HTML5 : 10 이상

IE브라우저 (64bit)

실행환경은 지원되지 않음

Chrome

Runtime/HTML5 : 10.0.648.127 이상

Runtime/HTML5 : 22.0.1229.79 이상


Opera

Runtime/HTML5 : 11.0

이상

Runtime/HTML5 : 12

이상

Safari

Runtime/HTML5 : 4

이상

Runtime/HTML5 : 6.0.2

이상

Firefox

Runtime/HTML5 : 8.0.1

이상

Runtime/HTML5 : 14.0.1 이상

최근 크롬(Chrome) 브라우저 최신버전 (42.0.2311.90)에서 Netscape Plug-in API(이하 NPAPI)
모듈을 제한하고 있어 XPALTFORM Plugin모듈에 대한 설치가 반복 되는 현상이 발생이 되고 있습니다.

현재 당사는 NPAPI 대체 방법을 공지하였으니 참고하시기 바랍니다.
(support.tobesoft.co.kr 공지사항 : 166번)
OS : Window 10에 대한 지원방안은 기술지원 홈페이지를 통해 공지하였습니다.
기술지원 홈페이지 공지사항을 참고하세요
(support.tobesoft.co.kr 공지사항 : 162번)