예제

DataStoreRuleObjectCreator의 동작은 예제에 가장 잘 설명되어 있습니다. 이 예제는 범용 액세스 모듈을 기반으로 합니다.

IEG 스크립트가 가정의 수입 데이터를 캡처할 수 있습니다. 가정에는 임의의 수의 개인이 포함될 수 있으며 각 개인에게는 임의의 수의 수입 세부사항이 있을 수 있습니다.

다음은 데이터 저장소 스키마 구조의 간단한 보기입니다.

- Application:
  - Person (0..n):
    - firstName (String)
    - lastName (String)
    - Income (0..n):
      - type (Code from the IncomeType code table)
      - amount (Number)

국민(John)이 자체 검사를 수행하고 가정(John과 그의 아내인 Mary) 및 수입 세부사항(John은 무직이며 Mary는 두 개의 시간제 직업이 있음)에 대한 증거를 기록합니다. John의 증거는 다음과 같이 데이터 저장소에 레코드로 저장됩니다.

- Application #1234:
  - Person #1235:
    - firstName: John
    - lastName: Smith
    - Income: <no records>
  - Person #1236:
    - firstName: Mary
    - lastName: Smith
    - Income #1237:
      - type: Part-time
      - amount: 25
    - Income #1238:
      - type: Part-time
      - amount: 30

이 유형의 검사에 사용하도록 구성된 CER 규칙 세트에는 다음과 같은 일부 규칙 클래스가 포함되어 있습니다(NB 프로그램 규칙 클래스가 표시되지 않음).

<?xml version="1.0" encoding="UTF-8"?>
<RuleSet name="DataStoreMappingExample"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation=
"http://www.curamsoftware.com/CreoleRulesSchema.xsd">

  <!-- NB CDS 엔티티 유형 "신청"에 대한 규칙 클래스가 없습니다.
       신청에 직접 저장된 속성은 규칙에 필요하지
       않습니다. 따라서 사용하지 않을 규칙 오브젝트를
       작성할 이유가 없습니다. -->

  <!-- 이 규칙 클래스의 이름이 CDS 엔티티 유형의 이름과
       일치합니다. -->
  <Class name="Person">
    <!-- 이 규칙 속성의 이름이 CDS 엔티티 유형의
         속성 이름과 일치하므로 DataStoreRuleObjectRetriever가
         해당 값을 자동으로
         지정합니다. -->
    <Attribute name="firstName">
      <!-- 규칙 속성의 유형은 CDS 속성 유형의 유형과
           일치해야 합니다. 그렇지 않으면 CER이
           런타임 오류를 발행합니다. -->
      <type>
        <javaclass name="String"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <!-- NB lastName의 CDS 속성에 대한 규칙 속성이 없습니다.
 -->

    <!-- "childEntities_<rule class
 name>" 패턴과 일치하는 규칙 속성은
         DataStoreRuleObjectRetriever에서 특수하게
         처리합니다.
    
         DataStoreRuleObjectRetriever는 이 속성의 값을
         CDS에 있는 이 개인의 레코드에 속하는 하위 수입
         레코드에서 작성된 모든 규칙 오브젝트가 되도록
         지정합니다. -->
    <Attribute name="childEntities_Income">
      <!-- 유형은 Income 규칙 오브젝트의 목록이어야 합니다. -->
      <type>
        <javaclass name="List">
          <ruleclass name="Income"/>
        </javaclass>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>
  </Class>

  <!-- 이 규칙 클래스의 이름이 CDS 엔티티 유형과 일치하지
 않으므로
       DataStoreRuleObjectRetriever가 이 규칙 클래스의 규칙 오브젝트를
       작성하지 않습니다. -->
  <Class name="Benefit">
    <Attribute name="amount">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>
  </Class>

  <Class name="Income">
    <!-- "parentEntity"라는 규칙 속성은
        DataStoreRuleObjectRetriever에서
        특수하게 처리합니다.
      
        DataStoreRuleObjectRetriever는 이 속성의 값을
        CDS에 있는 이 수입 레코드의 상위인
        개인 레코드에서 작성된 규칙 오브젝트가 되도록
        지정합니다. -->
    <Attribute name="parentEntity">
      <!-- 유형은 단일 Person 규칙 오브젝트이어야 합니다. -->
      <type>
        <ruleclass name="Person"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <Attribute name="type">
      <type>
        <!-- 이 속성의 유형은 CDS 도메인 정의와 일치하는
             올바른 코드 테이블을 지정해야 합니다. -->
        <codetableentry table="IncomeType"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <Attribute name="amount">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <!-- DataStoreRuleObjectRetriever가
             CDS 레코드의 값으로부터 값을 자동으로 "지정"하므로
             이 파생 사항은 실행되지 않습니다.
             값이 지정되면 CER이 값을 계산하려고 시도하지
             않습니다.
        
             일반적으로  DataStoreRuleObjectRetriever가
             입력할 속성은 규칙 세트의 독립형 테스트와
             DataStoreRuleObjectRetriever를 사용한 테스트 사이의
             혼동을 피하기 위해 <specified/>로 표시해야
             합니다.
        -->
        <Number value="123"/>
      </derivation>
    </Attribute>

    <!-- 이 속성이 CDS 엔티티 유형에 없으므로
         입력되지 않습니다. 이 값은 일반적인 CER 방식으로
         다른 규칙 속성에서 파생되므로 이 동작은
         바람직합니다. -->
    <Attribute name="isCountable">
      <type>
        <javaclass name="Boolean"/>
      </type>
      <derivation>
        <choose>
          <type>
            <javaclass name="Boolean"/>
          </type>
          <test>
            <reference attribute="type"/>
          </test>
          <when>
            <condition>
              <Code table="IncomeType">
                <String value="Full-time"/>
              </Code>
            </condition>
            <value>
              <true/>
            </value>
          </when>
          <when>
            <condition>
              <Code table="IncomeType">
                <String value="Part-time"/>
              </Code>
            </condition>
            <value>
              <true/>
            </value>
          </when>
          <otherwise>
            <value>
              <false/>
            </value>
          </otherwise>
        </choose>
      </derivation>
    </Attribute>

    <!-- 이 규칙 속성이 계산되지 않거나
         CDS 엔티티 유형의 속성에 해당하지
         않습니다.
    
         런타임 시 이 속성의 값을 참조하면
         CER이 런타임 오류를 보고합니다.
         "값을 사용하려면 먼저 지정해야
          합니다(계산할 수 없음)."
    -->
    <Attribute name="employerName">
      <type>
        <javaclass name="String"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>
  </Class>

</RuleSet>

John이 자체 검사를 완료하면 범용 액세스 모듈이 위의 CER 규칙 세트를 로드하고 CER 세션을 작성합니다.

범용 액세스 모듈이 DataStoreRuleObjectCreator를 호출하고 루트 데이터 저장소 레코드를 지정합니다(Application #1234).

DataStoreRuleObjectCreator가 Application #1234의 모든 하위 레코드를 검색하고 다음과 같이 처리합니다.

마지막으로 범용 액세스 모듈이 규칙 세트에 프로그램, 적격성 및 설명에 대한 표준 질문을 합니다. 이러한 질문에 대해 응답할 때 프로그램의 규칙 클래스(위의 예제에는 표시되지 않음)가 규칙 오브젝트(DataStoreRuleObjectCreator가 작성함)에 액세스합니다.

애플리케이션 데이터 저장소와 해당 스키마에 대한 자세한 정보는 Creating Datastore Schemas 안내서를 참조하십시오.