[ myBatis.SQL문 안에서 <, > 사용 ]



 

 

SQL문 안에서 <, > 사용할때 정상적으로 처리는 된것 같은데, dataset을 리턴받아서 처리를 못할수 있습니다.
  
이때  <를 〈로 >를 〉로 바꿔서 쓰시면 정상적으로 작동합니다.(ascii)
 
SQL문장안에 <, >을 사용한 경우이고 db에 있는데 데이터를 가져올때는 해당되지 않습니다.
 
select '신한법인카드<-엘지법인카드'
from dual


'Web. 기타 언어 > myBatis' 카테고리의 다른 글

myBatis에서 foreach 사용하기  (0) 2017.06.09
myBatis.oracle.sql.CLOB@ 결과 오류시  (0) 2017.01.31
myBatis.CLOB Column type  (0) 2017.01.31
myBatis.xml Tag  (0) 2017.01.31
myBatis XML 기본 문법  (2) 2017.01.31
Posted by 농부지기
,

[ myBatis.xml Tag ]


 

 

정의 : sql 문장을 만들경우 java단에서 값을 넘겨서 ibatis framework에서 받아 주는 구문
 
1. java단에서 넘긴 값 받기 (##)
   - 정의방법   : 
WHERE COMP_CD = #compCd# 
   - 최종실행문 : 
WHERE COMP_CD = '101'
   - 설명 : ##으로 받은 argument는 String으로 인식하여 (')single quote를 양쪽으로 붙여 준다.
   - 사용 : Table column type이 String일 경우에 사용함. (숫자 type도 가능함)
 
2. java단에서 넘긴 값 받기 ($$)
   - 정의방법    : 
SELECT $COL_LIST$
                                    ...

                        
WHERE COMP_CD IN ($compCd$)
                           
OR EMP_ID IN ($compCd$)
   - 최종실행문 : 
SELECT COMP_CD, COMP_NM, EMP_ID, EMP_NM, SALARY
                                    ...
                        
WHERE COMP_CD IN ('101', '103', '104')
                           
OR EMP_ID IN (1301, 55401, 4421)
   - 설명 : $$로 받은 argument는 java단에서 넘겨 받은 값을 그대로 넣어 준다.
   - 사용 : Table column type이 number일 경우에 사용
   -       sql 문장중 in 구문에 사용
   -       컬럼 LIST를 dynamic하게 사용하고 싶을 경우에 사용
   -       sql 문장을  dynamic하게 사용하고 싶을 경우에 사용

3. 조건절에 대소 비교(<>)가 존재 시
    - <
![CDATA[ AND RETIRE_YN <> 'Y'   ]]>   
    - <
![CDATA[ AND B.ACCT_CD >= #csSAcctCd_edtCode# ]]>  


4. 값이 null이면 해당 sql 문장 skip
   - 정의 : <
isNotNull property="cmbSlpmCtg" >
               </
isNotNull>

               <
isNull property="cmbSlpmCtg" >
               </
isNull>

5. if 문장
   - 정의 : <
isNotEqual property='rdoApvYn' compareValue='0'>
               AND A.APPR_DT IS NULL
            </
isNotEqual>
           
            <
isEqual property='rdoApvYn' compareValue='1'>
            </
isEqual>

 

 

  

 

'Web. 기타 언어 > myBatis' 카테고리의 다른 글

myBatis에서 foreach 사용하기  (0) 2017.06.09
myBatis.oracle.sql.CLOB@ 결과 오류시  (0) 2017.01.31
myBatis.CLOB Column type  (0) 2017.01.31
myBatis.SQL문 안에서 <, > 사용  (0) 2017.01.31
myBatis XML 기본 문법  (2) 2017.01.31
Posted by 농부지기
,

[ ◎ myBatis XML 기본 문법 ]     


1. xml 정의

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
        

2. 주석

 


    참고 : 이때 '-'를 여러개 정의하면 오류 발생 (예, '-----------------------')
        <!--
            SQL File Name : BPSL0060_SQL.xml
            Description   : 판매수수료율 계획 관리
            ==개정이력========================================
            수정일         수정자     Version    Query Id
            ========== ======= =========   ===================
            2013.12.18 김용학    1.0         최초 생성
        -->    

    

3. sqlMap Tag 시작

 

<sqlMap namespace="BPSL0060">

4. xml tag중 Alias 정의

 


  parameterClass등의 값을 정의 시 이 Alias를 사용해서 가능한다.

     <
typeAlias alias="BPMap" type="java.util.HashMap"/>
     <
typeAlias alias="CVo"   type="kr.co.descentekorea.common.vo.CommonVO"/>
     <
select id="selectSeasonList"  parameterClass="BPMap" resultClass="BPMap" >
              ....
     </
select>
 

5. select 문장

 


 id : 해당 select구문 id
 parameterClass : sql select 구문 작성시 argument로 받은 상수들에 대한 Object type정의
 resulClass       : sql select 결과를 어떤 Object type로 return할지에 대한 정의

  <
select id="selectSeasonList"  parameterClass="java.util.HashMap" resultClass="java.util.HashMap" >
      ...
  </
select>
 

6. select 문장

 


 remapResults :
   iBatis는 하나의 SELECT절에 대해서 첫 번째 조회 시 Column List와 Column Type등을 메모리에
   가지고 있다. 두 번째 부터는 이 컬럼목록 과 타입을 이용해서 처리 된다.
   이로 인해 다시 컬럼목록과 타입을 재 분석하는 속도를 향상시킬 수 있다.

   문제는, PIVOT함수나 Dynamic SQL 문장등으로 조회할 때 마다 컬럼목록이 매번 달라지거나 컬럼 타입등이
   변경된다면 첫 번재 조회된 컬럼목록과 타입으로 처리 되므로 client단에서 자료를 받아서 사용할 때 문제점
   이 발생 된다.

   해결방안은 
remapResults="true" 을 사용하여 매번 SELECT 할 때마나 컬럼목록과 타입을 재 분석하여
   사용하게 된다.

   <
select id="selectCommissionList"  parameterClass="java.util.HashMap" resultClass="java.util.HashMap"
                                 
remapResults="true" >
            .............

   </select>

7. insert 문장

 


 - MERGE 문장도 이곳에 구현 가능하다.

   <
insert id="saveCommission" parameterClass="java.util.HashMap">
         ....
   </
insert>
 

8. Update 문장

 


   <
update id="deleteCommission" parameterClass="java.util.HashMap">
           ............
   </
update>

9. Procedure 문장 호출

 

- parameterMap id="cVO"  는 아래 procedure Tag의 parameterMap="cVO" 과 동일 해야 된다.
- javaType : ㄱ. java단에서는 Object, 또는 String으로 넘기면  
             ㄴ. ibatis는  java.lang.String 으로 모두 받는다.
             ㄷ. 그런후 Procedure에서는 해당 인자를 받는다.
                 이때 ibatis에서 String으로 넘겨도 Procedure 에서는 VARCHAR2 또는 NUMBER 로 
                 정의 해도 모두 수용한다.
- mode : IN, OUT (input, return)정의
- procedure id="planCopy"   이 id를 가지고 java단에서 호출함

   <
parameterMap id="cVO" class="kr.co.descentekorea.common.vo.CommonVO">
       <
parameter property="map.gv_compCd"   javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
       <
parameter property="map.ORG_PLAN_YY" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
       <
parameter property="map.ORG_PLAN_CD" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
       <
parameter property="errorFlag"       javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT" />
       <
parameter property="errorMessage"    javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT" />

   </
parameterMap>
   <
procedure id="planCopy" parameterMap="cVO">
          { CALL /* BPCM.사업계획 차수 복사  */ 
                   SP_BP_PLAN_COPY(?,?,?,?     ,?,?,?    ,?,?,?,?)
           }
   </
procedure>
   


  

'Web. 기타 언어 > myBatis' 카테고리의 다른 글

myBatis에서 foreach 사용하기  (0) 2017.06.09
myBatis.oracle.sql.CLOB@ 결과 오류시  (0) 2017.01.31
myBatis.CLOB Column type  (0) 2017.01.31
myBatis.SQL문 안에서 <, > 사용  (0) 2017.01.31
myBatis.xml Tag  (0) 2017.01.31
Posted by 농부지기
,

[ Nexacro - Array.초기화 ]


var aColId = ["11", "222", "333"];

'Nexacro-이론 및 튜닝 > 기본문법' 카테고리의 다른 글

Nexacro-튜닝포인트  (0) 2017.09.28
Nexacro-Null  (0) 2017.02.13
Nexacro 문법 - do while  (0) 2017.01.22
Nexacro 기본문법.Array2  (0) 2017.01.22
Nexacro 기본문법 - Array  (0) 2017.01.22
Posted by 농부지기
,

[ Android.editText 하단라인 보이기.안보이게 하기 ]

 

1. 정의

    - EditText의 기본은 전체 4각형 Box에 하단 라인이 기본적으로 보이게 된다.

    - focus가 위치하는 EditText의 하단라인은 핑크색

    - focus를 잃었은 EditText의 하단라인은 진한회색

 

2. 하단라인 없애기

    - [ android:background="??" ] 속성을 기술하면 하단라인이 보이지 않는다.

    - [ android:background="??" ] 속성을 기술하지 않으면 하단라인이 보인다.

 

3. 화면

    - 왼쪽     화면은 하단 라인이 보이기

       . background 속성을 기술하지 않았음.

       . focus가 위치하는 EditText의 하단라인은 핑크색

       . focus를 잃었은 EditText의 하단라인은 진한회색

    - 오른쪽 화면은 하단 라인 안보이게 하기

       . 아이디 입력 EditText는  [ android:background="@null" ] 으로 처리

       . 비밀번호 입력 EditText는  [ android:background="#d7d5d7" ](회색) 으로 처리

      

   

 

 

 

 

'[Android] - 위젯 > EditText' 카테고리의 다른 글

키보드 보이게 하기  (0) 2017.01.02
Focus 막기. Editting 안되게 하기  (0) 2017.01.02
포커스 주기  (0) 2017.01.02
숫자 관련  (0) 2017.01.01
Posted by 농부지기
,

[ Android.Activity Title bar 제거 ]

 

1. 정의

    - Android App의 Title bar제거

 

2. Title bar 화면

    - 왼쪽     화면은 Title bar가 존재

    - 오른쪽 화면은 Title bar가 제거된 상태

   

 

3. Title bar 제거 방법 1

    - 기본 Activity에

       supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
      이 문장을 삽입한다.

      반드시 setContentView()보다 먼저 기술해야 됨

 

public class UserActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user);
    }
}

 

  - java단에서  'Activity'를 상속받은 경우에는 다음을 사용

    requestWindowFeature(Window.FEATURE_NO_TITLE);

 

   - java단에서  'AppCompatActivity'를 상속받은 경우에는 다음을 사용

     supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

 

4. Title bar 제거 방법 2

     1. Menifest 파일에 다음 tag 등록

         - android:theme="@style/Theme.AppCompat.NoActionBar"


     2. Application 전체에서 제거하려면

 

 <application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:allowBackup="true"
    android:supportsRtl="true"
    android:theme="@style/Theme.AppCompat.NoActionBar">
    <activity
        android:name=".user.UserActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

 

     3. Activity element만 제거하려면

 

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:allowBackup="true"
    android:supportsRtl="true">
    <activity
        android:theme="@style/Theme.AppCompat.NoActionBar"
        android:name=".user.UserActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

 

Posted by 농부지기
,

[ Android.AppBarLayout - 개념 ]

 

1. class : android.support.design.widget.AppBarLayout

 

2. 사용가능모듈

    1. AppBarLayout을 사용하려면

      'com.android.support:design:25.1.0' 모듈이 필요

    2. 반드시 build.gradle파일에    'dependencies'부분에 추가 되어져 있어야 한다.

 

 

 

Posted by 농부지기
,

[ Android Studio - 모듈 추가하기 ]

 

1. 정의

    - Android Studio에서 모듈 추가하기

    - Android Studio에서 build.gradle 에  'dependencies'추가하기

 

2. 방법 1

    1. Files > Proejct Structure

    2. 왼쪽목록 : Moddules > app 선택

    3. [ Dependencies ] Tab 선택

    4. [ + ] 클릭

    5. [Library Dependencies] 선택

    6. 원하는 모듈명을 입력 하고   [OK]누르면  추가 됨

    7. 이 과정을 거치면 'build.gradle'파일에  ''dependencies'영역에 해당 모듈이 추가 된다.

 

3. 방법 2

     1. 단축키 : Ctrl + Alt + Shf + S 를 누르면 Project Struture 창이 뜸

     2. 이 다음부터는 위와 동일

 

4. 화면(과정)

 

 

 

 

 

Posted by 농부지기
,

[ Nexacro.Etc -  Graphic ]

 

 


/*********************************************************************************************
 ★ 설명
     GraphicPath의 그리기 영역을 구한다.
     GraphicPath에서 Border와 Pen의 크기를 뺀 영역을 의미한다.
 ★ parameter
    1. obj : GraphicPath Object ( 예 : GraphicPath00 )
    2. nLeftOffset : GrapicPath의 영역 중 Left에서 안쪽으로 들어가는 Offset값
     (옵션 : Default = 0) (예 : nLeftOffset=10이면 10만큼 Left에서 떨어진 지점이 영역으로 잡힘)
    3. nTopOffset : GrapicPath의 영역 중 Top에서 안쪽으로 들어가는 Offset값
     (옵션 : Default = 0) (예 : nTopOffset=10이면 10만큼 Top에서 떨어진 지점이 영역으로 잡힘)
    4. nRightOffset : GrapicPath의 영역 중 Right에서 안쪽으로 들어가는 Offset값
     (옵션 : Default = nLeftOffset) (예 : nLeftOffset=10이면 10만큼 Right에서 떨어진 지점이 영역으로 잡힘)
    5. nBottomOffset : GrapicPath의 영역 중 Bottom에서 안쪽으로 들어가는 Offset값
     (옵션 : Default = nBottomOffset) (예 : nLeftOffset=10이면 10만큼 Bottom에서 떨어진 지점이 영역으로 잡힘)★ return
 ★ Return         
    - 성공 = Rect Object
    - 실패 = null
   (단, offset이 너무커서 width나 height값보다 클 경우도 null이 return된다.)
 ★ 목적    
    GraphicPath.position을 이용하여 그리면 제대로 안되는 것을 알 수 있다. 그래서, 만들었다. Offset도 줄겸
 ★ BUG
    이 함수도 제대로 되는게 아니다. 나도 정확히 우찌해야 할지 잘 모르겠다. ???(모름)
*********************************************************************************************/

function GPRect(obj:GraphicPath, nLeftOffset, nTopOffset, nRightOffset, nBottomOffset)

{

 var GR = new Rect();

 var border, pen;

 

 if( fn_IsNull(obj) )  return null;

 if( fn_IsNull(nLeftOffset) ) nLeftOffset = 0;

 if( fn_IsNull(nTopOffset) ) nTopOffset = 0;

 if( fn_IsNull(nRightOffset) ) nRightOffset = nLeftOffset;

 if( fn_IsNull(nBottomOffset) ) nBottomOffset = nTopOffset;

 

 border = ( "x"+obj.style.border.width == "xNaN" ? 0 : obj.style.border.width );

 pen = ( "x"+obj.strokepen.width == "xNaN" ? 1 : obj.strokepen.width );

 GR.left = nLeftOffset;

 GR.top = nTopOffset;

 

 // 이렇게 하는게 최선이다.

 GR.right = obj.position.width - nRightOffset - 2*border - pen;

 GR.bottom = obj.position.height - nBottomOffset - 2*border - pen;

 if( GR.width < 0 || GR.height < 0 )

  return null;

 

 return GR;

}

 

/*********************************************************************************************
 ★ 설명
     GraphicPath처리 시 화살표처리 Data를 만들어 준다.
     이미 그려놓은 GraphicPath.data에 이 함수에서 return된 data를 덧붙여 처리해서 사용한다.
 ★ parameter
    1. obj:GraphicPath : GraphicPath Object ( 예 : GraphicPath00 )
    2. nArrowType  : 화살표의 종류( 예 : 1 )
       - 0 = 화살표 안그림
       - 1 = ---> 화살표
       - 2 = ---▶ 화살표
       - 3 = ---◆ 화살표
       - 4 = ---● 화살표
    3. nEndX, nEndY, nDirAngle : 화살표의 위치 및 화살표 방향
       - nEndX, nEndY : 화살표의 끝좌표
       - nAngle       : 화살표의 방향, 단 Radian값이다.
                        화살표 끝좌표의 가로축과 시작방향이 이루는 각이다.
                        (※ GetAngle()함수를 이용하면 쉽게 구할 수 있다.)
       (예 : (15,15) ----> (20,20) 으로 화살표를 그리고 싶다면
             nEndX = 20, nEndY = 20, nAngle = Deg2Rad(-45) )
    4. 화살표가 그려질 선을 중심으로 화살표의 넓이와 높이
       1) nArrowW : 화살표 넓이
       2) nArrowH : 화살표 높이
       (※ 단, ---●의 경우 타원처리는 안되고 nArrowW, nArrowH중 작은 쪽을 반지름으로 하는 원만 처리한다. )
                    (20)
       (예 : -----(0)▶(10) ==> nArrowW = 10, nArrowH = 20 )
                     (0)
                    (20)
       (예 : -----(0)◆(10) ==> nArrowW = 10, nArrowH = 20 )
                     (0)
 ★ return
    - 성공 = GraphicPath.data에 들어갈 화살표 Data
    - 실패 = ""
*********************************************************************************************/

function GPArrow(obj:GraphicPath, nArrowType, nEndX, nEndY, nAngle, nArrowW, nArrowH )

{

 var D="";

 var nDirX, nDirY;

 var nArrowOrgX, nArrowOrgY, nArrowCoW, nArrowCoH, nArrowDist;

 var nArrowType;

 

 if( fn_IsNull(obj) || fn_IsNull(nArrowType) || fn_IsNull(nEndX) || fn_IsNull(nEndY) ||

  fn_IsNull(nAngle) || fn_IsNull(nArrowW) || fn_IsNull(nArrowH) )

  return "";

  

 // ->, ▶

 if( nArrowType == 1 || nArrowType == 2 )

 {

  nArrowCoW = nArrowW;

  nArrowCoH = Math.round(nArrowH/2,1);

 }

 // ◆, ●

 else if( nArrowType == 3 || nArrowType == 4 )

 {

  nArrowCoW = Math.round(nArrowW/2,1);

  nArrowCoH = Math.round(nArrowH/2,1);  

 }

 else

  return "";

 

 if( nArrowType == 4 )

  nArrowDist = Math.min(nArrowW,nArrowH);

 else

  nArrowDist = Math.sqrt(Math.pow(nArrowCoW,2)+Math.pow(nArrowCoH,2));

  

 nArrowOrgX = nEndX + nArrowDist*Math.cos(nAngle);

 nArrowOrgY = nEndY - nArrowDist*Math.sin(nAngle);

/*

D  = " M " + nEndX + " " + nEndY;

 

D += " L " + nArrowOrgX + " " + nArrowOrgY;

 

return D;

 

*/

 // ->

 if( nArrowType == 1 )

 {

  var nArrowAngle, vRotatePoint1, vRotatePoint2;

  

  nArrowAngle = Math.atan2(nArrowCoH,nArrowCoW);

  vRotatePoint1 = RotatePoint( nArrowOrgX, nArrowOrgY, nEndX, nEndY, nArrowAngle );

  vRotatePoint2 = RotatePoint( nArrowOrgX, nArrowOrgY, nEndX, nEndY, -1*nArrowAngle );  

     

  D += " M " + nEndX + " " + nEndY;  

  D += " L " + vRotatePoint1.left + " " + vRotatePoint1.top;

  D += " M " + nEndX + " " + nEndY;    

  D += " L " + vRotatePoint2.left + " " + vRotatePoint2.top;

 }

 // ▶

 if( nArrowType == 2 )

 {

  var nArrowAngle, vRotatePoint1, vRotatePoint2;

 

  nArrowAngle = Math.atan2(nArrowCoH,nArrowCoW);

  vRotatePoint1 = RotatePoint( nArrowOrgX, nArrowOrgY, nEndX, nEndY, nArrowAngle );

  vRotatePoint2 = RotatePoint( nArrowOrgX, nArrowOrgY, nEndX, nEndY, -1*nArrowAngle );  

 

  D += " M " + nEndX + " " + nEndY;  

  D += " L " + vRotatePoint1.left + " " + vRotatePoint1.top;

  D += " L " + vRotatePoint2.left + " " + vRotatePoint2.top;

  D += " L " + nEndX + " " + nEndY;    

 }

 // ◆

 if( nArrowType == 3 )

 {

  var nArrowAngle, vRotatePoint1, vRotatePoint2, vRotatePoint3;

  

  nArrowAngle = Math.atan2(nArrowCoH,nArrowCoW);

  vRotatePoint1 = RotatePoint( nArrowOrgX, nArrowOrgY, nEndX, nEndY, nArrowAngle );

  vRotatePoint2 = RotatePoint( nArrowOrgX, nArrowOrgY, nEndX, nEndY, -1*nArrowAngle );

  vRotatePoint3 = RotatePoint( nEndX, nEndY, vRotatePoint1.left, vRotatePoint1.top, Math.PI-2*nArrowAngle );

  

  D += " M " + nEndX + " " + nEndY;  

  D += " L " + vRotatePoint1.left + " " + vRotatePoint1.top;

  D += " L " + vRotatePoint3.left + " " + vRotatePoint3.top;

  D += " L " + vRotatePoint2.left + " " + vRotatePoint2.top;

  D += " L " + nEndX + " " + nEndY;   

 }

 // ●

 if( nArrowType == 4 )

 {

  var nRX, nRY;

 

  nRX = nRY = Math.min(nArrowCoW,nArrowCoH);

  D += " M " + nEndX + " " + nEndY;

  D += " A " + nRX + " " + nRY + " 180 0 1 " + nArrowOrgX + " " + nArrowOrgY;  

  D += " A " + nRX + " " + nRY + " 180 0 1 " + nEndX + " " + nEndY;    

 }

 return D;

}

 

/*********************************************************************************************
 ★ 설명
     GraphicPath.data를 2차원 Array로 반환한다.
     단순히 Parsing만 하며 Array의 순서는 GraphicPath.data의 순서를 그대로 따른다.
     단, type이 중복되어 생략되는 경우(예: V 100 100) Array가 추가되고 첫번째 요소는 ""가 들어간다.
     (아래 예를 참고할것)
 ★ parameter
    1. sGpData : GraphicPath.data ( 예 : "M 0 0 L 100 100 H 100 V 100 100" )
 ★ return
    - 성공 = 2차원 Array
             ( 예 : Array ==> { {M,0,0}, {L,100,100}, {H,100}, {V,100}, {,100} }
    - 실패 = 빈 Array
 ★ 목적    
    GraphicPathData Object가 있었다가 사라졌다.
 ★ 참고사항
    aGpData로 data문자열을 만들고 싶다면 ==> GraphicPath.data = aGpData.join(" "); 로 처리하면 된다.
 ********************************************************************************************/

function AGPData(sGpData)

{

 var aGpData = new Array();

 var arr = new Array();

 var i, gi_no=-1, ho_no, val, sType, ho_num;

 

 if( fn_IsNull(sGpData) )  return aGpData;

 

 sGpData = sGpData.toString();

 arr = sGpData.split(" ");

 for( i = 0 ; i < arr.length ; i++ )

 {

  val = RTrim(LTrim(arr[i]));

  if( IsAlpha(val) == true )

  {

   gi_no++;

   ho_no = 0;

   

   var aHor = new Array(); // 2차원 배열의 가로 배열

   aGpData[gi_no] = aHor;

   aGpData[gi_no][ho_no] = val;

   sType = val;

  }

  else if( IsNum(val) == true )

  {

   ho_no++;  

   if( ( (sType == "M" || sType == "m") && ho_no == 3) ||

    ( (sType == "L" || sType == "l") && ho_no == 3) ||

    ( (sType == "H" || sType == "h") && ho_no == 2) ||

    ( (sType == "V" || sType == "v") && ho_no == 2) ||

    ( (sType == "A" || sType == "a") && ho_no == 8) ||

    ( (sType == "C" || sType == "c") && ho_no == 7) )

   {

    gi_no++;

    ho_no = 0;

 

    var aHor1 = new Array(); // 2차원 배열의 가로 배열

    aGpData[gi_no] = aHor1;

    aGpData[gi_no][ho_no] = "";    

    ho_no++;

    aGpData[gi_no][ho_no] = parseInt(val);

   }

   else

   {

    aGpData[gi_no][ho_no] = parseInt(val);

   }

  }

 }

 

 return aGpData;

}

 

 

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > ETC' 카테고리의 다른 글

Nexacro.Array - 값 존재 위치(index)얻기  (0) 2017.02.09
Nexacro.Etc - 파일관리  (0) 2017.01.28
Nexacro.Etc - 확장 비교함수  (0) 2017.01.28
Posted by 농부지기
,

[ Nexacro.Etc -  파일관리 ]

 

 


/*******************************************************************************
 ★ 설명
    File Path 문자열(예 : C:\a\b\filename.ext)에서 File명(예 : filename)을 추출
 ★ Parameter
    1. sPath   : File Path 문자열 (예 : "C:\a\b\filename.ext")
    2. bExt    : extend를 return되는 File명에 포함시킬지 여부 ( 옵션 : Default=false )
                 - true : extend를 File명에 포함시킴
                 - false : extend를 File명에 포함시키지 않음
 ★ return
    - 성공 =
  - bExt = true인 경우 ==> sPath에서 File명(예 : "filename.ext")
  - bExt = false인 경우 ==> sPath에서 File명(예 : "filename")
 - 실패 = ""
 ******************************************************************************/

function fn_GetFileName( sPath, bExt )

{

 var start_pos, end_pos, tmp_pos, filename;

 

 if( fn_IsNull(sPath) )  return "";

 if( fn_IsNull(bExt) )

  bExt = false;

 

 start_pos = Math.max(PosReverse( sPath, "\\" ),

      PosReverse( sPath, "/" ));

    tmp_pos = PosReverse( sPath, "::");

 if( tmp_pos > 0 ) tmp_pos++;

 start_pos = Math.max( start_pos, tmp_pos );

 if( bExt == false )

 {

  end_pos = PosReverse( sPath, "." );

  if( end_pos < 0 )

   end_pos = sPath.length;

  filename = sPath.substr( start_pos+1, end_pos-start_pos-1 );

 }

 else

 {

  filename = sPath.substr( start_pos+1 );

 }

  

 return filename;

}

 

/*******************************************************************************
 ★ 설명
    File Path 문자열(예 : C:\a\b\filename.ext)에서 확장자(예 : ext)을 추출
 ★ Parameter
    1. sPath   : File Path 문자열 (예 : "C:\a\b\filename.ext")
 ★ return
    - 성공 = sPath에서 확장자(예 : "ext") (단, "."이 없으면 "" return됨)
    - 실패 = ""
 ******************************************************************************/

function fn_GetFileExt( sPath )

{

 var pos;

 

 if( fn_IsNull( sPath ) ) return "";

 

 pos = PosReverse( sPath, "." );

 if( pos < 0 )

  return "";

 else

  return sPath.substr( pos+1 );

}

 

/*******************************************************************************
 ★ 설명
    sPath 문자열(예 : C:\a\b\filename.ext)에서 Path(예 : C:\a\b\)를 추출
 ★ Parameter
    1. sPath   : Path 문자열 (예 : "C:\a\b\filename.ext")
 ★ return
    - 성공 = sPath에서 Path(예 : "C:\a\b\")
    - 실패 = ""
 ******************************************************************************/

function fn_GetFilePath( sPath )

{

 var filename;

 

 if( fn_IsNull(sPath) )  return "";

 

 filename = GetFileName( sPath, true );

 if( filename == null )  return null;

 

 return sPath.substr(0, sPath.length - filename.length);

}

 

/*******************************************************************************
 ★ 설명
    화면내에서 자기 자신화면의 Url을 얻어온다.
 ★ Parameter
    없음
 ★ return
    - 성공 = 자기 자신화면의 Url ( 절대경로 또는 Service::a.xfdl 형태로 return됨 )
    - 실패 = ""
 ******************************************************************************/

function fn_GetThisUrl()

{

 var this_url, parent_type;

 

 // Division, Tab, PopupDiv인 경우에는 따로 처리해야 함

 parent_type = GetObjType(parent);

 if( parent_type == "Div" || parent_type == "PopupDiv" || parent_type == "TabPage" )

  this_url = parent.url;

 else

  this_url = this.getOwnerFrame().formurl;

  

 return this_url;

}

 

/*******************************************************************************
 ★ 설명
    현재 실행되고 있는 Project의 Root Full Path를 얻어온다.
 ★ Parameter
    없음
 ★ return
    - 성공 = 현재 실행되고 있는 Project의 Root Full Path
    - 실패 = ""
 ★ 참고사항
    현재 실행되고 있는 ADL Path는 application.xadl을 통해 얻을 수 있다.
 ★ 목적
    Tool에서 system.execXPlatform을 하면 Project경로를 알수 없어 실행이 힘들기
    때문에 만들었다.
 ★ BUG
    모든 화면 Service는 Project내의 바로 한단계 아래의 Sub Directory이고
    ADL은 Project Directory에 있다는 전제하에 만들어 졌다.
    즉, Project=C:\A\, ADL=C:\A\ADL.xadl, Service=C:\A\Service\라는 가정하에
    만들어졌다.
 ******************************************************************************/

function fn_GetProjectPath()

{

 var cur_xadl, filename, project_path;

 

 cur_xadl = application.xadl;

 if( fn_IsNull(cur_xadl) ) return "";

 

 filename = GetFileName(cur_xadl, true);

 if( fn_IsNull(filename) ) return "";

 

 // QuickView로 돌린 경우

 if( filename == "empty_adl.xadl" )

 {

  var this_url, pos;

  

  this_url = Replace( childframe.formurl, "\\", "/" );

  pos = PosReverse( this_url, "/");

  if( pos < 0 )

   return "";

  pos = PosReverse( this_url, "/", pos-1);

  if( pos < 0 )

   return "";

 

  project_path = childframe.formurl.substr(0, pos+1);

 }

 // Launch Project로 돌린 경우

 else

 {

  var trim_path;

  project_path = GetFilePath(application.xadl);

  trim_path = LTrim(project_path, "file://");

  if( trim_path != project_path )

   project_path = Replace( trim_path, "/", "\\" );

 }

 

 return project_path;

}

 

/*******************************************************************************
 ★ 설명
     ADL을 주고 XPlatform실행하는 함수
 ★ parameter
    1. sADL : ADL
       1) Full Path지정한 경우 (예 : C:\\Project\\ADL.xadl")
          Full Path에 해당하는 ADL실행
              2) ADL명만(확장자제외) 지정한 경우 ( 예 : "ADL" )
                 Project Path내의 ADL실행
              ※ 단, 경로에 대한 유효성 여부는 검사하지 않음
    2. sKey : XPlatform실행시 Key
              (옵션 : Default = ADL명(단, 확장자제외))
 ★ return
    - 성공 = true
    - 실패 = false
 ★ 주의사항
    XPLatform실행시 Argument를 전달할 방법은 못 찾겠다.
 ★ 목적    
    PC에서 Tool로 작업시 Project Path를 모를 경우 XPlatform실행이 어려워서 만들었음
 ******************************************************************************/

function fn_RunXP(sADL, sKey)

{

 var adl_name;

 var project_path;

 var oChildFrame_SDI;

 

 if( fn_IsNull(sADL) )  return false;

 

 adl_name = GetFileName(sADL);

 if( fn_IsNull(sKey) )  sKey = adl_name;

 

 // FullPath로 지정한 경우

 if( adl_name != sADL )

  system.execXPlatform(" -X \"" + sADL + "\" -K " + sKey);

 // ADL명만 지정한 경우

 else

 {

  project_path = GetProjectPath();

  if( fn_IsNull(project_path) )

   return false;

  else

   system.execXPlatform(" -X \"" + project_path + sADL + ".xadl" + "\" -K " + sKey);

 }

  

 return true;

}

 

/*******************************************************************************
 ★ 설명
     XPLATFORM에서 정의된 Path예약어와 실제경로 목록을 얻어오는 함수
 ★ parameter
 ★ return
    2차원 Array = {{alias 1, 실제경로 1}, {alias 2, 실제경로 2},...}
 ******************************************************************************/

function fn_GetPathAliasList()

{

 var aList = new Array();

 

 var tmp = new Array();

 tmp[0] = "%USERAPP%";  tmp[1] = system.convertRealPath(tmp[0]);

 aList[0] = tmp;

 

 var tmp = new Array();

 tmp[0] = "%MYDOCUMENT%"; tmp[1] = system.convertRealPath(tmp[0]);

 aList[1] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%INSTALLROOT%"; tmp[1] = system.convertRealPath(tmp[0]);

 aList[2] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%XPLATFORM%"; tmp[1] = system.convertRealPath(tmp[0]);

 aList[3] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%COMPONENT%"; tmp[1] = system.convertRealPath(tmp[0]);

 aList[4] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%THEME%";  tmp[1] = system.convertRealPath(tmp[0]);

 aList[5] = tmp;

 

 var tmp = new Array();  

 tmp[0] = "%CACHE%";  tmp[1] = system.convertRealPath(tmp[0]);

 aList[6] = tmp;

 

 return aList;

}

/*******************************************************************************
 ★ 설명
    sPath에 해당하는 모든 하위 디렉토리에 대하여
    File 및 Directory 리스트를 가져와서 oDataset에 담는다.
 ★ Parameter
    1. sPath    : 리스트를 가져올 Path = 절대 Path로 줄 것
    2. oDataset : 리스트를 담을 Dataset Object
                  Column = level, dir, file, size, fgbn
                  ( Column이 없으면 만들어 줌 )
                  ( fgbn = 파일 구분 : "d" = 디렉토리, "f" = 파일 )
    3. _level   : 내부적으로 재귀호출시에만 사용함, 사용치 말것
 ★ return
    - 실패 = false
    - 성공 = true
 *****************************************************************************/

function FILEGetFileList(sPath, oDataset, _level)

{

 var flist, i;

 

 if( fn_IsNull(sPath) || fn_IsNull(oDataset) )

  return false;

 if( fn_IsNull(_level) )

 {

  _level = 0;

  

  // Column있는지 체크하고 만들기

  if( oDataset.getColumnInfo( "level" ) == null )

   oDataset.addColumn("level", "string");

  if( oDataset.getColumnInfo( "dir" ) == null )

   oDataset.addColumn("dir", "string");

  if( oDataset.getColumnInfo( "file" ) == null )

   oDataset.addColumn("file", "string");

  if( oDataset.getColumnInfo( "size" ) == null )

   oDataset.addColumn("size", "string");

  if( oDataset.getColumnInfo( "fgbn" ) == null )

   oDataset.addColumn("fgbn", "string");

  

  oDataset.clearData();  

 }

 

 flist = VirtualFile.getFileList(sPath, "*");

//alert(flist.length);

 for( i = 0 ; i < flist.length ; i++ )

 {

  row = oDataset.addRow();

  oDataset.setColumn(row, "level", _level);

  oDataset.setColumn(row, "dir", sPath);

  oDataset.setColumn(row, "file", flist[i].filename);

  oDataset.setColumn(row, "size", flist[i].size);

  if( flist[i].isDirectory() == true )

  {

   oDataset.setColumn(row, "fgbn", "d");

   FILEGetFileList(sPath+"\\"+flist[i].filename, oDataset, _level+1);

  }

  else

   oDataset.setColumn(row, "fgbn", "f");

 }

}

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > ETC' 카테고리의 다른 글

Nexacro.Array - 값 존재 위치(index)얻기  (0) 2017.02.09
Nexacro.Etc - Graphic  (0) 2017.01.28
Nexacro.Etc - 확장 비교함수  (0) 2017.01.28
Posted by 농부지기
,