create

세션의 메모리에 있는 규칙 클래스의 새 인스턴스를 가져옵니다. 규칙 오브젝트에 필요한 초기화 값은 create 표현식의 하위 요소로 지정되어야 합니다.

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

참고: create를 사용하여 작성한 규칙 오브젝트를 규칙 실행 중에 검색하면 CER의 순서 지정 원칙을 위반하므로 이 작업을 수행할 수 없습니다.

Cúram V6부터 작성된 규칙 오브젝트에 값을 전달할 때 다음과 같이 구문을 선택할 수 있습니다.

Cúram V6부터 작성된 규칙 오브젝트는 세션에 "풀"됩니다. 이 풀을 사용하면 동일한 요청을 통해 단일 규칙 오브젝트로 제공되는 규칙 오브젝트를 작성할 수 있습니다. 그러면 메모리 사용이 절약되고 동일한 계산이 수행되지 않도록 하여 CPU 로드를 저하시킬 수 있습니다. 동일한 규칙 클래스를 요청하고 초기화되어 지정된 모든 속성의 값이 동일한 경우 규칙 오브젝트를 작성하는 두 개의 요청은 동일하다고 간주됩니다.

아래 예에서 개인의 직장 전화번호가 개인의 집 전화번호와 같은 경우 각 번호에 대해 단일 규칙 오브젝트가 사용되므로, isOutOfThisArea에 대한 파생 값은 한 번만 계산됩니다. 그렇지 않고 직장과 집 전화번호가 다른 경우 두 개의 서로 다른 규칙 오브젝트가 작성됩니다.

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

  <Class name="Person">

    <!-- 증거로 수집된 전화번호 세부사항 -->
    <Attribute name="homePhoneAreaCode">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

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

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

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

    <!-- PhoneNumber 규칙 오브젝트를 작성하여
         목록에 두기 -->
    <Attribute name="phoneNumbers">
      <type>
        <javaclass name="List">
          <ruleclass name="PhoneNumber"/>
        </javaclass>
      </type>
      <derivation>
        <fixedlist>
          <listof>
            <ruleclass name="PhoneNumber"/>
          </listof>

          <members>

            <!-- 집 세부사항용 전화번호입니다. -->
            <create ruleclass="PhoneNumber">
              <!-- PhoneNumber.owner의 값 -->
              <this/>
              <!-- PhoneNumber.number의 값 -->
              <reference attribute="homePhoneNumber"/>
              <specify attribute="areaCode">
                <!-- PhoneNumber.areaCode의 값 -->
                <reference attribute="homePhoneAreaCode"/>
              </specify>
            </create>

            <!-- 직장 세부사항용 전화번호입니다.

                 개인의 직장 전화번호가 개인의 집 전화번호와
                 동일한 경우(즉, 지역 코드와 번호가 같음)
                 이 <create> 표현식은 위의
                 <create> 표현식이 리턴한 규칙 오브젝트와
                 동일한 규칙 오브젝트를 리턴합니다. 전화번호가
                 동일하지 않으면 두 개의 서로 다른
                 규칙 오브젝트가 리턴됩니다.-->
            <create ruleclass="PhoneNumber">
              <this/>
              <reference attribute="workPhoneNumber"/>
              <specify attribute="areaCode">
                <reference attribute="workPhoneAreaCode"/>
              </specify>
            </create>

          </members>
        </fixedlist>
      </derivation>
    </Attribute>

  </Class>

  <Class name="PhoneNumber">

    <Initialization>
      <!-- 이러한 속성의 값은 <create> 표현식에
           지정된 순서대로 전달되어야 합니다. -->
      <Attribute name="owner">
        <type>
          <ruleclass name="Person"/>
        </type>
      </Attribute>
      <Attribute name="number">
        <type>
          <javaclass name="Number"/>
        </type>
      </Attribute>
    </Initialization>


    <!-- 이 속성의 값은 <create> 표현식의
         <specify> 요소로 전달될 수 있습니다. 그러면
         여기의 기본 파생 사항을 대체합니다. -->
    <Attribute name="areaCode">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <!-- <create> 표현식이 이 속성의 값을
             <specify>하지 않는 경우 사용하는 기본 구현입니다. -->
        <Number value="123"/>
      </derivation>
    </Attribute>

    <!-- 풀링된 규칙 오브젝트의 경우 이 파생된 값은 한 번만
         계산됩니다.

         예를 들어, 개인의 직장 전화번호가 개인의 집 전화번호와
         동일한 경우 집 전화번호와 직장 전화번호 둘 다에
         동일한 규칙 오브젝트를 사용하고
         이 단일 규칙 오브젝트의 "isOutOfThisArea" 값이
         한 번만 계산됩니다.
      -->
    <Attribute name="isOutOfThisArea">
      <type>
        <javaclass name="Boolean"/>
      </type>
      <derivation>
        <not>
          <equals>
            <reference attribute="areaCode"/>
            <!-- 기관이 있는 지역의 지역 코드입니다. -->
            <Number value="123"/>
          </equals>
        </not>
      </derivation>
    </Attribute>
  </Class>
</RuleSet>