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의 모든 하위 레코드를 검색하고 다음과 같이 처리합니다.
규칙 세트에 "Application"이라는 규칙 클래스가 없으므로 건너뜁니다.
다음을 사용하여 Person 규칙 클래스의 규칙 오브젝트 인스턴스를 작성합니다.
"John"으로 지정합니다.
Person 규칙 클래스에 "lastName"이라는 규칙 속성이 없으므로 건너뜁니다.
Person 레코드 #1235에 대한 Income 레코드가 없으므로 빈 목록이 되도록 지정합니다.
다음을 사용하여 Person 규칙 클래스의 규칙 오브젝트 인스턴스를 작성합니다.
"Mary"로 지정합니다.
건너뜁니다.
Mary의 두 Income 규칙 오브젝트를 포함하는 목록이 되도록 지정합니다(아래 작성됨).
다음을 사용하여 Income 규칙 클래스의 규칙 오브젝트 인스턴스를 작성합니다.
Person 레코드 #1236에서 Mary에 대해 (위에) 작성된 Person 규칙 오브젝트가 되도록 지정합니다.
코드 "Part-time"이 되도록 지정합니다.
숫자 "25"가 되도록 지정합니다.
데이터 저장소 엔티티에 "employerName"이라는 속성이 없으므로 지정하지 않습니다.
다음을 사용하여 Income 규칙 클래스의 규칙 오브젝트 인스턴스를 작성합니다.
Person 레코드 #1236에서 Mary에 대해 (위에) 작성된 Person 규칙 오브젝트가 되도록 지정합니다.
코드 "Part-time"이 되도록 지정합니다.
숫자 "30"이 되도록 지정합니다.
마지막으로 범용 액세스 모듈이 규칙 세트에 프로그램, 적격성 및 설명에 대한 표준 질문을 합니다. 이러한 질문에 대해 응답할 때 프로그램의 규칙 클래스(위의 예제에는 표시되지 않음)가 규칙 오브젝트(DataStoreRuleObjectCreator가 작성함)에 액세스합니다.
애플리케이션 데이터 저장소와 해당 스키마에 대한 자세한 정보는 Creating Datastore Schemas 안내서를 참조하십시오.