Managed Parent Rule Type
Managed Parent Rule Type
lac52
Managed parent rules insert relationships between a child table and a parent table.
Layer7 Live API Creator
inserts the parent object if it does not already exist.In this article:
Create a Managed Parent Rule
Prerequisite:
Your API is connected to an active database that contains at least one table or view.Follow these steps:
- In API Creator, in the Create section, clickRules.If your API does not have existing rules, the Welcome to Rules page appears. If your API has existing rules, they are listed on the By entity tab by default.
- ClickCreate a Rule.
- Select theManaged Parentrule type, the entity to which it applies, and then clickCreate Rule.
- Define the parameters of the rule, and then clickSaveor clickActivate and Closeto return to the list of rules:TitleThe title for the managed parent rule. The title for rules does not affect logic processing. To apply a default value, leave this field blank.Required:NoRole to parentThe name of the role to the parent.TopicsThe topic associated with this ruleCodeThe code for your managed parent rule.ActiveSelect to activate the rule.Default:ClearedNameThe name of the managed parent rule. Leave this field blank for the system default.
The managed parent rule is created.
Managed Parent Rule Algorithm
When you insert a child object, managed parent rules insert a parent object if it does not already exist. This rule uses the following algorithm:
- You insert a child object. The logic engine checks whether there are any managed parent rules for that entity.
- If there are, then for each such rule the following occurs:
- If the foreign key in the child object is null or incomplete, then nothing happens.
- If the foreign key in the child object is complete, then the engine looks in the database to verify that the corresponding parent exists.
- If the parent exists, then nothing happens.
- If the parent does not exist, API Creator creates the parent and establishes the relationship between the two by copying the attributes used in the foreign key from the child into the new parent.
- Optionally, API Creator hands the new parent to your JavaScript code for further initialization.You do not need to write any code, unless you want to initialize the parent object beyond what is done automatically.
- API Creator inserts the new parent into the database.
A common way to initialize the foreign key to a managed parent is by using a pre-insert event, for instance:
// Pre-insert event to populate the foreign key to a managed parentvar now = new Date();row.ts_hour = now.getHours();row.ts_day = now.getDate();row.ts_month = now.getMonth() + 1;row.ts_year = now.getYear();
This works fine, but
Layer7 Live API Creator
cannot initialize child columns using SQL snippets. For example, if the ts_hour
column participates in a relationship between a parent and child that a managed parent rule established, the following code snippet fails:row.ts_hour = SysUtility.sqlSnippetDeferred("hour(now())");
When you insert a child, and
Layer7 Live API Creator
is attempting to initialize some of its columns using SQL snippets, then Layer7 Live API Creator
does not know the value of these code snippets until you insert the child. But you cannot insert a child because its (managed) parent does not exist yet, and Layer7 Live API Creator
cannot insert the parent because it does not have the value for the primary key, which are the attributes used in the foreign key from the child. This is a circular dependency which Layer7 Live API Creator
cannot resolve, hence this restriction.You can access the
row
, oldRow
, logicContext
, and parent
variables by providing initialization code. The row
and oldRow
variables refer to the child object that Layer7 Live API Creator
is modifying.The
parent
variable contains the new parent object that Layer7 Live API Creator
is going to insert. You can modify this new parent object before Layer7 Live API Creator
inserts it through the parent
variable. For example, you might need to compute the values for required attributes.You cannot access the new parent object through the
row
variable.Layer7 Live API Creator
Processes Managed Parent Rules Prior to Row LogicManaged parent occurs before row logic. You cannot compute foreign keys using formulas.
For more information about logic execution and generated primary key handling, see Logic Execution.
Common Use Case - Group By
You can store subtotals that are incrementally maintained as updates occur, using the
GroupBy
pattern. For example, you can track total sales for each sales rep each month. A common use case is to use managed parents for grouping totals. The managed parent is defined as follows.For more information about viewing an example of the managed parent rule type, see Group by Rollup Example.
In the
Sample
API, you can test this pattern.by posting the following to
PartnerOrder
and verifying that rows are created in empsales
Follow these steps:
- Open theSampleAPI.
- In the Tools section, clickREST Lab.
- ForEndpoint, selectResourceas the endpoint on which you want to operate andPartnerOrderas the named resource.
- Copy and paste the following JSON into the Request body:{ "isReady": false, "approving_officer": "G PO.1", "salesrep_name": "A. Lincoln", "customer": "Gloria's Garden", "LineItems": [ { "productName": "Hammer", "quantityOrdered": 1 } ]}
- ClickPOST.
- Verify that rows are created in theempsalestable.