NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • NGM 6
  • 매뉴얼

    NGM 6

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

    디자이너 엔지엠 RPA의 프레임워크 개발시 액션 실행 정보를 이벤트로 받아보기.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 이 내용은 개발자를 대상으로 작성되었으며, 학습하려면 [ 이 글 ]을 먼저 읽어보고 오셔야 합니다. 자~ 이전 글인 로그 기록을 학습하셨나요? 그러면 좀 더 파워풀하게 스크립트 플레이어를 제어할 수 있는 방법에 대해 알아보겠습니다. 아래와 같이 폼을 디자인하고 코드를 추가 해봅시다.

    0crqlb8.png

     

     

    액션의 정보는 실행 전 액션과 실행 후 액션을 가져올 수 있습니다. 이벤트를 둘다 추가해주세요.

    using System;
    using System.IO;
    using System.Windows.Forms;
    
    namespace FrameworkTest
    {
        public partial class Form1 : Form
        {
            private Designer.Component.ScriptView sv = null;
    
            public Form1()
            {
                InitializeComponent();
                
                // isBackground 파라메터를 false로 명시하지 않으면 뷰를 생성하지 않고 백그라운드로 실행됩니다.
                sv = new Designer.Component.ScriptView(
                    new Designer.ComponentDefault.MainView(), 
                    Path.Combine(GetDefaultScriptPath(),
                    "웹테스트.ngs"), false);
    
                // 로그를 보려면 Output을 활성화 해야 합니다.
                sv.MainView.IsOutput = true;
                // 액션에서 로그를 기록할 카테고리를 설정합니다.
                sv.MainView.ShowApplicationOutput = true;
                sv.MainView.ShowConditionOutput = true;
                sv.MainView.ShowDebugOutput = true;
                sv.MainView.ShowDefaultOutput = true;
                sv.MainView.ShowFunctionOutput = true;
                sv.MainView.ShowHardwareOutput = true;
                sv.MainView.ShowKeyboardOutput = true;
                sv.MainView.ShowMemoryOutput = true;
                sv.MainView.ShowMouseOutput = true;
                sv.MainView.ShowTimeOutput = true;
                (sv.MainView as NGM.Interface.IExternalView).LogReceived += Form1_LogReceived;
                sv.Player.BeforeCurrentAction += Player_BeforeCurrentAction;
                sv.Player.AfterCurrentAction += Player_AfterCurrentAction;
            }
    
            private void Player_BeforeCurrentAction(object sender, NGM.Events.TreeNodeActionArgs e)
            {
                throw new NotImplementedException();
            }
    
            private void Player_AfterCurrentAction(object sender, NGM.Events.TreeNodeActionArgs e)
            {
                throw new NotImplementedException();
            }
    
            private void Form1_LogReceived(object sender, NGM.Events.LogWriteArgs e)
            {
                richTextBox1.Invoke((Action)delegate
                {
                    richTextBox1.AppendText($"{e.Message}{Environment.NewLine}");
                    richTextBox1.ScrollToCaret();
                });
            }
    
            private string GetDefaultScriptPath()
            {
                // 기본 폴더 위치를 만듭니다.
                return Path.Combine(
                    Environment.GetFolderPath(
                        Environment.SpecialFolder.MyDocuments), "NGM6", "Script");
            }
    
            private void button1_Click(object sender, System.EventArgs e)
            {
                try
                {
                    // 스크립트를 실행합니다.
                    sv.Play();
                }
                catch (Exception ex)
                {
                    // 실행중에 에러가 발생하면 사용자에게 메시지를 표시합니다.
                    MessageBox.Show(ex.Message);
                }
            }
        }
    }

     

    이벤트 핸들러는 기본 생성자에 추가된 아래 내용입니다.

    sv.Player.BeforeCurrentAction += Player_BeforeCurrentAction;
    sv.Player.AfterCurrentAction += Player_AfterCurrentAction;

     

    액션 실행 전과 액션 실행 후 이벤트 처리기를 구현해야 하겠죠? 아래 내용은 액션에 아이디가 설정된 경우에만 로그를 기록하는 방법입니다. 만약, 조건 관련된 액션이 있다면 조건의 결과에 따라 로그를 처리하도록 할수도 있습니다. 이 내용은 아주 중요한 내용입니다.

    private void Player_BeforeCurrentAction(object sender, NGM.Events.TreeNodeActionArgs e)
    {
        var actionModel = e.ActionItem.Tag as NGM.Models.BaseModel;
    
        if (!string.IsNullOrEmpty(actionModel.ID))
        {
            richTextBox1.Invoke((Action)delegate
            {
                richTextBox1.AppendText($"{actionModel.ID}{Environment.NewLine}");
                richTextBox1.ScrollToCaret();
            });
        }
    }
    
    private void Player_AfterCurrentAction(object sender, NGM.Events.TreeNodeActionArgs e)
    {
        var actionModel = e.ActionItem.Tag as NGM.Models.BaseModel;
    
        if (!string.IsNullOrEmpty(actionModel.ID))
        {
            richTextBox1.Invoke((Action)delegate
            {
                richTextBox1.AppendText($"{actionModel.ID}{Environment.NewLine}");
                richTextBox1.ScrollToCaret();
            });
        }
    }

     

    우선, 실행한 결과를 볼까요? 스크립트를 에디터로 열어서 보면 2번씩 로그가 찍혀 있는걸 알 수 있습니다. 이는 실행 전과 실행 후가 동일한 로직으로 되어 있기 때문입니다.

    9RjhEwq.png

     

     

    예제는 간단하지만, 좀 더 기술적인 부분을 얘기 해봐야 합니다. 실행 전과 후 이벤트는 동기적으로 동작합니다. 그렇기 때문에 디버깅을 할 때 각각의 값을 확인하고 추가적인 로직을 알맞게 구성할 수 있는 막강한 방법을 제공합니다. 원래 기획은 단순히 모델만을 제공하려 했으나, 전체적인 구조를 가져올 수 있도록 했습니다. 중단점(Break Point)을 걸어보세요.

    zzCGiGw.png

     

     

    직접 실행창에서 아래와 같이 테스트 해보면 현재 실행중인 액션 이외에도 접근이 가능한걸 알 수 있습니다. 이 의미는 읽기, 쓰기 속성(Property)은 미리 처리하거나 값을 위변조 할 수 있다는 뜻입니다. 사용자가 서비스하는 제품과 엔지엠 RPA의 개별 동작을 유기적으로 결합해서 사용할 수 있는 강력한 방법을 제공합니다.

    FVy5el5.png

     

     

    대부분의 RPA 서비스 회사들은 대기업 위주로 서비스되고 있습니다. 공장 또는 공정 자동화도 대기업 위주였습니다. 이 부분은 이미 포화 상태라 더이상 비즈니스가 이루어지지 않고 있습니다. 유지보수로는 회사가 성장하는데 한계가 명확하거든요. 그래서, Office Automation으로 눈을 돌리게 되었고, 매크로에서 확장된 개념인 RPA가 나오게 되었습니다. 대기업을 바라보는 RPA 서비스들은 1년 라이센스가 1,000만원에서 3,000만원까지 다양합니다. 글로벌 대기업들이 뛰어들고 있는 분야죠. 하지만, 엔지엠 RPA는 개인 및 중소기업의 자동화에 집중하고 있습니다. 1년에 수천만원에 달하는 라이센스를 지불하면서 수익을 보전하기는 불가능합니다. 하지만, 엔지엠의 높은 품질과 가격은 가성비로 보면 충분히 경쟁력이 있다고 생각합니다.

     

    RPA는 아직도 개발되지 않은 많은 산업 분야가 존재합니다. 단순 반복적인 업무를 자동화하여 고용과 인력이 감소한다는 의미는 아닙니다. RPA는 단순 반복적인 업무를 컴퓨터에게 처리하도록 하고, 담당자는 좀 더 생산적이고 창의적인 업무에 시간을 할당할 수 있도록 도와줍니다. 모두에게 평등한건 주어신 시간뿐입니다. 이 시간을 얼마나 효율적으로 분배하고 사용하는지에 따라 차이가 발생합니다. 같은 1시간을 사용하더라도 생산적이고 창의적인 생각을 하는게 어떨까요?

    ※ 업무 로직 개발 및 컨설팅 의뢰는 [ 관리자에게 1:1 문의 ] 해주세요.

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.