Inheritance

Treatment of Inheritance Flags and Associated Values During Save Operations

For attributes that have corresponding inherit flags, the rules are as follows:

  • If the inherit flag is not specified (NULL), and the value is specified, it is an error
  • If the client is a root level client, and the inherit flag is true, it is an error
  • If the inherit flag is set and the value is also set, the specified value is ignored (a warning is generated if the value does not match the existing inherited value)
  • On update
    • If inherit flag is NULL, current inherit flag and value are both left unchanged
    • If inherit flag is 1, value is NULLed out
    • If inherit flag is 0, value is set to specified value (even if NULL)
  • On insert
    • If inherit flag is NULL, inheritance is off and the specified value is set (even if NULL)
    • If inherit flag is 1, inherit flag is set to 1 and the value is set to NULL
    • If inherit flag is 0, inherit flag is set to 0 and the value is set to specified value (even if NULL)
  • In cases, such as "address", where there are multiple fields governed by a single inheritance flag, all governed fields are taken to be a unit (e.g. on update, you cannot specify that the street should be left as is, but the city should be updated). If any aspect of the address needs to be updated, the entire address needs to be restated.

Setting of Inheritance Flags and Associated Values in Responses from Get Operations

  • The inheritance flag will be set to true if the value is currently being inherited from elsewhere
  • The corresponding value or values will reflect the values inherited from elsewhere

Chains of inheritance

  • A client may inherit settings from a parent (which in turn may inherit from it's parent)
  • An engagement may inherit settings from it's client
  • An invoice will take on values from the engagement(s) for which the invoice was created, however once an invoice is created those values are locked and will not be affected by changes at the engagement or client level (e.g. there are no inherit flags for invoices)