home *** CD-ROM | disk | FTP | other *** search
/ Delphi Anthology / aDELPHI.iso / Runimage / Delphi50 / Source / Webmidas / xmlerrdisp.js < prev    next >
Text File  |  1999-08-11  |  13KB  |  689 lines

  1. //Copyright Inprise Corporation 1999, all rights reserved, to be used with Borlands Midas-technology only, 
  2. //unless special permission has been given.
  3. var xmlerrdisp_vers="1.0";
  4.  
  5. var szActionM="MODIFY",szActionD="DELETE",szActionI="INSERT";
  6.  
  7.  
  8.  
  9.  
  10.  
  11. function ErrReconcile(srcd,srcerr,fldids,names, fldiderrmes,fldiderraction )
  12. {
  13. var i;
  14.  
  15.  
  16.  
  17. this.srcD=srcd;
  18. this.srcE=srcerr;
  19.  
  20. this.srcD.regobj(this);
  21.  
  22. //this.cnt=cnt;
  23. if (fldids){ this.fldcnt=fldids.length} else{ if (names){ this.fldcnt=names.length} else {this.fldcnt = this.srcD.FieldCnt}};
  24. this.fldids=fldids;
  25. var r=fldids[0].length;
  26. if (isNaN(r)) r=1;
  27. this.rows=r;
  28. for (i=0;i<this.fldcnt;i++)
  29. {
  30. var l=fldids[i].length;
  31. if (isNaN(l)) l=1;
  32. if (l!=r)
  33. {
  34.   alert(names[i]+": inconsistent row-count");
  35.   if (l<this.rows) this.rows=l;
  36. }
  37. }
  38.  
  39. this.names=names;
  40. this.errmes=fldiderrmes;
  41. this.erraction=fldiderraction;
  42.  
  43. this.scrolloffs=0;
  44. this.page=0;
  45. this.selectRow=selectPos;
  46.  
  47.  
  48. this.getValue=GridGetValue;
  49. this.putValue=GridPutValue
  50.  
  51. this.fRow=0;
  52. this.fCol=0;
  53.  
  54. this.setFocus=GridSetFocus;
  55. //public
  56.  
  57. this.post=GridPost;
  58. this.refr=DBGridRefr;
  59.  
  60. this.xfocus=GridFocus;
  61.  
  62. this.up=GridUp;//pre-rec
  63. this.down=GridDown;//next-rec
  64. this.scroll=GridScroll;
  65.  
  66. //this.keys=GridKeys;
  67.  
  68. this.ErrFirst=ErrFirst;
  69. this.ErrNext=ErrNext;
  70.  
  71. this.DeltaHandled=DeltaHandled;
  72. this.DeltaAdjustAll=DeltaAdjustAll;
  73. this.DeltaAdjust=DeltaAdjust;
  74.  
  75. this.rsECur=null;
  76. this.rsDCur=null;
  77. OpenDetails(srcd);
  78. OpenDetails(srcerr);
  79.  
  80.  
  81.  
  82. this.pModVal=null;
  83. this.pOrgVal=null;
  84. this.pConVal=null;
  85. this.rstate="";
  86. this.ErrStr="";
  87. this.RecsHandled=new Array();
  88. this.AddRecsHandled=AddRecsHandled;
  89. this.bAborted=0;
  90.  
  91. //this.InitValues(this.srcE,this.srcD);
  92. this.action="";//"correct"; 
  93. this.cancel=ErrCancel;
  94. this.correct=ErrCorrect;
  95. this.merge=ErrMerge;
  96. this.Reapply=Reapply;
  97.  
  98. this.InitValues=InitValues;
  99. this.ErrFirst(srcerr,srcd);
  100.  
  101. this.selectRow(0);
  102. this.refr(1);
  103. this.setFocus(1,0);
  104. }
  105.  
  106.  
  107. function OpenDetails(rs)
  108. {
  109.  var f,i,rsD;
  110.  for(i=0;i<rs.Fields.Cnt;i++)
  111.  {
  112.    f=rs.Fields.Fieldx[i];
  113.    if (f.Type==szNested)
  114.    {
  115.  
  116.       rsD=new xmlRowSet(null,rs,f.name);  
  117.       OpenDetails(rsD);
  118.    }     
  119.  } 
  120. }
  121.  
  122.  
  123.  
  124. function GridDown()
  125. {
  126. var r=this.fRow, c=this.fCol;
  127.  
  128.  
  129. if (r<this.rows-1)
  130. {
  131.   r++
  132. }
  133. else {this.scroll(1);return;}
  134.  
  135. this.setFocus(r,c);
  136. }
  137.  
  138. function GridUp()
  139. {
  140. var r=this.fRow, c=this.fCol;
  141.  
  142. if (r > 0)
  143.   r--;
  144. else {this.scroll(-1);return;}
  145. this.setFocus(r,c);
  146. }
  147.  
  148.  
  149. function GridScroll(inc)
  150. {
  151. if (inc>0)
  152. {
  153. if (this.page*this.rows+this.fRow+this.scrolloffs>=this.rsDCur.Fields.Cnt) return; //**
  154.  
  155. if (this.scrolloffs== this.rows-1)
  156.   {this.scrolloffs=0; this.page++;}
  157. else
  158.   this.scrolloffs++;
  159. }
  160. else
  161. {
  162. if (-this.scrolloffs== this.rows-1)
  163. {
  164.   if (this.page>0) {this.scrolloffs=0; this.page--;}
  165. }
  166. else
  167. {
  168.   this.scrolloffs--;
  169.   if (this.page*this.rows+this.scrolloffs <0) this.scrolloffs=0
  170. }
  171. }
  172. var r=this.fRow;
  173. this.selectRow(r);//??
  174. this.refr(1);
  175. this.setFocus(r,this.fCol);
  176. }
  177.  
  178.  
  179.  
  180.  
  181. function GridSetFocus(r,c)
  182. {
  183. if (c>=this.fldcnt ||r>=this.rows) return;
  184. var ref=this.fldids[c];
  185. if (this.rows>1) ref=ref[r];
  186. if(ref.disabled||ref.readonly) return; 
  187. if (ref.focus!=null)
  188.  ref.focus();
  189. }
  190.  
  191.  
  192.  
  193.  
  194. function GridFocus(r,c)
  195. {
  196.  
  197. var ref;
  198.  
  199. if (c==null)
  200. { //r is 'this'
  201.   if(r==null){r=this.fRow;c=this.fCol;ref=this.fldids[c];} else
  202.   {
  203.    var i,j,ref,found=0;
  204.    for (j=0;j<this.fldcnt;j++)
  205.    {
  206.     ref=this.fldids[j];
  207.     if (this.rows==1){if (ref==r) {r=0;c=j;found=1;break;}}   
  208.     else for (i=0;i<this.rows;i++) if (ref[i]==r){r=i;c=j;found=1;break;}
  209.     if (found) {break;}
  210.    }  
  211.    if (found==0) return 0;
  212.   }
  213. }
  214. else
  215.   ref=this.fldids[c];
  216. if (this.rows>1) ref=ref[r];
  217.  
  218.  
  219. //var f=this.getFldDes(c);
  220. if (c!= 1)// f&&f.readonly)
  221. {
  222.   if(ref.getAttribute && ref.getAttribute("disabled")==true)//explorer only
  223.   {}
  224.   else     
  225.     ref.blur(); 
  226.   return 0;
  227. }
  228. else
  229. {
  230.  if (r!=this.fRow && this.fCol==1)
  231.  {
  232.    var ix=this.fRow+this.page*this.rows+this.scrolloffs;
  233.    if (ix< this.rsDCur.Fields.Cnt)
  234.    {
  235.      if (this.action=="correct")
  236.      {
  237.        var v= this.getValue(this.fCol, this.fRow);
  238.        if (v!=this.pModVal[ix])
  239.        {
  240.          var f=this.rsDCur.Fields.Fieldx[ix];
  241.          var res="";
  242.          if (f)
  243.            res=f.validate(f.frdisp(v));
  244.          if (res !=null)
  245.          {
  246.             v=f.todisp(res);
  247.             this.putValue(this.fCol,this.fRow,v);
  248.             this.pModVal[ix]=v;
  249.          }
  250.          else
  251.          {
  252.            this.setFocus(this.fRow,this.fCol);
  253.            return 1;
  254.          }
  255.        }
  256.       }
  257.       else
  258.       {
  259.         this.putValue(this.fCol,this.fRow,this.pModVal[ix]);
  260.       }
  261.    }
  262.    else
  263.      this.putValue(this.fCol,this.fRow,"");
  264.  }
  265.  if (c!=this.fCol)
  266.  { 
  267.  
  268.  }
  269.  this.fRow=r;
  270.  this.fCol=c;
  271.  this.selectRow(r);
  272.  if (ref.select!=null)
  273.    ref.select();
  274.  
  275. }
  276. return 0;
  277. }
  278.  
  279.  
  280.   
  281.  
  282.  
  283.  
  284. function GridPutValue(col,row,val)
  285. {
  286.  
  287. var ref=this.fldids[col];
  288. if (this.rows==1) ref.value=val; else ref[row].value = val;
  289.  
  290. }
  291.  
  292.  
  293.  
  294. function GridGetValue(col,row)
  295. {
  296.  
  297. var ref=this.fldids[col];
  298. if (this.rows==1) return ref.value;
  299. return ref[row].value;
  300.  
  301. }
  302.  
  303.  
  304. function selectPos(row)
  305. {
  306. return 1;
  307.  
  308. var pos = this.page*this.rows+row+this.scrolloffs;
  309. if (pos>=0&&pos < this.src.RowCnt)
  310. {
  311.   this.src.setPos(pos);
  312.   return 1;
  313. }
  314. return 0;
  315. }
  316.  
  317.  
  318.  
  319. function DBGridRefr(r)
  320. {
  321. if (r==0 && this.rows>1) return;
  322.  
  323. var rsE=this.rsECur,rsD=this.rsDCur;
  324. if (rsE==null || rsD==null) return;
  325.  
  326.  
  327. //debug("refresh pos="+rsD.pos);
  328. var i,j;
  329.  
  330. var ErrStr=this.ErrStr;
  331. var rstate=this.rstate;
  332. //debug(ErrStr + " " + rstate);
  333.  
  334. for (i=0; i<this.rows;i++)
  335. {
  336.   var fldname="";
  337.   var ModVal="",OrgVal="",ConVal="";      
  338.   var ix=i+this.page*this.rows+this.scrolloffs;
  339.   if (ix<0) {ix=0;this.scrolloffs=0;}
  340.   if (ix<rsD.Fields.Cnt && this.pModVal)
  341.   {
  342.      fldname=rsD.Fields.Fieldx[ix].name;
  343.      ModVal=this.pModVal[ix];
  344.      OrgVal=this.pOrgVal[ix];
  345.      ConVal=this.pConVal[ix];
  346.   }
  347.   this.putValue(0,i,fldname);  
  348.  
  349.   this.putValue(2,i,ConVal); 
  350.  
  351.   if (rstate=="I" ||rstate== "D")
  352.   {
  353.    if (this.action=="cancel")
  354.      this.putValue(1,i, ""); 
  355.    else 
  356.    if (this.action=="merge" && ConVal!="")
  357.       this.putValue(1,i,ConVal);  
  358.    else
  359.       this.putValue(1,i,ModVal);  
  360.   }
  361.   else
  362.   {
  363.    if (this.action=="cancel")
  364.      this.putValue(1,i, "");  
  365.    else
  366.      this.putValue(1,i,ModVal);  
  367.  
  368.    if ((this.action=="merge" ||this.action=="correct") && ConVal!="")
  369.       this.putValue(3,i,ConVal);  
  370.    else
  371.       this.putValue(3,i,OrgVal);  
  372.   } 
  373. }//
  374.  
  375.  
  376. if (this.errmes!=null)
  377. {
  378.    this.errmes.value=ErrStr; 
  379. }
  380. if (this.erraction!=null)
  381. {
  382.   var st; 
  383.   if (rstate=="M") st=szActionM; else if(rstate=="D") st=szActionD; else if(rstate=="I") st=szActionI;
  384.   this.erraction.value=st; 
  385. }
  386. }
  387.  
  388.  
  389.  
  390. function GridPost()
  391. {
  392.  
  393. var rsE=this.rsECur,rsD=this.rsDCur;
  394. if (rsE==null || rsD==null) return 1;
  395. if (this.action=="" || this.action==null) {alert("Please select an action."); return 1;}
  396.  
  397. var i ;
  398.  
  399. var DeltaPos=rsD.pos;
  400.  
  401. var rstate=rsD.RowState(DeltaPos);
  402.  
  403. if (this.action=="cancel")
  404. {
  405.  var row=rsD.getRow(DeltaPos);
  406.  if (row)
  407.    row.removeAttribute(szRowState);
  408.  if (rstate=="M")
  409.  {
  410.    var row=rsD.getRow(DeltaPos-1);
  411.    if (row)
  412.      row.removeAttribute(szRowState);
  413.  }
  414. }
  415. else
  416. if (this.action=="merge")
  417. {
  418.   var  rowE;
  419.   this.AddRecsHandled(rsD);
  420.   //this.RecsHandled[this.RecsHandled.length]=rsD.idx.row(rsD.pos);
  421.   if (rstate=="M")
  422.   {
  423.     rsD.setPos(DeltaPos-1);
  424.     this.AddRecsHandled(rsD);
  425.   }
  426.   rowE=rsE.makeRow();
  427.   rsD.upd(rowE);
  428. }
  429. else
  430. if (this.action=="correct")
  431. {
  432.   if (this.xfocus(this.fRow+1,this.fCol)) return 1;
  433.  
  434.   if (rstate=="M")
  435.   { //merge
  436.     rsD.setPos(DeltaPos-1);
  437.     rowE=rsE.makeRow();
  438.     rsD.upd(rowE);
  439.     this.AddRecsHandled(rsD);
  440.     rsD.setPos(DeltaPos);
  441.   }
  442.   for (i=0;i<rsD.Fields.Cnt;i++)
  443.   {
  444.     var f = rsD.Fields.Fieldx[i];
  445.     var fldname=f.name;
  446.     v=this.pModVal[i];
  447.     if (v)
  448.        this.pModVal[fldname]=f.frdisp(v);
  449.   }
  450.   rsD.upd(this.pModVal);
  451.   this.AddRecsHandled(rsD);//[this.RecsHandled.length]=rsD.idx.row(rsD.pos);
  452. }
  453. if (this.ErrNext(this.rsECur,this.rsDCur)==0)
  454. {
  455.    this.rstate="";
  456.    this.ErrStr="No more errors to reconcile";
  457.    this.pModVal=null;
  458. }
  459. this.refr(1);
  460. return 0;
  461. }
  462.  
  463.  
  464. function ErrCancel()
  465. {
  466. this.action="cancel";
  467. this.refr(1);
  468. this.setFocus(this.fRow,this.fCol);
  469. }
  470.  
  471. function ErrCorrect()
  472. {
  473. this.action="correct";
  474. this.refr(1);
  475. this.setFocus(this.fRow,this.fCol);
  476. }
  477.  
  478. function ErrMerge()
  479. {
  480. this.action="merge";
  481. this.refr(1);
  482. this.setFocus(this.fRow,this.fCol);
  483. }
  484.  
  485.  
  486. function Reapply(frm,el)
  487. {
  488.  if (frm)
  489.  {
  490.   if (this.bAborted==0)
  491.     this.DeltaAdjustAll(this.srcD);
  492.   var delta=this.srcD.root;
  493.   if (this.srcD.RowData.childNodes.length==0)
  494.     el.value="";
  495.   else if (delta.xml!=null)
  496.     el.value=delta.xml;
  497.   else
  498.     el.value=delta.xmlstr();
  499.   frm.submit();
  500.  }
  501. }
  502.  
  503. function InitValues(rsE,rsD)
  504. {
  505.  
  506. this.rsECur=rsE;this.rsDCur=rsD;
  507.  
  508. this.pModVal=new Array();
  509. this.pOrgVal=new Array();
  510. this.pConVal=new Array();
  511.  
  512. var i,j;
  513.  
  514. this.ErrStr=rsE.Fields.Field["ERROR_MESSAGE"].Value();
  515. var ErrPos=parseInt(rsE.Fields.Field["ERROR_RECORDNO"].Value(),10);
  516. var ErrResponse=parseInt(rsE.Fields.Field["ERROR_RESPONSE"].Value());
  517. if (ErrResponse==2)
  518.   this.bAborted=1;
  519.  
  520. rsD.setPos(ErrPos-1);
  521. //debug("deltapos = " + ErrPos);
  522.  
  523. this.rstate=rsD.RowState(rsD.pos);
  524. //debug("rstate="+this.rstate);
  525.  
  526. for (i=0; i<rsD.Fields.Cnt;i++)
  527. {
  528.   var fldname="";
  529.   var ModVal="",OrgVal="",ConVal="";
  530.  
  531.   fldname=rsD.Fields.Fieldx[i].name;
  532.   var fD=rsD.Fields.Field[fldname];
  533.   var fE=rsE.Fields.Field[fldname];
  534.  
  535.   if (this.rstate=="D")
  536.   {
  537.     OrgVal=fD.Value();
  538.     if (OrgVal) OrgVal=fD.todisp(OrgVal); 
  539.   }
  540.   else
  541.   {
  542.     ModVal=fD.Value();
  543.     if (ModVal) ModVal=fD.todisp(ModVal);
  544.   }
  545.   ConVal=fE.Value();
  546.   if (ConVal) ConVal=fE.todisp(ConVal);
  547.   if (this.rstate=="M")
  548.   {
  549.     OrgVal=fD.Value(rsD.pos-1);
  550.     if (OrgVal) OrgVal=fD.todisp(OrgVal);
  551.   }
  552.   this.pModVal[i]=ModVal;
  553.   this.pOrgVal[i]=OrgVal;
  554.   this.pConVal[i]=ConVal;   
  555. }
  556. }
  557.  
  558.  
  559. //returns 1 if found, positions are in this.rsECur,this.rsDCur
  560. function ErrFirst(rsE,rsD)
  561. {
  562. var i ;
  563. this.action="";
  564.  
  565. if (rsE.first()==1) return 0;
  566. rsD.first();
  567. if (rsE.pDets)
  568. {
  569.   this.InitValues(rsE,rsD);
  570.   for (i=0;i<rsE.pDets.length;i++)
  571.   {
  572.      if (this.ErrFirst(rsE.pDets[i],rsD.pDets[i])) return 1;    
  573.   } 
  574. }
  575.  
  576. var st=rsE.Fields.Field["ERROR_MESSAGE"].Value();
  577. if (st && st!="")
  578. {
  579.    this.InitValues(rsE,rsD);
  580.    if (this.rstate!=""&&this.rstate!="DU") return 1;   
  581. }
  582.  
  583. if (this.ErrNext(rsE,rsD)) return 1;
  584.    
  585. return 0; 
  586. }
  587.  
  588. function ErrNext(rsE, rsD)
  589. {
  590.  
  591. //this.action="";
  592. while (rsE.next()==0)
  593. {
  594.   if (rsE.pDets)
  595.   {
  596.     var i;
  597.     this.InitValues(rsE,rsD);
  598.     for (i=0;i<rsE.pDets.length;i++)
  599.     {
  600.        if (this.ErrFirst(rsE.pDets[i],rsD.pDets[i])) return 1;    
  601.     } 
  602.   }
  603.  
  604.   var st=rsE.Fields.Field["ERROR_MESSAGE"].Value();
  605.   if (st && st!="")
  606.   { //found next one
  607.     this.InitValues(rsE,rsD);
  608.     if (this.rstate!=""&&this.rstate!="DU") return 1;   
  609.   }
  610. }
  611.  
  612. if (rsE.parent)
  613. {
  614.    rsE=rsE.parent; 
  615.    rsD=rsD.parent;
  616.    var st=rsE.Fields.Field["ERROR_MESSAGE"].Value();
  617.    if (st && st!="")
  618.    { //found next one
  619.      this.InitValues(rsE,rsD);
  620.      if (this.rstate!=""&&this.rstate!="DU") return 1;   
  621.    }
  622. //   else
  623.       if (this.ErrNext(rsE,rsD)) return 1;       
  624. return 0;
  625. }
  626.  
  627. function DeltaHandled(rsD)
  628. {
  629. if(rsD.RowCnt==0)return 1;
  630. var row=rsD.idx.row(rsD.pos);
  631. if (row==null) return 1;
  632. var i;
  633.  
  634. for (i=0;i<this.RecsHandled.length;i++)
  635. {
  636.  
  637.   if (row==this.RecsHandled[i])
  638.   {
  639.      return 1;
  640.   }
  641. }
  642. return 0;
  643. }
  644.  
  645.  
  646. function DeltaAdjust(rsD)
  647. {
  648. var i;
  649.  
  650. if (rsD.pos>=rsD.RowCnt) return 1;
  651.   
  652. if (rsD.pDets)
  653. {
  654.   for (i=0;i<rsD.pDets.length;i++)
  655.      this.DeltaAdjustAll(rsD.pDets[i]);
  656. if (this.DeltaHandled(rsD)==0)
  657. {
  658.    rsD.del();
  659. }
  660. else
  661.    if (rsD.next()==1) return 1;
  662. return 0;
  663. }
  664.  
  665. function DeltaAdjustAll(rsD)
  666. {
  667. rsD.first();
  668. while (this.DeltaAdjust(rsD)==0)
  669.   ;
  670. }
  671.  
  672.  
  673. function AddRecsHandled(rsD)
  674. {
  675. var pR=rsD.idx.row(rsD.pos);
  676. if (pR==null) return;
  677. var i;
  678. if (rsD.parent)
  679.   this.AddRecsHandled(rsD.parent);
  680. for (i=0;i<this.RecsHandled.length;i++)
  681.    if (this.RecsHandled[i]==pR) return;
  682. this.RecsHandled[this.RecsHandled.length]=pR;
  683.  
  684. }
  685.  
  686.  
  687.