Thingworx Mashup 개발 시 화면간 이동으로 triggering되는 Load
이벤트와 Session에 설정한 사용자 지정 속성의 이벤트, 서비스의 동작에 따른 이벤트의 연쇄작용으로 테스트가 어려운 경우가 있습니다.
이번 글에서는 브라우저 개발자 도구 네트워크 기능을 이용한 Session 이벤트 제어와 서비스 이벤트 제어를 알아보도록 하겠습니다.
Thingworx Session 객체를 통한 Session 이벤트 제어 #
Session 값 조작에는 Thingworx 런타임객체 내의 Session 객체를 통해 Session 값 제어가 가능했지만,
Session 변수에 기본적으로 있는 Change 이벤트의 triggering에는 상위 TW 객체를 이용할 수 있습니다.
TW.publishSessionChange('a_test_globalSession');
위의 명령어를 이용하여 브라우저 개발자 도구에서 a_test_globalSession
의 a_test_globalSessionChanged
이벤트를 triggering 할 수 있으며, 해당 방식으로의 triggering은 실제 Session에 할당된 값이 변하지 않았더라도 이벤트를 강제로 발생시키게 됩니다.
값 변경으로 인한 SessionChange 이벤트 발생을 원할 경우에는 이전 글에서 사용한 Thingworx 런타임 객체 내의 Session 객체를 통한 값 제어로도 이벤트를 활성화 시킬 수 있습니다.
Thingworx Mashup에 할당되어있는 서비스 이벤트 제어 #
Session 이벤트와는 다르게 서비스 이벤트는 Mashup 자체에 할당되어있으며, Mashup이 로딩되면 해당 Mashup의 Data영역에 할당된 서비스들이 같이 올라오는 형태로 되어있습니다.
Runtime 객체를 통한 현재 Mashup 객체 정보 보기 #
브라우저 개발자 도구에서 화면에 로드 되어있는 Mashup 객체를 확인할 수 있습니다.
TW.Runtime.Workspace.Mashups;
위의 명령어를 이용하여 브라우저 개발자 도구에서 Mashup 객체에서 제공하는 정보들을 확인할 수 있습니다.
다음 내용을 통해 더 심화된 정보를 조회해 보겠습니다.
TW.Runtime.Workspace.Mashups.Current.Events;
위의 명령어를 통해 지난 글에서 만든 Mashup에서 현재 화면에 로드되어있는 Mashup을 찾고 그 Mashup 에 할당된 이벤트를 조회해 보겠습니다.
조회하고자 하는 Mashup은 Mashup이 로드되면 서비스가 실행되고, 서비스 호출이 완료되면 다음 서비스들이 연쇄적으로 실행되는 순서로 동작합니다.
명령어를 실행한 결과는 다음과 같습니다.
현재 화면의 이벤트를 조회한 결과, Mashup Load 이벤트와 Data로 분류되는 서비스들의 서비스 이벤트가 조회됨을 확인할 수 있습니다.
또한 브라우저 개발자 도구에서 Mashup Element를 선택하면 이벤트 수신기
탭에서 해당 Element에 할당되어있는 이벤트를 확인할 수 있는데, 현재 Mashup 에서는 actual-mashup
Element에서 서비스들의 ServiceInvokeCompleted
이벤트가 할당되어 있는 것을 확인할 수 있습니다.
$('div#actual-mashup').triggerHandler('Data_Things_slee_test_test_A');
해당 이벤트 들은 위의 명령어로 Element에 할당된 서비스들 자체 또는 서비스에 바인딩 된 이벤트 들을 triggering할 수 있습니다. test_A
서비스 자체를 실행시켜 보도록 하겠습니다.
test_A
서비스 자체를 실행시키니 test_A
서비스와 바인딩 되어있는 test_B
서비스가 연쇄적으로 실행된 것을 확인할 수 있습니다.
이와같이 테스트를 원하는 시점의 서비스부터 이후에 바인딩 되어있는 서비스들까지 연쇄적으로 실행시켜 로직을 부분적으로 테스트 할 수 있습니다.
해당 방법은 Mashup에서 테스트를 위한 바인딩을 수정할 필요없이, 브라우저 개발자 도구로만 수행되기 때문에 불필요한 백업 또는 테스트용 바인딩을 생성할 필요가 없는 장점이 있습니다.