readall

규칙 클래스의 모든 외부 규칙 오브젝트 인스턴스(즉, 클라이언트 코드로 작성된 인스턴스)를 검색합니다. 내부 규칙 오브젝트 인스턴스(즉, 규칙에서 작성된 인스턴스)는 검색되지 않습니다.

규칙 오브젝트 작성에 대한 자세한 정보는 외부 및 내부 규칙 오브젝트의 내용을 참조하십시오.

Cúram V6부터 readall을 사용하여 선택적 ruleset XML 속성 값을 설정하여 서로 다른 규칙 세트에서 규칙 클래스의 인스턴스를 검색할 수 있습니다.

Cúram V6부터 readall 표현식이 검색 기준에 있는 값과 일치하는 특정 속성 값이 있는 규칙 오브젝트만 검색하도록 readall 표현식에서 선택적 match 요소를 지원합니다.

중요사항: Cúram V6 이전에는, 기준에 맞는 규칙 오브젝트를 검색하는 한 방법으로 filter 표현식에서 readall을 랩핑합니다.

그러나 DatabaseDataStorage를 사용하는 CER 세션의 경우(CER 세션 참조) Cúram V6에 도입된 readall / match 구문을 사용하면 일반적으로 성능이 더욱 좋습니다. 다음과 같은 경우 새 구문의 성능이 더 우수합니다.

  • readall 표현식을 포함하는 속성이 처음 계산되는 경우, 및
  • CER 및 종속성 관리자가 readall 표현식을 포함하는 속성의 유효 기간이 지났으며 다시 계산해야 함을 식별하는 경우(종속성 관리자 참조).

규칙 오브젝트가 둘 이상의 기준과 일치해야 하는 경우 readall / match 구문을 사용하여 가장 많이 선택되는 속성에 대해 일치시킨 다음 결과를 filter로 랩핑하여 다른 기준을 필터하십시오.

팁: 규칙 클래스 인스턴스가 하나뿐인 경우(필터링 또는 일치 후) singleitem 표현식으로 표현식을 랩핑하십시오.
<?xml version="1.0" encoding="UTF-8"?>
<RuleSet name="Example_readall"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation=
"http://www.curamsoftware.com/CreoleRulesSchema.xsd">
  <Class name="Person">

    <Attribute name="socialSecurityNumber">
      <type>
        <javaclass name="String"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <!--
    세션의 기본으로 사용된 유일한 청구를
    검색합니다.
    -->

    <Attribute name="claim">
      <type>
        <ruleclass name="Claim"/>
      </type>
      <derivation>
        <singleitem onEmpty="error" onMultiple="error">
          <readall ruleclass="Claim"/>
        </singleitem>
      </derivation>
    </Attribute>


    <!--
    이 사람의 Benefit 규칙 오브젝트를 검색합니다(외부 스토리지를
    조회하여 클라이언트 코드에서 작성할 가능성이 큼).

    이 구현에서는 <readall>과 중첩된 <match>를 사용하여
    일치하는 규칙 오브젝트만 검색하고 (데이터 스토리지에 따라)
    아래의 "benefitsFilterReadall" 구현보다 성능이
    더 우수합니다.
    -->

    <Attribute name="benefitsReadallMatch">
      <type>
        <javaclass name="List">
          <ruleclass name="Benefit"/>
        </javaclass>
      </type>
      <derivation>
        <readall ruleclass="Benefit">
          <match retrievedattribute="socialSecurityNumber">
            <reference attribute="socialSecurityNumber"/>
          </match>
        </readall>
      </derivation>
    </Attribute>


    <!--
    위의 "benefitsReadallMatch"와 동일한 규칙 오브젝트를 검색하지만
    (데이터 스토리지에 따라) 성능이 저하될 수 있습니다.
    -->
    <Attribute name="benefitsFilterReadall">
      <type>
        <javaclass name="List">
          <ruleclass name="Benefit"/>
        </javaclass>
      </type>
      <derivation>
        <filter>
          <list>
            <!-- 외부 스토리지에서 모든 Benefit 규칙 오브젝트를
                 검색합니다. -->
            <readall ruleclass="Benefit"/>
          </list>
          <listitemexpression>
            <equals>
              <!-- 혜택 규칙 오브젝트와 개인 규칙
                오브젝트의 주민등록번호를
                맞춥니다. -->
              <reference attribute="socialSecurityNumber">
                <current/>
              </reference>
              <reference attribute="socialSecurityNumber"/>
            </equals>
          </listitemexpression>
        </filter>
      </derivation>
    </Attribute>

    <!--
    "IncomeAssistance" 유형의 개인 혜택을 검색합니다.
    <match>를 사용하여 개인의 모든 혜택을 검색한 다음
    <filter>를 사용하여 이 개인의 혜택 중에서 "Income Assistance"
    혜택만 추출합니다.

    이 구현은 socialSecurityNumber가
    데이터 스토리지에서 Benefit에 대해 가장 많이
    선택되는 속성인 경우 적합할 수 있습니다(즉, Benefit 규칙 오브젝트가
    여러 개이지만 각 socialSecurityNumber 값이 비교적
    적은 수의 Benefit 규칙 오브젝트에 있음).
    -->
    <Attribute name="incomeAssistanceBenefitsMatchSSNFilterType">
      <type>
        <javaclass name="List">
          <ruleclass name="Benefit"/>
        </javaclass>
      </type>
      <derivation>
        <filter>
          <list>
            <!-- 개인의 모든 Benefit 규칙 오브젝트를 검색합니다.
 -->
            <readall ruleclass="Benefit">
              <match retrievedattribute="socialSecurityNumber">
                <reference attribute="socialSecurityNumber"/>
              </match>
            </readall>
          </list>
          <listitemexpression>
            <equals>
              <!-- 개인의 Benefit 규칙 오브젝트를
                   "Income Assistance" 유형으로만 필터합니다.
                -->
              <reference attribute="type">
                <current/>
              </reference>
              <Code table="BenefitType">
                <!-- 수입 보조(Income Assistance)의 값 -->
                <String value="BT1"/>
              </Code>
            </equals>
          </listitemexpression>
        </filter>
      </derivation>
    </Attribute>


    <!--
    "IncomeAssistance" 유형의 개인 혜택을 검색합니다.
    <match>를 사용하여 모든 "Income Assistance" 혜택을
    검색한 다음 <filter>를 사용하여 이 개인의 "Income
    Assistance" 혜택만 추출합니다.

    이 구현은 유형이 데이터 스토리지에서 가장 많이
    선택되는 Benefit의 속성인 경우 적합할 수 있습니다(즉,
    각 유형의 Benefit 규칙 오브젝트의 수가 적음).
    -->
    <Attribute name="incomeAssistanceBenefitsMatchTypeFilterSSN">
      <type>
        <javaclass name="List">
          <ruleclass name="Benefit"/>
        </javaclass>
      </type>
      <derivation>
        <filter>
          <list>
            <!-- "Income Assistance" 유형의 모든 혜택 규칙 오브젝트를
                 검색합니다. -->
            <readall ruleclass="Benefit">
              <match retrievedattribute="type">
                <Code table="BenefitType">
                  <!-- Income Assistance의 값 -->
                  <String value="BT1"/>
                </Code>
              </match>
            </readall>
          </list>
          <listitemexpression>
            <equals>
              <!-- "Income Assistance" 유형의 Benefit 규칙 오브젝트를
                   이 Person에 해당하는 Benefit 규칙 오브젝트로만 필터합니다.
                -->
              <reference attribute="socialSecurityNumber">
                <current/>
              </reference>
              <reference attribute="socialSecurityNumber"/>
            </equals>
          </listitemexpression>
        </filter>
      </derivation>
    </Attribute>

    <!--
    금액이 100보다 큰 Benefit의 규칙 오브젝트를
    검색합니다.

    "greater than"은 완전 일치 술어가 아니므로
    <filter>를 사용해야 합니다(<match>는 완전 일치 기준에만
    사용할 수 있음).
    -->
    <Attribute name="highPaymentBenefits">
      <type>
        <javaclass name="List">
          <ruleclass name="Benefit"/>
        </javaclass>
      </type>
      <derivation>
        <filter>
          <list>
            <!-- 개인의 모든 Benefit 규칙 오브젝트를 검색합니다.
              -->
            <readall ruleclass="Benefit">
              <match retrievedattribute="socialSecurityNumber">
                <reference attribute="socialSecurityNumber"/>
              </match>
            </readall>
          </list>
          <listitemexpression>
            <!-- 금액이 100을 초과하는 Benefit 규칙 오브젝트만 해당되도록
                 개인의 Benefit 규칙 오브젝트를 필터합니다. -->
            <compare comparison=">">
              <reference attribute="amount">
                <current/>
              </reference>
              <Number value="100"/>
            </compare>
          </listitemexpression>
        </filter>
      </derivation>
    </Attribute>



  </Class>

  <Class name="Benefit">

    <Attribute name="socialSecurityNumber">
      <type>
        <javaclass name="String"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <Attribute name="type">
      <type>
        <codetableentry table="BenefitType"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <Attribute name="amount">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

  </Class>

  <!--
  이 규칙 세트는 세션을 작성하는 코드가
  이 Claim 규칙 클래스의 "bootstrap" 단일 인스턴스도 작성할 것으로
  예상합니다.
  -->
  <Class name="Claim">
    <Initialization>
      <Attribute name="claimIdentifier">
        <type>
          <javaclass name="String"/>
        </type>
      </Attribute>
      <Attribute name="claimDate">
        <type>
          <javaclass name="curam.util.type.Date"/>
        </type>
      </Attribute>
    </Initialization>
  </Class>

</RuleSet>