NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 팁 앤 테크
  • 매뉴얼

    팁과 테크니컬 노하우를 확인하세요.

    팁 앤 테크

    팁과 테크니컬 노하우를 확인하세요.

    본 사이트의 컨텐츠는 저작권법의 보호를 받으므로 무단 복사, 게재, 배포 등을 금합니다.

    커스텀 2. 엔지엠 RPA 매크로에서 함수(Function)를 사용하는 방법.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 함수(커스텀 모듈) 만들기 두번째 시간입니다. 이 내용을 학습하려면 먼저 첫번째 내용을 참고해서 프로젝트를 만들고, 커스텀 모듈을 만들 수 있는 준비를 마쳐야 합니다. 첫번째 내용은 아래 링크를 참고하세요.

    [ 1. 엔지엠 RPA 매크로에서 함수(Function)를 사용하는 방법 ]

     

    자~ 이제 간단한 사칙 연산을 수행하는 함수를 만들어 봅시다. 그전에~ 제가 실수한게 하나 있습니다. 죄송합니다ㅠㅠ; 커스텀 모듈 개발은 2가지 규칙이 존재합니다. 첫번째는 프로젝트명을 무조건 Custom으로 시작해야 한다는 거고, 두번째는 클래스명을 무조건 Model로 끝내야 한다는 겁니다. 규칙은 아래와 같습니다.

    • Project > CustomMyModule
    • Class > MyModel

     

    1부에서 만든 프로젝트 이름을 변경하기 위해 아래와 같이 프로젝트에서 F2를 눌러서 이름을 변경 해주세요.

    1lp2qmD.gif

     

     

    그리고, 모듈명도 변경해야 합니다. 프로젝트에서 우클릭 후 속성을 클릭하세요. 또는 프로젝트를 선택하고 Alt+F4를 누르면 속성창이 표시됩니다. 어셈블리 이름을 CustomFirstModule로 변경한 후 Ctrl+S 또는 파일 메뉴의 저장을 누르세요.

    lDOpdeV.gif

     

     

    이제 클래스명도 MyModel로 변경 해줍니다. Class1.cs 파일을 선택하고, F2를 눌러서 이름을 MyModel로 변경하세요.

    NFL5mU7.gif

     

     

    MyModel.cs 파일을 더블 클릭해서 코드뷰로 이동하고, 아래와 같이 코드를 변경 해주세요.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace FirstCustomModule
    {
        public class MyModel : NGM.Models.Interface.BaseCustomToolModel
        {
            public override string DisplayCategory => "NGMsoftware";
    
            public override string DisplayName => "사칙연산";
    
            public override void Execute()
            {
                MessageBox.Show("Welcome to NGMsoftware!");
            }
        }
    }

     

     

    정상 동작하는지 테스트하기 위해 메뉴의 빌드 > 솔루션 다시 빌드를 선택하세요. 컴파일이 성공하면 하단의 출력창에 빌드 성공 1이 표시됩니다.

    t3SPPZB.gif

     

     

    솔루션 탐색기에서 프로젝트를 선택하고 우클릭합니다. 그리고, "파일 탐색기에서 폴더 열기"를 선택하세요.

    ZH88MCg.png

     

     

    bin 폴더 안에 Debug 폴더가 있습니다. 이 안으로 들어가보면 내가 만든 라이브러리가 있습니다. CustomFirstModule.dll 을 바탕화면에 복사 해줍니다.

    1HGhneM.png

     

     

    엔지엠 에디터를 실행하세요. 아래 동영상을 참고해서 엔지엠 에디터 내부에 커스텀 모듈을 설치해줍니다. 설치가 완료되면 좌측 하단의 사용자 도구에 NGMsoftware 카테고리안에 "사칙연산" 액션이 보일겁니다. 커스텀 모듈을 만들고 에디터에 추가하는 방법은 단순합니다^^; 물론, 커스텀 모듈을 사용하기 위한 인증이나 절차를 추가할수도 있지만 이 부분은 나중에 알아보기로 할께요~

    u5TXrzc.gif

     

     

    이제 새로운 스크립트를 추가하고, 사칙연산 액션을 추가해보세요. 그리고, 실행하면 "Welcome to NGMsoftware!" 메세지가 표시됩니다.

    jtFKW47.gif

     


    이렇게 첫번째 커스텀 모듈을 만들어봤습니다. 생각보다 간단하죠~? 이제는 진짜 사칙연산을 수행할 수 있도록 기능을 추가 해볼께요. 다시 비주얼 스튜디오로 돌아와서 코드에 아래 내용을 추가 해줍니다. 내용이 좀 복잡해 보일수도 있는데요. 하나씩 천천히 알아보도록 하죠^^;

            [Category("Action")]
            [DisplayName("좌항")]
            [Description("방정식의 양번에서 좌항의 값을 입력하세요.")]
            [Browsable(true)]
            public int Parameter1 { get; set; }
    
            [Category("Action")]
            [DisplayName("우항")]
            [Description("방정식의 양번에서 우항의 값을 입력하세요.")]
            [Browsable(true)]
            public int Parameter2 { get; set; }

     

    우선, public int Parameter1속성(Property)입니다. 속성이란, 클래스가 가지는 본질 또는 성질을 말합니다. 쉽게 말하면 클래스가 사람이고, 속성은 그 사람의 이름, 나이와 같은 것들입니다. 클래스는 세상 만물 그 어떤것도 될 수 있습니다. 클래스가 자동차라면 속성은 자동차의 이름이나 년식등등이 됩니다. 속성은 변화할 수 있고, 변화할 수 없을수도 있습니다. 예를 들어 사람이라면 눈, 코, 입의 갯수와 같이 정해진 수가 있는 반면에 위에서 말한 나이와 같이 변화할 수 있기 때문입니다. 개념이 좀 어려울 수 있는데요. 개발자라면 아마도 다 이해하고 있는 내용일겁니다. 그리고, 대괄호([])는 해당 속성의 특성입니다. 웹개발에서는 속성과 특성을 혼용해서 사용하다보니 이 둘의 차이점을 잘 구분하지 못하는 경향이 있습니다. 속성은 클래스가 가진 성질을 말하며, 특성은 이 속성에 추가되는 성질입니다.

     

    사람 클래스에 이름과 나이라는 속성이이 있다고 생각 해봅시다. 우리나라에서만 이 프로그램을 사용한다면 크게 문제될게 없습니다. 하지만, 글로벌하게 프로그램을 제공해야 한다면 이름과 나이 속성에 특성을 부여할 수 있습니다. 국내와 국외의 로케일(Locale)에 따라 이름의 순서(성 이름 or 이름 성)를 변경하거나 나이를 만나이로 조정할 수 있습니다. 조금 이해가 가셨나요? 아무튼~ 반복 학습하다보면 언젠가는 이해가 갈겁니다. 이제 우리가 만든 양변(Parameter1, Parameter2)에 부여된 특성들을 하나씩 알아봅시다.

     

    카테고리(Category)는 아래 그림과 같이 속성창에서 속성을 ①②구분짓는 역할을 합니다. 카테고리는 Data, Action, Default등등... 다양하게 설정할 수 있습니다.

    oP32a5z.png

     

     

    DisplayName 특성은 사용자에게 보여질 속성의 이름을 설정합니다. 그리고, ②Description은 하단에 보여질 이 속성의 설명입니다.

    5iJWZ0A.png

     

     

    Browsable 특성은 사용자에게 이 속성을 노출해야 하는지 결정합니다. 만약, 이 특성의 값을 false로 설정한다면 사용자에게 안보이게 됩니다. 프로그래밍적으로 내부에서만 사용해야 한다거나 사용자에게 보여주고 싶지 않은 내부 관리용 속성인 경우 false로 설정해서 사용합니다. 이제 파라메터 2개를 받아서 사칙연산 후 결과 값을 만드는 속성을 하나 더 추가 해줍니다. 아래 코드에는 ReadOnly 특성이 하나 더 있습니다. 말 그대로 이 속성은 읽기 전용이라는 뜻입니다. 사용자가 이 값을 수정할 수 없게합니다.

            [Category("Data")]
            [DisplayName("결과 값")]
            [Description("사칙연산을 수행한 결과 값입니다.")]
            [Browsable(true)]
            [ReadOnly(true)]
            public int Result { get; set; }

     

    마지막으로 사용자가 어떤 연산을 할지 결정하게 할 속성을 추가해주면 됩니다. 뭔가 또 새로운게 등장했는데요. enum입니다. 생각해보니... 프로그래밍적인 내용들이 너무 많이 등장하는거 같습니다. 기본적인 프로그래밍 지식이 없다면... 이 예제를 잘 따라할 수 있을까하는 의문이 드는군요-_-;

            public enum Operator
            {
                덧셈 = 0,
                뺄셈 = 1,
                곱셈 = 2,
                나눗셈 = 3,
            }
    
            [Category("Action")]
            [DisplayName("사칙연산")]
            [Description("더하기 빼기 곱하기 나누기를 선택할 수 있습니다.")]
            [Browsable(true)]
            public Operator OperatorOption { get; set; }

     

    이제 진짜 마지막으로 Execute 함수만 구현하면 됩니다. Execute 함수는 엔지엠 에디터에서 사용자가 만든 커스텀 모듈 액션이 실행될 때 자동으로 호출됩니다. 따라서, 여기에 비즈니스 로직을 추가해야 합니다. 아래는 이 커스텀 액션의 전체 코드입니다.

    using System;
    using System.ComponentModel;
    
    namespace FirstCustomModule
    {
        [Serializable]
        public class MyModel : NGM.Models.Interface.BaseCustomToolModel
        {
            public enum Operator
            {
                덧셈 = 0,
                뺄셈 = 1,
                곱셈 = 2,
                나눗셈 = 3,
            }
    
            public override string DisplayCategory => "NGMsoftware";
    
            public override string DisplayName => "사칙연산";
    
            [Category("Data")]
            [DisplayName("결과 값")]
            [Description("사칙연산을 수행한 결과 값입니다.")]
            [Browsable(true)]
            [ReadOnly(true)]
            public int Result { get; set; }
    
            [Category("Action")]
            [DisplayName("좌항")]
            [Description("방정식의 양번에서 좌항의 값을 입력하세요.")]
            [Browsable(true)]
            public int Parameter1 { get; set; }
    
            [Category("Action")]
            [DisplayName("우항")]
            [Description("방정식의 양번에서 우항의 값을 입력하세요.")]
            [Browsable(true)]
            public int Parameter2 { get; set; }
    
            [Category("Action")]
            [DisplayName("사칙연산")]
            [Description("더하기 빼기 곱하기 나누기를 선택할 수 있습니다.")]
            [Browsable(true)]
            public Operator OperatorOption { get; set; }
    
            public override void Execute()
            {
                switch (OperatorOption)
                {
                    case Operator.곱셈:
                        Result = Parameter1 * Parameter2;
                        break;
                    case Operator.덧셈:
                        Result = Parameter1 + Parameter2;
                        break;
                    case Operator.뺄셈:
                        Result = Parameter1 - Parameter2;
                        break;
                    case Operator.나눗셈:
                        Result = Parameter1 / Parameter2;
                        break;
                }
            }
        }
    }

     

    다시 컴파일한 후 bin/Debug/CustomFirstModule.dll을 바탕화면에 복사 해줍니다. 그리고, 아래 동영상을 참고해서 기존에 설치된 모듈을 삭제하고, 새로운 모듈을 설치하세요.

    95M39x8.gif

     

     

    사칙연산 커스텀 모듈이 정상적으로 동작하는지 테스트 해보세요. 커스텀 모듈은 사용자가 원하는데로 만들 수 있습니다. 그리고, 인자로 받을 파라메터도 제한이 없죠. 특이한점은 프로그래밍 언어들이 대부분 하나의 결과 값만을 처리하도록 강제되어 있지만~ 이렇게 만들면 Data 카테고리에 결과값을 여러개 처리할 수 있게됩니다. 오토핫키나 파이썬과 같은 언어들은 결과 값을 여러개 내보낼 수 있습니다. 그러나 이 언어들도 미리 정의된 함수를 사용하다보니 결과 값의 수도 정해져 있습니다.

    gN9qBIC.gif

     

     

    커스텀 모듈을 만드는건 쉬운일이 아닙니다. 개발자라고 하더라도 개념이 생소할수도 있고, 프로세스가 어떻게 흘러가는지 잘 이해되지 않을수도 있습니다. 최대한 설명을 많이 하려고 했지만~ 대부분 프로그래밍 용어이다보니 글을 읽다가 포기하시는 분들도 많을겁니다. 주저하지 마시고, 커뮤니티의 질문과 답변에 문의하세요^^

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.