FoxInCloud
Focus Error in Textbox
Gravatar is a globally recognized avatar based on your email address. Focus Error in Textbox
  n/a
  All
  May 26, 2015 @ 05:45am
Using the same form to display and edit record information, I am raising an error in Web in the following situation:

Textboxes are Enabled = .F. for display only - to prevent unintended edits.
Upon entering Edit mode, Textboxes are made Enabled = .T.

Lets say you are editing a record and you make a small change in the Description Textbox. You now use the mouse to click a save button. Save.click() performs the usual data checks and if the data is OK to save, resets the environment to the Display mode with all Textboxes.Enabled = .F. All this processing completes without error in LAN and Web.

At this point an error is raised that says:"awserver.fxp!Awajax.useraction() - control 'frame.page3.txtquantity' should be disabled in client browser..."

If you watch the browser, you can see that focus has advanced to the next Textbox, which in this case is named txtQuantity. Indeed, the Save.click() did disable the Textbox, so the error is sensible. However, the mouse should have changed the focus to the Save button. The error message seems informational only, but does stop processing. At this point I am unsure why the focus is advancing down the tab order, do I need to call something prior to Enabled = .F. to prevent this?

- James

Gravatar is a globally recognized avatar based on your email address. Re: Focus Error in Textbox
  FoxInCloud Support - Thierry N.
  James Patterson
  May 26, 2015 @ 06:35am
actually "awserver.fxp!Awajax.useraction() - control 'frame.page3.txtquantity' should be disabled in client browser..." is an assert - you can get rid of it by clicking 'ignore all'

in this case we need to know what makes focus move to frame.page3.txtQuantity

could you post:
1- the complete Save.click() VFP code
2- the XML response when Save.click() has executed - you can get it from firebug like below:

in this case the XML response is:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?><IntuiCat>
<Result><v>true</v><t>boolean</t></Result><script>var ebx = $('dataupdate_scx-tutoinfoboxfic');ebx &
#38;& !ebx.innerHTML && ebx.update('<p>Hovering the mouse pointer over a control
displays its source code here ...</p><p>(<i>source code is dynamically read
from form.scx and colorized</i>)</p><p>- <b>Freeze display</b>
;: press the shift key while hovering</p><p>- <b>Enlarge to a child form<
;/b>: Click (Web mode only)</p><p>- <b>Enlarge to a new page</b>
: control+Click (Web mode only)</p><p><br><i>Enjoy and copy code as you
like!</i></p>');
$('dataupdate_scx-opgsourcetype').writeAttribute('disabled', 'disabled').disabled=true;
$('dataupdate_scx-cmdsave').writeAttribute('disabled', '').disabled=false;
$('dataupdate_scx-cmdcancel').writeAttribute('disabled', '').disabled=false;
$('dataupdate_scx-opgbuffering').writeAttribute('disabled', 'disabled').disabled=true;
$('dataupdate_scx-cmdok').writeAttribute('disabled', 'disabled').disabled=true;
(function(){
var grd = $('dataupdate_scx-grd');
if (grd){
var oGrid = $('dataupdate_scx-grd').oGrid, oTable = $('dataupdate_scx-grd').oTable, oTempl;
oGrid.defineControlProperty('DataUpdate', false);
oGrid.defineCellProperty('CurrentControl', null);
oGrid.setRowCount(108);


/* Column 0 'grcID' */
oTempl = oGrid.getCellTemplate(0);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grcid', 'adapted');

/* Column 1 'grcCOMPANY' */
oTempl = oGrid.getCellTemplate(1);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grccompany', 'adapted');
var f1 = function(row,val){return this.getCellTemplate(1,row).setStyle('background-color',val);}.bind
(oGrid);
f1(0,'#FFFF80');f1(1,'#FFFF80');f1(2,'#FFFF80');f1(3,'#FFFF80');f1(4,'#FFFF80');f1(5,'#FFFF80');f1(6
,'#FFFF80');f1(7,'#FFFF80');f1(8,'#FFFF80');f1(9,'#FFFF80');f1(10,'#FFFF80');f1(11,'#FFFF80');f1(12,'
#FFFF80');f1(13,'#FFFF80');f1(14,'#FFFF80');f1(15,'#FFFF80');f1(16,'#FFFF80');f1(17,'#FFFF80');f1(18
,'#FFFF80');f1(19,'#FFFF80');f1(20,'#FFFF80');f1(21,'#FFFF80');f1(22,'#FFFF80');f1(23,'#FFFF80');f1(24
,'#FFFF80');f1(25,'#FFFF80');f1(26,'#FFFF80');f1(27,'#FFFF80');f1(28,'#FFFF80');f1(29,'#FFFF80');f1(30
,'#FFFF80');f1(31,'#FFFF80');f1(32,'#FFFF80');f1(33,'#FFFF80');f1(34,'#FFFF80');f1(35,'#FFFF80');f1(36
,'#FFFF80');f1(37,'#FFFF80');f1(38,'#FFFF80');f1(39,'#FFFF80');f1(40,'#FFFF80');f1(41,'#FFFF80');f1(42
,'#FFFF80');f1(43,'#FFFF80');f1(44,'#FFFF80');f1(45,'#FFFF80');f1(46,'#FFFF80');f1(47,'#FFFF80');f1(48
,'#FFFF80');f1(49,'#FFFF80');f1(50,'#FFFF80');f1(51,'#FFFF80');f1(52,'#FFFF80');f1(53,'#FFFF80');f1(54
,'#FFFF80');f1(55,'#FFFF80');f1(56,'#FFFF80');f1(57,'#FFFF80');f1(58,'#FFFF80');f1(59,'#FFFF80');f1(60
,'#FFFF80');f1(61,'#FFFF80');f1(62,'#FFFF80');f1(63,'#FFFF80');f1(64,'#FFFF80');f1(65,'#FFFF80');f1(66
,'#FFFF80');f1(67,'#FFFF80');f1(68,'#FFFF80');f1(69,'#FFFF80');f1(70,'#FFFF80');f1(71,'#FFFF80');f1(72
,'#FFFF80');f1(73,'#FFFF80');f1(74,'#FFFF80');f1(75,'#FFFF80');f1(76,'#FFFF80');f1(77,'#FFFF80');f1(78
,'#FFFF80');f1(79,'#FFFF80');f1(80,'#FFFF80');f1(81,'#FFFF80');f1(82,'#FFFF80');f1(83,'#FFFF80');f1(84
,'#FFFF80');f1(85,'#FFFF80');f1(86,'#FFFF80');f1(87,'#FFFF80');f1(88,'#FFFF80');f1(89,'#FFFF80');f1(90
,'#FFFF80');f1(91,'#FFFF80');f1(92,'#FFFF80');f1(93,'#FFFF80');f1(94,'#FFFF80');f1(95,'#FFFF80');f1(96
,'#FFFF80');f1(97,'#FFFF80');f1(98,'#FFFF80');f1(99,'#FFFF80');f1(100,'#FFFF80');f1(101,'#FFFF80');f1
(102,'#FFFF80');f1(103,'#FFFF80');f1(104,'#FFFF80');f1(105,'#FFFF80');f1(106,'#FFFF80');f1(107,'#FFFF80'
);

/* Column 2 'grcREGION' */
oTempl = oGrid.getCellTemplate(2);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grcregion', 'adapted');
var f2 = function(row,val){return this.getCellTemplate(2,row).setStyle('background-color',val);}.bind
(oGrid);
f2(0,'#D85BDC');f2(1,'#D85BDC');f2(2,'#D85BDC');f2(3,'#D85BDC');f2(4,'#D85BDC');f2(5,'#D85BDC');f2(6
,'#D85BDC');f2(7,'#D85BDC');f2(8,'#D85BDC');f2(9,'#D85BDC');f2(10,'#D85BDC');f2(11,'#D85BDC');f2(12,'
#D85BDC');f2(13,'#D85BDC');f2(14,'#D85BDC');f2(15,'#D85BDC');f2(16,'#D85BDC');f2(17,'#D85BDC');f2(18
,'#D85BDC');f2(19,'#D85BDC');f2(20,'#D85BDC');f2(21,'#D85BDC');f2(22,'#D85BDC');f2(23,'#D85BDC');f2(24
,'#D85BDC');f2(25,'#D85BDC');f2(26,'#D85BDC');f2(27,'#D85BDC');f2(28,'#D85BDC');f2(29,'#D85BDC');f2(30
,'#D85BDC');f2(31,'#D85BDC');f2(32,'#D85BDC');f2(33,'#D85BDC');f2(34,'#D85BDC');f2(35,'#D85BDC');f2(36
,'#D85BDC');f2(37,'#D85BDC');f2(38,'#D85BDC');f2(39,'#D85BDC');f2(40,'#D85BDC');f2(41,'#D85BDC');f2(42
,'#D85BDC');f2(43,'#D85BDC');f2(44,'#D85BDC');f2(45,'#D85BDC');f2(46,'#D85BDC');f2(47,'#D85BDC');f2(48
,'#D85BDC');f2(49,'#D85BDC');f2(50,'#D85BDC');f2(51,'#D85BDC');f2(52,'#D85BDC');f2(53,'#D85BDC');f2(54
,'#D85BDC');f2(55,'#D85BDC');f2(56,'#D85BDC');f2(57,'#D85BDC');f2(58,'#D85BDC');f2(59,'#D85BDC');f2(60
,'#D85BDC');f2(61,'#D85BDC');f2(62,'#D85BDC');f2(63,'#D85BDC');f2(64,'#D85BDC');f2(65,'#D85BDC');f2(66
,'#D85BDC');f2(67,'#D85BDC');f2(68,'#D85BDC');f2(69,'#D85BDC');f2(70,'#D85BDC');f2(71,'#D85BDC');f2(72
,'#D85BDC');f2(73,'#D85BDC');f2(74,'#D85BDC');f2(75,'#D85BDC');f2(76,'#D85BDC');f2(77,'#D85BDC');f2(78
,'#D85BDC');f2(79,'#D85BDC');f2(80,'#D85BDC');f2(81,'#D85BDC');f2(82,'#D85BDC');f2(83,'#D85BDC');f2(84
,'#D85BDC');f2(85,'#D85BDC');f2(86,'#D85BDC');f2(87,'#D85BDC');f2(88,'#D85BDC');f2(89,'#D85BDC');f2(90
,'#D85BDC');f2(91,'#D85BDC');f2(92,'#D85BDC');f2(93,'#D85BDC');f2(94,'#D85BDC');f2(95,'#D85BDC');f2(96
,'#D85BDC');f2(97,'#D85BDC');f2(98,'#D85BDC');f2(99,'#D85BDC');f2(100,'#D85BDC');f2(101,'#D85BDC');f2
(102,'#D85BDC');f2(103,'#D85BDC');f2(104,'#D85BDC');f2(105,'#D85BDC');f2(106,'#D85BDC');f2(107,'#D85BDC'
);

/* Column 3 'grcACTIVE_' */
oTempl = oGrid.getCellTemplate(3);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grcactive_', 'adapted');
var f3 = function(row,val){return this.getCellTemplate(3,row).setStyle('background-color',val);}.bind
(oGrid);
f3(0,'#FFFFFF');f3(1,'#FFFFFF');f3(2,'#FFFFFF');f3(3,'#FFFFFF');f3(4,'#FFFFFF');f3(5,'#FFFFFF');f3(6
,'#FFFFFF');f3(7,'#FFFFFF');f3(8,'#FFFFFF');f3(9,'#FFFFFF');f3(10,'#FFFFFF');f3(11,'#FFFFFF');f3(12,'
#FFFFFF');f3(13,'#FFFFFF');f3(14,'#FFFFFF');f3(15,'#FFFFFF');f3(16,'#FFFFFF');f3(17,'#FFFFFF');f3(18
,'#FFFFFF');f3(19,'#FFFFFF');f3(20,'#FFFFFF');f3(21,'#FFFFFF');f3(22,'#FFFFFF');f3(23,'#FFFFFF');f3(24
,'#FFFFFF');f3(25,'#FFFFFF');f3(26,'#FFFFFF');f3(27,'#FFFFFF');f3(28,'#FFFFFF');f3(29,'#FFFFFF');f3(30
,'#FFFFFF');f3(31,'#FFFFFF');f3(32,'#FFFFFF');f3(33,'#FFFFFF');f3(34,'#FFFFFF');f3(35,'#FFFFFF');f3(36
,'#FFFFFF');f3(37,'#FFFFFF');f3(38,'#FFFFFF');f3(39,'#FFFFFF');f3(40,'#FFFFFF');f3(41,'#FFFFFF');f3(42
,'#FFFFFF');f3(43,'#FFFFFF');f3(44,'#FFFFFF');f3(45,'#FFFFFF');f3(46,'#FFFFFF');f3(47,'#FFFFFF');f3(48
,'#FFFFFF');f3(49,'#FFFFFF');f3(50,'#FFFFFF');f3(51,'#FFFFFF');f3(52,'#FFFFFF');f3(53,'#FFFFFF');f3(54
,'#FFFFFF');f3(55,'#FFFFFF');f3(56,'#FFFFFF');f3(57,'#FFFFFF');f3(58,'#FFFFFF');f3(59,'#FFFFFF');f3(60
,'#FFFFFF');f3(61,'#FFFFFF');f3(62,'#FFFFFF');f3(63,'#FFFFFF');f3(64,'#FFFFFF');f3(65,'#FFFFFF');f3(66
,'#FFFFFF');f3(67,'#FFFFFF');f3(68,'#FFFFFF');f3(69,'#FFFFFF');f3(70,'#FFFFFF');f3(71,'#FFFFFF');f3(72
,'#FFFFFF');f3(73,'#FFFFFF');f3(74,'#FFFFFF');f3(75,'#FFFFFF');f3(76,'#FFFFFF');f3(77,'#FFFFFF');f3(78
,'#FFFFFF');f3(79,'#FFFFFF');f3(80,'#FFFFFF');f3(81,'#FFFFFF');f3(82,'#FFFFFF');f3(83,'#FFFFFF');f3(84
,'#FFFFFF');f3(85,'#FFFFFF');f3(86,'#FFFFFF');f3(87,'#FFFFFF');f3(88,'#FFFFFF');f3(89,'#FFFFFF');f3(90
,'#FFFFFF');f3(91,'#FFFFFF');f3(92,'#FFFFFF');f3(93,'#FFFFFF');f3(94,'#FFFFFF');f3(95,'#FFFFFF');f3(96
,'#FFFFFF');f3(97,'#FFFFFF');f3(98,'#FFFFFF');f3(99,'#FFFFFF');f3(100,'#FFFFFF');f3(101,'#FFFFFF');f3
(102,'#FFFFFF');f3(103,'#FFFFFF');f3(104,'#FFFFFF');f3(105,'#FFFFFF');f3(106,'#FFFFFF');f3(107,'#FFFFFF'
);

/* Column 4 'grcTITLE' */
oTempl = oGrid.getCellTemplate(4);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grctitle', 'adapted');
var f4 = function(row,val){return this.getCellTemplate(4,row).setStyle('background-color',val);}.bind
(oGrid);
f4(0,'#FFFFFF');f4(1,'#FFFFFF');f4(2,'#FFFFFF');f4(3,'#FFFFFF');f4(4,'#FFFFFF');f4(5,'#FFFFFF');f4(6
,'#FFFFFF');f4(7,'#FFFFFF');f4(8,'#FFFFFF');f4(9,'#FFFFFF');f4(10,'#FFFFFF');f4(11,'#FFFFFF');f4(12,'
#FFFFFF');f4(13,'#FFFFFF');f4(14,'#FFFFFF');f4(15,'#FFFFFF');f4(16,'#FFFFFF');f4(17,'#FFFFFF');f4(18
,'#FFFFFF');f4(19,'#FFFFFF');f4(20,'#FFFFFF');f4(21,'#FFFFFF');f4(22,'#FFFFFF');f4(23,'#FFFFFF');f4(24
,'#FFFFFF');f4(25,'#FFFFFF');f4(26,'#FFFFFF');f4(27,'#FFFFFF');f4(28,'#FFFFFF');f4(29,'#FFFFFF');f4(30
,'#FFFFFF');f4(31,'#FFFFFF');f4(32,'#FFFFFF');f4(33,'#FFFFFF');f4(34,'#FFFFFF');f4(35,'#FFFFFF');f4(36
,'#FFFFFF');f4(37,'#FFFFFF');f4(38,'#FFFFFF');f4(39,'#FFFFFF');f4(40,'#FFFFFF');f4(41,'#FFFFFF');f4(42
,'#FFFFFF');f4(43,'#FFFFFF');f4(44,'#FFFFFF');f4(45,'#FFFFFF');f4(46,'#FFFFFF');f4(47,'#FFFFFF');f4(48
,'#FFFFFF');f4(49,'#FFFFFF');f4(50,'#FFFFFF');f4(51,'#FFFFFF');f4(52,'#FFFFFF');f4(53,'#FFFFFF');f4(54
,'#FFFFFF');f4(55,'#FFFFFF');f4(56,'#FFFFFF');f4(57,'#FFFFFF');f4(58,'#FFFFFF');f4(59,'#FFFFFF');f4(60
,'#FFFFFF');f4(61,'#FFFFFF');f4(62,'#FFFFFF');f4(63,'#FFFFFF');f4(64,'#FFFFFF');f4(65,'#FFFFFF');f4(66
,'#FFFFFF');f4(67,'#FFFFFF');f4(68,'#FFFFFF');f4(69,'#FFFFFF');f4(70,'#FFFFFF');f4(71,'#FFFFFF');f4(72
,'#FFFFFF');f4(73,'#FFFFFF');f4(74,'#FFFFFF');f4(75,'#FFFFFF');f4(76,'#FFFFFF');f4(77,'#FFFFFF');f4(78
,'#FFFFFF');f4(79,'#FFFFFF');f4(80,'#FFFFFF');f4(81,'#FFFFFF');f4(82,'#FFFFFF');f4(83,'#FFFFFF');f4(84
,'#FFFFFF');f4(85,'#FFFFFF');f4(86,'#FFFFFF');f4(87,'#FFFFFF');f4(88,'#FFFFFF');f4(89,'#FFFFFF');f4(90
,'#FFFFFF');f4(91,'#FFFFFF');f4(92,'#FFFFFF');f4(93,'#FFFFFF');f4(94,'#FFFFFF');f4(95,'#FFFFFF');f4(96
,'#FFFFFF');f4(97,'#FFFFFF');f4(98,'#FFFFFF');f4(99,'#FFFFFF');f4(100,'#FFFFFF');f4(101,'#FFFFFF');f4
(102,'#FFFFFF');f4(103,'#FFFFFF');f4(104,'#FFFFFF');f4(105,'#FFFFFF');f4(106,'#FFFFFF');f4(107,'#FFFFFF'
);

/* Column 5 'grcCONTACT' */
oTempl = oGrid.getCellTemplate(5);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grccontact', 'adapted');
var f5 = function(row,val){return this.getCellTemplate(5,row).setStyle('background-color',val);}.bind
(oGrid);
f5(0,'#FFFFFF');f5(1,'#FFFFFF');f5(2,'#FFFFFF');f5(3,'#FFFFFF');f5(4,'#FFFFFF');f5(5,'#FFFFFF');f5(6
,'#FFFFFF');f5(7,'#FFFFFF');f5(8,'#FFFFFF');f5(9,'#FFFFFF');f5(10,'#FFFFFF');f5(11,'#FFFFFF');f5(12,'
#FFFFFF');f5(13,'#FFFFFF');f5(14,'#FFFFFF');f5(15,'#FFFFFF');f5(16,'#FFFFFF');f5(17,'#FFFFFF');f5(18
,'#FFFFFF');f5(19,'#FFFFFF');f5(20,'#FFFFFF');f5(21,'#FFFFFF');f5(22,'#FFFFFF');f5(23,'#FFFFFF');f5(24
,'#FFFFFF');f5(25,'#FFFFFF');f5(26,'#FFFFFF');f5(27,'#FFFFFF');f5(28,'#FFFFFF');f5(29,'#FFFFFF');f5(30
,'#FFFFFF');f5(31,'#FFFFFF');f5(32,'#FFFFFF');f5(33,'#FFFFFF');f5(34,'#FFFFFF');f5(35,'#FFFFFF');f5(36
,'#FFFFFF');f5(37,'#FFFFFF');f5(38,'#FFFFFF');f5(39,'#FFFFFF');f5(40,'#FFFFFF');f5(41,'#FFFFFF');f5(42
,'#FFFFFF');f5(43,'#FFFFFF');f5(44,'#FFFFFF');f5(45,'#FFFFFF');f5(46,'#FFFFFF');f5(47,'#FFFFFF');f5(48
,'#FFFFFF');f5(49,'#FFFFFF');f5(50,'#FFFFFF');f5(51,'#FFFFFF');f5(52,'#FFFFFF');f5(53,'#FFFFFF');f5(54
,'#FFFFFF');f5(55,'#FFFFFF');f5(56,'#FFFFFF');f5(57,'#FFFFFF');f5(58,'#FFFFFF');f5(59,'#FFFFFF');f5(60
,'#FFFFFF');f5(61,'#FFFFFF');f5(62,'#FFFFFF');f5(63,'#FFFFFF');f5(64,'#FFFFFF');f5(65,'#FFFFFF');f5(66
,'#FFFFFF');f5(67,'#FFFFFF');f5(68,'#FFFFFF');f5(69,'#FFFFFF');f5(70,'#FFFFFF');f5(71,'#FFFFFF');f5(72
,'#FFFFFF');f5(73,'#FFFFFF');f5(74,'#FFFFFF');f5(75,'#FFFFFF');f5(76,'#FFFFFF');f5(77,'#FFFFFF');f5(78
,'#FFFFFF');f5(79,'#FFFFFF');f5(80,'#FFFFFF');f5(81,'#FFFFFF');f5(82,'#FFFFFF');f5(83,'#FFFFFF');f5(84
,'#FFFFFF');f5(85,'#FFFFFF');f5(86,'#FFFFFF');f5(87,'#FFFFFF');f5(88,'#FFFFFF');f5(89,'#FFFFFF');f5(90
,'#FFFFFF');f5(91,'#FFFFFF');f5(92,'#FFFFFF');f5(93,'#FFFFFF');f5(94,'#FFFFFF');f5(95,'#FFFFFF');f5(96
,'#FFFFFF');f5(97,'#FFFFFF');f5(98,'#FFFFFF');f5(99,'#FFFFFF');f5(100,'#FFFFFF');f5(101,'#FFFFFF');f5
(102,'#FFFFFF');f5(103,'#FFFFFF');f5(104,'#FFFFFF');f5(105,'#FFFFFF');f5(106,'#FFFFFF');f5(107,'#FFFFFF'
);
var scrollTop = oGrid.getScrollTop(); oGrid.setCellModel(oTable); oGrid.setVirtualMode(false); oTable
.setURL("Temp/_4CZ13SL6P_1924.xml"); oTable.setAsync(false); oTable.request(); scrollTop && oGrid
.setScrollTop(scrollTop);
oGrid.setSortDirection();
oGrid.refresh();
oGrid.defineRowProperty('tuRow', null);
var srp = oGrid.setRowProperty.bind(oGrid);
srp('tuRow','ANATR',0);srp('tuRow','ANTON',1);srp('tuRow','AROUT',2);srp('tuRow','BERGS',3);srp('tuRow'
,'BLAUS',4);srp('tuRow','BOLID',5);srp('tuRow','BONAP',6);srp('tuRow','BOTTM',7);srp('tuRow','BSBEV'
,8);srp('tuRow','CACTU',9);srp('tuRow','CENTC',10);srp('tuRow','CHOPS',11);srp('tuRow','COMMI',12);srp
('tuRow','CONSH',13);srp('tuRow','DRACD',14);srp('tuRow','DUMON',15);srp('tuRow','EASTC',16);srp('tuRow'
,'ERNSH',17);srp('tuRow','FAMIA',18);srp('tuRow','FISSA',19);srp('tuRow','FOLIG',20);srp('tuRow','FOLKO'
,21);srp('tuRow','FRANK',22);srp('tuRow','FRANR',23);srp('tuRow','FRANS',24);srp('tuRow','FURIB',25)
;srp('tuRow','GALED',26);srp('tuRow','GODOS',27);srp('tuRow','GOURL',28);srp('tuRow','GREAL',29);srp
('tuRow','GROSR',30);srp('tuRow','HANAR',31);srp('tuRow','HILAA',32);srp('tuRow','HUNGC',33);srp('tuRow'
,'HUNGO',34);srp('tuRow','ISLAT',35);srp('tuRow','KOENE',36);srp('tuRow','LACOR',37);srp('tuRow','LAMAI'
,38);srp('tuRow','LAUGB',39);srp('tuRow','LAZYK',40);srp('tuRow','LEHMS',41);srp('tuRow','LETSS',42)
;srp('tuRow','LILAS',43);srp('tuRow','LINOD',44);srp('tuRow','LONEP',45);srp('tuRow','MAGAA',46);srp
('tuRow','MAISD',47);srp('tuRow','MEREP',48);srp('tuRow','MORGK',49);srp('tuRow','NORTS',50);srp('tuRow'
,'OCEAN',51);srp('tuRow','OLDWO',52);srp('tuRow','OTTIK',53);srp('tuRow','PARIS',54);srp('tuRow','PERIC'
,55);srp('tuRow','PICCO',56);srp('tuRow','PRINI',57);srp('tuRow','QUEDE',58);srp('tuRow','QUEEN',59)
;srp('tuRow','QUICK',60);srp('tuRow','RANCH',61);srp('tuRow','RATTC',62);srp('tuRow','REGGC',63);srp
('tuRow','RICAR',64);srp('tuRow','RICSU',65);srp('tuRow','ROMEY',66);srp('tuRow','SANTG',67);srp('tuRow'
,'SAVEA',68);srp('tuRow','SEVES',69);srp('tuRow','SIMOB',70);srp('tuRow','SPECD',71);srp('tuRow','SPLIR'
,72);srp('tuRow','SUPRD',73);srp('tuRow','THEBI',74);srp('tuRow','THECR',75);srp('tuRow','TOMSP',76)
;srp('tuRow','TORTU',77);srp('tuRow','TRADH',78);srp('tuRow','TRAIH',79);srp('tuRow','VAFFE',80);srp
('tuRow','VICTE',81);srp('tuRow','VINET',82);srp('tuRow','WANDK',83);srp('tuRow','WARTH',84);srp('tuRow'
,'WELLI',85);srp('tuRow','WHITC',86);srp('tuRow','WILMK',87);srp('tuRow','WOLZA',88);srp('tuRow','UNCLE'
,89);srp('tuRow','VH40Y',90);srp('tuRow','VHB2U',91);srp('tuRow','VHGG2',92);srp('tuRow','VHOCI',93)
;srp('tuRow','9YT0B',94);srp('tuRow','462WR',95);srp('tuRow','F88JX',96);srp('tuRow','F88KA',97);srp
('tuRow','F8B2A',98);srp('tuRow','54AXT',99);srp('tuRow','C6AOK',100);srp('tuRow','RIIIE',101);srp('tuRow'
,'XL1PS',102);srp('tuRow','YKJQ5',103);srp('tuRow','5HE06',104);srp('tuRow','Z049A',105);srp('tuRow'
,'Z05A1',106);srp('tuRow','3SL1W',107);
srp = null;
oGrid.defineRowProperty('Clicked', false); oGrid.onRowMouseDown = function(event, row){this.setRowClicked
(true, row)}; oGrid.onRowMouseUp = function(event, row){this.setRowClicked(false, row)}; oGrid.onCurrentRowChanged
= function(row){ var value = this.getRowProperty('tuRow', row); if (!(this.disabled || value === null
)){ if (!this.getRowClicked(row) && FoxInCloud.gridRowChangeDelay > 0){ if (this.nTO) window
.clearTimeout(this.nTO); this.nTO = FoxInCloud.gridMethod.bind(FoxInCloud).delay(FoxInCloud.gridRowChangeDelay
, 'wAfterRowChange', $('dataupdate_scx-grd'), value); } else FoxInCloud.gridMethod('wAfterRowChange'
, $('dataupdate_scx-grd'), value); } this.setRowClicked(false, row); };

oGrid.onControlMouseOver = function (event){ if(event.cancelBubble) return; event = Event.extend(event
); srceCodeDisplay(event, 'dataupdate_scx-tutoinfoboxfic', 'dataupdate_scx-grd', '<PRE><div
class="vfpcode"><span class="codecomment">* thisForm.grd as Ficgrd (of ficsample.vcx) as
Grid<br />* Source code read from "dataupdate.scx" and colorized at 05/15/15 02:02:40 AM<
;br /></span><br /><span class="properties">AllowRowSizing</span>
; = .F.<br />wlContentDynamic = .T. <span class="codecomment">&& {en
} This object\'s members and/or properties are dynamic - .T. if members or property change at run-time
{fr} Le contenu et/ou les propriétés de cet objet sont dynamiques - .T. si les membres ou les propri
étés changent à l\'exécution<br /><br />* ———————————————————————————————————</span
><br /><span class="programcontrol">PROCEDURE</span> <span class="events"
>Init</span><br /><span class="programcontrol">local</span> iGrc
as Integer, cGrc as String, cField as String<br /><br /><span class="programcontrol"
>with</span> m.<span class="commands">this</span> as ficGrd <span class
="commands">of</span> ficSample<br /><br /> .ColumnCount = 6<
;br /> <span class="programcontrol">FOR</span> iGrc = 1 <span class
="commands">TO</span> .ColumnCount<br />  <span class="programcontrol"
>with</span> .Columns(m.iGrc) as <span class="classes">Column</span><
;br /><br />   <span class="codec1">#define</span
> column_region 3<br />   <span class="codec1">
;#define</span> column_active 4<br />   <span
class="codec1">#define</span> column_readOnly 6<br /><br />&
;nbsp;  cField = <span class="codestring">\'customer.\'</span> + ICase
(; <span class="codecomment">&& see thisform.opgSourceType.Valid()</span
><br />    m.iGrc = 1,;<br />  
;   <span class="codestring">\'customer_ID\'</span>,;<
;br />    m.iGrc = 2,;<br />  &
;nbsp;  <span class="codestring">\'Company_name\'</span>,;<br
/>    m.iGrc = 3,;<br />   
;  <span class="codestring">\'Region_ID\'</span>,;<br />&
;nbsp;   m.iGrc = 4,;<br />    
<span class="codestring">\'active\'</span>,;<br />  
;  m.iGrc = 5,;<br />     <
;span class="codestring">\'Contact_Title\'</span>,;<br />  &
;nbsp; m.iGrc = 6,;<br />     <span
class="codestring">\'Contact_name\'</span>,;<br />   
;  <span class="codestring">\'\'</span>;<br /> &
;nbsp;  )<br /><br />   cGrc = ICase(;&
#60;br />    m.iGrc = 1,;<br />  &
#38;nbsp;  <span class="codestring">\'ID\'</span>,;<br />&
#38;nbsp;   m.iGrc = 2,;<br />    
<span class="codestring">\'Company\'</span>,;<br /> &
;nbsp;  m.iGrc = 3,;<br />     
;<span class="codestring">\'Region\'</span>,;<br />   
; m.iGrc = 4,;<br />     <span class
="codestring">\'active?\'</span>,;<br />    m
.iGrc = 5,;<br />     <span class="codestring"
>\'Title\'</span>,;<br />    m.iGrc = 6,;<
;br />     <span class="codestring">\'Contact
\'</span>,;<br />     <span class="codestring"
>\'\'</span>;<br />    )<br /><br
/>   .<span class="properties">Width</span> = ICase(
;<br />    m.iGrc = 1,;<br />  
;   060,;<br />    m.iGrc = 2
,;<br />     220,;<br />  
;  m.iGrc = 3,;<br />     100
,;<br />    m.iGrc = 4,;<br />  
;   50,;<br />    m.iGrc = 5,
;<br />     180,;<br />  
;  m.iGrc = 6,;<br />     150
,;<br />     0;<br />  
;  )<br /><br />   <span class="codecomment"
>* {en} Replace native members by instances of adapted classes</span><br /> 
;  <span class="codecomment">* {fr} Remplacer les membres natifs members par
des instances de classes adaptées à FoxinCloud</span><br />  &
;nbsp;.<span class="properties">Name</span> = <span class="codestring">\'grc
\'</span> + cVFPName(m.cGrc)<br />   .<span class="methods"
>RemoveObject</span>(<span class="codestring">\'Text1\'</span>)<br /
>   .<span class="methods">AddObject</span>(<span
class="codestring">\'ficTxt\'</span>, ICase(;<br />   
; m.iGrc = column_region,;<br />     &
#60;span class="codestring">\'ficCbo\'</span>,; <span class="codecomment">&
;& of ficSample.vcx as Combobox</span><br />   &
;nbsp;m.iGrc = column_readOnly,;<br />     <
;span class="codestring">\'ficTxtGrc\'</span>,; <span class="codecomment">&
;& of ficSample.vcx as Textbox</span><br />   &
;nbsp;m.iGrc = column_active,;<br />     <span
class="codestring">\'ficChk\'</span>,;<br />    
<span class="codestring">\'ficTxt\'</span>; <span class="codecomment"
>&& of ficSample.vcx as Textbox</span><br />  
  ))<br />   .<span class="properties">Sparse
</span> = !<span class="functions">InList</span>(m.iGrc, column_region, column_active
)<br />   .<span class="properties">Alignment</span>
; = <span class="functions">Iif</span>(m.iGrc = column_active, 2, 3)<br />&
;nbsp;  <span class="programcontrol">if</span> m.iGrc = column_region
<br />    <span class="programcontrol">with<
/span> .ficTxt as <span class="classes">combobox</span><br /> &
#38;nbsp;   <span class="functions">select</span> region,
Cast(region_id as C(5)) <span class="commands">from</span> region into <span class
="commands">array</span> .waRowSource<br />    
<span class="programcontrol">for</span> i = 1 <span class="commands"&
#62;to</span> <span class="systemvars">_Tally</span>*2<br /> 
;     .waRowSource<span class="codestring">[m.i
]</span> = <span class="functions">Alltrim</span>(.waRowSource<span class
="codestring">[m.i]</span>)<br />     
;<span class="programcontrol">endfor</span><br />   
;  .<span class="commands">Margin</span> = 1<br /> 
;    .<span class="properties">Style</span> = 2
<span class="codecomment">&& Drop-down list box</span><br />
     .<span class="properties">DisplayCount<
;/span> = 10<br />     .<span class="properties"
>BoundColumn</span> = 2<br />     .
<span class="properties">BoundTo</span> = .T.<br />   
;  .<span class="properties">RowSourceType</span> = 5 <span class
="codecomment">&& Array</span><br />   
;  .<span class="properties">RowSource</span> = <span class="codestring"
>\'this.waRowSource\'</span><br /><br />   &
;nbsp; <span class="commands">store</span> <span class="functions">rgb
</span>(216, 091, 220); <span class="codecomment">&& lilac</span
><br />      <span class="commands"
>to</span> .<span class="properties">BackColor</span>, .<span class="properties"
>Parent</span>.<span class="properties">BackColor</span>, .ItemBackColor
<br />     <span class="commands">store
</span> <span class="functions">rgb</span>(255, 255, 255); <span class="codecomment"
>&& white</span><br />    &
;nbsp; <span class="commands">to</span> .ForeColor, .<span class="properties"
>ItemForeColor</span><br />    <span class
="programcontrol">endwith</span><br />   <span class
="programcontrol">endif</span><br />   .CurrentControl
= <span class="codestring">\'ficTxt\'</span><br />   
;.<span class="properties">ReadOnly</span> = m.iGrc = 1<br /><br />&
#38;nbsp;  .<span class="properties">BackColor</span> = ICase(; <
;span class="codecomment">&& m.iGrc = column_region : {en} see above {fr} voir ci-dessus
</span><br />    .<span class="properties">
;ReadOnly</span>,;<br />     <span class
="functions">Rgb</span>(200, 200, 200),; <span class="codecomment">&&
;amp; grayish</span><br />    m.iGrc = 2,;<br
/>     <span class="functions">Rgb</span
>(255, 255, 128),; <span class="codecomment">&& light yellow</span>
;<br />     .<span class="properties">BackColor
</span>;<br />    )<br /><br />&
#38;nbsp;  <span class="functions">BindEvent</span>(.ficTxt, <span
class="codestring">\'Valid\'</span>, m.<span class="properties">thisForm</span
>, <span class="codestring">\'grcTxtValid\'</span>) <span class="codecomment"
>&& Iif(m.iGrc = column_active, \'Click\', \'Valid\')</span><br />
;   .<span class="methods">SetAll</span>(<span class="codestring"
>\'FontName\'</span>, .<span class="properties">FontName</span>)<br
/>   .<span class="methods">SetAll</span>(<span class
="codestring">\'FontSize\'</span>, .<span class="properties">FontSize</span&
#62;)<br />   .<span class="methods">SetAll</span>
;(<span class="codestring">\'Visible\'</span>, .T.)<br />  
; .<span class="methods">SetAll</span>(<span class="codestring">\'FontBold
\'</span>, .T., .<span class="properties">HeaderClass</span>)<br />&
#38;nbsp;  .<span class="methods">SetAll</span>(<span class="codestring"
>\'Caption\'</span>, <span class="functions">Evl</span>(<span class="functions"
>DBGetProp</span>(m.cField, <span class="codestring">\'Field\'</span>, &
#60;span class="codestring">\'Caption\'</span>), m.cGrc), .<span class="properties"&
#62;HeaderClass</span>)<br /><br />   <span class
="commands">store</span> <span class="functions">Evl</span>(<span class
="functions">DBGetProp</span>(m.cField, <span class="codestring">\'Field\'</span
>, <span class="codestring">\'Comment\'</span>), m.cField);<br /> 
;   + CRLF + ICase(;<br />    
; m.iGrc = column_region,;<br />     &
#38;nbsp;<span class="codestring">\'Fixed now in Web mode! see dataUpdate.js :-)\'</span
>,;<br />     m.iGrc = column_readOnly,;<
;br />      <span class="codestring">
;\'read-only if .RecordSource is a table (just for fun and test)\'</span>,;<br />&
;nbsp;    .<span class="properties">ReadOnly</span>
;,;<br />      <span class="codestring"
>\'read-only\'</span>,;<br />     &
#38;nbsp;<span class="codestring">\'editable\'</span>;<br />  
;    );<br />    <
;span class="commands">to</span> .<span class="properties">ToolTipText</span
>, .ficTxt.<span class="properties">ToolTipText</span><br /><br />
;  <span class="programcontrol">endwith</span><br /> 
;<span class="programcontrol">endfor</span><br /><span class="programcontrol"
>endwith</span><br /><span class="programcontrol">ENDPROC</span>
<br /><br /><span class="codecomment">* ———————————————————————————————————&
#60;/span><br /><span class="programcontrol">PROCEDURE</span> wAfterColChange
<span class="codecomment">&& {en} FoxInCloud manual adaptation: .wAfterColChange
() has after column change code moved from .AfterRowColChange() {fr} Adaptation manuelle FoxInCloud
: .wAfterColChange() ici se trouve le code d\'après changement de colonne déplacé de .AfterRowColChange
() && {en} After Column change - see this.AfterRowColChange() {fr} Après le changement
de colonne - cf. this.AfterRowColChange()</span><br /><span class="programcontrol"
>LPARAMETERS</span> nColIndex <span class="codecomment">&& see documentation
in awGrd.wAfterColwChange()<br /></span><br /><span class="programcontrol"
>do</span> <span class="programcontrol">case</span><br /><span
class="programcontrol">case</span> m.<span class="properties">thisForm</span
>.wlHTMLgen <span class="codecomment">&& {en} FoxInCloud Automated Adaptation
{fr} Adaptation Automatique FoxInCloud</span><br /> <span class="commands"
>return</span> .T. <span class="codecomment">&& {en} Execute this
VFP event code on FoxInCloud server {fr} Traiter l\'événement sur le serveur (bloc ELSE ci-après)<
;/span><br /><span class="programcontrol">case</span> !<span class="functions"
>DoDefault</span>(@m.nColIndex) <span class="codecomment">&& {en
} very important {fr} très important</span><br /> <span class="commands"
>return</span> .F.<br /><span class="programcontrol">endcase</span>
;<br /><br /><span class="properties">thisForm</span>.<span class
="functions">Refresh</span><br /><span class="programcontrol">ENDPROC<
;/span><br /><br /><span class="codecomment">* —————————————————————————
——————————</span><br /><span class="programcontrol">PROCEDURE</span>
wAfterRowChange <span class="codecomment">&& {en} FoxInCloud manual adaptation
: .wAfterRowChange() has after row change code moved from .AfterRowColChange() {fr} Adaptation manuelle
FoxInCloud : .wAfterRowChange() ici se trouve le code d\'après changement de ligne déplacé de .AfterRowColChange
() && {en} After Row change - see this.AfterRowColChange() {fr} Après le changement de
ligne - cf. this.AfterRowColChange()</span><br /><span class="programcontrol">
;LPARAMETERS</span> tuRow <span class="codecomment">&& see documentation
in awGrd.wAfterRowChange()<br /></span><br /><span class="programcontrol"
>do</span> <span class="programcontrol">case</span><br /><span
class="programcontrol">case</span> m.<span class="properties">thisForm</span
>.wlHTMLgen <span class="codecomment">&& {en} FoxInCloud Automated Adaptation
{fr} Adaptation Automatique FoxInCloud</span><br /> <span class="commands"
>return</span> .T. <span class="codecomment">&& {en} Execute this
VFP event code on FoxInCloud server {fr} Traiter l\'événement sur le serveur (bloc ELSE ci-après)<
;br /></span><br /><span class="programcontrol">case</span> !<
;span class="functions">DoDefault</span>(@m.tuRow) <span class="codecomment">&
;amp;& {en} important {fr} important</span><br /> <span class="commands"
>return</span> .F.<br /><span class="programcontrol">endcase</span>
;<br /><br /><span class="programcontrol">if</span> m.<span class
="properties">thisForm</span>.nBufferDirty > 0 and <span class="functions">
;Empty</span>(nBufferDirty(m.<span class="commands">this</span>.<span class
="properties">recordSource</span>))<br /> <span class="functions">
;AddProperty</span>(m.<span class="properties">thisForm</span>, <span class
="codestring">\'cDataOpe\'</span>, <span class="codestring">\'auto save\'</span
>)<br /> <span class="functions">AddProperty</span>(m.<span
class="properties">thisForm</span>, <span class="codestring">\'nDataRec\'</span
>, m.<span class="properties">thisForm</span>.nBufferDirty)<br /> 
;<span class="functions">AddProperty</span>(m.<span class="properties">thisForm
</span>, <span class="codestring">\'cDataError\'</span>, <span class="codestring"
>\'\'</span>)<br /> <span class="properties">thisForm</span
>.nBufferDirty = 0<br /><span class="programcontrol">endif</span><br
/><br /><span class="properties">thisForm</span>.<span class="functions"
>Refresh</span><br /><span class="programcontrol">ENDPROC</span>
</div></PRE>'); };oGrid.onCurrentColumnChanged = function(col){ FoxInCloud.gridMethod
('wAfterColChange', $('dataupdate_scx-grd'), parseInt(col,10)+1); };
oGrid.onCellValidating = function(text, col, row){ col = parseInt(col, 10); var result, dynCC, template
, readOnly, disabled; if (typeof row === 'undefined') { template = this.getCellTemplate(col); } else
{ row = parseInt(row, 10); dynCC = this.getCellCurrentControl(col,row); template = this.getCellTemplate
(col,row); } if (template.disabled) return; if (typeof text === 'string'){ var fmt = this.getCellFormat
(col, row); var value = fmt ? fmt.textToValue(text) : text; } if (template.readOnly) return; switch
(col){ case 0: if(!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent('blur', $('dataupdate_scx-grd'
), value, 'dataupdate_scx-grd-grcid-fictxt', true);break;} case 1: if(!dynCC || dynCC === 'fictxt'
){result = FoxInCloud.gridEditEvent('blur', $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grccompany-fictxt'
, true);break;} case 4: if(!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent('blur'
, $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grctitle-fictxt', true);break;} case 5: if(
!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent('blur', $('dataupdate_scx-grd'), value
, 'dataupdate_scx-grd-grccontact-fictxt', true);break;} } var cols = this.getColumnCount(), rows = this
.getRowCount(), done = false; col++; while (row < rows && !done) { if (this.getCellEditable
(col,row)) { this.setSelectedColumns([col]); this.setSelectedRows([row]); this.setCurrentColumn(col)
; this.setCurrentRow(row); done = true; } else { col++; if (col >= cols){ col = 0; row++; } } } return
result; };oGrid.onCellClicked = function(event, col, row){ col = parseInt(col, 10); var result, dynCC
, template, readOnly, disabled; if (typeof row === 'undefined') { template = this.getCellTemplate(col
); } else { row = parseInt(row, 10); dynCC = this.getCellCurrentControl(col,row); template = this.getCellTemplate
(col,row); } if (template.disabled) return; if (typeof text === 'string'){ var fmt = this.getCellFormat
(col, row); var value = fmt ? fmt.textToValue(text) : text; } event.cancelBubble = true; event = Event
.extend(event); if(event.isLeftClick()){ switch (col){ case 3: if(!dynCC || dynCC === 'fictxt'){result
= FoxInCloud.gridEditEvent(event, $('dataupdate_scx-grd'), this.getCellValue(col, row), 'dataupdate_scx-grd-grcactive_-fictxt'
);break;} } return result; } };oGrid.onCellValidated = function(text, col, row){ col = parseInt(col,
10); var result, dynCC, template, readOnly, disabled; if (typeof row === 'undefined') { template = this
.getCellTemplate(col); } else { row = parseInt(row, 10); dynCC = this.getCellCurrentControl(col,row)
; template = this.getCellTemplate(col,row); } if (template.disabled) return; if (typeof text === 'string'
){ var fmt = this.getCellFormat(col, row); var value = fmt ? fmt.textToValue(text) : text; } if (template
.readOnly) return; switch (col){ case 2: if(!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent
('change', $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grcregion-fictxt', true);break;} } var
cols = this.getColumnCount(), rows = this.getRowCount(), done = false; col++; while (row < rows
&& !done) { if (this.getCellEditable(col,row)) { this.setSelectedColumns([col]); this.setSelectedRows
([row]); this.setCurrentColumn(col); this.setCurrentRow(row); done = true; } else { col++; if (col &
#62;= cols){ col = 0; row++; } } } return result; };oGrid.onCellValidated = function(text, col, row)
{ col = parseInt(col, 10); var result, dynCC, template, readOnly, disabled; if (typeof row === 'undefined'
) { template = this.getCellTemplate(col); } else { row = parseInt(row, 10); dynCC = this.getCellCurrentControl
(col,row); template = this.getCellTemplate(col,row); } if (template.disabled) return; if (typeof text
=== 'string'){ var fmt = this.getCellFormat(col, row); var value = fmt ? fmt.textToValue(text) : text
; } if (template.readOnly) return; switch (col){ case 2: if(!dynCC || dynCC === 'fictxt'){result
= FoxInCloud.gridEditEvent('change', $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grcregion-fictxt'
, true);break;} } var cols = this.getColumnCount(), rows = this.getRowCount(), done = false; col++; while
(row < rows && !done) { if (this.getCellEditable(col,row)) { this.setSelectedColumns([col
]); this.setSelectedRows([row]); this.setCurrentColumn(col); this.setCurrentRow(row); done = true; }
else { col++; if (col >= cols){ col = 0; row++; } } } return result; };
oGrid.onKeyBackspace = function(event){ event = Event.extend(event); if (!event.findElement('input')
){ this.startCellEdit(''); event.stop(); } };

oGrid.setSelectedRows([-1]);
oGrid.setSelectedRows([107]);
oGrid.setSelectedColumns([3]);
oGrid.disabled = true;
oGrid.setCurrentRow(107);
oGrid.setCurrentColumn(3);
oGrid.disabled = false;
}
/* FoxInCloud Application Server built this script in 406 ms */
})();</script><PCHTML><r><c>dataupdate_scx-cmdsave</c><c>style.cursor</c><c>S</c><c>pointer</c></r><r
><c>dataupdate_scx-cmdcancel</c><c>style.cursor</c><c>S</c><c>pointer</c></r><r><c>dataupdate_scx-lblrs
</c><c>innerHTML</c><c>S</c><c>grid.RecordSource = 'Customer_View': 108 recs, row buffering</c></r><r
><c>dataupdate_scx-lblresult</c><c>innerHTML</c><c>S</c><c>Customer_View has 1 buff. record modified
.</c></r><r><c>dataupdate_scx-lblresult</c><c>style.color</c><c>S</c><c>#FF4040</c></r><r><c>dataupdate_scx-cmdok
</c><c>style.cursor</c><c>S</c><c>auto</c></r><r><c>dataupdate_scx-opgsourcetype</c><c>disabled</c><c
>B</c><c>true</c></r><r><c>dataupdate_scx-cmdsave</c><c>disabled</c><c>B</c><c>false</c></r><r><c>dataupdate_scx-cmdsave
</c><c>style.color</c><c>S</c><c>#000000</c></r><r><c>dataupdate_scx-cmdcancel</c><c>disabled</c><c>B
</c><c>false</c></r><r><c>dataupdate_scx-cmdcancel</c><c>style.color</c><c>S</c><c>#000000</c></r><r
><c>dataupdate_scx-opgbuffering</c><c>disabled</c><c>B</c><c>true</c></r><r><c>dataupdate_scx-cmdok<
/c><c>disabled</c><c>B</c><c>true</c></r><r><c>dataupdate_scx-cmdok</c><c>style.color</c><c>S</c><c>
#6D6D6D</c></r></PCHTML><script_>jQuery('#awMenu').html('<ul id="menubar-_msysmenu" class="menubar"
style="display:block;"><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44u"><a
href="javascript:void(0)">Home</a></li><li class="menubar pad ui-state-disabled"
id="menubar-_msysmenu-_4bw15s44v"><!-- separator --><a href="javascript:void(0)">
;Support</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44w">&
#60;a href="javascript:void(0)">Controls & Events</a></li><li class="menubar
pad" id="menubar-_msysmenu-_4bw15s44x"><a href="javascript:void(0)">Data Update (Grid )
</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44y"><a href
="javascript:void(0)">Reporting</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44z"
><a href="javascript:void(0)">KeyPress Event</a></li><li class="menubar
pad ui-state-disabled" id="menubar-_msysmenu-_4bw15s450"><!-- separator --><a href="javascript
:void(0)">Adaptations</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s451"
><a href="javascript:void(0)">Form Data Xchange</a></li><li class="menubar
pad" id="menubar-_msysmenu-_4bw15s452"><a href="javascript:void(0)">Grid - RowColChange
</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s453"><a href
="javascript:void(0)">Grid - Paged</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s454"
><a href="javascript:void(0)">RowSourceType</a></li><li class="menubar
pad ui-state-disabled" id="menubar-_msysmenu-sep1"><!-- separator --><a href="javascript
:void(0)">Server</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s455"
><a href="javascript:void(0)">Source Code</a><ul id="popup-sourcecode" class
="popup ui-menu-icons shadow" style="display:none;"><li class="popup bar" id="popup-sourcecode-1"
title="FoxInCloud Application Server main program"><a href="javascript:void(0)">FAS (FoxInCloud
Application Server) main</a></li><li class="popup bar" id="popup-sourcecode-2" title
="FoxInCloud Application Server parameters (can be modified on line)"><a href="javascript:void
(0)">FAS config (tutoTest.ini)</a></li><li class="popup bar" id="popup-sourcecode-3"
title="Application Environment settings shared by Web and LAN versions"><a href="javascript
:void(0)">FAS settings (tutoSets.prg, shared with desktop app)</a></li><li class
="popup bar" id="popup-sourcecode-4" title="Application Menu generated from tuto.mnx, shared by desktop
and Web versions"><a href="javascript:void(0)">FAS menu (tuto.mnx, shared with desktop app
)</a></li><li class="popup bar" id="popup-sourcecode-5" title="FoxInCloud Application
Server classes shared by test and production versions"><a href="javascript:void(0)">FAS
classes (tutoServer.prg)</a></li><li class="popup bar" id="popup-sourcecode-6" title
="FoxInCloud Web Application Site Cascading Style Sheet"><a href="javascript:void(0)">FAS
custom CSS (tuto.css)</a></li><li class="popup bar" id="popup-sourcecode-7" title
="FoxInCloud Web Application Site JavaScript"><a href="javascript:void(0)">FAS custom JS
(tuto.js)</a></li><li class="popup bar" id="popup-sourcecode-8" title="Application
Desktop version main program"><a href="javascript:void(0)">Desktop app main (tutoLAN.prg
)</a></li></ul></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s456"
><a href="javascript:void(0)">Server Admin</a></li><li class="menubar
pad" id="menubar-_msysmenu-_4bw15s457"><a href="javascript:void(0)">Server Status</a
></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s458"><a href="javascript
:void(0)">Event Log</a></li></ul>');
jQuery('#menubar-_msysmenu').menu().menu('refresh');var select = jQuery('#menubar-_msysmenu').menu('option'
, 'select') || '';
if (select) {
select = select.toString();
var selOpen = select.indexOf('{')+2, selClose = select.lastIndexOf('}');
select = select.substr(selOpen, selClose - selOpen);
}
else select = 'var item = ui.item, elem = item.get(0);\n';
jQuery('#menubar-_msysmenu').menu('option', 'select', Function(
'event'
, 'ui'
, select + 'if(item.is(\'#menubar-_msysmenu-_4bw15s44u\')) return FoxInCloud.menuSelect(event, elem)
;\nif(item.is(\'#menubar-_msysmenu-_4bw15s44w\')) return FoxInCloud.menuSelect(event, elem);\nif(item
.is(\'#menubar-_msysmenu-_4bw15s44x\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s44y
\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s44z\')) return
FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s451\')) return FoxInCloud
.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s452\')) return FoxInCloud.menuSelect
(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s453\')) return FoxInCloud.menuSelect(event, elem
);\nif(item.is(\'#menubar-_msysmenu-_4bw15s454\')) return FoxInCloud.menuSelect(event, elem);\nif(item
.is(\'#popup-sourcecode-1\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-2
\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-3\')) return FoxInCloud
.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-4\')) return FoxInCloud.menuSelect(event, elem
);\nif(item.is(\'#popup-sourcecode-5\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-6
\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-7\')) return FoxInCloud
.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-8\')) return FoxInCloud.menuSelect(event, elem
);\nif(item.is(\'#menubar-_msysmenu-_4bw15s456\')) return FoxInCloud.menuSelect(event, elem);\nif(item
.is(\'#menubar-_msysmenu-_4bw15s457\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s458
\')) return FoxInCloud.menuSelect(event, elem);'.split(/\n/).reject(function(inst){return this.include
(inst);}, select).join('\n')
));
</script_><UserID>3VM0XAYNH</UserID><AppTime>0.015</AppTime><ServerVersion>2.20 beta07</ServerVersion
><ServerTimeStamp>{^2015-05-14 12:31:44 PM}</ServerTimeStamp><ServerTime>0.690783</ServerTime></IntuiCat
>



Using the same form to display and edit record information, I am raising an error in Web in the following situation:

Textboxes are Enabled = .F. for display only - to prevent unintended edits.
Upon entering Edit mode, Textboxes are made Enabled = .T.

Lets say you are editing a record and you make a small change in the Description Textbox. You now use the mouse to click a save button. Save.click() performs the usual data checks and if the data is OK to save, resets the environment to the Display mode with all Textboxes.Enabled = .F. All this processing completes without error in LAN and Web.

At this point an error is raised that says:"awserver.fxp!Awajax.useraction() - control 'frame.page3.txtquantity' should be disabled in client browser..."

If you watch the browser, you can see that focus has advanced to the next Textbox, which in this case is named txtQuantity. Indeed, the Save.click() did disable the Textbox, so the error is sensible. However, the mouse should have changed the focus to the Save button. The error message seems informational only, but does stop processing. At this point I am unsure why the focus is advancing down the tab order, do I need to call something prior to Enabled = .F. to prevent this?

- James


-- thn (FoxInCloud)

Gravatar is a globally recognized avatar based on your email address. Re: Focus Error in Textbox
  n/a
  Thierry Nivelet (FoxInCloud)
  May 26, 2015 @ 08:10am
I'll try to be as brief as possible, Here we go!

The button.click() code of interest is for This.Caption = "Accept" and since ItemDetail.IsDeleted is .F., code execution begins with "IF THISFORM.CheckItem()", which follows in the next code block...

LPARAMETERS nButton, nShift, nXcoord, nYcoord && Implementation documentation: see code inherited from aw.vcx!aw???.Click() (click 'View Parent Code')

IF (Type('m.thisForm.wlHTMLgen') == 'L' AND m.thisForm.wlHTMLgen) && Added by FoxInCloud Adaptation Assistant version 2.20 beta06 (source mode) on 04/16/2015 01:51:52 PM

RETURN .T. && Process event on server (your code after this IF ... ENDIF block)

ENDIF && Added by FoxInCloud Adaptation Assistant version 2.20 beta06 (source mode) on 04/16/2015 01:51:52 PM

IF THIS.CAPTION = "Add"
SELECT ItemDetail
APPEND BLANK

THISFORM.ItemSetup(THIS.CAPTION)
THIS.PARENT.REFRESH()

ELSE && "Accept"
SELECT ItemDetail
IF ItemDetail.IsDeleted && marked by the Delete Button
IF RECNO() < 0 && Negative indicates a reversable appended record
TABLEREVERT(.F.,"ItemDetail")
THISFORM.ItemSetup(THIS.CAPTION)
ELSE && A previously saved record
REPLACE Quote_numb WITH 0
THISFORM.ItemSetup(THIS.CAPTION)
ENDIF
ELSE
IF THISFORM.CheckItem()

THISFORM.ItemSetup(THIS.CAPTION)

ENDIF
ENDIF

ENDIF

THIS.PARENT.REFRESH()

THISFORM.CheckItem() is a method that is responsible for data checking. It will check entries and validates data prior to approving the data. References that begin with "Err" are graphical elements that highlight errors on the page and no other UI elements are affected. Method returns .T. if data was OK. This data is in a temp cursor, so it will be committed to tables after all records that need editing have been completed.

*!* This method will check the validity of a quote item.

Local llReturn, lnBAD_CHAR, lnTEST_IT

Store .T. To llReturn

Select ItemDetail

If .Not. ItemDetail.IsDeleted && Ignore checking deleted items

If Empty(ItemDetail.Descript)
Store .F. To llReturn
Thisform.Frame.page3.ErrDescript.Visible = .T.
Else
Thisform.Frame.page3.ErrDescript.Visible = .F.
Endif

If ItemDetail.Quantity < 1
Store .F. To llReturn
Thisform.Frame.page3.ErrQuantity.Visible = .T.
Else
Thisform.Frame.page3.ErrQuantity.Visible = .F.
Endif

If ItemDetail.Cost >= ItemDetail.Quoteprice
Store .F. To llReturn
Thisform.Frame.page3.ErrCost.Visible = .T.
Thisform.Frame.page3.ErrQuotedPrice.Visible = .T.
Else
If ItemDetail.Cost = 0
Store .F. To llReturn
Thisform.Frame.page3.ErrCost.Visible = .T.
Else
Thisform.Frame.page3.ErrCost.Visible = .F.
Endif

If ItemDetail.Quoteprice = 0
Store .F. To llReturn
Thisform.Frame.page3.ErrQuotedPrice.Visible = .T.
Else
Thisform.Frame.page3.ErrQuotedPrice.Visible = .F.
Endif
Endif


If Empty(ItemDetail.Inv_numb) && Brokered

Thisform.Frame.page3.ErrDescript.Visible = .F.

If Len(Alltrim(ItemDetail.Descript)) < 12 && DESCRIPTION TOO SHORT
Store .F. To llReturn
Thisform.Frame.page3.ErrDescript.Visible = .T.
Else
Store 0 To lnBAD_CHAR

For lnTEST_IT = 1 To Len(Alltrim(ItemDetail.Descript)) Step 1
If "A" <= Substr((Alltrim(ItemDetail.Descript)),lnTEST_IT,1) ;
.And. Substr((Alltrim(ItemDetail.Descript)),lnTEST_IT,1) <= "Z" ;
.Or. ("0" <= Substr((Alltrim(ItemDetail.Descript)),lnTEST_IT,1) ;
.And. Substr((Alltrim(ItemDetail.Descript)),lnTEST_IT,1) <= "9")
Else
Store lnBAD_CHAR + 1 To lnBAD_CHAR
Endif
Endfor

If (Len(Alltrim(ItemDetail.Descript))/lnBAD_CHAR) < 3.0 && SMALLER IS WORSE
Store .F. To llReturn
Thisform.Frame.page3.ErrDescript.Visible = .T.
Endif

Endif

Else && Stock Item

Endif
Endif

Return llReturn

At this point, the button.click() will call "THISFORM.ItemSetup(THIS.CAPTION)". This method is responsible for setting all UI elements for a particular state. Here we are changing from "Edit" to "Display". This method is just a Case statement, so this is all code executed in this situation.

Case lcCaption = "Accept"
Thisform.Frame.page3.command1.Caption = "Add"
Thisform.Frame.page3.command2.Caption = "Edit"
Thisform.Frame.page3.command3.Enabled = .T.

Thisform.Frame.page3.txtVendorPart.Enabled = .F.
Thisform.Frame.page3.txtSource.Enabled = .F.
Thisform.Frame.page3.txtContact.Enabled = .F.
Thisform.Frame.page3.txtS_Phone.Enabled = .F.
Thisform.Frame.page3.txtCost.Enabled = .F.
Thisform.Frame.page3.txtQuotePrice.Enabled = .F.
Thisform.Frame.page3.txtDelivery.Enabled = .F.
Thisform.Frame.page3.txtDescript.Enabled = .F.
Thisform.Frame.page3.txtQuantity.Enabled = .F.
Thisform.Frame.page3.txtCust_part.Enabled = .F.
Thisform.Frame.page3.EditItem_notes.Enabled = .F.
Thisform.Frame.page3.EditOur_notes.Enabled = .F.
Thisform.Frame.page3.ckIsBroker.Enabled = .F.
Thisform.Frame.page3.ckSameVendor.Enabled = .F.
Thisform.Frame.page3.txtInv_numb.Enabled = .F.
Thisform.Frame.page3.lblIsBlanket.Visible = .F.
Thisform.Frame.page3.lblCustomFile.Visible = .F.
Thisform.Frame.page3.lblComponents.Visible = .F.
Thisform.Frame.page3.txtCost.Visible = .F.
Thisform.Frame.page3.comboUM.Enabled = .F.

Thisform.Frame.page3.ErrInv_numb.Visible = .F.
Thisform.Frame.page3.ErrDescript.Visible = .F.
Thisform.Frame.page3.ErrQuantity.Visible = .F.
Thisform.Frame.page3.ErrCust_part.Visible = .F.
Thisform.Frame.page3.ErrVendorpart.Visible = .F.
Thisform.Frame.page3.ErrCost.Visible = .F.
Thisform.Frame.page3.txtcodedCost.Visible = .T.
Thisform.Frame.page3.ErrQuotedPrice.Visible = .F.

Thisform.Frame.Page2.Enabled = .T.
Thisform.Frame.Page2.FontBold = .T.


This is the XML from the POST. I am pretty sure that this is the one you need as I see several attribute settings.

<?xml version='1.0' encoding='UTF-8' standalone='yes'?><IntuiCat>
<Result><v>true</v><t>boolean</t></Result>
<script>$('quotes_scx-frame').pageEnable('quotes_scx-frame-page2', false);
$('quotes_scx-frame-page3-txtcost').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-cksamevendor').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-command3').writeAttribute('disabled', '').disabled=false;
$('quotes_scx-frame-page3-txtvendorpart').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtsource').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtcontact').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txts_phone').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtquoteprice').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtdelivery').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtdescript').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtquantity').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtcust_part').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-ckisbroker').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-edititem_notes').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-editour_notes').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-comboum').writeAttribute('disabled', 'disabled').disabled=true;</script>
<PCHTML>
<r>
<c>quotes_scx-frame-page3-txtcost</c>
<c>style.display</c>
<c>S</c>
<c>none</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcodedcost</c>
<c>style.display</c>
<c>S</c>
<c>block</c>
</r>
<r>
<c>quotes_scx-frame-page2</c>
<c>style.fontWeight</c>
<c>S</c>
<c>bold</c>
</r>
<r>
<c>quotes_scx-frame-page2_tab</c>
<c>style.fontWeight</c>
<c>S</c>
<c>bold</c>
</r>
<r>
<c>quotes_scx-frame-page3-command2</c>
<c>textContent</c>
<c>S</c>
<c>Edit</c>
</r>
<r>
<c>quotes_scx-frame-page3-command3</c>
<c>style.cursor</c>
<c>S</c>
<c>pointer</c>
</r>
<r>
<c>quotes_scx-frame-page3-command1</c>
<c>textContent</c>
<c>S</c>
<c>Add</c>
</r>
<r>
<c>quotes_scx-frame-page2</c>
<c>disabled</c>
<c>B</c>
<c>false</c>
</r>
<r>
<c>quotes_scx-frame-page2_tab</c>
<c>disabled</c>
<c>B</c>
<c>false</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcost</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcost</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-cksamevendor</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-cksamevendor_lbl</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-cksamevendor</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-cksamevendor_lbl</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-command3</c>
<c>disabled</c>
<c>B</c>
<c>false</c>
</r>
<r>
<c>quotes_scx-frame-page3-command3</c>
<c>style.color</c>
<c>S</c>
<c>#000000</c>
</r>
<r>
<c>quotes_scx-frame-page3-command3</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtvendorpart</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtvendorpart</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtsource</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtsource</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcontact</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcontact</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txts_phone</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txts_phone</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtquoteprice</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtquoteprice</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtdelivery</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtdelivery</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtdescript</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtdescript</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtquantity</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtquantity</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcust_part</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcust_part</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-ckisbroker</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-ckisbroker_lbl</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-ckisbroker</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-ckisbroker_lbl</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-edititem_notes</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-edititem_notes</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-edititem_notes</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-editour_notes</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-editour_notes</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-editour_notes</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum_txt</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum_txt</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum_txt</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
</PCHTML>
<UserID>4BW0WP92D</UserID>
<AppTime>0.125</AppTime>
<ServerVersion>2.20 beta06</ServerVersion>
<ServerTimeStamp>{^2015-04-09 01:31:49 PM}</ServerTimeStamp>
<ServerTime>1.560000</ServerTime></IntuiCat>


actually "awserver.fxp!Awajax.useraction() - control 'frame.page3.txtquantity' should be disabled in client browser..." is an assert - you can get rid of it by clicking 'ignore all'

in this case we need to know what makes focus move to frame.page3.txtQuantity

could you post:
1- the complete Save.click() VFP code
2- the XML response when Save.click() has executed - you can get it from firebug like below:

in this case the XML response is:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?><IntuiCat>
<Result><v>true</v><t>boolean</t></Result><script>var ebx = $('dataupdate_scx-tutoinfoboxfic');ebx &
#38;& !ebx.innerHTML && ebx.update('<p>Hovering the mouse pointer over a control
displays its source code here ...</p><p>(<i>source code is dynamically read
from form.scx and colorized</i>)</p><p>- <b>Freeze display</b>
;: press the shift key while hovering</p><p>- <b>Enlarge to a child form<
;/b>: Click (Web mode only)</p><p>- <b>Enlarge to a new page</b>
: control+Click (Web mode only)</p><p><br><i>Enjoy and copy code as you
like!</i></p>');
$('dataupdate_scx-opgsourcetype').writeAttribute('disabled', 'disabled').disabled=true;
$('dataupdate_scx-cmdsave').writeAttribute('disabled', '').disabled=false;
$('dataupdate_scx-cmdcancel').writeAttribute('disabled', '').disabled=false;
$('dataupdate_scx-opgbuffering').writeAttribute('disabled', 'disabled').disabled=true;
$('dataupdate_scx-cmdok').writeAttribute('disabled', 'disabled').disabled=true;
(function(){
var grd = $('dataupdate_scx-grd');
if (grd){
var oGrid = $('dataupdate_scx-grd').oGrid, oTable = $('dataupdate_scx-grd').oTable, oTempl;
oGrid.defineControlProperty('DataUpdate', false);
oGrid.defineCellProperty('CurrentControl', null);
oGrid.setRowCount(108);


/* Column 0 'grcID' */
oTempl = oGrid.getCellTemplate(0);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grcid', 'adapted');

/* Column 1 'grcCOMPANY' */
oTempl = oGrid.getCellTemplate(1);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grccompany', 'adapted');
var f1 = function(row,val){return this.getCellTemplate(1,row).setStyle('background-color',val);}.bind
(oGrid);
f1(0,'#FFFF80');f1(1,'#FFFF80');f1(2,'#FFFF80');f1(3,'#FFFF80');f1(4,'#FFFF80');f1(5,'#FFFF80');f1(6
,'#FFFF80');f1(7,'#FFFF80');f1(8,'#FFFF80');f1(9,'#FFFF80');f1(10,'#FFFF80');f1(11,'#FFFF80');f1(12,'
#FFFF80');f1(13,'#FFFF80');f1(14,'#FFFF80');f1(15,'#FFFF80');f1(16,'#FFFF80');f1(17,'#FFFF80');f1(18
,'#FFFF80');f1(19,'#FFFF80');f1(20,'#FFFF80');f1(21,'#FFFF80');f1(22,'#FFFF80');f1(23,'#FFFF80');f1(24
,'#FFFF80');f1(25,'#FFFF80');f1(26,'#FFFF80');f1(27,'#FFFF80');f1(28,'#FFFF80');f1(29,'#FFFF80');f1(30
,'#FFFF80');f1(31,'#FFFF80');f1(32,'#FFFF80');f1(33,'#FFFF80');f1(34,'#FFFF80');f1(35,'#FFFF80');f1(36
,'#FFFF80');f1(37,'#FFFF80');f1(38,'#FFFF80');f1(39,'#FFFF80');f1(40,'#FFFF80');f1(41,'#FFFF80');f1(42
,'#FFFF80');f1(43,'#FFFF80');f1(44,'#FFFF80');f1(45,'#FFFF80');f1(46,'#FFFF80');f1(47,'#FFFF80');f1(48
,'#FFFF80');f1(49,'#FFFF80');f1(50,'#FFFF80');f1(51,'#FFFF80');f1(52,'#FFFF80');f1(53,'#FFFF80');f1(54
,'#FFFF80');f1(55,'#FFFF80');f1(56,'#FFFF80');f1(57,'#FFFF80');f1(58,'#FFFF80');f1(59,'#FFFF80');f1(60
,'#FFFF80');f1(61,'#FFFF80');f1(62,'#FFFF80');f1(63,'#FFFF80');f1(64,'#FFFF80');f1(65,'#FFFF80');f1(66
,'#FFFF80');f1(67,'#FFFF80');f1(68,'#FFFF80');f1(69,'#FFFF80');f1(70,'#FFFF80');f1(71,'#FFFF80');f1(72
,'#FFFF80');f1(73,'#FFFF80');f1(74,'#FFFF80');f1(75,'#FFFF80');f1(76,'#FFFF80');f1(77,'#FFFF80');f1(78
,'#FFFF80');f1(79,'#FFFF80');f1(80,'#FFFF80');f1(81,'#FFFF80');f1(82,'#FFFF80');f1(83,'#FFFF80');f1(84
,'#FFFF80');f1(85,'#FFFF80');f1(86,'#FFFF80');f1(87,'#FFFF80');f1(88,'#FFFF80');f1(89,'#FFFF80');f1(90
,'#FFFF80');f1(91,'#FFFF80');f1(92,'#FFFF80');f1(93,'#FFFF80');f1(94,'#FFFF80');f1(95,'#FFFF80');f1(96
,'#FFFF80');f1(97,'#FFFF80');f1(98,'#FFFF80');f1(99,'#FFFF80');f1(100,'#FFFF80');f1(101,'#FFFF80');f1
(102,'#FFFF80');f1(103,'#FFFF80');f1(104,'#FFFF80');f1(105,'#FFFF80');f1(106,'#FFFF80');f1(107,'#FFFF80'
);

/* Column 2 'grcREGION' */
oTempl = oGrid.getCellTemplate(2);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grcregion', 'adapted');
var f2 = function(row,val){return this.getCellTemplate(2,row).setStyle('background-color',val);}.bind
(oGrid);
f2(0,'#D85BDC');f2(1,'#D85BDC');f2(2,'#D85BDC');f2(3,'#D85BDC');f2(4,'#D85BDC');f2(5,'#D85BDC');f2(6
,'#D85BDC');f2(7,'#D85BDC');f2(8,'#D85BDC');f2(9,'#D85BDC');f2(10,'#D85BDC');f2(11,'#D85BDC');f2(12,'
#D85BDC');f2(13,'#D85BDC');f2(14,'#D85BDC');f2(15,'#D85BDC');f2(16,'#D85BDC');f2(17,'#D85BDC');f2(18
,'#D85BDC');f2(19,'#D85BDC');f2(20,'#D85BDC');f2(21,'#D85BDC');f2(22,'#D85BDC');f2(23,'#D85BDC');f2(24
,'#D85BDC');f2(25,'#D85BDC');f2(26,'#D85BDC');f2(27,'#D85BDC');f2(28,'#D85BDC');f2(29,'#D85BDC');f2(30
,'#D85BDC');f2(31,'#D85BDC');f2(32,'#D85BDC');f2(33,'#D85BDC');f2(34,'#D85BDC');f2(35,'#D85BDC');f2(36
,'#D85BDC');f2(37,'#D85BDC');f2(38,'#D85BDC');f2(39,'#D85BDC');f2(40,'#D85BDC');f2(41,'#D85BDC');f2(42
,'#D85BDC');f2(43,'#D85BDC');f2(44,'#D85BDC');f2(45,'#D85BDC');f2(46,'#D85BDC');f2(47,'#D85BDC');f2(48
,'#D85BDC');f2(49,'#D85BDC');f2(50,'#D85BDC');f2(51,'#D85BDC');f2(52,'#D85BDC');f2(53,'#D85BDC');f2(54
,'#D85BDC');f2(55,'#D85BDC');f2(56,'#D85BDC');f2(57,'#D85BDC');f2(58,'#D85BDC');f2(59,'#D85BDC');f2(60
,'#D85BDC');f2(61,'#D85BDC');f2(62,'#D85BDC');f2(63,'#D85BDC');f2(64,'#D85BDC');f2(65,'#D85BDC');f2(66
,'#D85BDC');f2(67,'#D85BDC');f2(68,'#D85BDC');f2(69,'#D85BDC');f2(70,'#D85BDC');f2(71,'#D85BDC');f2(72
,'#D85BDC');f2(73,'#D85BDC');f2(74,'#D85BDC');f2(75,'#D85BDC');f2(76,'#D85BDC');f2(77,'#D85BDC');f2(78
,'#D85BDC');f2(79,'#D85BDC');f2(80,'#D85BDC');f2(81,'#D85BDC');f2(82,'#D85BDC');f2(83,'#D85BDC');f2(84
,'#D85BDC');f2(85,'#D85BDC');f2(86,'#D85BDC');f2(87,'#D85BDC');f2(88,'#D85BDC');f2(89,'#D85BDC');f2(90
,'#D85BDC');f2(91,'#D85BDC');f2(92,'#D85BDC');f2(93,'#D85BDC');f2(94,'#D85BDC');f2(95,'#D85BDC');f2(96
,'#D85BDC');f2(97,'#D85BDC');f2(98,'#D85BDC');f2(99,'#D85BDC');f2(100,'#D85BDC');f2(101,'#D85BDC');f2
(102,'#D85BDC');f2(103,'#D85BDC');f2(104,'#D85BDC');f2(105,'#D85BDC');f2(106,'#D85BDC');f2(107,'#D85BDC'
);

/* Column 3 'grcACTIVE_' */
oTempl = oGrid.getCellTemplate(3);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grcactive_', 'adapted');
var f3 = function(row,val){return this.getCellTemplate(3,row).setStyle('background-color',val);}.bind
(oGrid);
f3(0,'#FFFFFF');f3(1,'#FFFFFF');f3(2,'#FFFFFF');f3(3,'#FFFFFF');f3(4,'#FFFFFF');f3(5,'#FFFFFF');f3(6
,'#FFFFFF');f3(7,'#FFFFFF');f3(8,'#FFFFFF');f3(9,'#FFFFFF');f3(10,'#FFFFFF');f3(11,'#FFFFFF');f3(12,'
#FFFFFF');f3(13,'#FFFFFF');f3(14,'#FFFFFF');f3(15,'#FFFFFF');f3(16,'#FFFFFF');f3(17,'#FFFFFF');f3(18
,'#FFFFFF');f3(19,'#FFFFFF');f3(20,'#FFFFFF');f3(21,'#FFFFFF');f3(22,'#FFFFFF');f3(23,'#FFFFFF');f3(24
,'#FFFFFF');f3(25,'#FFFFFF');f3(26,'#FFFFFF');f3(27,'#FFFFFF');f3(28,'#FFFFFF');f3(29,'#FFFFFF');f3(30
,'#FFFFFF');f3(31,'#FFFFFF');f3(32,'#FFFFFF');f3(33,'#FFFFFF');f3(34,'#FFFFFF');f3(35,'#FFFFFF');f3(36
,'#FFFFFF');f3(37,'#FFFFFF');f3(38,'#FFFFFF');f3(39,'#FFFFFF');f3(40,'#FFFFFF');f3(41,'#FFFFFF');f3(42
,'#FFFFFF');f3(43,'#FFFFFF');f3(44,'#FFFFFF');f3(45,'#FFFFFF');f3(46,'#FFFFFF');f3(47,'#FFFFFF');f3(48
,'#FFFFFF');f3(49,'#FFFFFF');f3(50,'#FFFFFF');f3(51,'#FFFFFF');f3(52,'#FFFFFF');f3(53,'#FFFFFF');f3(54
,'#FFFFFF');f3(55,'#FFFFFF');f3(56,'#FFFFFF');f3(57,'#FFFFFF');f3(58,'#FFFFFF');f3(59,'#FFFFFF');f3(60
,'#FFFFFF');f3(61,'#FFFFFF');f3(62,'#FFFFFF');f3(63,'#FFFFFF');f3(64,'#FFFFFF');f3(65,'#FFFFFF');f3(66
,'#FFFFFF');f3(67,'#FFFFFF');f3(68,'#FFFFFF');f3(69,'#FFFFFF');f3(70,'#FFFFFF');f3(71,'#FFFFFF');f3(72
,'#FFFFFF');f3(73,'#FFFFFF');f3(74,'#FFFFFF');f3(75,'#FFFFFF');f3(76,'#FFFFFF');f3(77,'#FFFFFF');f3(78
,'#FFFFFF');f3(79,'#FFFFFF');f3(80,'#FFFFFF');f3(81,'#FFFFFF');f3(82,'#FFFFFF');f3(83,'#FFFFFF');f3(84
,'#FFFFFF');f3(85,'#FFFFFF');f3(86,'#FFFFFF');f3(87,'#FFFFFF');f3(88,'#FFFFFF');f3(89,'#FFFFFF');f3(90
,'#FFFFFF');f3(91,'#FFFFFF');f3(92,'#FFFFFF');f3(93,'#FFFFFF');f3(94,'#FFFFFF');f3(95,'#FFFFFF');f3(96
,'#FFFFFF');f3(97,'#FFFFFF');f3(98,'#FFFFFF');f3(99,'#FFFFFF');f3(100,'#FFFFFF');f3(101,'#FFFFFF');f3
(102,'#FFFFFF');f3(103,'#FFFFFF');f3(104,'#FFFFFF');f3(105,'#FFFFFF');f3(106,'#FFFFFF');f3(107,'#FFFFFF'
);

/* Column 4 'grcTITLE' */
oTempl = oGrid.getCellTemplate(4);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grctitle', 'adapted');
var f4 = function(row,val){return this.getCellTemplate(4,row).setStyle('background-color',val);}.bind
(oGrid);
f4(0,'#FFFFFF');f4(1,'#FFFFFF');f4(2,'#FFFFFF');f4(3,'#FFFFFF');f4(4,'#FFFFFF');f4(5,'#FFFFFF');f4(6
,'#FFFFFF');f4(7,'#FFFFFF');f4(8,'#FFFFFF');f4(9,'#FFFFFF');f4(10,'#FFFFFF');f4(11,'#FFFFFF');f4(12,'
#FFFFFF');f4(13,'#FFFFFF');f4(14,'#FFFFFF');f4(15,'#FFFFFF');f4(16,'#FFFFFF');f4(17,'#FFFFFF');f4(18
,'#FFFFFF');f4(19,'#FFFFFF');f4(20,'#FFFFFF');f4(21,'#FFFFFF');f4(22,'#FFFFFF');f4(23,'#FFFFFF');f4(24
,'#FFFFFF');f4(25,'#FFFFFF');f4(26,'#FFFFFF');f4(27,'#FFFFFF');f4(28,'#FFFFFF');f4(29,'#FFFFFF');f4(30
,'#FFFFFF');f4(31,'#FFFFFF');f4(32,'#FFFFFF');f4(33,'#FFFFFF');f4(34,'#FFFFFF');f4(35,'#FFFFFF');f4(36
,'#FFFFFF');f4(37,'#FFFFFF');f4(38,'#FFFFFF');f4(39,'#FFFFFF');f4(40,'#FFFFFF');f4(41,'#FFFFFF');f4(42
,'#FFFFFF');f4(43,'#FFFFFF');f4(44,'#FFFFFF');f4(45,'#FFFFFF');f4(46,'#FFFFFF');f4(47,'#FFFFFF');f4(48
,'#FFFFFF');f4(49,'#FFFFFF');f4(50,'#FFFFFF');f4(51,'#FFFFFF');f4(52,'#FFFFFF');f4(53,'#FFFFFF');f4(54
,'#FFFFFF');f4(55,'#FFFFFF');f4(56,'#FFFFFF');f4(57,'#FFFFFF');f4(58,'#FFFFFF');f4(59,'#FFFFFF');f4(60
,'#FFFFFF');f4(61,'#FFFFFF');f4(62,'#FFFFFF');f4(63,'#FFFFFF');f4(64,'#FFFFFF');f4(65,'#FFFFFF');f4(66
,'#FFFFFF');f4(67,'#FFFFFF');f4(68,'#FFFFFF');f4(69,'#FFFFFF');f4(70,'#FFFFFF');f4(71,'#FFFFFF');f4(72
,'#FFFFFF');f4(73,'#FFFFFF');f4(74,'#FFFFFF');f4(75,'#FFFFFF');f4(76,'#FFFFFF');f4(77,'#FFFFFF');f4(78
,'#FFFFFF');f4(79,'#FFFFFF');f4(80,'#FFFFFF');f4(81,'#FFFFFF');f4(82,'#FFFFFF');f4(83,'#FFFFFF');f4(84
,'#FFFFFF');f4(85,'#FFFFFF');f4(86,'#FFFFFF');f4(87,'#FFFFFF');f4(88,'#FFFFFF');f4(89,'#FFFFFF');f4(90
,'#FFFFFF');f4(91,'#FFFFFF');f4(92,'#FFFFFF');f4(93,'#FFFFFF');f4(94,'#FFFFFF');f4(95,'#FFFFFF');f4(96
,'#FFFFFF');f4(97,'#FFFFFF');f4(98,'#FFFFFF');f4(99,'#FFFFFF');f4(100,'#FFFFFF');f4(101,'#FFFFFF');f4
(102,'#FFFFFF');f4(103,'#FFFFFF');f4(104,'#FFFFFF');f4(105,'#FFFFFF');f4(106,'#FFFFFF');f4(107,'#FFFFFF'
);

/* Column 5 'grcCONTACT' */
oTempl = oGrid.getCellTemplate(5);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grccontact', 'adapted');
var f5 = function(row,val){return this.getCellTemplate(5,row).setStyle('background-color',val);}.bind
(oGrid);
f5(0,'#FFFFFF');f5(1,'#FFFFFF');f5(2,'#FFFFFF');f5(3,'#FFFFFF');f5(4,'#FFFFFF');f5(5,'#FFFFFF');f5(6
,'#FFFFFF');f5(7,'#FFFFFF');f5(8,'#FFFFFF');f5(9,'#FFFFFF');f5(10,'#FFFFFF');f5(11,'#FFFFFF');f5(12,'
#FFFFFF');f5(13,'#FFFFFF');f5(14,'#FFFFFF');f5(15,'#FFFFFF');f5(16,'#FFFFFF');f5(17,'#FFFFFF');f5(18
,'#FFFFFF');f5(19,'#FFFFFF');f5(20,'#FFFFFF');f5(21,'#FFFFFF');f5(22,'#FFFFFF');f5(23,'#FFFFFF');f5(24
,'#FFFFFF');f5(25,'#FFFFFF');f5(26,'#FFFFFF');f5(27,'#FFFFFF');f5(28,'#FFFFFF');f5(29,'#FFFFFF');f5(30
,'#FFFFFF');f5(31,'#FFFFFF');f5(32,'#FFFFFF');f5(33,'#FFFFFF');f5(34,'#FFFFFF');f5(35,'#FFFFFF');f5(36
,'#FFFFFF');f5(37,'#FFFFFF');f5(38,'#FFFFFF');f5(39,'#FFFFFF');f5(40,'#FFFFFF');f5(41,'#FFFFFF');f5(42
,'#FFFFFF');f5(43,'#FFFFFF');f5(44,'#FFFFFF');f5(45,'#FFFFFF');f5(46,'#FFFFFF');f5(47,'#FFFFFF');f5(48
,'#FFFFFF');f5(49,'#FFFFFF');f5(50,'#FFFFFF');f5(51,'#FFFFFF');f5(52,'#FFFFFF');f5(53,'#FFFFFF');f5(54
,'#FFFFFF');f5(55,'#FFFFFF');f5(56,'#FFFFFF');f5(57,'#FFFFFF');f5(58,'#FFFFFF');f5(59,'#FFFFFF');f5(60
,'#FFFFFF');f5(61,'#FFFFFF');f5(62,'#FFFFFF');f5(63,'#FFFFFF');f5(64,'#FFFFFF');f5(65,'#FFFFFF');f5(66
,'#FFFFFF');f5(67,'#FFFFFF');f5(68,'#FFFFFF');f5(69,'#FFFFFF');f5(70,'#FFFFFF');f5(71,'#FFFFFF');f5(72
,'#FFFFFF');f5(73,'#FFFFFF');f5(74,'#FFFFFF');f5(75,'#FFFFFF');f5(76,'#FFFFFF');f5(77,'#FFFFFF');f5(78
,'#FFFFFF');f5(79,'#FFFFFF');f5(80,'#FFFFFF');f5(81,'#FFFFFF');f5(82,'#FFFFFF');f5(83,'#FFFFFF');f5(84
,'#FFFFFF');f5(85,'#FFFFFF');f5(86,'#FFFFFF');f5(87,'#FFFFFF');f5(88,'#FFFFFF');f5(89,'#FFFFFF');f5(90
,'#FFFFFF');f5(91,'#FFFFFF');f5(92,'#FFFFFF');f5(93,'#FFFFFF');f5(94,'#FFFFFF');f5(95,'#FFFFFF');f5(96
,'#FFFFFF');f5(97,'#FFFFFF');f5(98,'#FFFFFF');f5(99,'#FFFFFF');f5(100,'#FFFFFF');f5(101,'#FFFFFF');f5
(102,'#FFFFFF');f5(103,'#FFFFFF');f5(104,'#FFFFFF');f5(105,'#FFFFFF');f5(106,'#FFFFFF');f5(107,'#FFFFFF'
);
var scrollTop = oGrid.getScrollTop(); oGrid.setCellModel(oTable); oGrid.setVirtualMode(false); oTable
.setURL("Temp/_4CZ13SL6P_1924.xml"); oTable.setAsync(false); oTable.request(); scrollTop && oGrid
.setScrollTop(scrollTop);
oGrid.setSortDirection();
oGrid.refresh();
oGrid.defineRowProperty('tuRow', null);
var srp = oGrid.setRowProperty.bind(oGrid);
srp('tuRow','ANATR',0);srp('tuRow','ANTON',1);srp('tuRow','AROUT',2);srp('tuRow','BERGS',3);srp('tuRow'
,'BLAUS',4);srp('tuRow','BOLID',5);srp('tuRow','BONAP',6);srp('tuRow','BOTTM',7);srp('tuRow','BSBEV'
,8);srp('tuRow','CACTU',9);srp('tuRow','CENTC',10);srp('tuRow','CHOPS',11);srp('tuRow','COMMI',12);srp
('tuRow','CONSH',13);srp('tuRow','DRACD',14);srp('tuRow','DUMON',15);srp('tuRow','EASTC',16);srp('tuRow'
,'ERNSH',17);srp('tuRow','FAMIA',18);srp('tuRow','FISSA',19);srp('tuRow','FOLIG',20);srp('tuRow','FOLKO'
,21);srp('tuRow','FRANK',22);srp('tuRow','FRANR',23);srp('tuRow','FRANS',24);srp('tuRow','FURIB',25)
;srp('tuRow','GALED',26);srp('tuRow','GODOS',27);srp('tuRow','GOURL',28);srp('tuRow','GREAL',29);srp
('tuRow','GROSR',30);srp('tuRow','HANAR',31);srp('tuRow','HILAA',32);srp('tuRow','HUNGC',33);srp('tuRow'
,'HUNGO',34);srp('tuRow','ISLAT',35);srp('tuRow','KOENE',36);srp('tuRow','LACOR',37);srp('tuRow','LAMAI'
,38);srp('tuRow','LAUGB',39);srp('tuRow','LAZYK',40);srp('tuRow','LEHMS',41);srp('tuRow','LETSS',42)
;srp('tuRow','LILAS',43);srp('tuRow','LINOD',44);srp('tuRow','LONEP',45);srp('tuRow','MAGAA',46);srp
('tuRow','MAISD',47);srp('tuRow','MEREP',48);srp('tuRow','MORGK',49);srp('tuRow','NORTS',50);srp('tuRow'
,'OCEAN',51);srp('tuRow','OLDWO',52);srp('tuRow','OTTIK',53);srp('tuRow','PARIS',54);srp('tuRow','PERIC'
,55);srp('tuRow','PICCO',56);srp('tuRow','PRINI',57);srp('tuRow','QUEDE',58);srp('tuRow','QUEEN',59)
;srp('tuRow','QUICK',60);srp('tuRow','RANCH',61);srp('tuRow','RATTC',62);srp('tuRow','REGGC',63);srp
('tuRow','RICAR',64);srp('tuRow','RICSU',65);srp('tuRow','ROMEY',66);srp('tuRow','SANTG',67);srp('tuRow'
,'SAVEA',68);srp('tuRow','SEVES',69);srp('tuRow','SIMOB',70);srp('tuRow','SPECD',71);srp('tuRow','SPLIR'
,72);srp('tuRow','SUPRD',73);srp('tuRow','THEBI',74);srp('tuRow','THECR',75);srp('tuRow','TOMSP',76)
;srp('tuRow','TORTU',77);srp('tuRow','TRADH',78);srp('tuRow','TRAIH',79);srp('tuRow','VAFFE',80);srp
('tuRow','VICTE',81);srp('tuRow','VINET',82);srp('tuRow','WANDK',83);srp('tuRow','WARTH',84);srp('tuRow'
,'WELLI',85);srp('tuRow','WHITC',86);srp('tuRow','WILMK',87);srp('tuRow','WOLZA',88);srp('tuRow','UNCLE'
,89);srp('tuRow','VH40Y',90);srp('tuRow','VHB2U',91);srp('tuRow','VHGG2',92);srp('tuRow','VHOCI',93)
;srp('tuRow','9YT0B',94);srp('tuRow','462WR',95);srp('tuRow','F88JX',96);srp('tuRow','F88KA',97);srp
('tuRow','F8B2A',98);srp('tuRow','54AXT',99);srp('tuRow','C6AOK',100);srp('tuRow','RIIIE',101);srp('tuRow'
,'XL1PS',102);srp('tuRow','YKJQ5',103);srp('tuRow','5HE06',104);srp('tuRow','Z049A',105);srp('tuRow'
,'Z05A1',106);srp('tuRow','3SL1W',107);
srp = null;
oGrid.defineRowProperty('Clicked', false); oGrid.onRowMouseDown = function(event, row){this.setRowClicked
(true, row)}; oGrid.onRowMouseUp = function(event, row){this.setRowClicked(false, row)}; oGrid.onCurrentRowChanged
= function(row){ var value = this.getRowProperty('tuRow', row); if (!(this.disabled || value === null
)){ if (!this.getRowClicked(row) && FoxInCloud.gridRowChangeDelay > 0){ if (this.nTO) window
.clearTimeout(this.nTO); this.nTO = FoxInCloud.gridMethod.bind(FoxInCloud).delay(FoxInCloud.gridRowChangeDelay
, 'wAfterRowChange', $('dataupdate_scx-grd'), value); } else FoxInCloud.gridMethod('wAfterRowChange'
, $('dataupdate_scx-grd'), value); } this.setRowClicked(false, row); };

oGrid.onControlMouseOver = function (event){ if(event.cancelBubble) return; event = Event.extend(event
); srceCodeDisplay(event, 'dataupdate_scx-tutoinfoboxfic', 'dataupdate_scx-grd', '<PRE><div
class="vfpcode"><span class="codecomment">* thisForm.grd as Ficgrd (of ficsample.vcx) as
Grid<br />* Source code read from "dataupdate.scx" and colorized at 05/15/15 02:02:40 AM<
;br /></span><br /><span class="properties">AllowRowSizing</span>
; = .F.<br />wlContentDynamic = .T. <span class="codecomment">&& {en
} This object\'s members and/or properties are dynamic - .T. if members or property change at run-time
{fr} Le contenu et/ou les propriétés de cet objet sont dynamiques - .T. si les membres ou les propri
étés changent à l\'exécution<br /><br />* ———————————————————————————————————</span
><br /><span class="programcontrol">PROCEDURE</span> <span class="events"
>Init</span><br /><span class="programcontrol">local</span> iGrc
as Integer, cGrc as String, cField as String<br /><br /><span class="programcontrol"
>with</span> m.<span class="commands">this</span> as ficGrd <span class
="commands">of</span> ficSample<br /><br /> .ColumnCount = 6<
;br /> <span class="programcontrol">FOR</span> iGrc = 1 <span class
="commands">TO</span> .ColumnCount<br />  <span class="programcontrol"
>with</span> .Columns(m.iGrc) as <span class="classes">Column</span><
;br /><br />   <span class="codec1">#define</span
> column_region 3<br />   <span class="codec1">
;#define</span> column_active 4<br />   <span
class="codec1">#define</span> column_readOnly 6<br /><br />&
;nbsp;  cField = <span class="codestring">\'customer.\'</span> + ICase
(; <span class="codecomment">&& see thisform.opgSourceType.Valid()</span
><br />    m.iGrc = 1,;<br />  
;   <span class="codestring">\'customer_ID\'</span>,;<
;br />    m.iGrc = 2,;<br />  &
;nbsp;  <span class="codestring">\'Company_name\'</span>,;<br
/>    m.iGrc = 3,;<br />   
;  <span class="codestring">\'Region_ID\'</span>,;<br />&
;nbsp;   m.iGrc = 4,;<br />    
<span class="codestring">\'active\'</span>,;<br />  
;  m.iGrc = 5,;<br />     <
;span class="codestring">\'Contact_Title\'</span>,;<br />  &
;nbsp; m.iGrc = 6,;<br />     <span
class="codestring">\'Contact_name\'</span>,;<br />   
;  <span class="codestring">\'\'</span>;<br /> &
;nbsp;  )<br /><br />   cGrc = ICase(;&
#60;br />    m.iGrc = 1,;<br />  &
#38;nbsp;  <span class="codestring">\'ID\'</span>,;<br />&
#38;nbsp;   m.iGrc = 2,;<br />    
<span class="codestring">\'Company\'</span>,;<br /> &
;nbsp;  m.iGrc = 3,;<br />     
;<span class="codestring">\'Region\'</span>,;<br />   
; m.iGrc = 4,;<br />     <span class
="codestring">\'active?\'</span>,;<br />    m
.iGrc = 5,;<br />     <span class="codestring"
>\'Title\'</span>,;<br />    m.iGrc = 6,;<
;br />     <span class="codestring">\'Contact
\'</span>,;<br />     <span class="codestring"
>\'\'</span>;<br />    )<br /><br
/>   .<span class="properties">Width</span> = ICase(
;<br />    m.iGrc = 1,;<br />  
;   060,;<br />    m.iGrc = 2
,;<br />     220,;<br />  
;  m.iGrc = 3,;<br />     100
,;<br />    m.iGrc = 4,;<br />  
;   50,;<br />    m.iGrc = 5,
;<br />     180,;<br />  
;  m.iGrc = 6,;<br />     150
,;<br />     0;<br />  
;  )<br /><br />   <span class="codecomment"
>* {en} Replace native members by instances of adapted classes</span><br /> 
;  <span class="codecomment">* {fr} Remplacer les membres natifs members par
des instances de classes adaptées à FoxinCloud</span><br />  &
;nbsp;.<span class="properties">Name</span> = <span class="codestring">\'grc
\'</span> + cVFPName(m.cGrc)<br />   .<span class="methods"
>RemoveObject</span>(<span class="codestring">\'Text1\'</span>)<br /
>   .<span class="methods">AddObject</span>(<span
class="codestring">\'ficTxt\'</span>, ICase(;<br />   
; m.iGrc = column_region,;<br />     &
#60;span class="codestring">\'ficCbo\'</span>,; <span class="codecomment">&
;& of ficSample.vcx as Combobox</span><br />   &
;nbsp;m.iGrc = column_readOnly,;<br />     <
;span class="codestring">\'ficTxtGrc\'</span>,; <span class="codecomment">&
;& of ficSample.vcx as Textbox</span><br />   &
;nbsp;m.iGrc = column_active,;<br />     <span
class="codestring">\'ficChk\'</span>,;<br />    
<span class="codestring">\'ficTxt\'</span>; <span class="codecomment"
>&& of ficSample.vcx as Textbox</span><br />  
  ))<br />   .<span class="properties">Sparse
</span> = !<span class="functions">InList</span>(m.iGrc, column_region, column_active
)<br />   .<span class="properties">Alignment</span>
; = <span class="functions">Iif</span>(m.iGrc = column_active, 2, 3)<br />&
;nbsp;  <span class="programcontrol">if</span> m.iGrc = column_region
<br />    <span class="programcontrol">with<
/span> .ficTxt as <span class="classes">combobox</span><br /> &
#38;nbsp;   <span class="functions">select</span> region,
Cast(region_id as C(5)) <span class="commands">from</span> region into <span class
="commands">array</span> .waRowSource<br />    
<span class="programcontrol">for</span> i = 1 <span class="commands"&
#62;to</span> <span class="systemvars">_Tally</span>*2<br /> 
;     .waRowSource<span class="codestring">[m.i
]</span> = <span class="functions">Alltrim</span>(.waRowSource<span class
="codestring">[m.i]</span>)<br />     
;<span class="programcontrol">endfor</span><br />   
;  .<span class="commands">Margin</span> = 1<br /> 
;    .<span class="properties">Style</span> = 2
<span class="codecomment">&& Drop-down list box</span><br />
     .<span class="properties">DisplayCount<
;/span> = 10<br />     .<span class="properties"
>BoundColumn</span> = 2<br />     .
<span class="properties">BoundTo</span> = .T.<br />   
;  .<span class="properties">RowSourceType</span> = 5 <span class
="codecomment">&& Array</span><br />   
;  .<span class="properties">RowSource</span> = <span class="codestring"
>\'this.waRowSource\'</span><br /><br />   &
;nbsp; <span class="commands">store</span> <span class="functions">rgb
</span>(216, 091, 220); <span class="codecomment">&& lilac</span
><br />      <span class="commands"
>to</span> .<span class="properties">BackColor</span>, .<span class="properties"
>Parent</span>.<span class="properties">BackColor</span>, .ItemBackColor
<br />     <span class="commands">store
</span> <span class="functions">rgb</span>(255, 255, 255); <span class="codecomment"
>&& white</span><br />    &
;nbsp; <span class="commands">to</span> .ForeColor, .<span class="properties"
>ItemForeColor</span><br />    <span class
="programcontrol">endwith</span><br />   <span class
="programcontrol">endif</span><br />   .CurrentControl
= <span class="codestring">\'ficTxt\'</span><br />   
;.<span class="properties">ReadOnly</span> = m.iGrc = 1<br /><br />&
#38;nbsp;  .<span class="properties">BackColor</span> = ICase(; <
;span class="codecomment">&& m.iGrc = column_region : {en} see above {fr} voir ci-dessus
</span><br />    .<span class="properties">
;ReadOnly</span>,;<br />     <span class
="functions">Rgb</span>(200, 200, 200),; <span class="codecomment">&&
;amp; grayish</span><br />    m.iGrc = 2,;<br
/>     <span class="functions">Rgb</span
>(255, 255, 128),; <span class="codecomment">&& light yellow</span>
;<br />     .<span class="properties">BackColor
</span>;<br />    )<br /><br />&
#38;nbsp;  <span class="functions">BindEvent</span>(.ficTxt, <span
class="codestring">\'Valid\'</span>, m.<span class="properties">thisForm</span
>, <span class="codestring">\'grcTxtValid\'</span>) <span class="codecomment"
>&& Iif(m.iGrc = column_active, \'Click\', \'Valid\')</span><br />
;   .<span class="methods">SetAll</span>(<span class="codestring"
>\'FontName\'</span>, .<span class="properties">FontName</span>)<br
/>   .<span class="methods">SetAll</span>(<span class
="codestring">\'FontSize\'</span>, .<span class="properties">FontSize</span&
#62;)<br />   .<span class="methods">SetAll</span>
;(<span class="codestring">\'Visible\'</span>, .T.)<br />  
; .<span class="methods">SetAll</span>(<span class="codestring">\'FontBold
\'</span>, .T., .<span class="properties">HeaderClass</span>)<br />&
#38;nbsp;  .<span class="methods">SetAll</span>(<span class="codestring"
>\'Caption\'</span>, <span class="functions">Evl</span>(<span class="functions"
>DBGetProp</span>(m.cField, <span class="codestring">\'Field\'</span>, &
#60;span class="codestring">\'Caption\'</span>), m.cGrc), .<span class="properties"&
#62;HeaderClass</span>)<br /><br />   <span class
="commands">store</span> <span class="functions">Evl</span>(<span class
="functions">DBGetProp</span>(m.cField, <span class="codestring">\'Field\'</span
>, <span class="codestring">\'Comment\'</span>), m.cField);<br /> 
;   + CRLF + ICase(;<br />    
; m.iGrc = column_region,;<br />     &
#38;nbsp;<span class="codestring">\'Fixed now in Web mode! see dataUpdate.js :-)\'</span
>,;<br />     m.iGrc = column_readOnly,;<
;br />      <span class="codestring">
;\'read-only if .RecordSource is a table (just for fun and test)\'</span>,;<br />&
;nbsp;    .<span class="properties">ReadOnly</span>
;,;<br />      <span class="codestring"
>\'read-only\'</span>,;<br />     &
#38;nbsp;<span class="codestring">\'editable\'</span>;<br />  
;    );<br />    <
;span class="commands">to</span> .<span class="properties">ToolTipText</span
>, .ficTxt.<span class="properties">ToolTipText</span><br /><br />
;  <span class="programcontrol">endwith</span><br /> 
;<span class="programcontrol">endfor</span><br /><span class="programcontrol"
>endwith</span><br /><span class="programcontrol">ENDPROC</span>
<br /><br /><span class="codecomment">* ———————————————————————————————————&
#60;/span><br /><span class="programcontrol">PROCEDURE</span> wAfterColChange
<span class="codecomment">&& {en} FoxInCloud manual adaptation: .wAfterColChange
() has after column change code moved from .AfterRowColChange() {fr} Adaptation manuelle FoxInCloud
: .wAfterColChange() ici se trouve le code d\'après changement de colonne déplacé de .AfterRowColChange
() && {en} After Column change - see this.AfterRowColChange() {fr} Après le changement
de colonne - cf. this.AfterRowColChange()</span><br /><span class="programcontrol"
>LPARAMETERS</span> nColIndex <span class="codecomment">&& see documentation
in awGrd.wAfterColwChange()<br /></span><br /><span class="programcontrol"
>do</span> <span class="programcontrol">case</span><br /><span
class="programcontrol">case</span> m.<span class="properties">thisForm</span
>.wlHTMLgen <span class="codecomment">&& {en} FoxInCloud Automated Adaptation
{fr} Adaptation Automatique FoxInCloud</span><br /> <span class="commands"
>return</span> .T. <span class="codecomment">&& {en} Execute this
VFP event code on FoxInCloud server {fr} Traiter l\'événement sur le serveur (bloc ELSE ci-après)<
;/span><br /><span class="programcontrol">case</span> !<span class="functions"
>DoDefault</span>(@m.nColIndex) <span class="codecomment">&& {en
} very important {fr} très important</span><br /> <span class="commands"
>return</span> .F.<br /><span class="programcontrol">endcase</span>
;<br /><br /><span class="properties">thisForm</span>.<span class
="functions">Refresh</span><br /><span class="programcontrol">ENDPROC<
;/span><br /><br /><span class="codecomment">* —————————————————————————
——————————</span><br /><span class="programcontrol">PROCEDURE</span>
wAfterRowChange <span class="codecomment">&& {en} FoxInCloud manual adaptation
: .wAfterRowChange() has after row change code moved from .AfterRowColChange() {fr} Adaptation manuelle
FoxInCloud : .wAfterRowChange() ici se trouve le code d\'après changement de ligne déplacé de .AfterRowColChange
() && {en} After Row change - see this.AfterRowColChange() {fr} Après le changement de
ligne - cf. this.AfterRowColChange()</span><br /><span class="programcontrol">
;LPARAMETERS</span> tuRow <span class="codecomment">&& see documentation
in awGrd.wAfterRowChange()<br /></span><br /><span class="programcontrol"
>do</span> <span class="programcontrol">case</span><br /><span
class="programcontrol">case</span> m.<span class="properties">thisForm</span
>.wlHTMLgen <span class="codecomment">&& {en} FoxInCloud Automated Adaptation
{fr} Adaptation Automatique FoxInCloud</span><br /> <span class="commands"
>return</span> .T. <span class="codecomment">&& {en} Execute this
VFP event code on FoxInCloud server {fr} Traiter l\'événement sur le serveur (bloc ELSE ci-après)<
;br /></span><br /><span class="programcontrol">case</span> !<
;span class="functions">DoDefault</span>(@m.tuRow) <span class="codecomment">&
;amp;& {en} important {fr} important</span><br /> <span class="commands"
>return</span> .F.<br /><span class="programcontrol">endcase</span>
;<br /><br /><span class="programcontrol">if</span> m.<span class
="properties">thisForm</span>.nBufferDirty > 0 and <span class="functions">
;Empty</span>(nBufferDirty(m.<span class="commands">this</span>.<span class
="properties">recordSource</span>))<br /> <span class="functions">
;AddProperty</span>(m.<span class="properties">thisForm</span>, <span class
="codestring">\'cDataOpe\'</span>, <span class="codestring">\'auto save\'</span
>)<br /> <span class="functions">AddProperty</span>(m.<span
class="properties">thisForm</span>, <span class="codestring">\'nDataRec\'</span
>, m.<span class="properties">thisForm</span>.nBufferDirty)<br /> 
;<span class="functions">AddProperty</span>(m.<span class="properties">thisForm
</span>, <span class="codestring">\'cDataError\'</span>, <span class="codestring"
>\'\'</span>)<br /> <span class="properties">thisForm</span
>.nBufferDirty = 0<br /><span class="programcontrol">endif</span><br
/><br /><span class="properties">thisForm</span>.<span class="functions"
>Refresh</span><br /><span class="programcontrol">ENDPROC</span>
</div></PRE>'); };oGrid.onCurrentColumnChanged = function(col){ FoxInCloud.gridMethod
('wAfterColChange', $('dataupdate_scx-grd'), parseInt(col,10)+1); };
oGrid.onCellValidating = function(text, col, row){ col = parseInt(col, 10); var result, dynCC, template
, readOnly, disabled; if (typeof row === 'undefined') { template = this.getCellTemplate(col); } else
{ row = parseInt(row, 10); dynCC = this.getCellCurrentControl(col,row); template = this.getCellTemplate
(col,row); } if (template.disabled) return; if (typeof text === 'string'){ var fmt = this.getCellFormat
(col, row); var value = fmt ? fmt.textToValue(text) : text; } if (template.readOnly) return; switch
(col){ case 0: if(!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent('blur', $('dataupdate_scx-grd'
), value, 'dataupdate_scx-grd-grcid-fictxt', true);break;} case 1: if(!dynCC || dynCC === 'fictxt'
){result = FoxInCloud.gridEditEvent('blur', $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grccompany-fictxt'
, true);break;} case 4: if(!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent('blur'
, $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grctitle-fictxt', true);break;} case 5: if(
!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent('blur', $('dataupdate_scx-grd'), value
, 'dataupdate_scx-grd-grccontact-fictxt', true);break;} } var cols = this.getColumnCount(), rows = this
.getRowCount(), done = false; col++; while (row < rows && !done) { if (this.getCellEditable
(col,row)) { this.setSelectedColumns([col]); this.setSelectedRows([row]); this.setCurrentColumn(col)
; this.setCurrentRow(row); done = true; } else { col++; if (col >= cols){ col = 0; row++; } } } return
result; };oGrid.onCellClicked = function(event, col, row){ col = parseInt(col, 10); var result, dynCC
, template, readOnly, disabled; if (typeof row === 'undefined') { template = this.getCellTemplate(col
); } else { row = parseInt(row, 10); dynCC = this.getCellCurrentControl(col,row); template = this.getCellTemplate
(col,row); } if (template.disabled) return; if (typeof text === 'string'){ var fmt = this.getCellFormat
(col, row); var value = fmt ? fmt.textToValue(text) : text; } event.cancelBubble = true; event = Event
.extend(event); if(event.isLeftClick()){ switch (col){ case 3: if(!dynCC || dynCC === 'fictxt'){result
= FoxInCloud.gridEditEvent(event, $('dataupdate_scx-grd'), this.getCellValue(col, row), 'dataupdate_scx-grd-grcactive_-fictxt'
);break;} } return result; } };oGrid.onCellValidated = function(text, col, row){ col = parseInt(col,
10); var result, dynCC, template, readOnly, disabled; if (typeof row === 'undefined') { template = this
.getCellTemplate(col); } else { row = parseInt(row, 10); dynCC = this.getCellCurrentControl(col,row)
; template = this.getCellTemplate(col,row); } if (template.disabled) return; if (typeof text === 'string'
){ var fmt = this.getCellFormat(col, row); var value = fmt ? fmt.textToValue(text) : text; } if (template
.readOnly) return; switch (col){ case 2: if(!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent
('change', $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grcregion-fictxt', true);break;} } var
cols = this.getColumnCount(), rows = this.getRowCount(), done = false; col++; while (row < rows
&& !done) { if (this.getCellEditable(col,row)) { this.setSelectedColumns([col]); this.setSelectedRows
([row]); this.setCurrentColumn(col); this.setCurrentRow(row); done = true; } else { col++; if (col &
#62;= cols){ col = 0; row++; } } } return result; };oGrid.onCellValidated = function(text, col, row)
{ col = parseInt(col, 10); var result, dynCC, template, readOnly, disabled; if (typeof row === 'undefined'
) { template = this.getCellTemplate(col); } else { row = parseInt(row, 10); dynCC = this.getCellCurrentControl
(col,row); template = this.getCellTemplate(col,row); } if (template.disabled) return; if (typeof text
=== 'string'){ var fmt = this.getCellFormat(col, row); var value = fmt ? fmt.textToValue(text) : text
; } if (template.readOnly) return; switch (col){ case 2: if(!dynCC || dynCC === 'fictxt'){result
= FoxInCloud.gridEditEvent('change', $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grcregion-fictxt'
, true);break;} } var cols = this.getColumnCount(), rows = this.getRowCount(), done = false; col++; while
(row < rows && !done) { if (this.getCellEditable(col,row)) { this.setSelectedColumns([col
]); this.setSelectedRows([row]); this.setCurrentColumn(col); this.setCurrentRow(row); done = true; }
else { col++; if (col >= cols){ col = 0; row++; } } } return result; };
oGrid.onKeyBackspace = function(event){ event = Event.extend(event); if (!event.findElement('input')
){ this.startCellEdit(''); event.stop(); } };

oGrid.setSelectedRows([-1]);
oGrid.setSelectedRows([107]);
oGrid.setSelectedColumns([3]);
oGrid.disabled = true;
oGrid.setCurrentRow(107);
oGrid.setCurrentColumn(3);
oGrid.disabled = false;
}
/* FoxInCloud Application Server built this script in 406 ms */
})();</script><PCHTML><r><c>dataupdate_scx-cmdsave</c><c>style.cursor</c><c>S</c><c>pointer</c></r><r
><c>dataupdate_scx-cmdcancel</c><c>style.cursor</c><c>S</c><c>pointer</c></r><r><c>dataupdate_scx-lblrs
</c><c>innerHTML</c><c>S</c><c>grid.RecordSource = 'Customer_View': 108 recs, row buffering</c></r><r
><c>dataupdate_scx-lblresult</c><c>innerHTML</c><c>S</c><c>Customer_View has 1 buff. record modified
.</c></r><r><c>dataupdate_scx-lblresult</c><c>style.color</c><c>S</c><c>#FF4040</c></r><r><c>dataupdate_scx-cmdok
</c><c>style.cursor</c><c>S</c><c>auto</c></r><r><c>dataupdate_scx-opgsourcetype</c><c>disabled</c><c
>B</c><c>true</c></r><r><c>dataupdate_scx-cmdsave</c><c>disabled</c><c>B</c><c>false</c></r><r><c>dataupdate_scx-cmdsave
</c><c>style.color</c><c>S</c><c>#000000</c></r><r><c>dataupdate_scx-cmdcancel</c><c>disabled</c><c>B
</c><c>false</c></r><r><c>dataupdate_scx-cmdcancel</c><c>style.color</c><c>S</c><c>#000000</c></r><r
><c>dataupdate_scx-opgbuffering</c><c>disabled</c><c>B</c><c>true</c></r><r><c>dataupdate_scx-cmdok<
/c><c>disabled</c><c>B</c><c>true</c></r><r><c>dataupdate_scx-cmdok</c><c>style.color</c><c>S</c><c>
#6D6D6D</c></r></PCHTML><script_>jQuery('#awMenu').html('<ul id="menubar-_msysmenu" class="menubar"
style="display:block;"><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44u"><a
href="javascript:void(0)">Home</a></li><li class="menubar pad ui-state-disabled"
id="menubar-_msysmenu-_4bw15s44v"><!-- separator --><a href="javascript:void(0)">
;Support</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44w">&
#60;a href="javascript:void(0)">Controls & Events</a></li><li class="menubar
pad" id="menubar-_msysmenu-_4bw15s44x"><a href="javascript:void(0)">Data Update (Grid )
</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44y"><a href
="javascript:void(0)">Reporting</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44z"
><a href="javascript:void(0)">KeyPress Event</a></li><li class="menubar
pad ui-state-disabled" id="menubar-_msysmenu-_4bw15s450"><!-- separator --><a href="javascript
:void(0)">Adaptations</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s451"
><a href="javascript:void(0)">Form Data Xchange</a></li><li class="menubar
pad" id="menubar-_msysmenu-_4bw15s452"><a href="javascript:void(0)">Grid - RowColChange
</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s453"><a href
="javascript:void(0)">Grid - Paged</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s454"
><a href="javascript:void(0)">RowSourceType</a></li><li class="menubar
pad ui-state-disabled" id="menubar-_msysmenu-sep1"><!-- separator --><a href="javascript
:void(0)">Server</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s455"
><a href="javascript:void(0)">Source Code</a><ul id="popup-sourcecode" class
="popup ui-menu-icons shadow" style="display:none;"><li class="popup bar" id="popup-sourcecode-1"
title="FoxInCloud Application Server main program"><a href="javascript:void(0)">FAS (FoxInCloud
Application Server) main</a></li><li class="popup bar" id="popup-sourcecode-2" title
="FoxInCloud Application Server parameters (can be modified on line)"><a href="javascript:void
(0)">FAS config (tutoTest.ini)</a></li><li class="popup bar" id="popup-sourcecode-3"
title="Application Environment settings shared by Web and LAN versions"><a href="javascript
:void(0)">FAS settings (tutoSets.prg, shared with desktop app)</a></li><li class
="popup bar" id="popup-sourcecode-4" title="Application Menu generated from tuto.mnx, shared by desktop
and Web versions"><a href="javascript:void(0)">FAS menu (tuto.mnx, shared with desktop app
)</a></li><li class="popup bar" id="popup-sourcecode-5" title="FoxInCloud Application
Server classes shared by test and production versions"><a href="javascript:void(0)">FAS
classes (tutoServer.prg)</a></li><li class="popup bar" id="popup-sourcecode-6" title
="FoxInCloud Web Application Site Cascading Style Sheet"><a href="javascript:void(0)">FAS
custom CSS (tuto.css)</a></li><li class="popup bar" id="popup-sourcecode-7" title
="FoxInCloud Web Application Site JavaScript"><a href="javascript:void(0)">FAS custom JS
(tuto.js)</a></li><li class="popup bar" id="popup-sourcecode-8" title="Application
Desktop version main program"><a href="javascript:void(0)">Desktop app main (tutoLAN.prg
)</a></li></ul></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s456"
><a href="javascript:void(0)">Server Admin</a></li><li class="menubar
pad" id="menubar-_msysmenu-_4bw15s457"><a href="javascript:void(0)">Server Status</a
></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s458"><a href="javascript
:void(0)">Event Log</a></li></ul>');
jQuery('#menubar-_msysmenu').menu().menu('refresh');var select = jQuery('#menubar-_msysmenu').menu('option'
, 'select') || '';
if (select) {
select = select.toString();
var selOpen = select.indexOf('{')+2, selClose = select.lastIndexOf('}');
select = select.substr(selOpen, selClose - selOpen);
}
else select = 'var item = ui.item, elem = item.get(0);\n';
jQuery('#menubar-_msysmenu').menu('option', 'select', Function(
'event'
, 'ui'
, select + 'if(item.is(\'#menubar-_msysmenu-_4bw15s44u\')) return FoxInCloud.menuSelect(event, elem)
;\nif(item.is(\'#menubar-_msysmenu-_4bw15s44w\')) return FoxInCloud.menuSelect(event, elem);\nif(item
.is(\'#menubar-_msysmenu-_4bw15s44x\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s44y
\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s44z\')) return
FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s451\')) return FoxInCloud
.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s452\')) return FoxInCloud.menuSelect
(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s453\')) return FoxInCloud.menuSelect(event, elem
);\nif(item.is(\'#menubar-_msysmenu-_4bw15s454\')) return FoxInCloud.menuSelect(event, elem);\nif(item
.is(\'#popup-sourcecode-1\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-2
\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-3\')) return FoxInCloud
.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-4\')) return FoxInCloud.menuSelect(event, elem
);\nif(item.is(\'#popup-sourcecode-5\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-6
\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-7\')) return FoxInCloud
.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-8\')) return FoxInCloud.menuSelect(event, elem
);\nif(item.is(\'#menubar-_msysmenu-_4bw15s456\')) return FoxInCloud.menuSelect(event, elem);\nif(item
.is(\'#menubar-_msysmenu-_4bw15s457\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s458
\')) return FoxInCloud.menuSelect(event, elem);'.split(/\n/).reject(function(inst){return this.include
(inst);}, select).join('\n')
));
</script_><UserID>3VM0XAYNH</UserID><AppTime>0.015</AppTime><ServerVersion>2.20 beta07</ServerVersion
><ServerTimeStamp>{^2015-05-14 12:31:44 PM}</ServerTimeStamp><ServerTime>0.690783</ServerTime></IntuiCat
>



Using the same form to display and edit record information, I am raising an error in Web in the following situation:

Textboxes are Enabled = .F. for display only - to prevent unintended edits.
Upon entering Edit mode, Textboxes are made Enabled = .T.

Lets say you are editing a record and you make a small change in the Description Textbox. You now use the mouse to click a save button. Save.click() performs the usual data checks and if the data is OK to save, resets the environment to the Display mode with all Textboxes.Enabled = .F. All this processing completes without error in LAN and Web.

At this point an error is raised that says:"awserver.fxp!Awajax.useraction() - control 'frame.page3.txtquantity' should be disabled in client browser..."

If you watch the browser, you can see that focus has advanced to the next Textbox, which in this case is named txtQuantity. Indeed, the Save.click() did disable the Textbox, so the error is sensible. However, the mouse should have changed the focus to the Save button. The error message seems informational only, but does stop processing. At this point I am unsure why the focus is advancing down the tab order, do I need to call something prior to Enabled = .F. to prevent this?

- James



Gravatar is a globally recognized avatar based on your email address. Re: Focus Error in Textbox
  FoxInCloud Support - Thierry N.
  James Patterson
  May 26, 2015 @ 10:01pm
Hi James,

To be frank, I could not find what makes .txtQuantity get focused

Looks like .txtQuantity gets focus before .click() is completed and, .txtQuantity.gotFocus() or .When() being implemented on the server, FoxInCloud.js pushes the request to a stack and sends to the server when .click() completes.

What we can do is check whether element is still enabled before sending a stacked request to the server

you can test this fix in <VFP9>\tools\ab\aw\scripts\_source\FoxInCloud.js:

important: make sure to use a text editor that supports UTF-8 such as Sublime Text, note pad ++ or psPad

//------------------------------------------------------------------------------
AjaxComplete: function (response) {

this.WaitState(false, null, response.transport); // Termine l'état d'attente
this.WindowsCloseShow(true); // show modal windows close button (x)
typeof this.AjaxComplete_ === 'function' && this.AjaxComplete_(response);

// Si requête en attente, exécuter
var req, element;
while (this.aReqsPend.length > 0) {
req = this.aReqsPend.shift();
element = req[1] || this.oControl;
element = element ? $(element.id) : this.oControl; // le stockage de l'élément dans le tableau lui fait perdre son contexte DOM tel que .offsetParent
if (!(element && element.disabled)){ // send stacked event only if previous event has left the element enabled
this.parameters = req[4];
this.RequestSend(req[0], element, req[2], req[3]);
break;
}
}
},


I'll try to be as brief as possible, Here we go!

The button.click() code of interest is for This.Caption = "Accept" and since ItemDetail.IsDeleted is .F., code execution begins with "IF THISFORM.CheckItem()", which follows in the next code block...

LPARAMETERS nButton, nShift, nXcoord, nYcoord && Implementation documentation: see code inherited from aw.vcx!aw???.Click() (click 'View Parent Code')

IF (Type('m.thisForm.wlHTMLgen') == 'L' AND m.thisForm.wlHTMLgen) && Added by FoxInCloud Adaptation Assistant version 2.20 beta06 (source mode) on 04/16/2015 01:51:52 PM

RETURN .T. && Process event on server (your code after this IF ... ENDIF block)

ENDIF && Added by FoxInCloud Adaptation Assistant version 2.20 beta06 (source mode) on 04/16/2015 01:51:52 PM

IF THIS.CAPTION = "Add"
SELECT ItemDetail
APPEND BLANK

THISFORM.ItemSetup(THIS.CAPTION)
THIS.PARENT.REFRESH()

ELSE && "Accept"
SELECT ItemDetail
IF ItemDetail.IsDeleted && marked by the Delete Button
IF RECNO() < 0 && Negative indicates a reversable appended record
TABLEREVERT(.F.,"ItemDetail")
THISFORM.ItemSetup(THIS.CAPTION)
ELSE && A previously saved record
REPLACE Quote_numb WITH 0
THISFORM.ItemSetup(THIS.CAPTION)
ENDIF
ELSE
IF THISFORM.CheckItem()

THISFORM.ItemSetup(THIS.CAPTION)

ENDIF
ENDIF

ENDIF

THIS.PARENT.REFRESH()

THISFORM.CheckItem() is a method that is responsible for data checking. It will check entries and validates data prior to approving the data. References that begin with "Err" are graphical elements that highlight errors on the page and no other UI elements are affected. Method returns .T. if data was OK. This data is in a temp cursor, so it will be committed to tables after all records that need editing have been completed.

*!* This method will check the validity of a quote item.

Local llReturn, lnBAD_CHAR, lnTEST_IT

Store .T. To llReturn

Select ItemDetail

If .Not. ItemDetail.IsDeleted && Ignore checking deleted items

If Empty(ItemDetail.Descript)
Store .F. To llReturn
Thisform.Frame.page3.ErrDescript.Visible = .T.
Else
Thisform.Frame.page3.ErrDescript.Visible = .F.
Endif

If ItemDetail.Quantity < 1
Store .F. To llReturn
Thisform.Frame.page3.ErrQuantity.Visible = .T.
Else
Thisform.Frame.page3.ErrQuantity.Visible = .F.
Endif

If ItemDetail.Cost >= ItemDetail.Quoteprice
Store .F. To llReturn
Thisform.Frame.page3.ErrCost.Visible = .T.
Thisform.Frame.page3.ErrQuotedPrice.Visible = .T.
Else
If ItemDetail.Cost = 0
Store .F. To llReturn
Thisform.Frame.page3.ErrCost.Visible = .T.
Else
Thisform.Frame.page3.ErrCost.Visible = .F.
Endif

If ItemDetail.Quoteprice = 0
Store .F. To llReturn
Thisform.Frame.page3.ErrQuotedPrice.Visible = .T.
Else
Thisform.Frame.page3.ErrQuotedPrice.Visible = .F.
Endif
Endif


If Empty(ItemDetail.Inv_numb) && Brokered

Thisform.Frame.page3.ErrDescript.Visible = .F.

If Len(Alltrim(ItemDetail.Descript)) < 12 && DESCRIPTION TOO SHORT
Store .F. To llReturn
Thisform.Frame.page3.ErrDescript.Visible = .T.
Else
Store 0 To lnBAD_CHAR

For lnTEST_IT = 1 To Len(Alltrim(ItemDetail.Descript)) Step 1
If "A" <= Substr((Alltrim(ItemDetail.Descript)),lnTEST_IT,1) ;
.And. Substr((Alltrim(ItemDetail.Descript)),lnTEST_IT,1) <= "Z" ;
.Or. ("0" <= Substr((Alltrim(ItemDetail.Descript)),lnTEST_IT,1) ;
.And. Substr((Alltrim(ItemDetail.Descript)),lnTEST_IT,1) <= "9")
Else
Store lnBAD_CHAR + 1 To lnBAD_CHAR
Endif
Endfor

If (Len(Alltrim(ItemDetail.Descript))/lnBAD_CHAR) < 3.0 && SMALLER IS WORSE
Store .F. To llReturn
Thisform.Frame.page3.ErrDescript.Visible = .T.
Endif

Endif

Else && Stock Item

Endif
Endif

Return llReturn

At this point, the button.click() will call "THISFORM.ItemSetup(THIS.CAPTION)". This method is responsible for setting all UI elements for a particular state. Here we are changing from "Edit" to "Display". This method is just a Case statement, so this is all code executed in this situation.

Case lcCaption = "Accept"
Thisform.Frame.page3.command1.Caption = "Add"
Thisform.Frame.page3.command2.Caption = "Edit"
Thisform.Frame.page3.command3.Enabled = .T.

Thisform.Frame.page3.txtVendorPart.Enabled = .F.
Thisform.Frame.page3.txtSource.Enabled = .F.
Thisform.Frame.page3.txtContact.Enabled = .F.
Thisform.Frame.page3.txtS_Phone.Enabled = .F.
Thisform.Frame.page3.txtCost.Enabled = .F.
Thisform.Frame.page3.txtQuotePrice.Enabled = .F.
Thisform.Frame.page3.txtDelivery.Enabled = .F.
Thisform.Frame.page3.txtDescript.Enabled = .F.
Thisform.Frame.page3.txtQuantity.Enabled = .F.
Thisform.Frame.page3.txtCust_part.Enabled = .F.
Thisform.Frame.page3.EditItem_notes.Enabled = .F.
Thisform.Frame.page3.EditOur_notes.Enabled = .F.
Thisform.Frame.page3.ckIsBroker.Enabled = .F.
Thisform.Frame.page3.ckSameVendor.Enabled = .F.
Thisform.Frame.page3.txtInv_numb.Enabled = .F.
Thisform.Frame.page3.lblIsBlanket.Visible = .F.
Thisform.Frame.page3.lblCustomFile.Visible = .F.
Thisform.Frame.page3.lblComponents.Visible = .F.
Thisform.Frame.page3.txtCost.Visible = .F.
Thisform.Frame.page3.comboUM.Enabled = .F.

Thisform.Frame.page3.ErrInv_numb.Visible = .F.
Thisform.Frame.page3.ErrDescript.Visible = .F.
Thisform.Frame.page3.ErrQuantity.Visible = .F.
Thisform.Frame.page3.ErrCust_part.Visible = .F.
Thisform.Frame.page3.ErrVendorpart.Visible = .F.
Thisform.Frame.page3.ErrCost.Visible = .F.
Thisform.Frame.page3.txtcodedCost.Visible = .T.
Thisform.Frame.page3.ErrQuotedPrice.Visible = .F.

Thisform.Frame.Page2.Enabled = .T.
Thisform.Frame.Page2.FontBold = .T.


This is the XML from the POST. I am pretty sure that this is the one you need as I see several attribute settings.

<?xml version='1.0' encoding='UTF-8' standalone='yes'?><IntuiCat>
<Result><v>true</v><t>boolean</t></Result>
<script>$('quotes_scx-frame').pageEnable('quotes_scx-frame-page2', false);
$('quotes_scx-frame-page3-txtcost').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-cksamevendor').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-command3').writeAttribute('disabled', '').disabled=false;
$('quotes_scx-frame-page3-txtvendorpart').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtsource').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtcontact').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txts_phone').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtquoteprice').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtdelivery').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtdescript').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtquantity').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtcust_part').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-ckisbroker').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-edititem_notes').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-editour_notes').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-comboum').writeAttribute('disabled', 'disabled').disabled=true;</script>
<PCHTML>
<r>
<c>quotes_scx-frame-page3-txtcost</c>
<c>style.display</c>
<c>S</c>
<c>none</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcodedcost</c>
<c>style.display</c>
<c>S</c>
<c>block</c>
</r>
<r>
<c>quotes_scx-frame-page2</c>
<c>style.fontWeight</c>
<c>S</c>
<c>bold</c>
</r>
<r>
<c>quotes_scx-frame-page2_tab</c>
<c>style.fontWeight</c>
<c>S</c>
<c>bold</c>
</r>
<r>
<c>quotes_scx-frame-page3-command2</c>
<c>textContent</c>
<c>S</c>
<c>Edit</c>
</r>
<r>
<c>quotes_scx-frame-page3-command3</c>
<c>style.cursor</c>
<c>S</c>
<c>pointer</c>
</r>
<r>
<c>quotes_scx-frame-page3-command1</c>
<c>textContent</c>
<c>S</c>
<c>Add</c>
</r>
<r>
<c>quotes_scx-frame-page2</c>
<c>disabled</c>
<c>B</c>
<c>false</c>
</r>
<r>
<c>quotes_scx-frame-page2_tab</c>
<c>disabled</c>
<c>B</c>
<c>false</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcost</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcost</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-cksamevendor</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-cksamevendor_lbl</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-cksamevendor</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-cksamevendor_lbl</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-command3</c>
<c>disabled</c>
<c>B</c>
<c>false</c>
</r>
<r>
<c>quotes_scx-frame-page3-command3</c>
<c>style.color</c>
<c>S</c>
<c>#000000</c>
</r>
<r>
<c>quotes_scx-frame-page3-command3</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtvendorpart</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtvendorpart</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtsource</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtsource</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcontact</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcontact</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txts_phone</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txts_phone</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtquoteprice</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtquoteprice</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtdelivery</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtdelivery</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtdescript</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtdescript</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtquantity</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtquantity</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcust_part</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcust_part</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-ckisbroker</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-ckisbroker_lbl</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-ckisbroker</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-ckisbroker_lbl</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-edititem_notes</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-edititem_notes</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-edititem_notes</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-editour_notes</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-editour_notes</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-editour_notes</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum_txt</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum_txt</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum_txt</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
</PCHTML>
<UserID>4BW0WP92D</UserID>
<AppTime>0.125</AppTime>
<ServerVersion>2.20 beta06</ServerVersion>
<ServerTimeStamp>{^2015-04-09 01:31:49 PM}</ServerTimeStamp>
<ServerTime>1.560000</ServerTime></IntuiCat>


actually "awserver.fxp!Awajax.useraction() - control 'frame.page3.txtquantity' should be disabled in client browser..." is an assert - you can get rid of it by clicking 'ignore all'

in this case we need to know what makes focus move to frame.page3.txtQuantity

could you post:
1- the complete Save.click() VFP code
2- the XML response when Save.click() has executed - you can get it from firebug like below:

in this case the XML response is:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?><IntuiCat>
<Result><v>true</v><t>boolean</t></Result><script>var ebx = $('dataupdate_scx-tutoinfoboxfic');ebx &
#38;& !ebx.innerHTML && ebx.update('<p>Hovering the mouse pointer over a control
displays its source code here ...</p><p>(<i>source code is dynamically read
from form.scx and colorized</i>)</p><p>- <b>Freeze display</b>
;: press the shift key while hovering</p><p>- <b>Enlarge to a child form<
;/b>: Click (Web mode only)</p><p>- <b>Enlarge to a new page</b>
: control+Click (Web mode only)</p><p><br><i>Enjoy and copy code as you
like!</i></p>');
$('dataupdate_scx-opgsourcetype').writeAttribute('disabled', 'disabled').disabled=true;
$('dataupdate_scx-cmdsave').writeAttribute('disabled', '').disabled=false;
$('dataupdate_scx-cmdcancel').writeAttribute('disabled', '').disabled=false;
$('dataupdate_scx-opgbuffering').writeAttribute('disabled', 'disabled').disabled=true;
$('dataupdate_scx-cmdok').writeAttribute('disabled', 'disabled').disabled=true;
(function(){
var grd = $('dataupdate_scx-grd');
if (grd){
var oGrid = $('dataupdate_scx-grd').oGrid, oTable = $('dataupdate_scx-grd').oTable, oTempl;
oGrid.defineControlProperty('DataUpdate', false);
oGrid.defineCellProperty('CurrentControl', null);
oGrid.setRowCount(108);


/* Column 0 'grcID' */
oTempl = oGrid.getCellTemplate(0);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grcid', 'adapted');

/* Column 1 'grcCOMPANY' */
oTempl = oGrid.getCellTemplate(1);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grccompany', 'adapted');
var f1 = function(row,val){return this.getCellTemplate(1,row).setStyle('background-color',val);}.bind
(oGrid);
f1(0,'#FFFF80');f1(1,'#FFFF80');f1(2,'#FFFF80');f1(3,'#FFFF80');f1(4,'#FFFF80');f1(5,'#FFFF80');f1(6
,'#FFFF80');f1(7,'#FFFF80');f1(8,'#FFFF80');f1(9,'#FFFF80');f1(10,'#FFFF80');f1(11,'#FFFF80');f1(12,'
#FFFF80');f1(13,'#FFFF80');f1(14,'#FFFF80');f1(15,'#FFFF80');f1(16,'#FFFF80');f1(17,'#FFFF80');f1(18
,'#FFFF80');f1(19,'#FFFF80');f1(20,'#FFFF80');f1(21,'#FFFF80');f1(22,'#FFFF80');f1(23,'#FFFF80');f1(24
,'#FFFF80');f1(25,'#FFFF80');f1(26,'#FFFF80');f1(27,'#FFFF80');f1(28,'#FFFF80');f1(29,'#FFFF80');f1(30
,'#FFFF80');f1(31,'#FFFF80');f1(32,'#FFFF80');f1(33,'#FFFF80');f1(34,'#FFFF80');f1(35,'#FFFF80');f1(36
,'#FFFF80');f1(37,'#FFFF80');f1(38,'#FFFF80');f1(39,'#FFFF80');f1(40,'#FFFF80');f1(41,'#FFFF80');f1(42
,'#FFFF80');f1(43,'#FFFF80');f1(44,'#FFFF80');f1(45,'#FFFF80');f1(46,'#FFFF80');f1(47,'#FFFF80');f1(48
,'#FFFF80');f1(49,'#FFFF80');f1(50,'#FFFF80');f1(51,'#FFFF80');f1(52,'#FFFF80');f1(53,'#FFFF80');f1(54
,'#FFFF80');f1(55,'#FFFF80');f1(56,'#FFFF80');f1(57,'#FFFF80');f1(58,'#FFFF80');f1(59,'#FFFF80');f1(60
,'#FFFF80');f1(61,'#FFFF80');f1(62,'#FFFF80');f1(63,'#FFFF80');f1(64,'#FFFF80');f1(65,'#FFFF80');f1(66
,'#FFFF80');f1(67,'#FFFF80');f1(68,'#FFFF80');f1(69,'#FFFF80');f1(70,'#FFFF80');f1(71,'#FFFF80');f1(72
,'#FFFF80');f1(73,'#FFFF80');f1(74,'#FFFF80');f1(75,'#FFFF80');f1(76,'#FFFF80');f1(77,'#FFFF80');f1(78
,'#FFFF80');f1(79,'#FFFF80');f1(80,'#FFFF80');f1(81,'#FFFF80');f1(82,'#FFFF80');f1(83,'#FFFF80');f1(84
,'#FFFF80');f1(85,'#FFFF80');f1(86,'#FFFF80');f1(87,'#FFFF80');f1(88,'#FFFF80');f1(89,'#FFFF80');f1(90
,'#FFFF80');f1(91,'#FFFF80');f1(92,'#FFFF80');f1(93,'#FFFF80');f1(94,'#FFFF80');f1(95,'#FFFF80');f1(96
,'#FFFF80');f1(97,'#FFFF80');f1(98,'#FFFF80');f1(99,'#FFFF80');f1(100,'#FFFF80');f1(101,'#FFFF80');f1
(102,'#FFFF80');f1(103,'#FFFF80');f1(104,'#FFFF80');f1(105,'#FFFF80');f1(106,'#FFFF80');f1(107,'#FFFF80'
);

/* Column 2 'grcREGION' */
oTempl = oGrid.getCellTemplate(2);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grcregion', 'adapted');
var f2 = function(row,val){return this.getCellTemplate(2,row).setStyle('background-color',val);}.bind
(oGrid);
f2(0,'#D85BDC');f2(1,'#D85BDC');f2(2,'#D85BDC');f2(3,'#D85BDC');f2(4,'#D85BDC');f2(5,'#D85BDC');f2(6
,'#D85BDC');f2(7,'#D85BDC');f2(8,'#D85BDC');f2(9,'#D85BDC');f2(10,'#D85BDC');f2(11,'#D85BDC');f2(12,'
#D85BDC');f2(13,'#D85BDC');f2(14,'#D85BDC');f2(15,'#D85BDC');f2(16,'#D85BDC');f2(17,'#D85BDC');f2(18
,'#D85BDC');f2(19,'#D85BDC');f2(20,'#D85BDC');f2(21,'#D85BDC');f2(22,'#D85BDC');f2(23,'#D85BDC');f2(24
,'#D85BDC');f2(25,'#D85BDC');f2(26,'#D85BDC');f2(27,'#D85BDC');f2(28,'#D85BDC');f2(29,'#D85BDC');f2(30
,'#D85BDC');f2(31,'#D85BDC');f2(32,'#D85BDC');f2(33,'#D85BDC');f2(34,'#D85BDC');f2(35,'#D85BDC');f2(36
,'#D85BDC');f2(37,'#D85BDC');f2(38,'#D85BDC');f2(39,'#D85BDC');f2(40,'#D85BDC');f2(41,'#D85BDC');f2(42
,'#D85BDC');f2(43,'#D85BDC');f2(44,'#D85BDC');f2(45,'#D85BDC');f2(46,'#D85BDC');f2(47,'#D85BDC');f2(48
,'#D85BDC');f2(49,'#D85BDC');f2(50,'#D85BDC');f2(51,'#D85BDC');f2(52,'#D85BDC');f2(53,'#D85BDC');f2(54
,'#D85BDC');f2(55,'#D85BDC');f2(56,'#D85BDC');f2(57,'#D85BDC');f2(58,'#D85BDC');f2(59,'#D85BDC');f2(60
,'#D85BDC');f2(61,'#D85BDC');f2(62,'#D85BDC');f2(63,'#D85BDC');f2(64,'#D85BDC');f2(65,'#D85BDC');f2(66
,'#D85BDC');f2(67,'#D85BDC');f2(68,'#D85BDC');f2(69,'#D85BDC');f2(70,'#D85BDC');f2(71,'#D85BDC');f2(72
,'#D85BDC');f2(73,'#D85BDC');f2(74,'#D85BDC');f2(75,'#D85BDC');f2(76,'#D85BDC');f2(77,'#D85BDC');f2(78
,'#D85BDC');f2(79,'#D85BDC');f2(80,'#D85BDC');f2(81,'#D85BDC');f2(82,'#D85BDC');f2(83,'#D85BDC');f2(84
,'#D85BDC');f2(85,'#D85BDC');f2(86,'#D85BDC');f2(87,'#D85BDC');f2(88,'#D85BDC');f2(89,'#D85BDC');f2(90
,'#D85BDC');f2(91,'#D85BDC');f2(92,'#D85BDC');f2(93,'#D85BDC');f2(94,'#D85BDC');f2(95,'#D85BDC');f2(96
,'#D85BDC');f2(97,'#D85BDC');f2(98,'#D85BDC');f2(99,'#D85BDC');f2(100,'#D85BDC');f2(101,'#D85BDC');f2
(102,'#D85BDC');f2(103,'#D85BDC');f2(104,'#D85BDC');f2(105,'#D85BDC');f2(106,'#D85BDC');f2(107,'#D85BDC'
);

/* Column 3 'grcACTIVE_' */
oTempl = oGrid.getCellTemplate(3);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grcactive_', 'adapted');
var f3 = function(row,val){return this.getCellTemplate(3,row).setStyle('background-color',val);}.bind
(oGrid);
f3(0,'#FFFFFF');f3(1,'#FFFFFF');f3(2,'#FFFFFF');f3(3,'#FFFFFF');f3(4,'#FFFFFF');f3(5,'#FFFFFF');f3(6
,'#FFFFFF');f3(7,'#FFFFFF');f3(8,'#FFFFFF');f3(9,'#FFFFFF');f3(10,'#FFFFFF');f3(11,'#FFFFFF');f3(12,'
#FFFFFF');f3(13,'#FFFFFF');f3(14,'#FFFFFF');f3(15,'#FFFFFF');f3(16,'#FFFFFF');f3(17,'#FFFFFF');f3(18
,'#FFFFFF');f3(19,'#FFFFFF');f3(20,'#FFFFFF');f3(21,'#FFFFFF');f3(22,'#FFFFFF');f3(23,'#FFFFFF');f3(24
,'#FFFFFF');f3(25,'#FFFFFF');f3(26,'#FFFFFF');f3(27,'#FFFFFF');f3(28,'#FFFFFF');f3(29,'#FFFFFF');f3(30
,'#FFFFFF');f3(31,'#FFFFFF');f3(32,'#FFFFFF');f3(33,'#FFFFFF');f3(34,'#FFFFFF');f3(35,'#FFFFFF');f3(36
,'#FFFFFF');f3(37,'#FFFFFF');f3(38,'#FFFFFF');f3(39,'#FFFFFF');f3(40,'#FFFFFF');f3(41,'#FFFFFF');f3(42
,'#FFFFFF');f3(43,'#FFFFFF');f3(44,'#FFFFFF');f3(45,'#FFFFFF');f3(46,'#FFFFFF');f3(47,'#FFFFFF');f3(48
,'#FFFFFF');f3(49,'#FFFFFF');f3(50,'#FFFFFF');f3(51,'#FFFFFF');f3(52,'#FFFFFF');f3(53,'#FFFFFF');f3(54
,'#FFFFFF');f3(55,'#FFFFFF');f3(56,'#FFFFFF');f3(57,'#FFFFFF');f3(58,'#FFFFFF');f3(59,'#FFFFFF');f3(60
,'#FFFFFF');f3(61,'#FFFFFF');f3(62,'#FFFFFF');f3(63,'#FFFFFF');f3(64,'#FFFFFF');f3(65,'#FFFFFF');f3(66
,'#FFFFFF');f3(67,'#FFFFFF');f3(68,'#FFFFFF');f3(69,'#FFFFFF');f3(70,'#FFFFFF');f3(71,'#FFFFFF');f3(72
,'#FFFFFF');f3(73,'#FFFFFF');f3(74,'#FFFFFF');f3(75,'#FFFFFF');f3(76,'#FFFFFF');f3(77,'#FFFFFF');f3(78
,'#FFFFFF');f3(79,'#FFFFFF');f3(80,'#FFFFFF');f3(81,'#FFFFFF');f3(82,'#FFFFFF');f3(83,'#FFFFFF');f3(84
,'#FFFFFF');f3(85,'#FFFFFF');f3(86,'#FFFFFF');f3(87,'#FFFFFF');f3(88,'#FFFFFF');f3(89,'#FFFFFF');f3(90
,'#FFFFFF');f3(91,'#FFFFFF');f3(92,'#FFFFFF');f3(93,'#FFFFFF');f3(94,'#FFFFFF');f3(95,'#FFFFFF');f3(96
,'#FFFFFF');f3(97,'#FFFFFF');f3(98,'#FFFFFF');f3(99,'#FFFFFF');f3(100,'#FFFFFF');f3(101,'#FFFFFF');f3
(102,'#FFFFFF');f3(103,'#FFFFFF');f3(104,'#FFFFFF');f3(105,'#FFFFFF');f3(106,'#FFFFFF');f3(107,'#FFFFFF'
);

/* Column 4 'grcTITLE' */
oTempl = oGrid.getCellTemplate(4);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grctitle', 'adapted');
var f4 = function(row,val){return this.getCellTemplate(4,row).setStyle('background-color',val);}.bind
(oGrid);
f4(0,'#FFFFFF');f4(1,'#FFFFFF');f4(2,'#FFFFFF');f4(3,'#FFFFFF');f4(4,'#FFFFFF');f4(5,'#FFFFFF');f4(6
,'#FFFFFF');f4(7,'#FFFFFF');f4(8,'#FFFFFF');f4(9,'#FFFFFF');f4(10,'#FFFFFF');f4(11,'#FFFFFF');f4(12,'
#FFFFFF');f4(13,'#FFFFFF');f4(14,'#FFFFFF');f4(15,'#FFFFFF');f4(16,'#FFFFFF');f4(17,'#FFFFFF');f4(18
,'#FFFFFF');f4(19,'#FFFFFF');f4(20,'#FFFFFF');f4(21,'#FFFFFF');f4(22,'#FFFFFF');f4(23,'#FFFFFF');f4(24
,'#FFFFFF');f4(25,'#FFFFFF');f4(26,'#FFFFFF');f4(27,'#FFFFFF');f4(28,'#FFFFFF');f4(29,'#FFFFFF');f4(30
,'#FFFFFF');f4(31,'#FFFFFF');f4(32,'#FFFFFF');f4(33,'#FFFFFF');f4(34,'#FFFFFF');f4(35,'#FFFFFF');f4(36
,'#FFFFFF');f4(37,'#FFFFFF');f4(38,'#FFFFFF');f4(39,'#FFFFFF');f4(40,'#FFFFFF');f4(41,'#FFFFFF');f4(42
,'#FFFFFF');f4(43,'#FFFFFF');f4(44,'#FFFFFF');f4(45,'#FFFFFF');f4(46,'#FFFFFF');f4(47,'#FFFFFF');f4(48
,'#FFFFFF');f4(49,'#FFFFFF');f4(50,'#FFFFFF');f4(51,'#FFFFFF');f4(52,'#FFFFFF');f4(53,'#FFFFFF');f4(54
,'#FFFFFF');f4(55,'#FFFFFF');f4(56,'#FFFFFF');f4(57,'#FFFFFF');f4(58,'#FFFFFF');f4(59,'#FFFFFF');f4(60
,'#FFFFFF');f4(61,'#FFFFFF');f4(62,'#FFFFFF');f4(63,'#FFFFFF');f4(64,'#FFFFFF');f4(65,'#FFFFFF');f4(66
,'#FFFFFF');f4(67,'#FFFFFF');f4(68,'#FFFFFF');f4(69,'#FFFFFF');f4(70,'#FFFFFF');f4(71,'#FFFFFF');f4(72
,'#FFFFFF');f4(73,'#FFFFFF');f4(74,'#FFFFFF');f4(75,'#FFFFFF');f4(76,'#FFFFFF');f4(77,'#FFFFFF');f4(78
,'#FFFFFF');f4(79,'#FFFFFF');f4(80,'#FFFFFF');f4(81,'#FFFFFF');f4(82,'#FFFFFF');f4(83,'#FFFFFF');f4(84
,'#FFFFFF');f4(85,'#FFFFFF');f4(86,'#FFFFFF');f4(87,'#FFFFFF');f4(88,'#FFFFFF');f4(89,'#FFFFFF');f4(90
,'#FFFFFF');f4(91,'#FFFFFF');f4(92,'#FFFFFF');f4(93,'#FFFFFF');f4(94,'#FFFFFF');f4(95,'#FFFFFF');f4(96
,'#FFFFFF');f4(97,'#FFFFFF');f4(98,'#FFFFFF');f4(99,'#FFFFFF');f4(100,'#FFFFFF');f4(101,'#FFFFFF');f4
(102,'#FFFFFF');f4(103,'#FFFFFF');f4(104,'#FFFFFF');f4(105,'#FFFFFF');f4(106,'#FFFFFF');f4(107,'#FFFFFF'
);

/* Column 5 'grcCONTACT' */
oTempl = oGrid.getCellTemplate(5);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grccontact', 'adapted');
var f5 = function(row,val){return this.getCellTemplate(5,row).setStyle('background-color',val);}.bind
(oGrid);
f5(0,'#FFFFFF');f5(1,'#FFFFFF');f5(2,'#FFFFFF');f5(3,'#FFFFFF');f5(4,'#FFFFFF');f5(5,'#FFFFFF');f5(6
,'#FFFFFF');f5(7,'#FFFFFF');f5(8,'#FFFFFF');f5(9,'#FFFFFF');f5(10,'#FFFFFF');f5(11,'#FFFFFF');f5(12,'
#FFFFFF');f5(13,'#FFFFFF');f5(14,'#FFFFFF');f5(15,'#FFFFFF');f5(16,'#FFFFFF');f5(17,'#FFFFFF');f5(18
,'#FFFFFF');f5(19,'#FFFFFF');f5(20,'#FFFFFF');f5(21,'#FFFFFF');f5(22,'#FFFFFF');f5(23,'#FFFFFF');f5(24
,'#FFFFFF');f5(25,'#FFFFFF');f5(26,'#FFFFFF');f5(27,'#FFFFFF');f5(28,'#FFFFFF');f5(29,'#FFFFFF');f5(30
,'#FFFFFF');f5(31,'#FFFFFF');f5(32,'#FFFFFF');f5(33,'#FFFFFF');f5(34,'#FFFFFF');f5(35,'#FFFFFF');f5(36
,'#FFFFFF');f5(37,'#FFFFFF');f5(38,'#FFFFFF');f5(39,'#FFFFFF');f5(40,'#FFFFFF');f5(41,'#FFFFFF');f5(42
,'#FFFFFF');f5(43,'#FFFFFF');f5(44,'#FFFFFF');f5(45,'#FFFFFF');f5(46,'#FFFFFF');f5(47,'#FFFFFF');f5(48
,'#FFFFFF');f5(49,'#FFFFFF');f5(50,'#FFFFFF');f5(51,'#FFFFFF');f5(52,'#FFFFFF');f5(53,'#FFFFFF');f5(54
,'#FFFFFF');f5(55,'#FFFFFF');f5(56,'#FFFFFF');f5(57,'#FFFFFF');f5(58,'#FFFFFF');f5(59,'#FFFFFF');f5(60
,'#FFFFFF');f5(61,'#FFFFFF');f5(62,'#FFFFFF');f5(63,'#FFFFFF');f5(64,'#FFFFFF');f5(65,'#FFFFFF');f5(66
,'#FFFFFF');f5(67,'#FFFFFF');f5(68,'#FFFFFF');f5(69,'#FFFFFF');f5(70,'#FFFFFF');f5(71,'#FFFFFF');f5(72
,'#FFFFFF');f5(73,'#FFFFFF');f5(74,'#FFFFFF');f5(75,'#FFFFFF');f5(76,'#FFFFFF');f5(77,'#FFFFFF');f5(78
,'#FFFFFF');f5(79,'#FFFFFF');f5(80,'#FFFFFF');f5(81,'#FFFFFF');f5(82,'#FFFFFF');f5(83,'#FFFFFF');f5(84
,'#FFFFFF');f5(85,'#FFFFFF');f5(86,'#FFFFFF');f5(87,'#FFFFFF');f5(88,'#FFFFFF');f5(89,'#FFFFFF');f5(90
,'#FFFFFF');f5(91,'#FFFFFF');f5(92,'#FFFFFF');f5(93,'#FFFFFF');f5(94,'#FFFFFF');f5(95,'#FFFFFF');f5(96
,'#FFFFFF');f5(97,'#FFFFFF');f5(98,'#FFFFFF');f5(99,'#FFFFFF');f5(100,'#FFFFFF');f5(101,'#FFFFFF');f5
(102,'#FFFFFF');f5(103,'#FFFFFF');f5(104,'#FFFFFF');f5(105,'#FFFFFF');f5(106,'#FFFFFF');f5(107,'#FFFFFF'
);
var scrollTop = oGrid.getScrollTop(); oGrid.setCellModel(oTable); oGrid.setVirtualMode(false); oTable
.setURL("Temp/_4CZ13SL6P_1924.xml"); oTable.setAsync(false); oTable.request(); scrollTop && oGrid
.setScrollTop(scrollTop);
oGrid.setSortDirection();
oGrid.refresh();
oGrid.defineRowProperty('tuRow', null);
var srp = oGrid.setRowProperty.bind(oGrid);
srp('tuRow','ANATR',0);srp('tuRow','ANTON',1);srp('tuRow','AROUT',2);srp('tuRow','BERGS',3);srp('tuRow'
,'BLAUS',4);srp('tuRow','BOLID',5);srp('tuRow','BONAP',6);srp('tuRow','BOTTM',7);srp('tuRow','BSBEV'
,8);srp('tuRow','CACTU',9);srp('tuRow','CENTC',10);srp('tuRow','CHOPS',11);srp('tuRow','COMMI',12);srp
('tuRow','CONSH',13);srp('tuRow','DRACD',14);srp('tuRow','DUMON',15);srp('tuRow','EASTC',16);srp('tuRow'
,'ERNSH',17);srp('tuRow','FAMIA',18);srp('tuRow','FISSA',19);srp('tuRow','FOLIG',20);srp('tuRow','FOLKO'
,21);srp('tuRow','FRANK',22);srp('tuRow','FRANR',23);srp('tuRow','FRANS',24);srp('tuRow','FURIB',25)
;srp('tuRow','GALED',26);srp('tuRow','GODOS',27);srp('tuRow','GOURL',28);srp('tuRow','GREAL',29);srp
('tuRow','GROSR',30);srp('tuRow','HANAR',31);srp('tuRow','HILAA',32);srp('tuRow','HUNGC',33);srp('tuRow'
,'HUNGO',34);srp('tuRow','ISLAT',35);srp('tuRow','KOENE',36);srp('tuRow','LACOR',37);srp('tuRow','LAMAI'
,38);srp('tuRow','LAUGB',39);srp('tuRow','LAZYK',40);srp('tuRow','LEHMS',41);srp('tuRow','LETSS',42)
;srp('tuRow','LILAS',43);srp('tuRow','LINOD',44);srp('tuRow','LONEP',45);srp('tuRow','MAGAA',46);srp
('tuRow','MAISD',47);srp('tuRow','MEREP',48);srp('tuRow','MORGK',49);srp('tuRow','NORTS',50);srp('tuRow'
,'OCEAN',51);srp('tuRow','OLDWO',52);srp('tuRow','OTTIK',53);srp('tuRow','PARIS',54);srp('tuRow','PERIC'
,55);srp('tuRow','PICCO',56);srp('tuRow','PRINI',57);srp('tuRow','QUEDE',58);srp('tuRow','QUEEN',59)
;srp('tuRow','QUICK',60);srp('tuRow','RANCH',61);srp('tuRow','RATTC',62);srp('tuRow','REGGC',63);srp
('tuRow','RICAR',64);srp('tuRow','RICSU',65);srp('tuRow','ROMEY',66);srp('tuRow','SANTG',67);srp('tuRow'
,'SAVEA',68);srp('tuRow','SEVES',69);srp('tuRow','SIMOB',70);srp('tuRow','SPECD',71);srp('tuRow','SPLIR'
,72);srp('tuRow','SUPRD',73);srp('tuRow','THEBI',74);srp('tuRow','THECR',75);srp('tuRow','TOMSP',76)
;srp('tuRow','TORTU',77);srp('tuRow','TRADH',78);srp('tuRow','TRAIH',79);srp('tuRow','VAFFE',80);srp
('tuRow','VICTE',81);srp('tuRow','VINET',82);srp('tuRow','WANDK',83);srp('tuRow','WARTH',84);srp('tuRow'
,'WELLI',85);srp('tuRow','WHITC',86);srp('tuRow','WILMK',87);srp('tuRow','WOLZA',88);srp('tuRow','UNCLE'
,89);srp('tuRow','VH40Y',90);srp('tuRow','VHB2U',91);srp('tuRow','VHGG2',92);srp('tuRow','VHOCI',93)
;srp('tuRow','9YT0B',94);srp('tuRow','462WR',95);srp('tuRow','F88JX',96);srp('tuRow','F88KA',97);srp
('tuRow','F8B2A',98);srp('tuRow','54AXT',99);srp('tuRow','C6AOK',100);srp('tuRow','RIIIE',101);srp('tuRow'
,'XL1PS',102);srp('tuRow','YKJQ5',103);srp('tuRow','5HE06',104);srp('tuRow','Z049A',105);srp('tuRow'
,'Z05A1',106);srp('tuRow','3SL1W',107);
srp = null;
oGrid.defineRowProperty('Clicked', false); oGrid.onRowMouseDown = function(event, row){this.setRowClicked
(true, row)}; oGrid.onRowMouseUp = function(event, row){this.setRowClicked(false, row)}; oGrid.onCurrentRowChanged
= function(row){ var value = this.getRowProperty('tuRow', row); if (!(this.disabled || value === null
)){ if (!this.getRowClicked(row) && FoxInCloud.gridRowChangeDelay > 0){ if (this.nTO) window
.clearTimeout(this.nTO); this.nTO = FoxInCloud.gridMethod.bind(FoxInCloud).delay(FoxInCloud.gridRowChangeDelay
, 'wAfterRowChange', $('dataupdate_scx-grd'), value); } else FoxInCloud.gridMethod('wAfterRowChange'
, $('dataupdate_scx-grd'), value); } this.setRowClicked(false, row); };

oGrid.onControlMouseOver = function (event){ if(event.cancelBubble) return; event = Event.extend(event
); srceCodeDisplay(event, 'dataupdate_scx-tutoinfoboxfic', 'dataupdate_scx-grd', '<PRE><div
class="vfpcode"><span class="codecomment">* thisForm.grd as Ficgrd (of ficsample.vcx) as
Grid<br />* Source code read from "dataupdate.scx" and colorized at 05/15/15 02:02:40 AM<
;br /></span><br /><span class="properties">AllowRowSizing</span>
; = .F.<br />wlContentDynamic = .T. <span class="codecomment">&& {en
} This object\'s members and/or properties are dynamic - .T. if members or property change at run-time
{fr} Le contenu et/ou les propriétés de cet objet sont dynamiques - .T. si les membres ou les propri
étés changent à l\'exécution<br /><br />* ———————————————————————————————————</span
><br /><span class="programcontrol">PROCEDURE</span> <span class="events"
>Init</span><br /><span class="programcontrol">local</span> iGrc
as Integer, cGrc as String, cField as String<br /><br /><span class="programcontrol"
>with</span> m.<span class="commands">this</span> as ficGrd <span class
="commands">of</span> ficSample<br /><br /> .ColumnCount = 6<
;br /> <span class="programcontrol">FOR</span> iGrc = 1 <span class
="commands">TO</span> .ColumnCount<br />  <span class="programcontrol"
>with</span> .Columns(m.iGrc) as <span class="classes">Column</span><
;br /><br />   <span class="codec1">#define</span
> column_region 3<br />   <span class="codec1">
;#define</span> column_active 4<br />   <span
class="codec1">#define</span> column_readOnly 6<br /><br />&
;nbsp;  cField = <span class="codestring">\'customer.\'</span> + ICase
(; <span class="codecomment">&& see thisform.opgSourceType.Valid()</span
><br />    m.iGrc = 1,;<br />  
;   <span class="codestring">\'customer_ID\'</span>,;<
;br />    m.iGrc = 2,;<br />  &
;nbsp;  <span class="codestring">\'Company_name\'</span>,;<br
/>    m.iGrc = 3,;<br />   
;  <span class="codestring">\'Region_ID\'</span>,;<br />&
;nbsp;   m.iGrc = 4,;<br />    
<span class="codestring">\'active\'</span>,;<br />  
;  m.iGrc = 5,;<br />     <
;span class="codestring">\'Contact_Title\'</span>,;<br />  &
;nbsp; m.iGrc = 6,;<br />     <span
class="codestring">\'Contact_name\'</span>,;<br />   
;  <span class="codestring">\'\'</span>;<br /> &
;nbsp;  )<br /><br />   cGrc = ICase(;&
#60;br />    m.iGrc = 1,;<br />  &
#38;nbsp;  <span class="codestring">\'ID\'</span>,;<br />&
#38;nbsp;   m.iGrc = 2,;<br />    
<span class="codestring">\'Company\'</span>,;<br /> &
;nbsp;  m.iGrc = 3,;<br />     
;<span class="codestring">\'Region\'</span>,;<br />   
; m.iGrc = 4,;<br />     <span class
="codestring">\'active?\'</span>,;<br />    m
.iGrc = 5,;<br />     <span class="codestring"
>\'Title\'</span>,;<br />    m.iGrc = 6,;<
;br />     <span class="codestring">\'Contact
\'</span>,;<br />     <span class="codestring"
>\'\'</span>;<br />    )<br /><br
/>   .<span class="properties">Width</span> = ICase(
;<br />    m.iGrc = 1,;<br />  
;   060,;<br />    m.iGrc = 2
,;<br />     220,;<br />  
;  m.iGrc = 3,;<br />     100
,;<br />    m.iGrc = 4,;<br />  
;   50,;<br />    m.iGrc = 5,
;<br />     180,;<br />  
;  m.iGrc = 6,;<br />     150
,;<br />     0;<br />  
;  )<br /><br />   <span class="codecomment"
>* {en} Replace native members by instances of adapted classes</span><br /> 
;  <span class="codecomment">* {fr} Remplacer les membres natifs members par
des instances de classes adaptées à FoxinCloud</span><br />  &
;nbsp;.<span class="properties">Name</span> = <span class="codestring">\'grc
\'</span> + cVFPName(m.cGrc)<br />   .<span class="methods"
>RemoveObject</span>(<span class="codestring">\'Text1\'</span>)<br /
>   .<span class="methods">AddObject</span>(<span
class="codestring">\'ficTxt\'</span>, ICase(;<br />   
; m.iGrc = column_region,;<br />     &
#60;span class="codestring">\'ficCbo\'</span>,; <span class="codecomment">&
;& of ficSample.vcx as Combobox</span><br />   &
;nbsp;m.iGrc = column_readOnly,;<br />     <
;span class="codestring">\'ficTxtGrc\'</span>,; <span class="codecomment">&
;& of ficSample.vcx as Textbox</span><br />   &
;nbsp;m.iGrc = column_active,;<br />     <span
class="codestring">\'ficChk\'</span>,;<br />    
<span class="codestring">\'ficTxt\'</span>; <span class="codecomment"
>&& of ficSample.vcx as Textbox</span><br />  
  ))<br />   .<span class="properties">Sparse
</span> = !<span class="functions">InList</span>(m.iGrc, column_region, column_active
)<br />   .<span class="properties">Alignment</span>
; = <span class="functions">Iif</span>(m.iGrc = column_active, 2, 3)<br />&
;nbsp;  <span class="programcontrol">if</span> m.iGrc = column_region
<br />    <span class="programcontrol">with<
/span> .ficTxt as <span class="classes">combobox</span><br /> &
#38;nbsp;   <span class="functions">select</span> region,
Cast(region_id as C(5)) <span class="commands">from</span> region into <span class
="commands">array</span> .waRowSource<br />    
<span class="programcontrol">for</span> i = 1 <span class="commands"&
#62;to</span> <span class="systemvars">_Tally</span>*2<br /> 
;     .waRowSource<span class="codestring">[m.i
]</span> = <span class="functions">Alltrim</span>(.waRowSource<span class
="codestring">[m.i]</span>)<br />     
;<span class="programcontrol">endfor</span><br />   
;  .<span class="commands">Margin</span> = 1<br /> 
;    .<span class="properties">Style</span> = 2
<span class="codecomment">&& Drop-down list box</span><br />
     .<span class="properties">DisplayCount<
;/span> = 10<br />     .<span class="properties"
>BoundColumn</span> = 2<br />     .
<span class="properties">BoundTo</span> = .T.<br />   
;  .<span class="properties">RowSourceType</span> = 5 <span class
="codecomment">&& Array</span><br />   
;  .<span class="properties">RowSource</span> = <span class="codestring"
>\'this.waRowSource\'</span><br /><br />   &
;nbsp; <span class="commands">store</span> <span class="functions">rgb
</span>(216, 091, 220); <span class="codecomment">&& lilac</span
><br />      <span class="commands"
>to</span> .<span class="properties">BackColor</span>, .<span class="properties"
>Parent</span>.<span class="properties">BackColor</span>, .ItemBackColor
<br />     <span class="commands">store
</span> <span class="functions">rgb</span>(255, 255, 255); <span class="codecomment"
>&& white</span><br />    &
;nbsp; <span class="commands">to</span> .ForeColor, .<span class="properties"
>ItemForeColor</span><br />    <span class
="programcontrol">endwith</span><br />   <span class
="programcontrol">endif</span><br />   .CurrentControl
= <span class="codestring">\'ficTxt\'</span><br />   
;.<span class="properties">ReadOnly</span> = m.iGrc = 1<br /><br />&
#38;nbsp;  .<span class="properties">BackColor</span> = ICase(; <
;span class="codecomment">&& m.iGrc = column_region : {en} see above {fr} voir ci-dessus
</span><br />    .<span class="properties">
;ReadOnly</span>,;<br />     <span class
="functions">Rgb</span>(200, 200, 200),; <span class="codecomment">&&
;amp; grayish</span><br />    m.iGrc = 2,;<br
/>     <span class="functions">Rgb</span
>(255, 255, 128),; <span class="codecomment">&& light yellow</span>
;<br />     .<span class="properties">BackColor
</span>;<br />    )<br /><br />&
#38;nbsp;  <span class="functions">BindEvent</span>(.ficTxt, <span
class="codestring">\'Valid\'</span>, m.<span class="properties">thisForm</span
>, <span class="codestring">\'grcTxtValid\'</span>) <span class="codecomment"
>&& Iif(m.iGrc = column_active, \'Click\', \'Valid\')</span><br />
;   .<span class="methods">SetAll</span>(<span class="codestring"
>\'FontName\'</span>, .<span class="properties">FontName</span>)<br
/>   .<span class="methods">SetAll</span>(<span class
="codestring">\'FontSize\'</span>, .<span class="properties">FontSize</span&
#62;)<br />   .<span class="methods">SetAll</span>
;(<span class="codestring">\'Visible\'</span>, .T.)<br />  
; .<span class="methods">SetAll</span>(<span class="codestring">\'FontBold
\'</span>, .T., .<span class="properties">HeaderClass</span>)<br />&
#38;nbsp;  .<span class="methods">SetAll</span>(<span class="codestring"
>\'Caption\'</span>, <span class="functions">Evl</span>(<span class="functions"
>DBGetProp</span>(m.cField, <span class="codestring">\'Field\'</span>, &
#60;span class="codestring">\'Caption\'</span>), m.cGrc), .<span class="properties"&
#62;HeaderClass</span>)<br /><br />   <span class
="commands">store</span> <span class="functions">Evl</span>(<span class
="functions">DBGetProp</span>(m.cField, <span class="codestring">\'Field\'</span
>, <span class="codestring">\'Comment\'</span>), m.cField);<br /> 
;   + CRLF + ICase(;<br />    
; m.iGrc = column_region,;<br />     &
#38;nbsp;<span class="codestring">\'Fixed now in Web mode! see dataUpdate.js :-)\'</span
>,;<br />     m.iGrc = column_readOnly,;<
;br />      <span class="codestring">
;\'read-only if .RecordSource is a table (just for fun and test)\'</span>,;<br />&
;nbsp;    .<span class="properties">ReadOnly</span>
;,;<br />      <span class="codestring"
>\'read-only\'</span>,;<br />     &
#38;nbsp;<span class="codestring">\'editable\'</span>;<br />  
;    );<br />    <
;span class="commands">to</span> .<span class="properties">ToolTipText</span
>, .ficTxt.<span class="properties">ToolTipText</span><br /><br />
;  <span class="programcontrol">endwith</span><br /> 
;<span class="programcontrol">endfor</span><br /><span class="programcontrol"
>endwith</span><br /><span class="programcontrol">ENDPROC</span>
<br /><br /><span class="codecomment">* ———————————————————————————————————&
#60;/span><br /><span class="programcontrol">PROCEDURE</span> wAfterColChange
<span class="codecomment">&& {en} FoxInCloud manual adaptation: .wAfterColChange
() has after column change code moved from .AfterRowColChange() {fr} Adaptation manuelle FoxInCloud
: .wAfterColChange() ici se trouve le code d\'après changement de colonne déplacé de .AfterRowColChange
() && {en} After Column change - see this.AfterRowColChange() {fr} Après le changement
de colonne - cf. this.AfterRowColChange()</span><br /><span class="programcontrol"
>LPARAMETERS</span> nColIndex <span class="codecomment">&& see documentation
in awGrd.wAfterColwChange()<br /></span><br /><span class="programcontrol"
>do</span> <span class="programcontrol">case</span><br /><span
class="programcontrol">case</span> m.<span class="properties">thisForm</span
>.wlHTMLgen <span class="codecomment">&& {en} FoxInCloud Automated Adaptation
{fr} Adaptation Automatique FoxInCloud</span><br /> <span class="commands"
>return</span> .T. <span class="codecomment">&& {en} Execute this
VFP event code on FoxInCloud server {fr} Traiter l\'événement sur le serveur (bloc ELSE ci-après)<
;/span><br /><span class="programcontrol">case</span> !<span class="functions"
>DoDefault</span>(@m.nColIndex) <span class="codecomment">&& {en
} very important {fr} très important</span><br /> <span class="commands"
>return</span> .F.<br /><span class="programcontrol">endcase</span>
;<br /><br /><span class="properties">thisForm</span>.<span class
="functions">Refresh</span><br /><span class="programcontrol">ENDPROC<
;/span><br /><br /><span class="codecomment">* —————————————————————————
——————————</span><br /><span class="programcontrol">PROCEDURE</span>
wAfterRowChange <span class="codecomment">&& {en} FoxInCloud manual adaptation
: .wAfterRowChange() has after row change code moved from .AfterRowColChange() {fr} Adaptation manuelle
FoxInCloud : .wAfterRowChange() ici se trouve le code d\'après changement de ligne déplacé de .AfterRowColChange
() && {en} After Row change - see this.AfterRowColChange() {fr} Après le changement de
ligne - cf. this.AfterRowColChange()</span><br /><span class="programcontrol">
;LPARAMETERS</span> tuRow <span class="codecomment">&& see documentation
in awGrd.wAfterRowChange()<br /></span><br /><span class="programcontrol"
>do</span> <span class="programcontrol">case</span><br /><span
class="programcontrol">case</span> m.<span class="properties">thisForm</span
>.wlHTMLgen <span class="codecomment">&& {en} FoxInCloud Automated Adaptation
{fr} Adaptation Automatique FoxInCloud</span><br /> <span class="commands"
>return</span> .T. <span class="codecomment">&& {en} Execute this
VFP event code on FoxInCloud server {fr} Traiter l\'événement sur le serveur (bloc ELSE ci-après)<
;br /></span><br /><span class="programcontrol">case</span> !<
;span class="functions">DoDefault</span>(@m.tuRow) <span class="codecomment">&
;amp;& {en} important {fr} important</span><br /> <span class="commands"
>return</span> .F.<br /><span class="programcontrol">endcase</span>
;<br /><br /><span class="programcontrol">if</span> m.<span class
="properties">thisForm</span>.nBufferDirty > 0 and <span class="functions">
;Empty</span>(nBufferDirty(m.<span class="commands">this</span>.<span class
="properties">recordSource</span>))<br /> <span class="functions">
;AddProperty</span>(m.<span class="properties">thisForm</span>, <span class
="codestring">\'cDataOpe\'</span>, <span class="codestring">\'auto save\'</span
>)<br /> <span class="functions">AddProperty</span>(m.<span
class="properties">thisForm</span>, <span class="codestring">\'nDataRec\'</span
>, m.<span class="properties">thisForm</span>.nBufferDirty)<br /> 
;<span class="functions">AddProperty</span>(m.<span class="properties">thisForm
</span>, <span class="codestring">\'cDataError\'</span>, <span class="codestring"
>\'\'</span>)<br /> <span class="properties">thisForm</span
>.nBufferDirty = 0<br /><span class="programcontrol">endif</span><br
/><br /><span class="properties">thisForm</span>.<span class="functions"
>Refresh</span><br /><span class="programcontrol">ENDPROC</span>
</div></PRE>'); };oGrid.onCurrentColumnChanged = function(col){ FoxInCloud.gridMethod
('wAfterColChange', $('dataupdate_scx-grd'), parseInt(col,10)+1); };
oGrid.onCellValidating = function(text, col, row){ col = parseInt(col, 10); var result, dynCC, template
, readOnly, disabled; if (typeof row === 'undefined') { template = this.getCellTemplate(col); } else
{ row = parseInt(row, 10); dynCC = this.getCellCurrentControl(col,row); template = this.getCellTemplate
(col,row); } if (template.disabled) return; if (typeof text === 'string'){ var fmt = this.getCellFormat
(col, row); var value = fmt ? fmt.textToValue(text) : text; } if (template.readOnly) return; switch
(col){ case 0: if(!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent('blur', $('dataupdate_scx-grd'
), value, 'dataupdate_scx-grd-grcid-fictxt', true);break;} case 1: if(!dynCC || dynCC === 'fictxt'
){result = FoxInCloud.gridEditEvent('blur', $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grccompany-fictxt'
, true);break;} case 4: if(!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent('blur'
, $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grctitle-fictxt', true);break;} case 5: if(
!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent('blur', $('dataupdate_scx-grd'), value
, 'dataupdate_scx-grd-grccontact-fictxt', true);break;} } var cols = this.getColumnCount(), rows = this
.getRowCount(), done = false; col++; while (row < rows && !done) { if (this.getCellEditable
(col,row)) { this.setSelectedColumns([col]); this.setSelectedRows([row]); this.setCurrentColumn(col)
; this.setCurrentRow(row); done = true; } else { col++; if (col >= cols){ col = 0; row++; } } } return
result; };oGrid.onCellClicked = function(event, col, row){ col = parseInt(col, 10); var result, dynCC
, template, readOnly, disabled; if (typeof row === 'undefined') { template = this.getCellTemplate(col
); } else { row = parseInt(row, 10); dynCC = this.getCellCurrentControl(col,row); template = this.getCellTemplate
(col,row); } if (template.disabled) return; if (typeof text === 'string'){ var fmt = this.getCellFormat
(col, row); var value = fmt ? fmt.textToValue(text) : text; } event.cancelBubble = true; event = Event
.extend(event); if(event.isLeftClick()){ switch (col){ case 3: if(!dynCC || dynCC === 'fictxt'){result
= FoxInCloud.gridEditEvent(event, $('dataupdate_scx-grd'), this.getCellValue(col, row), 'dataupdate_scx-grd-grcactive_-fictxt'
);break;} } return result; } };oGrid.onCellValidated = function(text, col, row){ col = parseInt(col,
10); var result, dynCC, template, readOnly, disabled; if (typeof row === 'undefined') { template = this
.getCellTemplate(col); } else { row = parseInt(row, 10); dynCC = this.getCellCurrentControl(col,row)
; template = this.getCellTemplate(col,row); } if (template.disabled) return; if (typeof text === 'string'
){ var fmt = this.getCellFormat(col, row); var value = fmt ? fmt.textToValue(text) : text; } if (template
.readOnly) return; switch (col){ case 2: if(!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent
('change', $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grcregion-fictxt', true);break;} } var
cols = this.getColumnCount(), rows = this.getRowCount(), done = false; col++; while (row < rows
&& !done) { if (this.getCellEditable(col,row)) { this.setSelectedColumns([col]); this.setSelectedRows
([row]); this.setCurrentColumn(col); this.setCurrentRow(row); done = true; } else { col++; if (col &
#62;= cols){ col = 0; row++; } } } return result; };oGrid.onCellValidated = function(text, col, row)
{ col = parseInt(col, 10); var result, dynCC, template, readOnly, disabled; if (typeof row === 'undefined'
) { template = this.getCellTemplate(col); } else { row = parseInt(row, 10); dynCC = this.getCellCurrentControl
(col,row); template = this.getCellTemplate(col,row); } if (template.disabled) return; if (typeof text
=== 'string'){ var fmt = this.getCellFormat(col, row); var value = fmt ? fmt.textToValue(text) : text
; } if (template.readOnly) return; switch (col){ case 2: if(!dynCC || dynCC === 'fictxt'){result
= FoxInCloud.gridEditEvent('change', $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grcregion-fictxt'
, true);break;} } var cols = this.getColumnCount(), rows = this.getRowCount(), done = false; col++; while
(row < rows && !done) { if (this.getCellEditable(col,row)) { this.setSelectedColumns([col
]); this.setSelectedRows([row]); this.setCurrentColumn(col); this.setCurrentRow(row); done = true; }
else { col++; if (col >= cols){ col = 0; row++; } } } return result; };
oGrid.onKeyBackspace = function(event){ event = Event.extend(event); if (!event.findElement('input')
){ this.startCellEdit(''); event.stop(); } };

oGrid.setSelectedRows([-1]);
oGrid.setSelectedRows([107]);
oGrid.setSelectedColumns([3]);
oGrid.disabled = true;
oGrid.setCurrentRow(107);
oGrid.setCurrentColumn(3);
oGrid.disabled = false;
}
/* FoxInCloud Application Server built this script in 406 ms */
})();</script><PCHTML><r><c>dataupdate_scx-cmdsave</c><c>style.cursor</c><c>S</c><c>pointer</c></r><r
><c>dataupdate_scx-cmdcancel</c><c>style.cursor</c><c>S</c><c>pointer</c></r><r><c>dataupdate_scx-lblrs
</c><c>innerHTML</c><c>S</c><c>grid.RecordSource = 'Customer_View': 108 recs, row buffering</c></r><r
><c>dataupdate_scx-lblresult</c><c>innerHTML</c><c>S</c><c>Customer_View has 1 buff. record modified
.</c></r><r><c>dataupdate_scx-lblresult</c><c>style.color</c><c>S</c><c>#FF4040</c></r><r><c>dataupdate_scx-cmdok
</c><c>style.cursor</c><c>S</c><c>auto</c></r><r><c>dataupdate_scx-opgsourcetype</c><c>disabled</c><c
>B</c><c>true</c></r><r><c>dataupdate_scx-cmdsave</c><c>disabled</c><c>B</c><c>false</c></r><r><c>dataupdate_scx-cmdsave
</c><c>style.color</c><c>S</c><c>#000000</c></r><r><c>dataupdate_scx-cmdcancel</c><c>disabled</c><c>B
</c><c>false</c></r><r><c>dataupdate_scx-cmdcancel</c><c>style.color</c><c>S</c><c>#000000</c></r><r
><c>dataupdate_scx-opgbuffering</c><c>disabled</c><c>B</c><c>true</c></r><r><c>dataupdate_scx-cmdok<
/c><c>disabled</c><c>B</c><c>true</c></r><r><c>dataupdate_scx-cmdok</c><c>style.color</c><c>S</c><c>
#6D6D6D</c></r></PCHTML><script_>jQuery('#awMenu').html('<ul id="menubar-_msysmenu" class="menubar"
style="display:block;"><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44u"><a
href="javascript:void(0)">Home</a></li><li class="menubar pad ui-state-disabled"
id="menubar-_msysmenu-_4bw15s44v"><!-- separator --><a href="javascript:void(0)">
;Support</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44w">&
#60;a href="javascript:void(0)">Controls & Events</a></li><li class="menubar
pad" id="menubar-_msysmenu-_4bw15s44x"><a href="javascript:void(0)">Data Update (Grid )
</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44y"><a href
="javascript:void(0)">Reporting</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44z"
><a href="javascript:void(0)">KeyPress Event</a></li><li class="menubar
pad ui-state-disabled" id="menubar-_msysmenu-_4bw15s450"><!-- separator --><a href="javascript
:void(0)">Adaptations</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s451"
><a href="javascript:void(0)">Form Data Xchange</a></li><li class="menubar
pad" id="menubar-_msysmenu-_4bw15s452"><a href="javascript:void(0)">Grid - RowColChange
</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s453"><a href
="javascript:void(0)">Grid - Paged</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s454"
><a href="javascript:void(0)">RowSourceType</a></li><li class="menubar
pad ui-state-disabled" id="menubar-_msysmenu-sep1"><!-- separator --><a href="javascript
:void(0)">Server</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s455"
><a href="javascript:void(0)">Source Code</a><ul id="popup-sourcecode" class
="popup ui-menu-icons shadow" style="display:none;"><li class="popup bar" id="popup-sourcecode-1"
title="FoxInCloud Application Server main program"><a href="javascript:void(0)">FAS (FoxInCloud
Application Server) main</a></li><li class="popup bar" id="popup-sourcecode-2" title
="FoxInCloud Application Server parameters (can be modified on line)"><a href="javascript:void
(0)">FAS config (tutoTest.ini)</a></li><li class="popup bar" id="popup-sourcecode-3"
title="Application Environment settings shared by Web and LAN versions"><a href="javascript
:void(0)">FAS settings (tutoSets.prg, shared with desktop app)</a></li><li class
="popup bar" id="popup-sourcecode-4" title="Application Menu generated from tuto.mnx, shared by desktop
and Web versions"><a href="javascript:void(0)">FAS menu (tuto.mnx, shared with desktop app
)</a></li><li class="popup bar" id="popup-sourcecode-5" title="FoxInCloud Application
Server classes shared by test and production versions"><a href="javascript:void(0)">FAS
classes (tutoServer.prg)</a></li><li class="popup bar" id="popup-sourcecode-6" title
="FoxInCloud Web Application Site Cascading Style Sheet"><a href="javascript:void(0)">FAS
custom CSS (tuto.css)</a></li><li class="popup bar" id="popup-sourcecode-7" title
="FoxInCloud Web Application Site JavaScript"><a href="javascript:void(0)">FAS custom JS
(tuto.js)</a></li><li class="popup bar" id="popup-sourcecode-8" title="Application
Desktop version main program"><a href="javascript:void(0)">Desktop app main (tutoLAN.prg
)</a></li></ul></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s456"
><a href="javascript:void(0)">Server Admin</a></li><li class="menubar
pad" id="menubar-_msysmenu-_4bw15s457"><a href="javascript:void(0)">Server Status</a
></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s458"><a href="javascript
:void(0)">Event Log</a></li></ul>');
jQuery('#menubar-_msysmenu').menu().menu('refresh');var select = jQuery('#menubar-_msysmenu').menu('option'
, 'select') || '';
if (select) {
select = select.toString();
var selOpen = select.indexOf('{')+2, selClose = select.lastIndexOf('}');
select = select.substr(selOpen, selClose - selOpen);
}
else select = 'var item = ui.item, elem = item.get(0);\n';
jQuery('#menubar-_msysmenu').menu('option', 'select', Function(
'event'
, 'ui'
, select + 'if(item.is(\'#menubar-_msysmenu-_4bw15s44u\')) return FoxInCloud.menuSelect(event, elem)
;\nif(item.is(\'#menubar-_msysmenu-_4bw15s44w\')) return FoxInCloud.menuSelect(event, elem);\nif(item
.is(\'#menubar-_msysmenu-_4bw15s44x\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s44y
\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s44z\')) return
FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s451\')) return FoxInCloud
.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s452\')) return FoxInCloud.menuSelect
(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s453\')) return FoxInCloud.menuSelect(event, elem
);\nif(item.is(\'#menubar-_msysmenu-_4bw15s454\')) return FoxInCloud.menuSelect(event, elem);\nif(item
.is(\'#popup-sourcecode-1\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-2
\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-3\')) return FoxInCloud
.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-4\')) return FoxInCloud.menuSelect(event, elem
);\nif(item.is(\'#popup-sourcecode-5\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-6
\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-7\')) return FoxInCloud
.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-8\')) return FoxInCloud.menuSelect(event, elem
);\nif(item.is(\'#menubar-_msysmenu-_4bw15s456\')) return FoxInCloud.menuSelect(event, elem);\nif(item
.is(\'#menubar-_msysmenu-_4bw15s457\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s458
\')) return FoxInCloud.menuSelect(event, elem);'.split(/\n/).reject(function(inst){return this.include
(inst);}, select).join('\n')
));
</script_><UserID>3VM0XAYNH</UserID><AppTime>0.015</AppTime><ServerVersion>2.20 beta07</ServerVersion
><ServerTimeStamp>{^2015-05-14 12:31:44 PM}</ServerTimeStamp><ServerTime>0.690783</ServerTime></IntuiCat
>



Using the same form to display and edit record information, I am raising an error in Web in the following situation:

Textboxes are Enabled = .F. for display only - to prevent unintended edits.
Upon entering Edit mode, Textboxes are made Enabled = .T.

Lets say you are editing a record and you make a small change in the Description Textbox. You now use the mouse to click a save button. Save.click() performs the usual data checks and if the data is OK to save, resets the environment to the Display mode with all Textboxes.Enabled = .F. All this processing completes without error in LAN and Web.

At this point an error is raised that says:"awserver.fxp!Awajax.useraction() - control 'frame.page3.txtquantity' should be disabled in client browser..."

If you watch the browser, you can see that focus has advanced to the next Textbox, which in this case is named txtQuantity. Indeed, the Save.click() did disable the Textbox, so the error is sensible. However, the mouse should have changed the focus to the Save button. The error message seems informational only, but does stop processing. At this point I am unsure why the focus is advancing down the tab order, do I need to call something prior to Enabled = .F. to prevent this?

- James


Gravatar is a globally recognized avatar based on your email address. Re: Focus Error in Textbox
  n/a
  Thierry Nivelet (FoxInCloud)
  May 27, 2015 @ 02:01am
Success! I commented-out the JS and replaced the entire function, just in case. After a browser refresh, it works fine. You can still observe the focus to the next Textbox, but the error no longer appears. Control seemed to always disable, just hit the assert. Good catch!

Thanks - James


Hi James,

To be frank, I could not find what makes .txtQuantity get focused

Looks like .txtQuantity gets focus before .click() is completed and, .txtQuantity.gotFocus() or .When() being implemented on the server, FoxInCloud.js pushes the request to a stack and sends to the server when .click() completes.

What we can do is check whether element is still enabled before sending a stacked request to the server

you can test this fix in <VFP9>\tools\ab\aw\scripts\_source\FoxInCloud.js:

important: make sure to use a text editor that supports UTF-8 such as Sublime Text, note pad ++ or psPad

//------------------------------------------------------------------------------
AjaxComplete: function (response) {

this.WaitState(false, null, response.transport); // Termine l'état d'attente
this.WindowsCloseShow(true); // show modal windows close button (x)
typeof this.AjaxComplete_ === 'function' && this.AjaxComplete_(response);

// Si requête en attente, exécuter
var req, element;
while (this.aReqsPend.length > 0) {
req = this.aReqsPend.shift();
element = req[1] || this.oControl;
element = element ? $(element.id) : this.oControl; // le stockage de l'élément dans le tableau lui fait perdre son contexte DOM tel que .offsetParent
if (!(element && element.disabled)){ // send stacked event only if previous event has left the element enabled
this.parameters = req[4];
this.RequestSend(req[0], element, req[2], req[3]);
break;
}
}
},


I'll try to be as brief as possible, Here we go!

The button.click() code of interest is for This.Caption = "Accept" and since ItemDetail.IsDeleted is .F., code execution begins with "IF THISFORM.CheckItem()", which follows in the next code block...

LPARAMETERS nButton, nShift, nXcoord, nYcoord && Implementation documentation: see code inherited from aw.vcx!aw???.Click() (click 'View Parent Code')

IF (Type('m.thisForm.wlHTMLgen') == 'L' AND m.thisForm.wlHTMLgen) && Added by FoxInCloud Adaptation Assistant version 2.20 beta06 (source mode) on 04/16/2015 01:51:52 PM

RETURN .T. && Process event on server (your code after this IF ... ENDIF block)

ENDIF && Added by FoxInCloud Adaptation Assistant version 2.20 beta06 (source mode) on 04/16/2015 01:51:52 PM

IF THIS.CAPTION = "Add"
SELECT ItemDetail
APPEND BLANK

THISFORM.ItemSetup(THIS.CAPTION)
THIS.PARENT.REFRESH()

ELSE && "Accept"
SELECT ItemDetail
IF ItemDetail.IsDeleted && marked by the Delete Button
IF RECNO() < 0 && Negative indicates a reversable appended record
TABLEREVERT(.F.,"ItemDetail")
THISFORM.ItemSetup(THIS.CAPTION)
ELSE && A previously saved record
REPLACE Quote_numb WITH 0
THISFORM.ItemSetup(THIS.CAPTION)
ENDIF
ELSE
IF THISFORM.CheckItem()

THISFORM.ItemSetup(THIS.CAPTION)

ENDIF
ENDIF

ENDIF

THIS.PARENT.REFRESH()

THISFORM.CheckItem() is a method that is responsible for data checking. It will check entries and validates data prior to approving the data. References that begin with "Err" are graphical elements that highlight errors on the page and no other UI elements are affected. Method returns .T. if data was OK. This data is in a temp cursor, so it will be committed to tables after all records that need editing have been completed.

*!* This method will check the validity of a quote item.

Local llReturn, lnBAD_CHAR, lnTEST_IT

Store .T. To llReturn

Select ItemDetail

If .Not. ItemDetail.IsDeleted && Ignore checking deleted items

If Empty(ItemDetail.Descript)
Store .F. To llReturn
Thisform.Frame.page3.ErrDescript.Visible = .T.
Else
Thisform.Frame.page3.ErrDescript.Visible = .F.
Endif

If ItemDetail.Quantity < 1
Store .F. To llReturn
Thisform.Frame.page3.ErrQuantity.Visible = .T.
Else
Thisform.Frame.page3.ErrQuantity.Visible = .F.
Endif

If ItemDetail.Cost >= ItemDetail.Quoteprice
Store .F. To llReturn
Thisform.Frame.page3.ErrCost.Visible = .T.
Thisform.Frame.page3.ErrQuotedPrice.Visible = .T.
Else
If ItemDetail.Cost = 0
Store .F. To llReturn
Thisform.Frame.page3.ErrCost.Visible = .T.
Else
Thisform.Frame.page3.ErrCost.Visible = .F.
Endif

If ItemDetail.Quoteprice = 0
Store .F. To llReturn
Thisform.Frame.page3.ErrQuotedPrice.Visible = .T.
Else
Thisform.Frame.page3.ErrQuotedPrice.Visible = .F.
Endif
Endif


If Empty(ItemDetail.Inv_numb) && Brokered

Thisform.Frame.page3.ErrDescript.Visible = .F.

If Len(Alltrim(ItemDetail.Descript)) < 12 && DESCRIPTION TOO SHORT
Store .F. To llReturn
Thisform.Frame.page3.ErrDescript.Visible = .T.
Else
Store 0 To lnBAD_CHAR

For lnTEST_IT = 1 To Len(Alltrim(ItemDetail.Descript)) Step 1
If "A" <= Substr((Alltrim(ItemDetail.Descript)),lnTEST_IT,1) ;
.And. Substr((Alltrim(ItemDetail.Descript)),lnTEST_IT,1) <= "Z" ;
.Or. ("0" <= Substr((Alltrim(ItemDetail.Descript)),lnTEST_IT,1) ;
.And. Substr((Alltrim(ItemDetail.Descript)),lnTEST_IT,1) <= "9")
Else
Store lnBAD_CHAR + 1 To lnBAD_CHAR
Endif
Endfor

If (Len(Alltrim(ItemDetail.Descript))/lnBAD_CHAR) < 3.0 && SMALLER IS WORSE
Store .F. To llReturn
Thisform.Frame.page3.ErrDescript.Visible = .T.
Endif

Endif

Else && Stock Item

Endif
Endif

Return llReturn

At this point, the button.click() will call "THISFORM.ItemSetup(THIS.CAPTION)". This method is responsible for setting all UI elements for a particular state. Here we are changing from "Edit" to "Display". This method is just a Case statement, so this is all code executed in this situation.

Case lcCaption = "Accept"
Thisform.Frame.page3.command1.Caption = "Add"
Thisform.Frame.page3.command2.Caption = "Edit"
Thisform.Frame.page3.command3.Enabled = .T.

Thisform.Frame.page3.txtVendorPart.Enabled = .F.
Thisform.Frame.page3.txtSource.Enabled = .F.
Thisform.Frame.page3.txtContact.Enabled = .F.
Thisform.Frame.page3.txtS_Phone.Enabled = .F.
Thisform.Frame.page3.txtCost.Enabled = .F.
Thisform.Frame.page3.txtQuotePrice.Enabled = .F.
Thisform.Frame.page3.txtDelivery.Enabled = .F.
Thisform.Frame.page3.txtDescript.Enabled = .F.
Thisform.Frame.page3.txtQuantity.Enabled = .F.
Thisform.Frame.page3.txtCust_part.Enabled = .F.
Thisform.Frame.page3.EditItem_notes.Enabled = .F.
Thisform.Frame.page3.EditOur_notes.Enabled = .F.
Thisform.Frame.page3.ckIsBroker.Enabled = .F.
Thisform.Frame.page3.ckSameVendor.Enabled = .F.
Thisform.Frame.page3.txtInv_numb.Enabled = .F.
Thisform.Frame.page3.lblIsBlanket.Visible = .F.
Thisform.Frame.page3.lblCustomFile.Visible = .F.
Thisform.Frame.page3.lblComponents.Visible = .F.
Thisform.Frame.page3.txtCost.Visible = .F.
Thisform.Frame.page3.comboUM.Enabled = .F.

Thisform.Frame.page3.ErrInv_numb.Visible = .F.
Thisform.Frame.page3.ErrDescript.Visible = .F.
Thisform.Frame.page3.ErrQuantity.Visible = .F.
Thisform.Frame.page3.ErrCust_part.Visible = .F.
Thisform.Frame.page3.ErrVendorpart.Visible = .F.
Thisform.Frame.page3.ErrCost.Visible = .F.
Thisform.Frame.page3.txtcodedCost.Visible = .T.
Thisform.Frame.page3.ErrQuotedPrice.Visible = .F.

Thisform.Frame.Page2.Enabled = .T.
Thisform.Frame.Page2.FontBold = .T.


This is the XML from the POST. I am pretty sure that this is the one you need as I see several attribute settings.

<?xml version='1.0' encoding='UTF-8' standalone='yes'?><IntuiCat>
<Result><v>true</v><t>boolean</t></Result>
<script>$('quotes_scx-frame').pageEnable('quotes_scx-frame-page2', false);
$('quotes_scx-frame-page3-txtcost').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-cksamevendor').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-command3').writeAttribute('disabled', '').disabled=false;
$('quotes_scx-frame-page3-txtvendorpart').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtsource').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtcontact').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txts_phone').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtquoteprice').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtdelivery').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtdescript').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtquantity').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-txtcust_part').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-ckisbroker').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-edititem_notes').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-editour_notes').writeAttribute('disabled', 'disabled').disabled=true;
$('quotes_scx-frame-page3-comboum').writeAttribute('disabled', 'disabled').disabled=true;</script>
<PCHTML>
<r>
<c>quotes_scx-frame-page3-txtcost</c>
<c>style.display</c>
<c>S</c>
<c>none</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcodedcost</c>
<c>style.display</c>
<c>S</c>
<c>block</c>
</r>
<r>
<c>quotes_scx-frame-page2</c>
<c>style.fontWeight</c>
<c>S</c>
<c>bold</c>
</r>
<r>
<c>quotes_scx-frame-page2_tab</c>
<c>style.fontWeight</c>
<c>S</c>
<c>bold</c>
</r>
<r>
<c>quotes_scx-frame-page3-command2</c>
<c>textContent</c>
<c>S</c>
<c>Edit</c>
</r>
<r>
<c>quotes_scx-frame-page3-command3</c>
<c>style.cursor</c>
<c>S</c>
<c>pointer</c>
</r>
<r>
<c>quotes_scx-frame-page3-command1</c>
<c>textContent</c>
<c>S</c>
<c>Add</c>
</r>
<r>
<c>quotes_scx-frame-page2</c>
<c>disabled</c>
<c>B</c>
<c>false</c>
</r>
<r>
<c>quotes_scx-frame-page2_tab</c>
<c>disabled</c>
<c>B</c>
<c>false</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcost</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcost</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-cksamevendor</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-cksamevendor_lbl</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-cksamevendor</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-cksamevendor_lbl</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-command3</c>
<c>disabled</c>
<c>B</c>
<c>false</c>
</r>
<r>
<c>quotes_scx-frame-page3-command3</c>
<c>style.color</c>
<c>S</c>
<c>#000000</c>
</r>
<r>
<c>quotes_scx-frame-page3-command3</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtvendorpart</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtvendorpart</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtsource</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtsource</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcontact</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcontact</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txts_phone</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txts_phone</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtquoteprice</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtquoteprice</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtdelivery</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtdelivery</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtdescript</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtdescript</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtquantity</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtquantity</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcust_part</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-txtcust_part</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-ckisbroker</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-ckisbroker_lbl</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-ckisbroker</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-ckisbroker_lbl</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-edititem_notes</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-edititem_notes</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-edititem_notes</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-editour_notes</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-editour_notes</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-editour_notes</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum_txt</c>
<c>disabled</c>
<c>B</c>
<c>true</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum_txt</c>
<c>style.color</c>
<c>S</c>
<c>#323232</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
<r>
<c>quotes_scx-frame-page3-comboum_txt</c>
<c>style.backgroundColor</c>
<c>S</c>
<c>#EDEDED</c>
</r>
</PCHTML>
<UserID>4BW0WP92D</UserID>
<AppTime>0.125</AppTime>
<ServerVersion>2.20 beta06</ServerVersion>
<ServerTimeStamp>{^2015-04-09 01:31:49 PM}</ServerTimeStamp>
<ServerTime>1.560000</ServerTime></IntuiCat>


actually "awserver.fxp!Awajax.useraction() - control 'frame.page3.txtquantity' should be disabled in client browser..." is an assert - you can get rid of it by clicking 'ignore all'

in this case we need to know what makes focus move to frame.page3.txtQuantity

could you post:
1- the complete Save.click() VFP code
2- the XML response when Save.click() has executed - you can get it from firebug like below:

in this case the XML response is:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?><IntuiCat>
<Result><v>true</v><t>boolean</t></Result><script>var ebx = $('dataupdate_scx-tutoinfoboxfic');ebx &
#38;& !ebx.innerHTML && ebx.update('<p>Hovering the mouse pointer over a control
displays its source code here ...</p><p>(<i>source code is dynamically read
from form.scx and colorized</i>)</p><p>- <b>Freeze display</b>
;: press the shift key while hovering</p><p>- <b>Enlarge to a child form<
;/b>: Click (Web mode only)</p><p>- <b>Enlarge to a new page</b>
: control+Click (Web mode only)</p><p><br><i>Enjoy and copy code as you
like!</i></p>');
$('dataupdate_scx-opgsourcetype').writeAttribute('disabled', 'disabled').disabled=true;
$('dataupdate_scx-cmdsave').writeAttribute('disabled', '').disabled=false;
$('dataupdate_scx-cmdcancel').writeAttribute('disabled', '').disabled=false;
$('dataupdate_scx-opgbuffering').writeAttribute('disabled', 'disabled').disabled=true;
$('dataupdate_scx-cmdok').writeAttribute('disabled', 'disabled').disabled=true;
(function(){
var grd = $('dataupdate_scx-grd');
if (grd){
var oGrid = $('dataupdate_scx-grd').oGrid, oTable = $('dataupdate_scx-grd').oTable, oTempl;
oGrid.defineControlProperty('DataUpdate', false);
oGrid.defineCellProperty('CurrentControl', null);
oGrid.setRowCount(108);


/* Column 0 'grcID' */
oTempl = oGrid.getCellTemplate(0);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grcid', 'adapted');

/* Column 1 'grcCOMPANY' */
oTempl = oGrid.getCellTemplate(1);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grccompany', 'adapted');
var f1 = function(row,val){return this.getCellTemplate(1,row).setStyle('background-color',val);}.bind
(oGrid);
f1(0,'#FFFF80');f1(1,'#FFFF80');f1(2,'#FFFF80');f1(3,'#FFFF80');f1(4,'#FFFF80');f1(5,'#FFFF80');f1(6
,'#FFFF80');f1(7,'#FFFF80');f1(8,'#FFFF80');f1(9,'#FFFF80');f1(10,'#FFFF80');f1(11,'#FFFF80');f1(12,'
#FFFF80');f1(13,'#FFFF80');f1(14,'#FFFF80');f1(15,'#FFFF80');f1(16,'#FFFF80');f1(17,'#FFFF80');f1(18
,'#FFFF80');f1(19,'#FFFF80');f1(20,'#FFFF80');f1(21,'#FFFF80');f1(22,'#FFFF80');f1(23,'#FFFF80');f1(24
,'#FFFF80');f1(25,'#FFFF80');f1(26,'#FFFF80');f1(27,'#FFFF80');f1(28,'#FFFF80');f1(29,'#FFFF80');f1(30
,'#FFFF80');f1(31,'#FFFF80');f1(32,'#FFFF80');f1(33,'#FFFF80');f1(34,'#FFFF80');f1(35,'#FFFF80');f1(36
,'#FFFF80');f1(37,'#FFFF80');f1(38,'#FFFF80');f1(39,'#FFFF80');f1(40,'#FFFF80');f1(41,'#FFFF80');f1(42
,'#FFFF80');f1(43,'#FFFF80');f1(44,'#FFFF80');f1(45,'#FFFF80');f1(46,'#FFFF80');f1(47,'#FFFF80');f1(48
,'#FFFF80');f1(49,'#FFFF80');f1(50,'#FFFF80');f1(51,'#FFFF80');f1(52,'#FFFF80');f1(53,'#FFFF80');f1(54
,'#FFFF80');f1(55,'#FFFF80');f1(56,'#FFFF80');f1(57,'#FFFF80');f1(58,'#FFFF80');f1(59,'#FFFF80');f1(60
,'#FFFF80');f1(61,'#FFFF80');f1(62,'#FFFF80');f1(63,'#FFFF80');f1(64,'#FFFF80');f1(65,'#FFFF80');f1(66
,'#FFFF80');f1(67,'#FFFF80');f1(68,'#FFFF80');f1(69,'#FFFF80');f1(70,'#FFFF80');f1(71,'#FFFF80');f1(72
,'#FFFF80');f1(73,'#FFFF80');f1(74,'#FFFF80');f1(75,'#FFFF80');f1(76,'#FFFF80');f1(77,'#FFFF80');f1(78
,'#FFFF80');f1(79,'#FFFF80');f1(80,'#FFFF80');f1(81,'#FFFF80');f1(82,'#FFFF80');f1(83,'#FFFF80');f1(84
,'#FFFF80');f1(85,'#FFFF80');f1(86,'#FFFF80');f1(87,'#FFFF80');f1(88,'#FFFF80');f1(89,'#FFFF80');f1(90
,'#FFFF80');f1(91,'#FFFF80');f1(92,'#FFFF80');f1(93,'#FFFF80');f1(94,'#FFFF80');f1(95,'#FFFF80');f1(96
,'#FFFF80');f1(97,'#FFFF80');f1(98,'#FFFF80');f1(99,'#FFFF80');f1(100,'#FFFF80');f1(101,'#FFFF80');f1
(102,'#FFFF80');f1(103,'#FFFF80');f1(104,'#FFFF80');f1(105,'#FFFF80');f1(106,'#FFFF80');f1(107,'#FFFF80'
);

/* Column 2 'grcREGION' */
oTempl = oGrid.getCellTemplate(2);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grcregion', 'adapted');
var f2 = function(row,val){return this.getCellTemplate(2,row).setStyle('background-color',val);}.bind
(oGrid);
f2(0,'#D85BDC');f2(1,'#D85BDC');f2(2,'#D85BDC');f2(3,'#D85BDC');f2(4,'#D85BDC');f2(5,'#D85BDC');f2(6
,'#D85BDC');f2(7,'#D85BDC');f2(8,'#D85BDC');f2(9,'#D85BDC');f2(10,'#D85BDC');f2(11,'#D85BDC');f2(12,'
#D85BDC');f2(13,'#D85BDC');f2(14,'#D85BDC');f2(15,'#D85BDC');f2(16,'#D85BDC');f2(17,'#D85BDC');f2(18
,'#D85BDC');f2(19,'#D85BDC');f2(20,'#D85BDC');f2(21,'#D85BDC');f2(22,'#D85BDC');f2(23,'#D85BDC');f2(24
,'#D85BDC');f2(25,'#D85BDC');f2(26,'#D85BDC');f2(27,'#D85BDC');f2(28,'#D85BDC');f2(29,'#D85BDC');f2(30
,'#D85BDC');f2(31,'#D85BDC');f2(32,'#D85BDC');f2(33,'#D85BDC');f2(34,'#D85BDC');f2(35,'#D85BDC');f2(36
,'#D85BDC');f2(37,'#D85BDC');f2(38,'#D85BDC');f2(39,'#D85BDC');f2(40,'#D85BDC');f2(41,'#D85BDC');f2(42
,'#D85BDC');f2(43,'#D85BDC');f2(44,'#D85BDC');f2(45,'#D85BDC');f2(46,'#D85BDC');f2(47,'#D85BDC');f2(48
,'#D85BDC');f2(49,'#D85BDC');f2(50,'#D85BDC');f2(51,'#D85BDC');f2(52,'#D85BDC');f2(53,'#D85BDC');f2(54
,'#D85BDC');f2(55,'#D85BDC');f2(56,'#D85BDC');f2(57,'#D85BDC');f2(58,'#D85BDC');f2(59,'#D85BDC');f2(60
,'#D85BDC');f2(61,'#D85BDC');f2(62,'#D85BDC');f2(63,'#D85BDC');f2(64,'#D85BDC');f2(65,'#D85BDC');f2(66
,'#D85BDC');f2(67,'#D85BDC');f2(68,'#D85BDC');f2(69,'#D85BDC');f2(70,'#D85BDC');f2(71,'#D85BDC');f2(72
,'#D85BDC');f2(73,'#D85BDC');f2(74,'#D85BDC');f2(75,'#D85BDC');f2(76,'#D85BDC');f2(77,'#D85BDC');f2(78
,'#D85BDC');f2(79,'#D85BDC');f2(80,'#D85BDC');f2(81,'#D85BDC');f2(82,'#D85BDC');f2(83,'#D85BDC');f2(84
,'#D85BDC');f2(85,'#D85BDC');f2(86,'#D85BDC');f2(87,'#D85BDC');f2(88,'#D85BDC');f2(89,'#D85BDC');f2(90
,'#D85BDC');f2(91,'#D85BDC');f2(92,'#D85BDC');f2(93,'#D85BDC');f2(94,'#D85BDC');f2(95,'#D85BDC');f2(96
,'#D85BDC');f2(97,'#D85BDC');f2(98,'#D85BDC');f2(99,'#D85BDC');f2(100,'#D85BDC');f2(101,'#D85BDC');f2
(102,'#D85BDC');f2(103,'#D85BDC');f2(104,'#D85BDC');f2(105,'#D85BDC');f2(106,'#D85BDC');f2(107,'#D85BDC'
);

/* Column 3 'grcACTIVE_' */
oTempl = oGrid.getCellTemplate(3);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grcactive_', 'adapted');
var f3 = function(row,val){return this.getCellTemplate(3,row).setStyle('background-color',val);}.bind
(oGrid);
f3(0,'#FFFFFF');f3(1,'#FFFFFF');f3(2,'#FFFFFF');f3(3,'#FFFFFF');f3(4,'#FFFFFF');f3(5,'#FFFFFF');f3(6
,'#FFFFFF');f3(7,'#FFFFFF');f3(8,'#FFFFFF');f3(9,'#FFFFFF');f3(10,'#FFFFFF');f3(11,'#FFFFFF');f3(12,'
#FFFFFF');f3(13,'#FFFFFF');f3(14,'#FFFFFF');f3(15,'#FFFFFF');f3(16,'#FFFFFF');f3(17,'#FFFFFF');f3(18
,'#FFFFFF');f3(19,'#FFFFFF');f3(20,'#FFFFFF');f3(21,'#FFFFFF');f3(22,'#FFFFFF');f3(23,'#FFFFFF');f3(24
,'#FFFFFF');f3(25,'#FFFFFF');f3(26,'#FFFFFF');f3(27,'#FFFFFF');f3(28,'#FFFFFF');f3(29,'#FFFFFF');f3(30
,'#FFFFFF');f3(31,'#FFFFFF');f3(32,'#FFFFFF');f3(33,'#FFFFFF');f3(34,'#FFFFFF');f3(35,'#FFFFFF');f3(36
,'#FFFFFF');f3(37,'#FFFFFF');f3(38,'#FFFFFF');f3(39,'#FFFFFF');f3(40,'#FFFFFF');f3(41,'#FFFFFF');f3(42
,'#FFFFFF');f3(43,'#FFFFFF');f3(44,'#FFFFFF');f3(45,'#FFFFFF');f3(46,'#FFFFFF');f3(47,'#FFFFFF');f3(48
,'#FFFFFF');f3(49,'#FFFFFF');f3(50,'#FFFFFF');f3(51,'#FFFFFF');f3(52,'#FFFFFF');f3(53,'#FFFFFF');f3(54
,'#FFFFFF');f3(55,'#FFFFFF');f3(56,'#FFFFFF');f3(57,'#FFFFFF');f3(58,'#FFFFFF');f3(59,'#FFFFFF');f3(60
,'#FFFFFF');f3(61,'#FFFFFF');f3(62,'#FFFFFF');f3(63,'#FFFFFF');f3(64,'#FFFFFF');f3(65,'#FFFFFF');f3(66
,'#FFFFFF');f3(67,'#FFFFFF');f3(68,'#FFFFFF');f3(69,'#FFFFFF');f3(70,'#FFFFFF');f3(71,'#FFFFFF');f3(72
,'#FFFFFF');f3(73,'#FFFFFF');f3(74,'#FFFFFF');f3(75,'#FFFFFF');f3(76,'#FFFFFF');f3(77,'#FFFFFF');f3(78
,'#FFFFFF');f3(79,'#FFFFFF');f3(80,'#FFFFFF');f3(81,'#FFFFFF');f3(82,'#FFFFFF');f3(83,'#FFFFFF');f3(84
,'#FFFFFF');f3(85,'#FFFFFF');f3(86,'#FFFFFF');f3(87,'#FFFFFF');f3(88,'#FFFFFF');f3(89,'#FFFFFF');f3(90
,'#FFFFFF');f3(91,'#FFFFFF');f3(92,'#FFFFFF');f3(93,'#FFFFFF');f3(94,'#FFFFFF');f3(95,'#FFFFFF');f3(96
,'#FFFFFF');f3(97,'#FFFFFF');f3(98,'#FFFFFF');f3(99,'#FFFFFF');f3(100,'#FFFFFF');f3(101,'#FFFFFF');f3
(102,'#FFFFFF');f3(103,'#FFFFFF');f3(104,'#FFFFFF');f3(105,'#FFFFFF');f3(106,'#FFFFFF');f3(107,'#FFFFFF'
);

/* Column 4 'grcTITLE' */
oTempl = oGrid.getCellTemplate(4);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grctitle', 'adapted');
var f4 = function(row,val){return this.getCellTemplate(4,row).setStyle('background-color',val);}.bind
(oGrid);
f4(0,'#FFFFFF');f4(1,'#FFFFFF');f4(2,'#FFFFFF');f4(3,'#FFFFFF');f4(4,'#FFFFFF');f4(5,'#FFFFFF');f4(6
,'#FFFFFF');f4(7,'#FFFFFF');f4(8,'#FFFFFF');f4(9,'#FFFFFF');f4(10,'#FFFFFF');f4(11,'#FFFFFF');f4(12,'
#FFFFFF');f4(13,'#FFFFFF');f4(14,'#FFFFFF');f4(15,'#FFFFFF');f4(16,'#FFFFFF');f4(17,'#FFFFFF');f4(18
,'#FFFFFF');f4(19,'#FFFFFF');f4(20,'#FFFFFF');f4(21,'#FFFFFF');f4(22,'#FFFFFF');f4(23,'#FFFFFF');f4(24
,'#FFFFFF');f4(25,'#FFFFFF');f4(26,'#FFFFFF');f4(27,'#FFFFFF');f4(28,'#FFFFFF');f4(29,'#FFFFFF');f4(30
,'#FFFFFF');f4(31,'#FFFFFF');f4(32,'#FFFFFF');f4(33,'#FFFFFF');f4(34,'#FFFFFF');f4(35,'#FFFFFF');f4(36
,'#FFFFFF');f4(37,'#FFFFFF');f4(38,'#FFFFFF');f4(39,'#FFFFFF');f4(40,'#FFFFFF');f4(41,'#FFFFFF');f4(42
,'#FFFFFF');f4(43,'#FFFFFF');f4(44,'#FFFFFF');f4(45,'#FFFFFF');f4(46,'#FFFFFF');f4(47,'#FFFFFF');f4(48
,'#FFFFFF');f4(49,'#FFFFFF');f4(50,'#FFFFFF');f4(51,'#FFFFFF');f4(52,'#FFFFFF');f4(53,'#FFFFFF');f4(54
,'#FFFFFF');f4(55,'#FFFFFF');f4(56,'#FFFFFF');f4(57,'#FFFFFF');f4(58,'#FFFFFF');f4(59,'#FFFFFF');f4(60
,'#FFFFFF');f4(61,'#FFFFFF');f4(62,'#FFFFFF');f4(63,'#FFFFFF');f4(64,'#FFFFFF');f4(65,'#FFFFFF');f4(66
,'#FFFFFF');f4(67,'#FFFFFF');f4(68,'#FFFFFF');f4(69,'#FFFFFF');f4(70,'#FFFFFF');f4(71,'#FFFFFF');f4(72
,'#FFFFFF');f4(73,'#FFFFFF');f4(74,'#FFFFFF');f4(75,'#FFFFFF');f4(76,'#FFFFFF');f4(77,'#FFFFFF');f4(78
,'#FFFFFF');f4(79,'#FFFFFF');f4(80,'#FFFFFF');f4(81,'#FFFFFF');f4(82,'#FFFFFF');f4(83,'#FFFFFF');f4(84
,'#FFFFFF');f4(85,'#FFFFFF');f4(86,'#FFFFFF');f4(87,'#FFFFFF');f4(88,'#FFFFFF');f4(89,'#FFFFFF');f4(90
,'#FFFFFF');f4(91,'#FFFFFF');f4(92,'#FFFFFF');f4(93,'#FFFFFF');f4(94,'#FFFFFF');f4(95,'#FFFFFF');f4(96
,'#FFFFFF');f4(97,'#FFFFFF');f4(98,'#FFFFFF');f4(99,'#FFFFFF');f4(100,'#FFFFFF');f4(101,'#FFFFFF');f4
(102,'#FFFFFF');f4(103,'#FFFFFF');f4(104,'#FFFFFF');f4(105,'#FFFFFF');f4(106,'#FFFFFF');f4(107,'#FFFFFF'
);

/* Column 5 'grcCONTACT' */
oTempl = oGrid.getCellTemplate(5);
oTempl.setClass('ficgrc', 'adapted');
oTempl.setClass('dataupdate_scx-grd-grccontact', 'adapted');
var f5 = function(row,val){return this.getCellTemplate(5,row).setStyle('background-color',val);}.bind
(oGrid);
f5(0,'#FFFFFF');f5(1,'#FFFFFF');f5(2,'#FFFFFF');f5(3,'#FFFFFF');f5(4,'#FFFFFF');f5(5,'#FFFFFF');f5(6
,'#FFFFFF');f5(7,'#FFFFFF');f5(8,'#FFFFFF');f5(9,'#FFFFFF');f5(10,'#FFFFFF');f5(11,'#FFFFFF');f5(12,'
#FFFFFF');f5(13,'#FFFFFF');f5(14,'#FFFFFF');f5(15,'#FFFFFF');f5(16,'#FFFFFF');f5(17,'#FFFFFF');f5(18
,'#FFFFFF');f5(19,'#FFFFFF');f5(20,'#FFFFFF');f5(21,'#FFFFFF');f5(22,'#FFFFFF');f5(23,'#FFFFFF');f5(24
,'#FFFFFF');f5(25,'#FFFFFF');f5(26,'#FFFFFF');f5(27,'#FFFFFF');f5(28,'#FFFFFF');f5(29,'#FFFFFF');f5(30
,'#FFFFFF');f5(31,'#FFFFFF');f5(32,'#FFFFFF');f5(33,'#FFFFFF');f5(34,'#FFFFFF');f5(35,'#FFFFFF');f5(36
,'#FFFFFF');f5(37,'#FFFFFF');f5(38,'#FFFFFF');f5(39,'#FFFFFF');f5(40,'#FFFFFF');f5(41,'#FFFFFF');f5(42
,'#FFFFFF');f5(43,'#FFFFFF');f5(44,'#FFFFFF');f5(45,'#FFFFFF');f5(46,'#FFFFFF');f5(47,'#FFFFFF');f5(48
,'#FFFFFF');f5(49,'#FFFFFF');f5(50,'#FFFFFF');f5(51,'#FFFFFF');f5(52,'#FFFFFF');f5(53,'#FFFFFF');f5(54
,'#FFFFFF');f5(55,'#FFFFFF');f5(56,'#FFFFFF');f5(57,'#FFFFFF');f5(58,'#FFFFFF');f5(59,'#FFFFFF');f5(60
,'#FFFFFF');f5(61,'#FFFFFF');f5(62,'#FFFFFF');f5(63,'#FFFFFF');f5(64,'#FFFFFF');f5(65,'#FFFFFF');f5(66
,'#FFFFFF');f5(67,'#FFFFFF');f5(68,'#FFFFFF');f5(69,'#FFFFFF');f5(70,'#FFFFFF');f5(71,'#FFFFFF');f5(72
,'#FFFFFF');f5(73,'#FFFFFF');f5(74,'#FFFFFF');f5(75,'#FFFFFF');f5(76,'#FFFFFF');f5(77,'#FFFFFF');f5(78
,'#FFFFFF');f5(79,'#FFFFFF');f5(80,'#FFFFFF');f5(81,'#FFFFFF');f5(82,'#FFFFFF');f5(83,'#FFFFFF');f5(84
,'#FFFFFF');f5(85,'#FFFFFF');f5(86,'#FFFFFF');f5(87,'#FFFFFF');f5(88,'#FFFFFF');f5(89,'#FFFFFF');f5(90
,'#FFFFFF');f5(91,'#FFFFFF');f5(92,'#FFFFFF');f5(93,'#FFFFFF');f5(94,'#FFFFFF');f5(95,'#FFFFFF');f5(96
,'#FFFFFF');f5(97,'#FFFFFF');f5(98,'#FFFFFF');f5(99,'#FFFFFF');f5(100,'#FFFFFF');f5(101,'#FFFFFF');f5
(102,'#FFFFFF');f5(103,'#FFFFFF');f5(104,'#FFFFFF');f5(105,'#FFFFFF');f5(106,'#FFFFFF');f5(107,'#FFFFFF'
);
var scrollTop = oGrid.getScrollTop(); oGrid.setCellModel(oTable); oGrid.setVirtualMode(false); oTable
.setURL("Temp/_4CZ13SL6P_1924.xml"); oTable.setAsync(false); oTable.request(); scrollTop && oGrid
.setScrollTop(scrollTop);
oGrid.setSortDirection();
oGrid.refresh();
oGrid.defineRowProperty('tuRow', null);
var srp = oGrid.setRowProperty.bind(oGrid);
srp('tuRow','ANATR',0);srp('tuRow','ANTON',1);srp('tuRow','AROUT',2);srp('tuRow','BERGS',3);srp('tuRow'
,'BLAUS',4);srp('tuRow','BOLID',5);srp('tuRow','BONAP',6);srp('tuRow','BOTTM',7);srp('tuRow','BSBEV'
,8);srp('tuRow','CACTU',9);srp('tuRow','CENTC',10);srp('tuRow','CHOPS',11);srp('tuRow','COMMI',12);srp
('tuRow','CONSH',13);srp('tuRow','DRACD',14);srp('tuRow','DUMON',15);srp('tuRow','EASTC',16);srp('tuRow'
,'ERNSH',17);srp('tuRow','FAMIA',18);srp('tuRow','FISSA',19);srp('tuRow','FOLIG',20);srp('tuRow','FOLKO'
,21);srp('tuRow','FRANK',22);srp('tuRow','FRANR',23);srp('tuRow','FRANS',24);srp('tuRow','FURIB',25)
;srp('tuRow','GALED',26);srp('tuRow','GODOS',27);srp('tuRow','GOURL',28);srp('tuRow','GREAL',29);srp
('tuRow','GROSR',30);srp('tuRow','HANAR',31);srp('tuRow','HILAA',32);srp('tuRow','HUNGC',33);srp('tuRow'
,'HUNGO',34);srp('tuRow','ISLAT',35);srp('tuRow','KOENE',36);srp('tuRow','LACOR',37);srp('tuRow','LAMAI'
,38);srp('tuRow','LAUGB',39);srp('tuRow','LAZYK',40);srp('tuRow','LEHMS',41);srp('tuRow','LETSS',42)
;srp('tuRow','LILAS',43);srp('tuRow','LINOD',44);srp('tuRow','LONEP',45);srp('tuRow','MAGAA',46);srp
('tuRow','MAISD',47);srp('tuRow','MEREP',48);srp('tuRow','MORGK',49);srp('tuRow','NORTS',50);srp('tuRow'
,'OCEAN',51);srp('tuRow','OLDWO',52);srp('tuRow','OTTIK',53);srp('tuRow','PARIS',54);srp('tuRow','PERIC'
,55);srp('tuRow','PICCO',56);srp('tuRow','PRINI',57);srp('tuRow','QUEDE',58);srp('tuRow','QUEEN',59)
;srp('tuRow','QUICK',60);srp('tuRow','RANCH',61);srp('tuRow','RATTC',62);srp('tuRow','REGGC',63);srp
('tuRow','RICAR',64);srp('tuRow','RICSU',65);srp('tuRow','ROMEY',66);srp('tuRow','SANTG',67);srp('tuRow'
,'SAVEA',68);srp('tuRow','SEVES',69);srp('tuRow','SIMOB',70);srp('tuRow','SPECD',71);srp('tuRow','SPLIR'
,72);srp('tuRow','SUPRD',73);srp('tuRow','THEBI',74);srp('tuRow','THECR',75);srp('tuRow','TOMSP',76)
;srp('tuRow','TORTU',77);srp('tuRow','TRADH',78);srp('tuRow','TRAIH',79);srp('tuRow','VAFFE',80);srp
('tuRow','VICTE',81);srp('tuRow','VINET',82);srp('tuRow','WANDK',83);srp('tuRow','WARTH',84);srp('tuRow'
,'WELLI',85);srp('tuRow','WHITC',86);srp('tuRow','WILMK',87);srp('tuRow','WOLZA',88);srp('tuRow','UNCLE'
,89);srp('tuRow','VH40Y',90);srp('tuRow','VHB2U',91);srp('tuRow','VHGG2',92);srp('tuRow','VHOCI',93)
;srp('tuRow','9YT0B',94);srp('tuRow','462WR',95);srp('tuRow','F88JX',96);srp('tuRow','F88KA',97);srp
('tuRow','F8B2A',98);srp('tuRow','54AXT',99);srp('tuRow','C6AOK',100);srp('tuRow','RIIIE',101);srp('tuRow'
,'XL1PS',102);srp('tuRow','YKJQ5',103);srp('tuRow','5HE06',104);srp('tuRow','Z049A',105);srp('tuRow'
,'Z05A1',106);srp('tuRow','3SL1W',107);
srp = null;
oGrid.defineRowProperty('Clicked', false); oGrid.onRowMouseDown = function(event, row){this.setRowClicked
(true, row)}; oGrid.onRowMouseUp = function(event, row){this.setRowClicked(false, row)}; oGrid.onCurrentRowChanged
= function(row){ var value = this.getRowProperty('tuRow', row); if (!(this.disabled || value === null
)){ if (!this.getRowClicked(row) && FoxInCloud.gridRowChangeDelay > 0){ if (this.nTO) window
.clearTimeout(this.nTO); this.nTO = FoxInCloud.gridMethod.bind(FoxInCloud).delay(FoxInCloud.gridRowChangeDelay
, 'wAfterRowChange', $('dataupdate_scx-grd'), value); } else FoxInCloud.gridMethod('wAfterRowChange'
, $('dataupdate_scx-grd'), value); } this.setRowClicked(false, row); };

oGrid.onControlMouseOver = function (event){ if(event.cancelBubble) return; event = Event.extend(event
); srceCodeDisplay(event, 'dataupdate_scx-tutoinfoboxfic', 'dataupdate_scx-grd', '<PRE><div
class="vfpcode"><span class="codecomment">* thisForm.grd as Ficgrd (of ficsample.vcx) as
Grid<br />* Source code read from "dataupdate.scx" and colorized at 05/15/15 02:02:40 AM<
;br /></span><br /><span class="properties">AllowRowSizing</span>
; = .F.<br />wlContentDynamic = .T. <span class="codecomment">&& {en
} This object\'s members and/or properties are dynamic - .T. if members or property change at run-time
{fr} Le contenu et/ou les propriétés de cet objet sont dynamiques - .T. si les membres ou les propri
étés changent à l\'exécution<br /><br />* ———————————————————————————————————</span
><br /><span class="programcontrol">PROCEDURE</span> <span class="events"
>Init</span><br /><span class="programcontrol">local</span> iGrc
as Integer, cGrc as String, cField as String<br /><br /><span class="programcontrol"
>with</span> m.<span class="commands">this</span> as ficGrd <span class
="commands">of</span> ficSample<br /><br /> .ColumnCount = 6<
;br /> <span class="programcontrol">FOR</span> iGrc = 1 <span class
="commands">TO</span> .ColumnCount<br />  <span class="programcontrol"
>with</span> .Columns(m.iGrc) as <span class="classes">Column</span><
;br /><br />   <span class="codec1">#define</span
> column_region 3<br />   <span class="codec1">
;#define</span> column_active 4<br />   <span
class="codec1">#define</span> column_readOnly 6<br /><br />&
;nbsp;  cField = <span class="codestring">\'customer.\'</span> + ICase
(; <span class="codecomment">&& see thisform.opgSourceType.Valid()</span
><br />    m.iGrc = 1,;<br />  
;   <span class="codestring">\'customer_ID\'</span>,;<
;br />    m.iGrc = 2,;<br />  &
;nbsp;  <span class="codestring">\'Company_name\'</span>,;<br
/>    m.iGrc = 3,;<br />   
;  <span class="codestring">\'Region_ID\'</span>,;<br />&
;nbsp;   m.iGrc = 4,;<br />    
<span class="codestring">\'active\'</span>,;<br />  
;  m.iGrc = 5,;<br />     <
;span class="codestring">\'Contact_Title\'</span>,;<br />  &
;nbsp; m.iGrc = 6,;<br />     <span
class="codestring">\'Contact_name\'</span>,;<br />   
;  <span class="codestring">\'\'</span>;<br /> &
;nbsp;  )<br /><br />   cGrc = ICase(;&
#60;br />    m.iGrc = 1,;<br />  &
#38;nbsp;  <span class="codestring">\'ID\'</span>,;<br />&
#38;nbsp;   m.iGrc = 2,;<br />    
<span class="codestring">\'Company\'</span>,;<br /> &
;nbsp;  m.iGrc = 3,;<br />     
;<span class="codestring">\'Region\'</span>,;<br />   
; m.iGrc = 4,;<br />     <span class
="codestring">\'active?\'</span>,;<br />    m
.iGrc = 5,;<br />     <span class="codestring"
>\'Title\'</span>,;<br />    m.iGrc = 6,;<
;br />     <span class="codestring">\'Contact
\'</span>,;<br />     <span class="codestring"
>\'\'</span>;<br />    )<br /><br
/>   .<span class="properties">Width</span> = ICase(
;<br />    m.iGrc = 1,;<br />  
;   060,;<br />    m.iGrc = 2
,;<br />     220,;<br />  
;  m.iGrc = 3,;<br />     100
,;<br />    m.iGrc = 4,;<br />  
;   50,;<br />    m.iGrc = 5,
;<br />     180,;<br />  
;  m.iGrc = 6,;<br />     150
,;<br />     0;<br />  
;  )<br /><br />   <span class="codecomment"
>* {en} Replace native members by instances of adapted classes</span><br /> 
;  <span class="codecomment">* {fr} Remplacer les membres natifs members par
des instances de classes adaptées à FoxinCloud</span><br />  &
;nbsp;.<span class="properties">Name</span> = <span class="codestring">\'grc
\'</span> + cVFPName(m.cGrc)<br />   .<span class="methods"
>RemoveObject</span>(<span class="codestring">\'Text1\'</span>)<br /
>   .<span class="methods">AddObject</span>(<span
class="codestring">\'ficTxt\'</span>, ICase(;<br />   
; m.iGrc = column_region,;<br />     &
#60;span class="codestring">\'ficCbo\'</span>,; <span class="codecomment">&
;& of ficSample.vcx as Combobox</span><br />   &
;nbsp;m.iGrc = column_readOnly,;<br />     <
;span class="codestring">\'ficTxtGrc\'</span>,; <span class="codecomment">&
;& of ficSample.vcx as Textbox</span><br />   &
;nbsp;m.iGrc = column_active,;<br />     <span
class="codestring">\'ficChk\'</span>,;<br />    
<span class="codestring">\'ficTxt\'</span>; <span class="codecomment"
>&& of ficSample.vcx as Textbox</span><br />  
  ))<br />   .<span class="properties">Sparse
</span> = !<span class="functions">InList</span>(m.iGrc, column_region, column_active
)<br />   .<span class="properties">Alignment</span>
; = <span class="functions">Iif</span>(m.iGrc = column_active, 2, 3)<br />&
;nbsp;  <span class="programcontrol">if</span> m.iGrc = column_region
<br />    <span class="programcontrol">with<
/span> .ficTxt as <span class="classes">combobox</span><br /> &
#38;nbsp;   <span class="functions">select</span> region,
Cast(region_id as C(5)) <span class="commands">from</span> region into <span class
="commands">array</span> .waRowSource<br />    
<span class="programcontrol">for</span> i = 1 <span class="commands"&
#62;to</span> <span class="systemvars">_Tally</span>*2<br /> 
;     .waRowSource<span class="codestring">[m.i
]</span> = <span class="functions">Alltrim</span>(.waRowSource<span class
="codestring">[m.i]</span>)<br />     
;<span class="programcontrol">endfor</span><br />   
;  .<span class="commands">Margin</span> = 1<br /> 
;    .<span class="properties">Style</span> = 2
<span class="codecomment">&& Drop-down list box</span><br />
     .<span class="properties">DisplayCount<
;/span> = 10<br />     .<span class="properties"
>BoundColumn</span> = 2<br />     .
<span class="properties">BoundTo</span> = .T.<br />   
;  .<span class="properties">RowSourceType</span> = 5 <span class
="codecomment">&& Array</span><br />   
;  .<span class="properties">RowSource</span> = <span class="codestring"
>\'this.waRowSource\'</span><br /><br />   &
;nbsp; <span class="commands">store</span> <span class="functions">rgb
</span>(216, 091, 220); <span class="codecomment">&& lilac</span
><br />      <span class="commands"
>to</span> .<span class="properties">BackColor</span>, .<span class="properties"
>Parent</span>.<span class="properties">BackColor</span>, .ItemBackColor
<br />     <span class="commands">store
</span> <span class="functions">rgb</span>(255, 255, 255); <span class="codecomment"
>&& white</span><br />    &
;nbsp; <span class="commands">to</span> .ForeColor, .<span class="properties"
>ItemForeColor</span><br />    <span class
="programcontrol">endwith</span><br />   <span class
="programcontrol">endif</span><br />   .CurrentControl
= <span class="codestring">\'ficTxt\'</span><br />   
;.<span class="properties">ReadOnly</span> = m.iGrc = 1<br /><br />&
#38;nbsp;  .<span class="properties">BackColor</span> = ICase(; <
;span class="codecomment">&& m.iGrc = column_region : {en} see above {fr} voir ci-dessus
</span><br />    .<span class="properties">
;ReadOnly</span>,;<br />     <span class
="functions">Rgb</span>(200, 200, 200),; <span class="codecomment">&&
;amp; grayish</span><br />    m.iGrc = 2,;<br
/>     <span class="functions">Rgb</span
>(255, 255, 128),; <span class="codecomment">&& light yellow</span>
;<br />     .<span class="properties">BackColor
</span>;<br />    )<br /><br />&
#38;nbsp;  <span class="functions">BindEvent</span>(.ficTxt, <span
class="codestring">\'Valid\'</span>, m.<span class="properties">thisForm</span
>, <span class="codestring">\'grcTxtValid\'</span>) <span class="codecomment"
>&& Iif(m.iGrc = column_active, \'Click\', \'Valid\')</span><br />
;   .<span class="methods">SetAll</span>(<span class="codestring"
>\'FontName\'</span>, .<span class="properties">FontName</span>)<br
/>   .<span class="methods">SetAll</span>(<span class
="codestring">\'FontSize\'</span>, .<span class="properties">FontSize</span&
#62;)<br />   .<span class="methods">SetAll</span>
;(<span class="codestring">\'Visible\'</span>, .T.)<br />  
; .<span class="methods">SetAll</span>(<span class="codestring">\'FontBold
\'</span>, .T., .<span class="properties">HeaderClass</span>)<br />&
#38;nbsp;  .<span class="methods">SetAll</span>(<span class="codestring"
>\'Caption\'</span>, <span class="functions">Evl</span>(<span class="functions"
>DBGetProp</span>(m.cField, <span class="codestring">\'Field\'</span>, &
#60;span class="codestring">\'Caption\'</span>), m.cGrc), .<span class="properties"&
#62;HeaderClass</span>)<br /><br />   <span class
="commands">store</span> <span class="functions">Evl</span>(<span class
="functions">DBGetProp</span>(m.cField, <span class="codestring">\'Field\'</span
>, <span class="codestring">\'Comment\'</span>), m.cField);<br /> 
;   + CRLF + ICase(;<br />    
; m.iGrc = column_region,;<br />     &
#38;nbsp;<span class="codestring">\'Fixed now in Web mode! see dataUpdate.js :-)\'</span
>,;<br />     m.iGrc = column_readOnly,;<
;br />      <span class="codestring">
;\'read-only if .RecordSource is a table (just for fun and test)\'</span>,;<br />&
;nbsp;    .<span class="properties">ReadOnly</span>
;,;<br />      <span class="codestring"
>\'read-only\'</span>,;<br />     &
#38;nbsp;<span class="codestring">\'editable\'</span>;<br />  
;    );<br />    <
;span class="commands">to</span> .<span class="properties">ToolTipText</span
>, .ficTxt.<span class="properties">ToolTipText</span><br /><br />
;  <span class="programcontrol">endwith</span><br /> 
;<span class="programcontrol">endfor</span><br /><span class="programcontrol"
>endwith</span><br /><span class="programcontrol">ENDPROC</span>
<br /><br /><span class="codecomment">* ———————————————————————————————————&
#60;/span><br /><span class="programcontrol">PROCEDURE</span> wAfterColChange
<span class="codecomment">&& {en} FoxInCloud manual adaptation: .wAfterColChange
() has after column change code moved from .AfterRowColChange() {fr} Adaptation manuelle FoxInCloud
: .wAfterColChange() ici se trouve le code d\'après changement de colonne déplacé de .AfterRowColChange
() && {en} After Column change - see this.AfterRowColChange() {fr} Après le changement
de colonne - cf. this.AfterRowColChange()</span><br /><span class="programcontrol"
>LPARAMETERS</span> nColIndex <span class="codecomment">&& see documentation
in awGrd.wAfterColwChange()<br /></span><br /><span class="programcontrol"
>do</span> <span class="programcontrol">case</span><br /><span
class="programcontrol">case</span> m.<span class="properties">thisForm</span
>.wlHTMLgen <span class="codecomment">&& {en} FoxInCloud Automated Adaptation
{fr} Adaptation Automatique FoxInCloud</span><br /> <span class="commands"
>return</span> .T. <span class="codecomment">&& {en} Execute this
VFP event code on FoxInCloud server {fr} Traiter l\'événement sur le serveur (bloc ELSE ci-après)<
;/span><br /><span class="programcontrol">case</span> !<span class="functions"
>DoDefault</span>(@m.nColIndex) <span class="codecomment">&& {en
} very important {fr} très important</span><br /> <span class="commands"
>return</span> .F.<br /><span class="programcontrol">endcase</span>
;<br /><br /><span class="properties">thisForm</span>.<span class
="functions">Refresh</span><br /><span class="programcontrol">ENDPROC<
;/span><br /><br /><span class="codecomment">* —————————————————————————
——————————</span><br /><span class="programcontrol">PROCEDURE</span>
wAfterRowChange <span class="codecomment">&& {en} FoxInCloud manual adaptation
: .wAfterRowChange() has after row change code moved from .AfterRowColChange() {fr} Adaptation manuelle
FoxInCloud : .wAfterRowChange() ici se trouve le code d\'après changement de ligne déplacé de .AfterRowColChange
() && {en} After Row change - see this.AfterRowColChange() {fr} Après le changement de
ligne - cf. this.AfterRowColChange()</span><br /><span class="programcontrol">
;LPARAMETERS</span> tuRow <span class="codecomment">&& see documentation
in awGrd.wAfterRowChange()<br /></span><br /><span class="programcontrol"
>do</span> <span class="programcontrol">case</span><br /><span
class="programcontrol">case</span> m.<span class="properties">thisForm</span
>.wlHTMLgen <span class="codecomment">&& {en} FoxInCloud Automated Adaptation
{fr} Adaptation Automatique FoxInCloud</span><br /> <span class="commands"
>return</span> .T. <span class="codecomment">&& {en} Execute this
VFP event code on FoxInCloud server {fr} Traiter l\'événement sur le serveur (bloc ELSE ci-après)<
;br /></span><br /><span class="programcontrol">case</span> !<
;span class="functions">DoDefault</span>(@m.tuRow) <span class="codecomment">&
;amp;& {en} important {fr} important</span><br /> <span class="commands"
>return</span> .F.<br /><span class="programcontrol">endcase</span>
;<br /><br /><span class="programcontrol">if</span> m.<span class
="properties">thisForm</span>.nBufferDirty > 0 and <span class="functions">
;Empty</span>(nBufferDirty(m.<span class="commands">this</span>.<span class
="properties">recordSource</span>))<br /> <span class="functions">
;AddProperty</span>(m.<span class="properties">thisForm</span>, <span class
="codestring">\'cDataOpe\'</span>, <span class="codestring">\'auto save\'</span
>)<br /> <span class="functions">AddProperty</span>(m.<span
class="properties">thisForm</span>, <span class="codestring">\'nDataRec\'</span
>, m.<span class="properties">thisForm</span>.nBufferDirty)<br /> 
;<span class="functions">AddProperty</span>(m.<span class="properties">thisForm
</span>, <span class="codestring">\'cDataError\'</span>, <span class="codestring"
>\'\'</span>)<br /> <span class="properties">thisForm</span
>.nBufferDirty = 0<br /><span class="programcontrol">endif</span><br
/><br /><span class="properties">thisForm</span>.<span class="functions"
>Refresh</span><br /><span class="programcontrol">ENDPROC</span>
</div></PRE>'); };oGrid.onCurrentColumnChanged = function(col){ FoxInCloud.gridMethod
('wAfterColChange', $('dataupdate_scx-grd'), parseInt(col,10)+1); };
oGrid.onCellValidating = function(text, col, row){ col = parseInt(col, 10); var result, dynCC, template
, readOnly, disabled; if (typeof row === 'undefined') { template = this.getCellTemplate(col); } else
{ row = parseInt(row, 10); dynCC = this.getCellCurrentControl(col,row); template = this.getCellTemplate
(col,row); } if (template.disabled) return; if (typeof text === 'string'){ var fmt = this.getCellFormat
(col, row); var value = fmt ? fmt.textToValue(text) : text; } if (template.readOnly) return; switch
(col){ case 0: if(!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent('blur', $('dataupdate_scx-grd'
), value, 'dataupdate_scx-grd-grcid-fictxt', true);break;} case 1: if(!dynCC || dynCC === 'fictxt'
){result = FoxInCloud.gridEditEvent('blur', $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grccompany-fictxt'
, true);break;} case 4: if(!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent('blur'
, $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grctitle-fictxt', true);break;} case 5: if(
!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent('blur', $('dataupdate_scx-grd'), value
, 'dataupdate_scx-grd-grccontact-fictxt', true);break;} } var cols = this.getColumnCount(), rows = this
.getRowCount(), done = false; col++; while (row < rows && !done) { if (this.getCellEditable
(col,row)) { this.setSelectedColumns([col]); this.setSelectedRows([row]); this.setCurrentColumn(col)
; this.setCurrentRow(row); done = true; } else { col++; if (col >= cols){ col = 0; row++; } } } return
result; };oGrid.onCellClicked = function(event, col, row){ col = parseInt(col, 10); var result, dynCC
, template, readOnly, disabled; if (typeof row === 'undefined') { template = this.getCellTemplate(col
); } else { row = parseInt(row, 10); dynCC = this.getCellCurrentControl(col,row); template = this.getCellTemplate
(col,row); } if (template.disabled) return; if (typeof text === 'string'){ var fmt = this.getCellFormat
(col, row); var value = fmt ? fmt.textToValue(text) : text; } event.cancelBubble = true; event = Event
.extend(event); if(event.isLeftClick()){ switch (col){ case 3: if(!dynCC || dynCC === 'fictxt'){result
= FoxInCloud.gridEditEvent(event, $('dataupdate_scx-grd'), this.getCellValue(col, row), 'dataupdate_scx-grd-grcactive_-fictxt'
);break;} } return result; } };oGrid.onCellValidated = function(text, col, row){ col = parseInt(col,
10); var result, dynCC, template, readOnly, disabled; if (typeof row === 'undefined') { template = this
.getCellTemplate(col); } else { row = parseInt(row, 10); dynCC = this.getCellCurrentControl(col,row)
; template = this.getCellTemplate(col,row); } if (template.disabled) return; if (typeof text === 'string'
){ var fmt = this.getCellFormat(col, row); var value = fmt ? fmt.textToValue(text) : text; } if (template
.readOnly) return; switch (col){ case 2: if(!dynCC || dynCC === 'fictxt'){result = FoxInCloud.gridEditEvent
('change', $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grcregion-fictxt', true);break;} } var
cols = this.getColumnCount(), rows = this.getRowCount(), done = false; col++; while (row < rows
&& !done) { if (this.getCellEditable(col,row)) { this.setSelectedColumns([col]); this.setSelectedRows
([row]); this.setCurrentColumn(col); this.setCurrentRow(row); done = true; } else { col++; if (col &
#62;= cols){ col = 0; row++; } } } return result; };oGrid.onCellValidated = function(text, col, row)
{ col = parseInt(col, 10); var result, dynCC, template, readOnly, disabled; if (typeof row === 'undefined'
) { template = this.getCellTemplate(col); } else { row = parseInt(row, 10); dynCC = this.getCellCurrentControl
(col,row); template = this.getCellTemplate(col,row); } if (template.disabled) return; if (typeof text
=== 'string'){ var fmt = this.getCellFormat(col, row); var value = fmt ? fmt.textToValue(text) : text
; } if (template.readOnly) return; switch (col){ case 2: if(!dynCC || dynCC === 'fictxt'){result
= FoxInCloud.gridEditEvent('change', $('dataupdate_scx-grd'), value, 'dataupdate_scx-grd-grcregion-fictxt'
, true);break;} } var cols = this.getColumnCount(), rows = this.getRowCount(), done = false; col++; while
(row < rows && !done) { if (this.getCellEditable(col,row)) { this.setSelectedColumns([col
]); this.setSelectedRows([row]); this.setCurrentColumn(col); this.setCurrentRow(row); done = true; }
else { col++; if (col >= cols){ col = 0; row++; } } } return result; };
oGrid.onKeyBackspace = function(event){ event = Event.extend(event); if (!event.findElement('input')
){ this.startCellEdit(''); event.stop(); } };

oGrid.setSelectedRows([-1]);
oGrid.setSelectedRows([107]);
oGrid.setSelectedColumns([3]);
oGrid.disabled = true;
oGrid.setCurrentRow(107);
oGrid.setCurrentColumn(3);
oGrid.disabled = false;
}
/* FoxInCloud Application Server built this script in 406 ms */
})();</script><PCHTML><r><c>dataupdate_scx-cmdsave</c><c>style.cursor</c><c>S</c><c>pointer</c></r><r
><c>dataupdate_scx-cmdcancel</c><c>style.cursor</c><c>S</c><c>pointer</c></r><r><c>dataupdate_scx-lblrs
</c><c>innerHTML</c><c>S</c><c>grid.RecordSource = 'Customer_View': 108 recs, row buffering</c></r><r
><c>dataupdate_scx-lblresult</c><c>innerHTML</c><c>S</c><c>Customer_View has 1 buff. record modified
.</c></r><r><c>dataupdate_scx-lblresult</c><c>style.color</c><c>S</c><c>#FF4040</c></r><r><c>dataupdate_scx-cmdok
</c><c>style.cursor</c><c>S</c><c>auto</c></r><r><c>dataupdate_scx-opgsourcetype</c><c>disabled</c><c
>B</c><c>true</c></r><r><c>dataupdate_scx-cmdsave</c><c>disabled</c><c>B</c><c>false</c></r><r><c>dataupdate_scx-cmdsave
</c><c>style.color</c><c>S</c><c>#000000</c></r><r><c>dataupdate_scx-cmdcancel</c><c>disabled</c><c>B
</c><c>false</c></r><r><c>dataupdate_scx-cmdcancel</c><c>style.color</c><c>S</c><c>#000000</c></r><r
><c>dataupdate_scx-opgbuffering</c><c>disabled</c><c>B</c><c>true</c></r><r><c>dataupdate_scx-cmdok<
/c><c>disabled</c><c>B</c><c>true</c></r><r><c>dataupdate_scx-cmdok</c><c>style.color</c><c>S</c><c>
#6D6D6D</c></r></PCHTML><script_>jQuery('#awMenu').html('<ul id="menubar-_msysmenu" class="menubar"
style="display:block;"><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44u"><a
href="javascript:void(0)">Home</a></li><li class="menubar pad ui-state-disabled"
id="menubar-_msysmenu-_4bw15s44v"><!-- separator --><a href="javascript:void(0)">
;Support</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44w">&
#60;a href="javascript:void(0)">Controls & Events</a></li><li class="menubar
pad" id="menubar-_msysmenu-_4bw15s44x"><a href="javascript:void(0)">Data Update (Grid )
</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44y"><a href
="javascript:void(0)">Reporting</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s44z"
><a href="javascript:void(0)">KeyPress Event</a></li><li class="menubar
pad ui-state-disabled" id="menubar-_msysmenu-_4bw15s450"><!-- separator --><a href="javascript
:void(0)">Adaptations</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s451"
><a href="javascript:void(0)">Form Data Xchange</a></li><li class="menubar
pad" id="menubar-_msysmenu-_4bw15s452"><a href="javascript:void(0)">Grid - RowColChange
</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s453"><a href
="javascript:void(0)">Grid - Paged</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s454"
><a href="javascript:void(0)">RowSourceType</a></li><li class="menubar
pad ui-state-disabled" id="menubar-_msysmenu-sep1"><!-- separator --><a href="javascript
:void(0)">Server</a></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s455"
><a href="javascript:void(0)">Source Code</a><ul id="popup-sourcecode" class
="popup ui-menu-icons shadow" style="display:none;"><li class="popup bar" id="popup-sourcecode-1"
title="FoxInCloud Application Server main program"><a href="javascript:void(0)">FAS (FoxInCloud
Application Server) main</a></li><li class="popup bar" id="popup-sourcecode-2" title
="FoxInCloud Application Server parameters (can be modified on line)"><a href="javascript:void
(0)">FAS config (tutoTest.ini)</a></li><li class="popup bar" id="popup-sourcecode-3"
title="Application Environment settings shared by Web and LAN versions"><a href="javascript
:void(0)">FAS settings (tutoSets.prg, shared with desktop app)</a></li><li class
="popup bar" id="popup-sourcecode-4" title="Application Menu generated from tuto.mnx, shared by desktop
and Web versions"><a href="javascript:void(0)">FAS menu (tuto.mnx, shared with desktop app
)</a></li><li class="popup bar" id="popup-sourcecode-5" title="FoxInCloud Application
Server classes shared by test and production versions"><a href="javascript:void(0)">FAS
classes (tutoServer.prg)</a></li><li class="popup bar" id="popup-sourcecode-6" title
="FoxInCloud Web Application Site Cascading Style Sheet"><a href="javascript:void(0)">FAS
custom CSS (tuto.css)</a></li><li class="popup bar" id="popup-sourcecode-7" title
="FoxInCloud Web Application Site JavaScript"><a href="javascript:void(0)">FAS custom JS
(tuto.js)</a></li><li class="popup bar" id="popup-sourcecode-8" title="Application
Desktop version main program"><a href="javascript:void(0)">Desktop app main (tutoLAN.prg
)</a></li></ul></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s456"
><a href="javascript:void(0)">Server Admin</a></li><li class="menubar
pad" id="menubar-_msysmenu-_4bw15s457"><a href="javascript:void(0)">Server Status</a
></li><li class="menubar pad" id="menubar-_msysmenu-_4bw15s458"><a href="javascript
:void(0)">Event Log</a></li></ul>');
jQuery('#menubar-_msysmenu').menu().menu('refresh');var select = jQuery('#menubar-_msysmenu').menu('option'
, 'select') || '';
if (select) {
select = select.toString();
var selOpen = select.indexOf('{')+2, selClose = select.lastIndexOf('}');
select = select.substr(selOpen, selClose - selOpen);
}
else select = 'var item = ui.item, elem = item.get(0);\n';
jQuery('#menubar-_msysmenu').menu('option', 'select', Function(
'event'
, 'ui'
, select + 'if(item.is(\'#menubar-_msysmenu-_4bw15s44u\')) return FoxInCloud.menuSelect(event, elem)
;\nif(item.is(\'#menubar-_msysmenu-_4bw15s44w\')) return FoxInCloud.menuSelect(event, elem);\nif(item
.is(\'#menubar-_msysmenu-_4bw15s44x\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s44y
\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s44z\')) return
FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s451\')) return FoxInCloud
.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s452\')) return FoxInCloud.menuSelect
(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s453\')) return FoxInCloud.menuSelect(event, elem
);\nif(item.is(\'#menubar-_msysmenu-_4bw15s454\')) return FoxInCloud.menuSelect(event, elem);\nif(item
.is(\'#popup-sourcecode-1\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-2
\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-3\')) return FoxInCloud
.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-4\')) return FoxInCloud.menuSelect(event, elem
);\nif(item.is(\'#popup-sourcecode-5\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-6
\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-7\')) return FoxInCloud
.menuSelect(event, elem);\nif(item.is(\'#popup-sourcecode-8\')) return FoxInCloud.menuSelect(event, elem
);\nif(item.is(\'#menubar-_msysmenu-_4bw15s456\')) return FoxInCloud.menuSelect(event, elem);\nif(item
.is(\'#menubar-_msysmenu-_4bw15s457\')) return FoxInCloud.menuSelect(event, elem);\nif(item.is(\'#menubar-_msysmenu-_4bw15s458
\')) return FoxInCloud.menuSelect(event, elem);'.split(/\n/).reject(function(inst){return this.include
(inst);}, select).join('\n')
));
</script_><UserID>3VM0XAYNH</UserID><AppTime>0.015</AppTime><ServerVersion>2.20 beta07</ServerVersion
><ServerTimeStamp>{^2015-05-14 12:31:44 PM}</ServerTimeStamp><ServerTime>0.690783</ServerTime></IntuiCat
>



Using the same form to display and edit record information, I am raising an error in Web in the following situation:

Textboxes are Enabled = .F. for display only - to prevent unintended edits.
Upon entering Edit mode, Textboxes are made Enabled = .T.

Lets say you are editing a record and you make a small change in the Description Textbox. You now use the mouse to click a save button. Save.click() performs the usual data checks and if the data is OK to save, resets the environment to the Display mode with all Textboxes.Enabled = .F. All this processing completes without error in LAN and Web.

At this point an error is raised that says:"awserver.fxp!Awajax.useraction() - control 'frame.page3.txtquantity' should be disabled in client browser..."

If you watch the browser, you can see that focus has advanced to the next Textbox, which in this case is named txtQuantity. Indeed, the Save.click() did disable the Textbox, so the error is sensible. However, the mouse should have changed the focus to the Save button. The error message seems informational only, but does stop processing. At this point I am unsure why the focus is advancing down the tab order, do I need to call something prior to Enabled = .F. to prevent this?

- James



© 1996-2024