ServiceNow의 Client Script에서 Form에 입력된 단가와 수량에서 금액을 계산하고 설정합니다.

개요



금액 = 단가 * 수량과 같이 다른 입력값으로부터 산출해 설정하고 싶은 경우가 있다.
화면의 제출시에 실시하는 방법으로서는, Server Side Script의 Business Rule로 실장할 수 있지만, Business Rule로 실장했을 경우는 일단 제출하지 않으면 산출된 값의 확인을 할 수 없다.

(참고) ServiceNow에서 BusinessRule 테스트

여기서, 화면에 단가 또는 수량이 입력되면 클라이언트 스크립트에서 금액을 계산하여 설정하는 방법을 확인한다.

테이블은 아래에서 작성한 것을 사용하고 있다.

ServiceNow에서 테이블 만들기

환경



ServiceNow:KINGSTONE

절차



Client Script를 작성합니다.



Studio의 "Create Application File"에서 Client Develop 카테고리의 Client Script를 선택하고 Create를 클릭합니다.

다음과 같이 입력하고 "Submit"을 클릭하여 일단 저장합니다.



이번에는, Quantity 필드의 값이 변경되었을 경우의 처리를 작성한다.
unitPrice가 변경된 경우의 처리도 마찬가지로 작성할 필요가 있지만 여기서는 생략한다.

스크립트를 입력합니다.



다음과 같이 스크립트를 입력합니다.

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }

    var unitPrice = g_form.getDecimalValue('unitprice');
    if (unitPrice === '') {
        return;
    }

    jslog('unitPrice =' + unitPrice);
    var price = unitPrice * newValue;
    g_form.setValue('price', price + '');   
}

g_form을 사용하여 화면상의 입력값을 얻을 수 있다.
캐릭터 라인으로서 취득하는 경우는, 「g_form.getValue('필드명')」
수치로서 취득하는 경우는 「g_form.getDecimal('필드명')」과 같이 사용한다.

또, 값의 설정은 「g_form.setValue('필드명','값')」을 사용하지만,
값이 문자열이므로 "price + ''"로 숫자를 문자열로 설정합니다.

이상으로, 폼으로부터 Quantity의 값을 입력하거나, 변경하면 price가 자동적으로 설정된다.

마지막으로



Client Script는 HTML 내에 javascript로 저장되어 있기 때문에 client script를 변경한 후에는 Form을 다시 읽지 않으면 변경이 반영되지 않으므로 주의가 필요하다.

또, isLoading으로 처리를 빠져 있는 것은 폼의 로드시에는 자동 계산의 실시를 하지 않게 하기 위해서이다.

또한 Business Rule과 Client Script의 구분에 대해서이지만 Client Script는 화면에서 입력한 경우에만 작동하지만, Business Rule의 경우는 화면을 풀지 않는 정기적으로 시작하는 스크립트 처리(배치 처리) )에서 레코드를 삽입하는 경우에도 항상 수행되는 이점이 있습니다.
Client Script가 화면상에서 산출되므로 사용자가 Submit 전에 값을 확인할 수 있는 이점이 있다. 각각의 장점을 생각해 어느 쪽을 잡을까, 또는 양쪽 모두 사용하는지를 검토하는 것이 좋을 것이다.

좋은 웹페이지 즐겨찾기