From: <cos...@us...> - 2011-06-25 00:04:49
|
Revision: 5384 http://jaffa.svn.sourceforge.net/jaffa/?rev=5384&view=rev Author: cosbor11 Date: 2011-06-25 00:04:43 +0000 (Sat, 25 Jun 2011) Log Message: ----------- Added support for multi-key duplicate key validation Modified Paths: -------------- trunk/JaffaRIA/source/html/js/extjs/jaffa/maintenance/plugins/Panel.js Modified: trunk/JaffaRIA/source/html/js/extjs/jaffa/maintenance/plugins/Panel.js =================================================================== --- trunk/JaffaRIA/source/html/js/extjs/jaffa/maintenance/plugins/Panel.js 2011-06-24 22:21:30 UTC (rev 5383) +++ trunk/JaffaRIA/source/html/js/extjs/jaffa/maintenance/plugins/Panel.js 2011-06-25 00:04:43 UTC (rev 5384) @@ -423,10 +423,13 @@ } else { // Enforce duplicate-key check var metaClass = this.metaClass; - if (metaClass && typeof metaClass == 'string') + if (metaClass && typeof metaClass == 'string'){ metaClass = ClassMetaData[metaClass]; - if (metaClass && f.mapping == metaClass.key) + } + if (metaClass && (f.mapping == metaClass.key || (Ext.isArray(metaClass.key) && metaClass.key.indexOf(f.mapping) >= 0))){ + this.keyFields = metaClass.key; this._setDuplicateKeyListener(f); + } } } else if (f.getStore) { var store = f.getStore(); @@ -453,7 +456,22 @@ if (newValue && this.controller) { var criteria = {}; var originalStartValue = field.startValue; - criteria[field.mapping] = {values: [newValue]}; + + //multikey support + if(this.keyFields && Ext.isArray(this.keyFields)){ + for(var i=0; i < this.keyFields.length; i++){ + var keyField = this.ownerCt.find('mapping', this.keyFields[i])[0]; + criteria[this.keyFields[i]] = {values: [keyField.getValue()]}; + } + } else { + criteria[field.mapping] = {values: [newValue]}; + } + for(var p in criteria){ + if(criteria[p].values && Ext.isEmpty(criteria[p].values[0])){ //if part of the key is empty don't validate + return false; + } + } + //Controller save proceeds based on this flag. We don't want to save before validating duplicate key this._duplicateKeyValInProgress = true; this.controller.proxy.load(criteria, this.controller.reader || new Jaffa.data.QueryResponseReader(), function (data) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |