코드

애플리케이션은 애플리케이션에서 알림을 처리하는 방법을 결정하기 위해 NotificationDelivery 콜백 인터페이스를 구현해야 합니다.

워크플로우 엔진은 알림을 처리하기 위해 curam.util.workflow.impl.NotificationDelivery 구현 클래스에서 deliverNotification 메소드를 호출합니다. 엔진은 할당 전략을 통해 결정된 할당 대상 목록 및 이 애플리케이션 메소드에 필요한 알림의 세부사항을 모두 전달합니다.

curam.custom.notifications.notificationdelivery 애플리케이션 특성은 워크플로우 엔진이 알림을 처리하기 위해 사용하는 NotificationDelivery 인터페이스 구현을 정의합니다.

이 기본 구현 클래스의 deliverNotification 메소드는 오버로드됩니다. 그 이유는 다양한 할당 전략 유형이 서로 다른 형식의 할당 대상을 리턴하기 때문입니다. 하지만 이것은 구현 세부사항으로, 모든 버전의 메소드에 대한 비즈니스 처리는 동일해야 하므로 사용자 정의 알림 제공 클래스 개발자는 이 문제를 별도로 처리해서는 안 됩니다.

package curam.util.workflow.impl;

      ...

      public interface NotificationDelivery {

        boolean deliverNotification(
          final NotificationDetails notificationDetails,
          final Object allocationTargets);

        boolean deliverNotification(
            final NotificationDetails notificationDetails,
            final Map allocationTargets);


        boolean deliverNotification(
            final NotificationDetails notificationDetails,
            final String allocationTargetID);

            ...
      }

이 문제를 해결하기 위해 curam.core.sl.impl.DefaultNotificationDeliveryAdapter에서는 작업 분석기를 구현하기 위한 보다 효율적인 메커니즘을 제공합니다. 이 클래스는 다른 메소드를 구현하고 입력 매개변수를 할당 대상 목록으로 변환하여 사용자 정의 알림 제공 로직 개발자가 이 클래스를 확장하여 할당 대상 소스와 관계없이 호출되는 메소드를 구현할 수 있도록 합니다.

package curam.core.sl.impl;

      ...

      public abstract class DefaultNotificationDeliveryAdapter
        implements curam.util.workflow.impl.NotificationDelivery {

        public abstract boolean deliverNotification(
          final NotificationDetails notificationDetails,
          final AllocationTargetList allocationTargets);

            ...
      }

이 어댑터 클래스 외에 애플리케이션에는 기본 알림 제공 구현이 제공됩니다. 이 클래스를 curam.core.sl.impl.DefaultNotificationDelivery라고 하며 어댑터 확장 방법에 대한 예로 사용되기도 합니다.

알림 제공 전략은 DELIVERYMECHANISM 코드 테이블에 나와 있습니다. 새 전략을 추가한다는 것은 단순히 이 코드 테이블을 새 전략(예: SMS)으로 확장하고 이 코드를 인식하고 적절한 로직을 수행하는 제공 전략을 구현한다는 것을 의미합니다. 하지만 알림 제공 클래스는 단일 애플리케이션 특성을 사용하여 설정되기 때문에 curam.core.sl.impl.DefaultNotificationDelivery 클래스를 대체하면 기본 제공 메커니즘을사용할 수 없게 됩니다. 기본 제공 메커니즘을 대체하지 않고 확장하려면 사용자 정의 클래스에서 원래 기능을 유지하는 방식으로 curam.core.sl.impl.DefaultNotificationDelivery를 확장해야 합니다. curam.core.sl.impl.DefaultNotificationDelivery 클래스는 이 점에 유의하여 구현한 것입니다.

package curam.core.sl.impl;

 public class DefaultNotificationDelivery
     extends DefaultNotificationDeliveryAdapter {

   public boolean deliverNotification(
       NotificationDetails notificationDetails,
       AllocationTargetList allocationTargetList) {
     return selectDeliveryMechanism(
       notificationDetails, allocationTargetList);
   }

   protected boolean selectDeliveryMechanism(
     NotificationDetails notificationDetails,
      AllocationTargetList allocationTargetList) {

     boolean notificationDelivered = false;
     if (notificationDetails.deliveryMechanism.equals(
         curam.codetable.DELIVERYMECHANISM.STANDARD)) {
       notificationDelivered = standardDeliverNotification(
         notificationDetails, allocationTargetList);
     } else if (
     ...
     return notificationDelivered;
   }

   ...

 }

curam.core.sl.impl.DefaultNotificationDelivery 클래스는 추상 어댑터에서 deliverNotification 메소드를 구현하지만 보호된 메소드에 사용할 메커니즘의 ID를 즉시 위임합니다. 보호된 selectDeliveryMechanism 메소드는 아래 예에서처럼 사용자 정의 제공 메커니즘을 식별하고 적절한 조작을 수행하기 위해 서브클래스로 대체할 수 있습니다.

public class CustomNotificationDeliveryStrategy
     extends DefaultNotificationDelivery {

   protected boolean selectDeliveryMechanism(
     NotificationDetails notificationDetails,
      AllocationTargetList allocationTargetList) {

     boolean notificationDelivered = false;
     boolean superNotificationDelivered = false;
     superNotificationDelivered = super.selectDeliveryMechanism(
       notificationDetails, allocationTargetList);
     if (notificationDetails.deliveryMechanism.equals(
       curam.codetable.DELIVERYMECHANISM.CUSTOM)) {
       notificationDelivered = customDeliverNotification(
         notificationDetails, allocationTargetList);
     }
     return (superNotificationDelivered || notificationDelivered);
   }
 }

사용자 정의 클래스의 selectDeliveryMechanism 메소드는 자체 로직을 실행하기 전에 먼저 해당 수퍼클래스로 위임됩니다. 이와 같이 기능을 확장하면 상위 클래스가 인식하는 특정 코드를 알지 못해도 사용자 정의 클래스에서 기본 제공 메커니즘을 호출할 수 있습니다. 이 방식 또한 간편하게 업그레이드됩니다. 마치 새 기능을 사용하기 위해 여기에 설명된 대로 구현된 사용자 정의 클래스를 변경할 필요가 없는 기본 제공 메커니즘을 Cúram의 후속 버전이 지원하는 경우와 유사합니다.

위의 알림 제공 함수에서 리턴되는 부울 플래그는 알림을 시스템에 있는 한 명 이상의 사용자에게 제공되었을 경우 워크플로우 엔진에 알리는 데 사용됩니다. 알림이 제공되지 않았을 경우에는 엔진이 이 사실을 설명하는 워크플로우 감사 레코드를 작성합니다.