Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I have made an function that reads the metadata from an entity and adds validation rules.</p> <pre><code>app.domain.indicador = (function () { "use strict"; var constructor = function () {...} var initializer = function indicadorInitializer(entity) { var entityType = entity.entityType; if (entityType) { console.log(entityType); for (var i = 0; i &lt; entityType.dataProperties.length; i++) { var property = entityType.dataProperties[i]; console.log(property); var propertyName = property.name; var propertyObject = entity[propertyName]; if (!property.isNullable) { propertyObject.extend({ required: true }); } if (property.maxLength) { propertyObject.extend({ maxLength: property.maxLength }); } } for (var i = 0; i &lt; entityType.foreignKeyProperties.length; i++) { var property = entityType.foreignKeyProperties[i]; console.log(property); var propertyName = property.name; var propertyObject = entity[propertyName]; if (!property.isNullable) { propertyObject.extend({ required: true }); } if (property.maxLength) { propertyObject.extend({ maxLength: property.maxLength }); } //Bussines rule propertyObject.extend({ notEqual: 0 }); } } }; return { constructor: constructor, initializer: initializer }; })(); </code></pre> <p>I use the function as initializer:</p> <pre><code>store.registerEntityTypeCtor("Indicador", domain.indicador.constructor, domain.indicador.initializer); </code></pre> <p>It's just a start but for the time is useful for me.</p> <p>Update:</p> <p>I changed the way I add validation. I share it here in case it is useful to someone:</p> <p>Helper object:</p> <pre><code>app.validatorHelper = (function (breeze) { var foreignKeyInvalidValue = 0; function addDataTypeRules(dataType, property) { switch (dataType) { case breeze.DataType.DateTime: //TODO: implement my function to validate dates. This validator is too permissive property.extend({ date: true }); break; case breeze.DataType.Int64: case breeze.DataType.Int32: case breeze.DataType.Int16: //it's needed to accept negative numbers because of the autogenerated keys property.extend({ signedDigit: true }); break; case breeze.DataType.Decimal: case breeze.DataType.Double: case breeze.DataType.Single: property.extend({ number: true }); break; } }; function addValidationRules(entity) { var entityType = entity.entityType; if (entityType) { for (var i = 0; i &lt; entityType.dataProperties.length; i++) { var property = entityType.dataProperties[i]; //console.log(property); var propertyName = property.name; var propertyObject = entity[propertyName]; addDataTypeRules(property.dataType, propertyObject); if (!property.isNullable) { propertyObject.extend({ required: true }); } if (property.maxLength) { propertyObject.extend({ maxLength: property.maxLength }); } } for (var i = 0; i &lt; entityType.foreignKeyProperties.length; i++) { var property = entityType.foreignKeyProperties[i]; //console.log(property); var propertyName = property.name; var propertyObject = entity[propertyName]; addDataTypeRules(property.dataType, propertyObject); if (!property.isNullable) { propertyObject.extend({ required: true }); //Bussiness Rule: 0 is not allowed for required foreign keys propertyObject.extend({ notEqual: foreignKeyInvalidValue }); } if (property.maxLength) { propertyObject.extend({ maxLength: property.maxLength }); } } } }; return { addValidationRules: addValidationRules }; })(breeze); </code></pre> <p>The custom validator:</p> <pre><code>(function (ko) { ko.validation.rules['signedDigit'] = { validator: function (value, validate) { if (!validate) return true; return ko.validation.utils.isEmptyVal(value) || (validate &amp;&amp; /^-?\d+$/.test(value)); }, message: 'Please enter a digit' }; ko.validation.registerExtenders(); })(ko); </code></pre> <p>Using the helper at the initializer:</p> <pre><code>app.domain.valorIndicador = (function (vHelper) { "use strict"; var constructor = function () { }; var initializer = function indicadorInitializer(entity) { vHelper.addValidationRules(entity); }; return { constructor: constructor, initializer: initializer }; })(app.validatorHelper); </code></pre> <p>And setting the initializer:</p> <pre><code>store.registerEntityTypeCtor("ValorIndicador", domain.valorIndicador.constructor, domain.valorIndicador.initializer); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload