IT/PLM시스템

[PLM] Aras Innovator의 메소드 작성법

개발자 두더지 2021. 2. 14. 23:42
728x90

일본 Aras 공식 블로그의 튜토리얼을 번역한 내용입니다. 오역 및 직역이 있을 수 있으며 내용 오류 지적 환영합니다.

 

1. 메소드 인터페이스

① 명칭(名称):메소드의 명칭을 입력(필수). 대소문자를 구분함.

② 코멘트(コメント): 메소드의 목적이나 설명 등을 입력.

③ 실행허가(実行許可) :이 메소드의 실행을 허가하는 아이덴티티를 지정.

④ 메뉴바(シールバー) :  아래에서 상세히 설명할 예정.

⑤ Code Guide : IOM의 간단 가이드. 상세 가이드는 "API Reference"에서 확인 가능.

⑥ Help/Debug : "Help" 태그에는 Code Guide에서 선택된 클래스 등의 헬프 내용이 표시되며, "Debug" 태그는 컴파일 에러가 표시됨.

 4번의 메뉴바에 대한 설명은 아래의 이미지와 같다.

 

 

2. 메소드를 이용한 커스터마이즈

 실제로 메소드를 이용하여 커스마이즈하는 세 가지 예를 소개하도록 하겠다.

1) 문서 번호에 대해 자동으로 고유 번호를 부여하는 메소드 작성하기

(1) 먼저, 아래와 같이 메소드 아이템을 작성한다.

 

// Document의 onBeforeAdd 서버 이벤트 메소드
// 문서 타입에 따른 문서 고유 번호를 세팅한다.
Innovator inn = this.getInnovator();

// 문서 타입(classification)의 체크
string classification = this.getProperty("classification", "");
if(classification == ""){
    return inn.newError("문법 타입을 입력해주세요.");
}

// 문서 타입(classification)의 값에 대해 사용할 고유 번호 아이템을 결정
string sequence_name = "Default Document";
if (classification == "Legal"){
    sequence_name = "Legal-Doc Number";
}
else if (classification == "Marketing"){
    sequence_name = "Marketing-Doc Number";
}
else if (classification == "Specification"){
    sequence_name = "Spec-Doc Number";
}

// 그 고유 번호 아이템을 사용하여, 신규 고유 번호를 작성
string item_number = CCO.DB.InnDatabase.GetNextSequenceValue("name", sequence_name);
if (String.IsNullOrEmpty(item_number)){
    return inn.newError("문서 고유 번호 작성에 실패했습니다. 관리자에게 문의해주세요.");
}

// 고유 번호를 매긴 값을 "item_number" 프로퍼티에 설정하고 종료
this.setProperty("item_number", item_number);
return this;

ⓛ 문서 타입의 값을 확인한다.

② 이용할 고유 할당 번호 타입을 결정한다.

문서 타입이 Legal인 경우, 고유 할당 번호 아이템은 "Legal-Doc-Number"을 이용하고,

문서 타입이 Marketing인 경우, 고유 할당 번호 아이템은 "Marketing-Doc Number"을 이용한다.

③ 고유 할당 번호를 세팅한다.

(2) 계속해서 아이템 타입의 "서버 이벤트" 태그에 작성한 메소드를 등록한다. 이번에 적용할 이벤트는 "onBeforeAdd"이다.

(3) 마지막으로 동작을 확인하고, 메소드에서 지정한 대로 고유 번호가 설정되었는지 확인한다.

 

2) state에 따라 검색 그리드에 색을 표시하는 메소드 작성하기

 2번째는 "문서 아이템의 state에 따라 검색 그리드 상에 색을 입히는" 예이다.

(1) 먼저, 아래와 같이 메소드 아이템을 작성한다.

// Document의 onAfterGet 서버 이벤트 메소드
// 문서의 state에 따라 state란에 하이라이트를 표시한다.

Innovator inn = this.getInnovator();

// 적용할 CSS
const string css_released = ".state {background-color: GreenYellow}";
const string css_obsolete = ".state {background-color: Crimson}";

// 검색 결과의 아이템 각각에 따라 하이라이트를 표시한다
for (int i = 0; i < this.getItemCount(); i++){
    Item cur_itm = this.getItemByIndex(i);
    string cur_state = cur_itm.getProperty("state", "");

    // fed_css 프로퍼티(혹은 css 프로퍼티)에 따라 지정 스타일 css를 세팅한다.
    if (cur_state == "Released"){
        cur_itm.setProperty("fed_css", css_released);
    }
    else if (cur_state == "Obsolete" || cur_state == "Superseded"){
        cur_itm.setProperty("fed_css", css_obsolete);
    }
}

return this;

① 적용할 CSS를 지정한다.

② 아이템의 state를 확인하고, 이용할 CSS를 적용한다.

state가 "Released"면 초록색을, "Obsolete"인 경우 빨간색을 표에 입힌다.

(2) 계속해서 아이템 타입의 "서버 이벤트" 태그에 작성한 메소드를 등록한다. 이번 이벤트는 "onAfterGet"이다.

(3) 마지막으로 동작을 확인하고 메소드에서 지정한 대로 검색 그리드에 색이 입혀져 있는 것을 확인한다.

 

3) 입력 값을 체크하는 메소드 작성하기

 마지막으로 "owned_by_id(설계책임자)란에 아이덴티티 "World"가 입력되면 에러가 발생하는" 메소드를 작성해 볼 것이다.

(1) 먼저 아래와 같이 메소드 아이템을 작성한다.

// Document의 onBeforeAdd/onBeforeUpdate 서버 이벤트 메소드
// 설계책임자의 값을 체크하고, World가 입력되어 있으면 에러가 발생한다.

Innovator inn = this.getInnovator();

// 설계 책임자의 값을 취득
string owned_by_id = this.getProperty("owned_by_id", "");
Item owned_by_id_item = this.getProperty("owned_by_id");
if (owned_by_id  == "" && owned_by_id_item == null){
    //무엇도 지정되어 있지 않다면, 정상 종료
    return this;
}

else if (owned_by_id == "" && owned_by_id_item !== null){
    // 설계 책임자의 값이 아이템에 지정되어 있는 경우, 그 아이템을 취득하고 체크
    if (owned_by_id_item.getAction() == "get"){
        owned_by_id_item = owned_by_id_item.apply();
        if (owned_by_id_item.isError() || owned_by_id_item.getItemCount() > 1){
            return inn.newError("설계책임자에 지정된 값이 옳지 않습니다.");
        }
        owned_by_id = owned_by_id_item.getID();
    }
    else if (String.IsNullOrEmpty(owned_by_id_item.getAction())){
        owned_by_id = owned_by_id_item.getID();
    }
    else {
        return inn.newError("설계책임자에 지정된 값이 옳지 않습니다.");
    }
}

// 설계 책임자에 지정된 ID가 World인 경우 에러가 표시
if (owned_by_id == "A73B655731924CD0B027E4F4D5FCC0A9"){
    return inn.newError("설계 책임자는 'World'외 다른 것으로 지정해주세요.");
}

return this;

① owned_by_id (설계책임자)의 값을 얻는다.

★참고정보★

 노란색 범위의 부분은 Aras의 화면상이 아닌, AML를 이용해 처리를 한 경우에 대응하기 위한 코드이다.

② 아이덴티티 "World"가 지정되면 에러 메시지가 출력된다.

(2) 이전의 예시와 동일하게, 아이템 타입의 "서버 이벤트" 태그에 작성한 메소드를 등록한다. 그리고 "onBeforeAdd" 혹은 "onBeforeUpdate"로 설정한다.

(3) 메소드가 잘 적용됐는지 확인한다.


참고자료

community.aras.com/ja-jp/b/blog/posts/aras-innovator-24

 

728x90