Permet d'obtenir une nouvelle instance de classe de règles dans la mémoire de la session. Toutes les valeurs d'initialisation requises par l'objet de règle doivent être spécifiées en tant qu'éléments enfant de l'expression create.
Depuis Cúram V6, l'élément create peut être utilisé pour créer une instance de classe de règles à partir d'un jeu de règles différent, en définissant la valeur de l'attribut XML ruleset facultatif.
Depuis Cúram V6, vous avez le choix entre plusieurs syntaxes pour transmettre les valeurs à un objet de règle créé :
CER continue de prendre en charge un bloc d'attributs définis dans un élément Initialization. Cette syntaxe peut être utile pour les attributs qui doivent toujours être définis et n'ont pas d'implémentation par défaut ; et
Depuis Cúram V6, CER prend également en charge des attributs arbitraires dont leur valeur est remplacée par un élément specify qui nomme l'attribut à définir et contient la valeur à utiliser. Cette syntaxe peut être utile pour les attributs qui ne sont définis que parfois et/ou possèdent une implémentation par défaut.
Depuis Cúram V6, les objets de règle créés sont "regroupés" dans la session. Ce pool permet aux demandes identiques de créer un objet de règle afin qu'il soit traité par un seul objet de règle, qui peut conserver l'utilisation de la mémoire et également empêcher l'exécution de calculs en double pour réduire la charge UC. Deux demandes de création d'un objet de règle sont jugées identiques si elles demandent la même classe de règle et que les valeurs des attributs initialisés et spécifiés sont égales.
Dans l'exemple ci-dessous, si le numéro de téléphone professionnel d'une personne est identique à son numéro de téléphone personnel, un seul objet de règle sera utilisé pour chaque numéro. Par conséquent, la valeur dérivée pour isOutOfThisArea ne sera calculée qu'une seule fois. Si les numéros professionnel et personnel sont différents, deux objets de règle seront créés.
<?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"> <!-- Détails des numéros de téléphone regroupés dans les informations collectées --> <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> <!-- Création d'objets de règle PhoneNumber et placement dans une liste --> <Attribute name="phoneNumbers"> <type> <javaclass name="List"> <ruleclass name="PhoneNumber"/> </javaclass> </type> <derivation> <fixedlist> <listof> <ruleclass name="PhoneNumber"/> </listof> <members> <!-- Détails du numéro de téléphone personnel. --> <create ruleclass="PhoneNumber"> <!-- Valeur de PhoneNumber.owner --> <this/> <!-- Valeur de PhoneNumber.number --> <reference attribute="homePhoneNumber"/> <specify attribute="areaCode"> <!-- Valeur de PhoneNumber.areaCode --> <reference attribute="homePhoneAreaCode"/> </specify> </create> <!-- Détails du numéro de téléphone professionnel. Si le numéro de téléphone professionnel est identique à son numéro de téléphone personnel (par ex., l'indicatif régional et le numéro sont identiques), cette expression <create> renvoie le même objet de règle que l'objet de règle renvoyé par l'expression <create> ci-dessus. Si les numéros de téléphone ne sont pas identiques, deux objets règles sont renvoyés.--> <create ruleclass="PhoneNumber"> <this/> <reference attribute="workPhoneNumber"/> <specify attribute="areaCode"> <reference attribute="workPhoneAreaCode"/> </specify> </create> </members> </fixedlist> </derivation> </Attribute> </Class> <Class name="PhoneNumber"> <Initialization> <!-- Les valeurs de ces attributs doivent être transmis, dans l'ordre, par une expression <create>. --> <Attribute name="owner"> <type> <ruleclass name="Person"/> </type> </Attribute> <Attribute name="number"> <type> <javaclass name="Number"/> </type> </Attribute> </Initialization> <!-- La valeur de cet attribut peut être transmise par un élément <specify> au sein d'une expression a <create>, qui va remplacer la dérivation par défaut ici. --> <Attribute name="areaCode"> <type> <javaclass name="Number"/> </type> <derivation> <!-- Implémentation par défaut, utilisée si l'expression <create> n'<indique> pas de valeur pour cet attribut. --> <Number value="123"/> </derivation> </Attribute> <!-- Pour un objet de règle groupé, cette valeur dérivée ne sera calculée qu'une fois. Par exemple, si le numéro de téléphone professionnel d'une personne est identique à son numéro de téléphone personnel, le même objet de règle sera utilisé pour les numéros de téléphone personnel et professionnel, et la valeur "isOutOfThisArea" de cet objet de règle unique ne sera calculé qu'une fois. --> <Attribute name="isOutOfThisArea"> <type> <javaclass name="Boolean"/> </type> <derivation> <not> <equals> <reference attribute="areaCode"/> <!-- Indicatif régional de l'agence --> <Number value="123"/> </equals> </not> </derivation> </Attribute> </Class> </RuleSet>