ServiceNow에서 BusinessRule에서 레코드를 삽입할 때 금액을 자동으로 계산하고 설정

개요



단가(UnitPrice)와 수량(Quantity)을 가지는 테이블을 작성한다.
Business Rule에서 테스트에 레코드를 등록하기 전에 단가와 수량에서 금액을 계산하여 금액(Price)으로 설정합니다. Bisiness Rule에서 금액 계산은 Script Include에서 만든 API를 시작합니다.
이러한 일련의 처리를 ServiceNow의 Automated Test Framework를 사용하여 테스트를 실시한다.

환경



ServiceNow:KINGSTONE

준비



테이블 만들기



새 테이블을 Label="Sales", Name="x_211750_angular_a_sales"(자동 생성) 작성하고, 아래의 3개의 필드를 추가한다.


Column label
Column Name
유형
길이


UnitPrice
unitprice
Currency
20

Quantity
quantity
Integer
10

Price
price
Currency
20


Script Include에서 금액 계산 API 만들기



Studio에서 Create Application File에서 Server Development 카테고리에서 Script Include를 선택하고 Create를 클릭하십시오.
Name = "CalcPrice"로 Script에는 다음을 입력한다.
var CalcPrice = Class.create();
CalcPrice.prototype = {
    initialize: function() {
    },
    calc:function(unitprice, quantity) {
        gs.info('service include script called!');
        return unitprice * quantity;
    },

    type: 'CalcPrice'
};

단순히 단가와 수량을 곱하여 그 결과를 반환하는 함수다.

Business Rule 만들기



Sale 테이블에 삽입하기 전에 금액을 자동으로 설정하는 BusinessRule을 만듭니다.
Studio의 Create Application File에서 Server Development 카테고리의 Business Rule을 선택하고 Create를 클릭한다.
설정 화면에서 다음과 같이 설정합니다.


항목 이름



이름
CalcPrice


x_211750_angular_a_sales

액티브
확인

Advanced
확인

When
before

삽입
확인


고급 탭의 스크립트에 다음을 입력합니다.
(function executeRule(current, previous /*null when async*/) {

    gs.info('called before insert to Sales');
    var quantity =current.getValue('quantity');
    var unitPrice = current.getValue('unitprice');

    var calculator = new CalcPrice();

    var price = calculator.calc(unitPrice,  quantity);

    current.setValue('price', price);


})(current, previous);

여기까지 준비가 완료됐다.

테스트 작성



테스트 퍼스트라고 하는 생각으로부터 하면, 테스트를 작성하고 나서, 테스트를 실행해 테스트 결과가 NG가 되는 것을 확인하고 나서, 테스트가 OK가 되도록(듯이) 소스 코드를 작성하는 것이 근육이지만, 여기서는 동작하는 코드를 쓰고 나서 테스트를 작성, 실시하고 있다.

테스트는 Studio가 아닌 응용 프로그램 브라우저에서 만듭니다.
Automated Test Framework에서 Tests를 선택하고 New로 새 테스트를 작성합니다.

우선은, Script Include의 CalcPrice의 테스트 코드로부터 작성한다.
테스트 설정 화면의 "Add Test Step"에서 테스트 단계를 추가합니다.
Server 카테고리에서 Run Server Side Script를 선택하고 Next를 클릭한다.

Test Step 설정 화면의 처음부터 입력된 Script를 삭제하고 다음과 같이 입력합니다.
(function(outputs, steps, stepResult, assertEqual) {
    // add test script here
    var calculator = new CalcPrice();

    var price = calculator.calc(12.5, 2);

    assertEqual({name: "task gr exists", shouldbe: 25, value: price});


})(outputs, steps, stepResult, assertEqual);

덧붙여 처음부터 입력되고 있는 Script는 대부분이 코멘트로 코멘트내에 테스트의 작성 방법이 기술되고 있다.

Script Include 테스트 실행



테스트를 실행하려면 테스트 설정 화면에서 "Run Test"를 클릭하면됩니다.


이번은 테스트 성공하고 있지만, 테스트 NG가 되는 경우도 봐 두는 것이 좋을 것이다.



Business Rule 테스트



Sales 테이블에 레코드를 추가하여 Price가 자동 계산되어 설정되는 것을 테스트로 확인한다.
새롭게 테스트를 작성해, 「Add Step」으로 테스트를 추가해, 「Server」카테고리의 「Record Insert」를 선택해 「Next」를 클릭한다.
다음 설정으로 추가합니다.



또한 Add Test에서 테스트를 추가하고 Server 카테고리에서 Record Query를 선택하고 Next를 클릭한다.
다음 설정으로 추가합니다.


Price=16의 레코드가 취득가능한지를 테스트로 확인 실시한다.

Business Rule 테스트 실행



테스트를 실행하고 테스트 결과를 확인합니다.
Application Log에 Scipr에서 출력한 로그가 출력되고 있는 것도 확인해 둔다.





참고



화면의 자동 테스트는 이쪽.

ServiceNow에서 Form의 자동 테스트를 수행하는 방법

좋은 웹페이지 즐겨찾기