현상 : 라이선스 갱신 이후 오케스트레이터 라이선스 조회 안 됨 + 라이선스 명칭이 studio에서 studio pro로 변경됨

추정원인 : DB 권한없음

조치 : DB  owner를 DB user account랑 일치시킴

 

듣고 정리한 케이스인데 보통 관련된 경우를 피하기 위해

온프레미스에서 오케스트레이터 설치 시 DB Owner 및 User에 권한을 부여하는 것을 꼭 체크해야 한다.

Retry Scope은 안정적인 수행을 위해서 자주 쓰인다.

기본적으로 Action 부분과 Condition으로 나뉘며,

Condition이 만족되지 않는 경우 혹은 Action 부분에서 에러가 났을 경우에만 Retry를 하게 된다.

 

1. 용도

 Retry Scope는 보통 페이지가 이동될 때 그 트리거를 제대로 발동했는지 체크하기 위해 사용된다. 가령 클릭이 씹혀서 다음 단계로 못 나가는 케이스를 방지한다.

2. 장단점

 Retry Scope은 사실 For each와 Try Catch의 조합으로 대체될 수 있다. 다만 그렇게 쓰는 것보단 훨씬 편하고 빠르게 쓸 수 있고 가독성도 좋은 편이라 자주 쓰인다. 그러나 에러났을 때 Retry Scope 내의 display name을 뱉어주지 않는다. 즉, Action중 어디서 에러가 났는지 알기 어렵다.

3. 주의점

 위의 장단점, 용도를 생각하면 Retry Scope은 2가지 원칙을 가지고 써야 한다.

 

  첫 째로 Action은 간결하게 짧게 끊어서 구성하며 트리거나 인식의 변화가 존재해야 한다.[각주:1]

  두 번째로 Condition은 항상 입력해준다.

 

  첫 번째 원칙은 간단하다. 디버깅이 힘드니까 쓰기 편한 만큼 짧게 짧게 끊어서 스텝 바이 스텝으로 체크해야 한다는 뜻이다. 두 번째 원칙은 Retry Scope에 대한 오해가 잦아서 나온 원칙이다. '에러나면 그냥 다시 해' 라는 식이나 '여기서 얼마나 대기해야 되는지 몰라서 반복해서 기다려'라는 식으로 쓰는 사람도 많기 때문이다. 그러나 그 경우 더 좋은 대체들이 얼마든지 있다. 특히 '반복해서 기다려'는 소스가 비효율적일뿐 원래 의도했던 결과라도 얻을 수 있는데, '에러나면 그냥 다시 해'라는 식으로 쓰게 되면 정작 클릭이 씹히는 경우 에러가 나지 않아 의도했던 결과를 얻지 못하게 된다.

 

 

++ 특이한 경우

Try Catch와 Retry Scope의 조합을 통해 For each-Try Catch를 더 간단하게 만들 수도 있다.

Retry Scope은 내부 세부 에러내용을 남기지 않지만 Try Catch를 안에 넣어 Exception 에러 로그를 찍어주고

재시도 하는 사이트도 있다.

이 경우 최종 Exception Message 컨트롤은 어려울 수 있으나 Break를 빼먹는 실수 등을 줄일 수 있다.

또한 로그는 실패하면서 남기 때문에 개발자가 디버그 하는 데는 크게 문제가 없다.

[역으로 현업에 스텝별 에러로그를 정해 보내고 싶다면 적절하지 않을 수 있다.]

  1. 액티비티 기준 3개가 넘지 않도록 추천한다. Click, Select, Type into, Get 등에 해당하는 것들이 적절하다. 무엇이 사라질 때까지 반복해야 하는 경우에만 exist류도 들어갈만 하다. [본문으로]

https://forum.uipath.com/t/uipath-chrome-manifest-v3-extension-released-with-2022-4-update/422572

 

UiPath Chrome Manifest V3 Extension Released with 2022.4 Update

UiPath Chrome Manifest V3 Extension Released with 22.4 Update Context The adoption of Manifest V3 represents one of the biggest shifts in the Google Chrome extensions platform since it launched a decade ago. Extensions using Manifest V3 will enjoy enhancem

forum.uipath.com

 

핵심을 요약하자면,

1. Chrome Manifest V3가 강제 적용되고 V2는 2023년 1월에 완전 종료된다.

2. V3가 적용되고 Studio 및 Robot이 업데이트 되면 특정 element에 simulate click이 더 이상 동작하지 않게 된다.

(특정 element란 하기에서 설명하는 Javascript 포맷으로 핸들링하는 곳이다. 거의 대부분 체크를 해봐야 된다고 본다.[당시에는 예시를 보고 되게 쫄았는데 정말 예시 수준으로 javascript: 포맷일 때나 안 된다])

--------------------------------------------------------------------------------------------------------------------------

Studio and Robot upgrades to 22.4 or newer versions, causes Simulate Click on certain/some webpage buttons that have handlers in “javascript: ” format to no longer work.

Example of a button with a “javascript:” handler

<form action="javascript: window.location.href='FormHandler.html';" method="get" novalidate="true">

Root cause

This is a technical limitation introduced by Google’s rollout of the Manifest V3 update to their Chrome extension platform.

----------------------------------------------------------------------------------------------------------------------------

어쨌든 내년까지는 무조건 해결돼야 하는 문제다.

지금 브라우저 열심히 크롬으로 전환하고 있는데, 관련 Simulate click들은 웬만하면 Default 클릭으로 바꿔야 겠다.

 

** 기존에 simulate click은 Default Click(hardware click)과는 달리 요소 레이어가 뒤쪽에 숨어있어도

Back단으로 클릭하기 때문에 소위 말하는 '헛손질'이 매우 적었다.

그런 장점때문에 select Item으로 선택되지 않는 것들을 Back단으로 클릭해 선택하거나,

모달팝업 광고에 가려진 버튼을 이슈없이 누르고 진행하는 등 쓸줄 아는 사람 입장에서는

프로젝트 수행의 안정성을 높이기 위해 필수로 클릭하고 가는 옵션이었다.

 

RPA에서 Excel 사용중 웬만한 '엑셀 자체의 문제'는 엑셀 패키지와 NPOI를 최신화하면 거의 해결된다.

이외 개발 실수로 인한 에러를 줄이는 방법 중,

Excel Application Scope으로 작업할 때 옵션을 어떻게 해야 하는지를 정리해보고자 한다.

Excel Application Scope의 옵션들

* Create if not exists : 이 옵션은 웬만하면 체크해제하길 바란다. 아무 빈 파일이나 만들어서 작업하는 게 아니라면 별로 쓸모가 없다. 파일이 없다면 에러가 나줘야 한다.

* InstanceCachePeriod : 엑셀 scope내에 있는 Activities들이 다 진행된 후 엑셀이 지속되는 시간. Excel Scope이 Loop안에 있거나 연속으로 엑셀을 쓰면서 세션이 간헐적으로 꼬인다면 이걸 높여줘야 한다. 하드웨어 스펙이 좋으면 보통 문제가 없으므로 3000으로 그냥 두고, 퍼포먼스가 필요하면 0으로 바꿔주자. [앞 뒤에 Delay를 줘도 RPC 에러같은 게 자꾸 날 때만 빼곤 그냥 0으로 해도 무방]

* Save Changes : 이 옵션도 해제하고 Save Workbook을 제일 하단에 두자. 특히 이걸 해제하면 엑셀 파트만 테스트하고 싶을 때 굳이 파일을 갈아줄 필요가 없이 Save Workbook만 Disable 걸어주면 된다. 또 이 옵션을 체크하느냐 마냐로 엑셀 작업의 속도가 유의미하게 달라진다.

* Visible : 이건 웬만하면 디버깅할 때만 켜도록 하자. 엑셀 내에서 특별히 뭔가 클릭해서 진행하는 게 있지 않은 이상, 켜면 퍼포먼스 손해다.

 

결국 다 해제하는 게 좋은데 Default가 모두 체크로 돼있어서 그건 조금 아쉽다.

쓸만한 것만 추렸다.

1. MaxIterations

기존에 무한 루프가 될 수 있었던 것을 방지하고자 자체 최대 루프 카운터를 설정할 수 있게 함

MaxIterations

개발규칙에 설정을 강제하면 초보적인 실수들을 방지할 수 있을 것으로 보인다.

[기존에는 가급적 Do While 사용을 지양하고 사용하는 경우 MaxCnt를 같이 할당]

 

2. 환경변수 지정

어디서나 쓸 수 있게 환경변수를 지정한다.

환경 변수 지정

이렇게 하면 모듈단위 테스트 하기가 어려워져서 되게 자주 쓰지는 않을 거 같지만,

이미 검증된 것들에 대해서는 이걸 써서 관리하는 것도 괜찮을 거 같다.

 

3. Start Job의 Arguments 지원

Start Job을 할 때, Main단에서 Arguments가 필수인 과제들이 간혹 있다.

왜 이제야 나왔지

 

4. For Each의 TypeArgument 자동 감지

이건 진작에 나왔어야 된다.

이게 안 됐다보니 항상 For each를 쓰고 내가 바꿔주거나

귀찮으면 안 바꾸고 그냥 item을 형변환해서 썼다. Item.ToString, Cint(Item) 등등

 

** 이 글을 쓰고 세션을 철저하게 끊고 테스트 해보니

A local license is required 라고 뜨면서 진행이 되지 않는다.

라이선스가 없으면 아예 진행이 되지 않는다.

커뮤니티 라이선스라도 있어야 한다.

이하의 방법은 Assistant로 로그인된 상태를 로컬에 잡아둔 다음 진행 가능하다.

 

 

※※※ 비지니스에서 쓸 땐, 꼭 정식 라이선스를 사용하세요 ※※

소스가 있는데 라이선스 없이 일단 실행시켜야 하는 경우가 있다.

물론 라이선스를 사야 하지만 일단 테스트 해보겠다는 식으로 요구하기도 한다.

그럼 윈도우 스케줄러든 뭐든 걸어서 Time schedule을 잡아야 한다.

 

AR 라이선스로 오케스트레이터 로그를 보면서 작업하고 싶은 경우는 아래 글을 참조하자.

https://jnaul.tistory.com/222

 

[Uipath] Attended Bot에 작업스케줄 거는 방법

Attended Bot으로 등록된 Device에는 기본적으로 오케스트레이터에서 프로세스를 Triggering 할 수는 없다. 원칙적으로는 그렇지만 대부분 Attended Bot이 훨씬 가격이 저렴하기 때문에 작업 스케줄러를 통

jnaul.tistory.com

 

라이선스가 없을 때도 컴파일 하는 게 UiRobot.exe인 건 매한가지다.

다만 파라미터가 프로세스 이름이 아닌, 소스 직접 실행의 형태가 된다.

 

"UiRobot경로" execute --file "project.json 경로"

 

이런 형태로 실행시키면 로컬로그만 있지만 실행이 가능하다.

 

*** 이렇게 하고 실행시켰는데 시작도 안 하고 그냥 끝나버린다면 권한문제일 가능성이 높다.

작업 스케줄러 작업의 속성에서 일반-보안옵션-작업을 실행할 때 사용할 사용자 계정을 Users로 바꿔보자.

변경 - 고급 - 지금 찾기 하면 Users가 나온다.

====================================

악용 금지

최종 input aruments까지 넣는 경우,

{uirobot_경로}/UiRobot.exe execute --process {ProcessName in Orchestrator} --folder {Folder name in Orchestrator} --input {'arg1' : 'Test1', 'arg2' : 'Test2'}

UiRobot.exe의 파라미터에 대한 공식 문서

https://docs.uipath.com/robot/docs/arguments-description

 

Arguments Description

To make it easier for you to work with command line arguments, navigate to the directory in which the Robot is installed using the change directory command. For example, if you did not change the default location of the Robot, you can use the following com

docs.uipath.com

 

IFRAME형태로 Wrapping되어 있어서

UI가 새롭게 뜰 때마다 Number가 달라지거나 Frame 내부 id값이 달라지는 등의 케이스가 많다.

특히 사내 시스템의 경우는 이렇게 개발된 경우가 많은데

이런 시스템에서는 iframe 관련 셀렉터가 자꾸 바뀌기 때문에 그 부분을 *처리 하거나

혹은 특정 특성만 지우면 인식이 안 된다.

 

오히려 거꾸로 iframe 관련 특성을 다 지워버리자.

이외 남은 것들만 남기면 "UiElement가 더 이상 유효하지 않습니다.(UiElement isn't valid anymore)"가 뜬다.

메세지와 달리 정작 유효성 검사는 초록색으로 뜨고 이상하게 잘 잡힌다.

처음엔 우연인줄 알았는데 매번 쓸 때마다 답답해서 혹시 되나하고 보면 잘 된다.

[물론 남은 셀렉터가 해당 화면에서 그 UI를 대표할 수 있을지는 판단을 하긴 해야 한다.]

일종의 버그느낌이지만 iframe 개발이 잦은 상황에서는 굉장히 유용하다.

# Ui framework는 Default로 둔다.

(혹시 안 되는 케이스가 있다면 댓글로 제보 부탁)

현상

Chrome Web UI를 누르는 작업에서 해당 오류 발생.

2개의 서로 다른 계정의 같은 작업 중 2번째에서만 저 에러가 나고 진행되지 못 함.

기존 같은 작업 중 해당 에러가 난 적은 없음.(간헐적인 에러)

 

추정 원

간헐적인 Uipath의 Chrome Extension과 Executor(UiRobot.exe)간 충돌

 

조치

추가로 발생하는지 모니터링

+ Recent posts