Come analizzare più oggetti dello stesso tipo in una regola business
Nella maggior parte degli scenari una regola di business viene scritta in base a un tipo e si prevede che ciascuna istanza del tipo dichiarato nel motore venga analizzata separatamente e utilizzata dalla regola. In alcuni scenari, tuttavia, è opportuno analizzare in una regola più istanze di un determinato tipo contemporaneamente.
Si prenda ad esempio una regola che usa le istanze della classe FamilyMember .
IF FamilyMember.Role == Father
AND FamilyMember.Role == Son
AND FamilyMember.Surname == FamilyMember.Surname
THEN FamilyMember.AddChild(FamilyMember)
La regola identifica un'istanza FamilyMember che è padre e un'altra istanza di Figlio. Se le istanze sono correlate per cognome, l'istanza son viene aggiunta a una raccolta di elementi figlio nell'istanza padre. Se ogni istanza di FamilyMember è stata analizzata separatamente nella regola, la regola non verrà mai attivata, perché in questo scenario, FamilyMember ha un solo ruolo, Padre o Figlio.
È necessario pertanto indicare al motore che nella regola devono essere analizzate più istanze contemporaneamente ed è necessario utilizzare un metodo che consenta di differenziare l'identità di ciascuna istanza nella regola. La proprietà INSTANCE ID viene utilizzata per fornire questa funzionalità. Questo campo è disponibile nella finestra Proprietà quando si seleziona un fact in Facts Explorer. È consigliabile modificare il valore del campo prima di trascinare un fact o un membro in una regola.
Usando la proprietà ID istanza , la regola verrà ricompilata. Per gli argomenti della regola che usano l'istanza Son di FamilyMember, il campo ID istanza viene modificato dal valore predefinito da 0 a 1. Quando l'ID istanza viene modificato da 0 e il fatto o il membro viene trascinato nell'editor delle regole, il valore di ID istanza verrà visualizzato nella regola dopo la classe .
IF FamilyMember.Role == Father
AND FamilyMember(1).Role== Son
AND FamilyMember.Surname == FamilyMember(1).Surname
THEN FamilyMember.AddChild(FamilyMember(1))
Si supponga ora che nel motore venga asserta un'istanza padre e un'istanza figlio . Il motore valuterà la regola in base alle diverse combinazioni delle istanze. Supponendo che l'istanza padre e figlio abbiano lo stesso cognome, l'istanza figlio verrà aggiunta all'istanza padre come previsto.
Nota
L'ID istanza viene usato solo nel contesto di una determinata valutazione delle regole. Non viene applicato all'istanza di un oggetto durante l'esecuzione dei criteri e non è correlato all'ordine in cui gli oggetti vengono dichiarati. L'istanza di ciascun oggetto verrà valutata in tutti gli argomenti della regola per lo specifico tipo.