docs: function(props, parentDataModel) {
              props = props || {};
              props.owner = props.owner || "";
  
              this.dataModel              = parentDataModel;
              this.name                   = props.objectName;
              this.displayName            = props.displayName;
              this.parentName             = props.parentName;
              this.lineage                = props.lineage.split(".");
  
              // Properties exclusive to BaseTransaction
              if (props.hasOwnProperty("groupByFields")) {
                  this.groupByFields = props.groupByFields;
              }
              if (props.hasOwnProperty("objectsToGroup")) {
                  this.objectsToGroup = props.objectsToGroup;
              }
              if (props.hasOwnProperty("transactionMaxTimeSpan")) {
                  this.maxSpan = props.transactionMaxTimeSpan;
              }
              if (props.hasOwnProperty("transactionMaxPause")) {
                  this.maxPause = props.transactionMaxPause;
              }
  
              // Property exclusive to BaseSearch
              if (props.hasOwnProperty("baseSearch")) {
                  this.baseSearch = props.baseSearch;
              }
  
              // Parse fields
              this.fields = {};
              for (var i = 0; i < props.fields.length; i++) {
                  this.fields[props.fields[i].fieldName] = new root.DataModelField(props.fields[i]);
              }
  
              // Parse constraints
              this.constraints = [];
              for (var j = 0; j < props.constraints.length; j++) {
                  this.constraints.push(new root.DataModelConstraint(props.constraints[j]));
              }
  
              // Parse calculations
              this.calculations = [];
              for (var k = 0; k < props.calculations.length; k++) {
                  this.calculations[props.calculations[k].calculationID] = new root.DataModelCalculation(props.calculations[k]);
              }
          }