Working with Rule Application Metadata

  • Updated

This article contains the sections:

Using the RuleApplicationDef Object

Prerequisites A valid RuleSession
Namespaces InRule.Runtime
Classes RuleApplicationDefInfo, RuleApplicationDef, DataElementDef, EntityDef
See Also Creating a RuleSession

RuleApplicationDef metadata

// System and user-defined attributes
string attributeValue = ruleSession.GetRuleApplicationDef().Attributes["MyAttribute"];

// Categories defined in the rule application
CategoryDefCollection categories = ruleSession.GetRuleApplicationDef().Categories;

// Getting name of first category in collection
string catalogName = categories[0].Name;

// Getting DataElementDef
DataElementDef dataElementDef = (DataElementDef)ruleSession.GetRuleApplicationDef().DataElements["MyInlineTable"];

Iterate through the entities of a rule application

// Iterate through the entities for the rule application
foreach (EntityDef entityDef in ruleSession.GetRuleApplicationDef().Entities)
{
  Console.WriteLine(entityDef.Name);
}

Retrieving Definition Objects at Runtime

Prerequisites A valid RuleSession
Namespaces InRule.Runtime, InRule.Repository, InRule.Repository.RuleElements
Classes EntityDef, FieldDef, RuleSetDef, RuleElementDef, Entity, Field, RuleSet, RuleElement
See Also Using Element Metadata

The following examples demonstrate how to retrieve definition objects through the runtime objects. These objects can then be utilized to access object metadata and user-defined attributes.

// Get EntityDef from Entity
EntityDef entityDef = entity.GetDef();
// Get FieldDef from Field
FieldDef fieldDef = field.GetDef();
// Get CollectionDef from Collection, assigned to FieldDef
FieldDef collectionDef = collection.GetDef();
// Get RuleSetDef from RuleSet
RuleSetDef ruleSetDef = (RuleSetDef)ruleSet.GetDef();
// Get RuleElementDef from RuleElement, getting first child element in this example
RuleElementDef ruleElementDef = ruleSet.RuleElements[0].GetDef();

Using Element Metadata

Prerequisites A valid RuleSession
Namespaces InRule.Runtime, InRule.Repository, InRule.Repository.RuleElements
Classes EntityDef, FieldDef, RuleSetDef, RuleElement
See Also Retrieving Definition Objects at Runtime

The definition objects, available at runtime, can be used to retrieve element definitions and user-defined metadata. See Retrieving Definition Objects at Runtime for details.


Iterate through the fields objects on an entity

// Iterate through fields in an entity
foreach (FieldDef fieldDef in invoiceEntity.GetDef().Fields)
{
if (fieldDef.IsCalculated)
      // Display the expression if a calculation
      Console.WriteLine(fieldDef.Calc.FormulaText);

 if (fieldDef.IsAnEntityDataType)
      // Display the referenced entity if a child entity field
      Console.WriteLine(fieldDef.DataTypeEntityName);
}

Field metadata

// Get data type
string dataType = fieldDef.DataType.ToString();

// Get default value
string defaultValue = fieldDef.DefaultValue.ToString();

// Get Attributes
ICollection attributes = fieldDef.Attributes.Values;

// Get assigned categories
ICollection assigned = fieldDef.AssignedCategories;

Iterate through the rulesets on an entity

// Iterate through the rule sets on an entity
foreach (RuleSet ruleSet in invoiceEntity.RuleSets)
{
  // Cast into a RuleSetDef
 RuleSetDef ruleSetDef = (RuleSetDef)ruleSet.GetDef();
  // See if this is an active explicit ruleset
  if (ruleSetDef.FireMode == RuleSetFireMode.Explicit && ruleSetDef.IsActive)
   {
      Console.WriteLine(ruleSet.Name);
   }
}

Working with Attributes

Prerequisites A valid EntityDef and FieldDef
Namespaces InRule.Repository
Classes EntityDef, FieldDef
See Also Creating a RuleSession, Retrieving Definition Objects at Runtime

Retrieve a user-defined attribute on an entity

// Retrieve an attribute defined on an entity
Console.WriteLine(entityDef.Attributes.Default["MyAttribute"]);

Iterate through the attributes on a field

if (fieldDef.Attributes != null && fieldDef.Attributes.Count > 0)
{
  foreach (XmlSerializableStringDictionary.XmlSerializableStringDictionaryItem attributeItem
in fieldDef.Attributes.Default)
   {
      Console.WriteLine(attributeItem.Key + ":" + attributeItem.Value);
   }
}

Working with Value Lists

Prerequisites A valid Entity and RuleSession
Namespaces InRule.Runtime, InRule.Repository
Classes  ValueListItem, RuleApplicationDef, ListItemDefCollection

Populating a combobox from a value list

// Retrieve a value list that is associated to a field
ValueList valueList = entity.Fields["State"].AssociatedValueList;

foreach (ValueListItem valueListItem in valueList)
{
  // Add the list item value to the combobox
   comboBox.Items.Add(valueListItem);
   comboBox.DisplayMemberPath = "Value";
}

Populating a combobox from a standalone value list

// Get value list using the session’s DataManager
ValueList myList = ruleSession.Data.GetValueList("StandAloneValueList");

// Tell combo box what field to display to the end user
comboBox.DisplayMemberPath = "DisplayText";

// Add the item to the combo box
foreach (ValueListItem item in myList)
{
    comboBox.Items.Add(item);             
}

 

Was this article helpful?

0 out of 0 found this helpful

Comments

0 comments

Please sign in to leave a comment.