home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / ib / setups / intrabld / data.z / KBUPDATE.JFM < prev    next >
Text File  |  1996-12-11  |  19KB  |  635 lines

  1. /****************************************************************************\
  2. *                                                                            *
  3. * KBUpdate.jfm  --  Knowledge Base Update Form                               *
  4. *                                                                            *
  5. * KBUpdate.jfm is part of the Knowledge Base solution application. It is     *
  6. * used to update the documents in the Knowledge Base. You can edit, add,     *
  7. * delete, query and filter the documents.                                    *
  8. *                                                                            *
  9. * Dependencies:  knowbs31.gif                                                *
  10. *                homepg31.gif                                                *
  11. *                paper_22.gif                                                *
  12. *                expinavh.gif                                                *
  13. *                expirowh.gif                                                *
  14. *                database.cc                                                 *
  15. *                apps\shared\controls.cc                                     *
  16. *                                                                            *
  17. * Links to:      ibapps/index.htm                                            *
  18. *                svr/intrasrv.isv?apps/kbase_ib/kbsearch.jfm                 *
  19. *                                                                            *
  20. * Updated 11/13/96 by IntraBuilder Samples Group                             *
  21. * $Revision:   1.30  $                                                       *
  22. *                                                                            *
  23. * Copyright (c) 1996, Borland International, Inc. All rights reserved.       *
  24. *                                                                            *
  25. \****************************************************************************/
  26. #include "intra.h"
  27. #include "security.h"
  28. //
  29. // The code loads the security login form instead of the update form.
  30. // An object reference to the update form is stored as a property of
  31. // the login form. If the login is successful, the login form opens
  32. // this update form.
  33. // 
  34. // First create the update form, but don't open it.
  35. _sys.scripts.load(_sys.env.home() + "APPS\\SHARED\\STRING.JS");
  36. var f = new kbupdateForm();
  37. // then create a security object
  38. _sys.scripts.load(SM_CLASS_LOCATION + "security.js");
  39. f.security = new SecurityManager();
  40. // then create the login form
  41. _sys.scripts.load("kblogin.jfm");
  42. var login = new kbloginForm();
  43. // the login form requires two custom properties be set
  44. login.security = f.security;
  45. login.nextForm = f;
  46. // finally, open the login form
  47. login.open();
  48. return;
  49. // {End Header} Do not remove this comment//
  50. // Generated on 11/13/96
  51. //
  52. var f = new kbupdateForm();
  53. f.open();
  54. class kbupdateForm extends Form {
  55.    _sys.scripts.load(_sys.env.home() + "APPS\\SHARED\\CONTROLS.CC")
  56.    _sys.scripts.load("DATABASE.CC")
  57.    with (this) {
  58.       color = "ffffc4";
  59.       height = 14;
  60.       left = 0;
  61.       top = 0;
  62.       width = 76;
  63.       title = "Knowledge Base Updates";
  64.       background = "filename PAPER_22.GIF";
  65.       onServerLoad = class::form_onServerLoad;
  66.    }
  67.  
  68.  
  69.    with (this.ibapps1 = new KbaseDatabase()){
  70.       left = 45;
  71.       top = 0;
  72.       active = true;
  73.    }
  74.  
  75.  
  76.    with (this.category1 = new Query()){
  77.       left = 64;
  78.       top = 0;
  79.       database = parent.ibapps1;
  80.       sql = "SELECT * FROM kbcat";
  81.       active = true;
  82.    }
  83.  
  84.  
  85.    with (this.category1.rowset) {
  86.  
  87.    }
  88.  
  89.  
  90.    with (this.kbase1 = new Query()){
  91.       left = 52;
  92.       top = 0;
  93.       database = parent.ibapps1;
  94.       sql = "SELECT * FROM kbase";
  95.       active = true;
  96.    }
  97.  
  98.  
  99.    with (this.kbase1.rowset) {
  100.       filterOptions = 3;
  101.       locateOptions = 3;
  102.       onAppend = class::Rowset_onAppend;
  103.       onNavigate = class::Rowset_onNavigate;
  104.    }
  105.  
  106.  
  107.    with (this.product1 = new Query()){
  108.       left = 58;
  109.       top = 0;
  110.       database = parent.ibapps1;
  111.       sql = "SELECT * FROM kbprod";
  112.       active = true;
  113.    }
  114.  
  115.  
  116.    with (this.product1.rowset) {
  117.    }
  118.  
  119.  
  120.    with (this.rule1 = new Rule(this)){
  121.       top = 4;
  122.       size = 2;
  123.       right = 74;
  124.       pageno = 0;
  125.    }
  126.  
  127.  
  128.    with (this.rule2 = new Rule(this)){
  129.       top = 29;
  130.       size = 2;
  131.       right = 74;
  132.       pageno = 0;
  133.    }
  134.  
  135.  
  136.    with (this.rule3 = new Rule(this)){
  137.       top = 20.5;
  138.       size = 2;
  139.       right = 74;
  140.       pageno = 0;
  141.    }
  142.  
  143.  
  144.    with (this.KnowledgeBaseLogo = new Image(this)){
  145.       height = 3.4167;
  146.       width = 10.25;
  147.       dataSource = "filename KNOWBS31.GIF";
  148.       alignment = 4;
  149.       pageno = 0;
  150.    }
  151.  
  152.  
  153.    with (this.HeadingHTML = new HTML(this)){
  154.       height = 2;
  155.       left = 12;
  156.       width = 62;
  157.       color = "navy";
  158.       text = {||'<H1><FONT SIZE="+4"><FONT COLOR="maroon">K</FONT></FONT>nowledge <FONT SIZE="+4"><FONT COLOR="maroon">B</FONT></FONT>ase <FONT SIZE="+4"><FONT COLOR="maroon">U</FONT></FONT>pdate</H1>'};
  159.       pageno = 0;
  160.    }
  161.  
  162.  
  163.    with (this.DocumentIdHtml = new HTML(this)){
  164.       height = 1;
  165.       top = 5;
  166.       width = 16;
  167.       color = "black";
  168.       fontBold = true;
  169.       text = "Document ID";
  170.    }
  171.  
  172.  
  173.    with (this.DocumentIdFieldHTML = new HTML(this)){
  174.       height = 1;
  175.       left = 16;
  176.       top = 5;
  177.       width = 44;
  178.       color = "black";
  179.       fontBold = true;
  180.       text = {||this.parent.rowset.state==3 ? "(appending)" : (this.parent.rowset.endOfSet ? "(end of set)" : parseInt(this.parent.kbase1.rowset.fields["DocumentID"].value))};
  181.    }
  182.  
  183.  
  184.    with (this.TitleHTML = new HTML(this)){
  185.       height = 1;
  186.       top = 6;
  187.       width = 16;
  188.       color = "black";
  189.       fontBold = true;
  190.       text = "Title";
  191.       pageno = 0;
  192.    }
  193.  
  194.  
  195.    with (this.TitleText = new Text(this)){
  196.       left = 16;
  197.       top = 6;
  198.       width = 44;
  199.       dataLink = parent.kbase1.rowset.fields["Title"];
  200.       pageno = 0;
  201.    }
  202.  
  203.  
  204.    with (this.ProductHTML = new HTML(this)){
  205.       height = 1;
  206.       top = 7;
  207.       width = 16;
  208.       color = "black";
  209.       fontBold = true;
  210.       text = "Product";
  211.       pageno = 0;
  212.    }
  213.  
  214.  
  215.    with (this.ProductSelect = new FieldSelect(this)){
  216.       left = 16;
  217.       top = 7;
  218.       width = 44;
  219.       options = "array {'kbprod','ProdDescript'}";
  220.       pageno = 0;
  221.    }
  222.  
  223.  
  224.    with (this.CategoryHTML = new HTML(this)){
  225.       height = 1;
  226.       top = 8;
  227.       width = 16;
  228.       color = "black";
  229.       fontBold = true;
  230.       text = "Category";
  231.       pageno = 0;
  232.    }
  233.  
  234.  
  235.    with (this.CategorySelect = new FieldSelect(this)){
  236.       left = 16;
  237.       top = 8;
  238.       width = 44;
  239.       options = "array {'kbcat','CatDescript'}";
  240.       pageno = 0;
  241.    }
  242.  
  243.  
  244.    with (this.KeywordHTML = new HTML(this)){
  245.       height = 1;
  246.       top = 9;
  247.       width = 16;
  248.       color = "black";
  249.       fontBold = true;
  250.       text = "Keywords";
  251.       pageno = 0;
  252.    }
  253.  
  254.  
  255.    with (this.KeywordText = new Text(this)){
  256.       left = 16;
  257.       top = 9;
  258.       width = 44;
  259.       dataLink = parent.kbase1.rowset.fields["Keyword"];
  260.       pageno = 0;
  261.    }
  262.  
  263.  
  264.    with (this.ReformatCheck = new CheckBox(this)){
  265.       height = 1;
  266.       left = 16;
  267.       top = 10;
  268.       width = 52;
  269.       text = "Allow HTML formatting of this document";
  270.       color = "";
  271.       fontBold = true;
  272.    }
  273.  
  274.  
  275.    with (this.DocumentTextArea = new TextArea(this)){
  276.       height = 9;
  277.       top = 11;
  278.       width = 70;
  279.       dataLink = parent.kbase1.rowset.fields["Document"];
  280.       pageno = 0;
  281.    }
  282.  
  283.  
  284.    with (this.HomePageLinkImage = new Image(this)){
  285.       onImageClick = class::link_to_home_page;
  286.       height = 3.4167;
  287.       top = 21;
  288.       width = 10.25;
  289.       dataSource = "filename HOMEPG31.GIF";
  290.       alignment = 4;
  291.       pageno = 0;
  292.    }
  293.  
  294.  
  295.    with (this.HomePageLinkHTML = new HTML(this)){
  296.       height = 1;
  297.       left = 12;
  298.       top = 21;
  299.       width = 62;
  300.       color = "black";
  301.       text = "<A HREF='/ibapps/index.htm'>Return to Home Page</A>";
  302.       pageno = 0;
  303.    }
  304.  
  305.  
  306.    with (this.SearchLinkImage = new Image(this)){
  307.       onImageClick = class::link_to_search_page;
  308.       height = 3.4167;
  309.       top = 25;
  310.       width = 10.25;
  311.       dataSource = "filename KNOWBS31.GIF";
  312.       alignment = 4;
  313.       pageno = 0;
  314.    }
  315.  
  316.  
  317.    with (this.SearchLinkHTML = new HTML(this)){
  318.       height = 1;
  319.       left = 12;
  320.       top = 25;
  321.       width = 62;
  322.       color = "black";
  323.       text = "<A HREF='/svr/intrasrv.isv?apps/kbase_ib/kbsearch.jfm'>Start a new search</A>";
  324.       pageno = 0;
  325.    }
  326.  
  327.  
  328.    with (this.GeneratedHTML = new GeneratedHTML(this)){
  329.       height = 1;
  330.       top = 29.5;
  331.       width = 74;
  332.       pageno = 0;
  333.    }
  334.  
  335.  
  336.    with (this.FilterCriteriaHTML = new HTML(this)){
  337.       height = 1;
  338.       top = 4.5;
  339.       width = 50;
  340.       color = "maroon";
  341.       text = "<H2>Enter filter criteria below</H2>";
  342.       pageno = 2;
  343.    }
  344.  
  345.  
  346.    with (this.ApplyFilterButton = new Button(this)){
  347.       onServerClick = class::ApplyFilterButton_onServerClick;
  348.       left = 12;
  349.       top = 2;
  350.       width = 17;
  351.       text = "Apply Filter";
  352.       pageno = 2;
  353.    }
  354.  
  355.  
  356.    with (this.AbandonFilterButton = new Button(this)){
  357.       onServerClick = class::AbandonFilterButton_onServerClic;
  358.       left = 33;
  359.       top = 2;
  360.       width = 17;
  361.       text = "Abandon Filter";
  362.       pageno = 2;
  363.    }
  364.  
  365.  
  366.    with (this.QueryCriteriaHTML = new HTML(this)){
  367.       height = 1;
  368.       top = 4.5;
  369.       width = 50;
  370.       color = "maroon";
  371.       text = "<H2>Enter query criteria below</H2>";
  372.       pageno = 3;
  373.    }
  374.  
  375.  
  376.    with (this.ApplyQueryButton = new Button(this)){
  377.       onServerClick = class::ApplyQueryButton_onServerClick;
  378.       left = 12;
  379.       top = 2;
  380.       width = 17;
  381.       text = "Apply Query";
  382.       pageno = 3;
  383.    }
  384.  
  385.  
  386.    with (this.AbandonQueryButton = new Button(this)){
  387.       onServerClick = class::AbandonQueryButton_onServerClick;
  388.       left = 33;
  389.       top = 2;
  390.       width = 17;
  391.       text = "Abandon Query";
  392.       pageno = 3;
  393.    }
  394.  
  395.  
  396.    with (this.NavImage = new Image(this)){
  397.       onImageServerClick = {|nLeft, nTop|;if (nLeft >= 26*0 && nLeft < 26*1){form.rowset.first()}else if (nLeft >= 26*1 && nLeft < 26*2){if (!form.rowset.next(-1)) form.rowset.next();}else if (nLeft >= 26*2 && nLeft < 26*3){if (!form.rowset.next()) form.rowset.next(-1);}else{form.rowset.last()}};
  398.       height = 0.9583;
  399.       left = 12;
  400.       top = 2;
  401.       width = 13;
  402.       dataSource = "filename EXPINAVH.GIF";
  403.       alignment = 4;
  404.    }
  405.  
  406.  
  407.    with (this.OtherImage = new Image(this)){
  408.       onImageServerClick = class::OtherImage_OnImageServerClick;
  409.       height = 0.9583;
  410.       left = 28;
  411.       top = 2;
  412.       width = 22.75;
  413.       dataSource = "filename EXPIROWH.GIF";
  414.       alignment = 4;
  415.    }
  416.  
  417.    this.rowset = this.kbase1.rowset;
  418.  
  419.    function form_onServerLoad()
  420.    {
  421.       // Make sure the logged in user has access to the kbupdate form
  422.       if (!this.security.hasAccessTo("KBUPDATE")) {
  423.          _sys.forms.run("kberror.jfm");
  424.          this.close();
  425.          this.release();
  426.       }
  427.       //
  428.       // set the document id value
  429.       //
  430.       this.refreshID(this);
  431.       //
  432.       // set the field events for the product field
  433.       //
  434.       this.kbase1.rowset.fields["Product"].canChange = 
  435.          {| p |; var prod = this.parent.parent.parent.parent.product1 ;prod.rowset.applyLocate("ProdDescript = '" + escapeChar(p,"'") + "'") ;this.value = prod.rowset.fields["Product"].value; return false}
  436.       this.kbase1.rowset.fields["Product"].beforeGetValue = 
  437.          {; var prod = this.parent.parent.parent.parent.product1 ;prod.rowset.applyLocate('Product = ' + (this.value==null?0:this.value)) ;return (prod.rowset.endOfSet?"":prod.rowset.fields["ProdDescript"].value)};
  438.       this.ProductSelect.dataLink = this.kbase1.rowset.fields["Product"];
  439.       //
  440.       // set the field events for the category field
  441.       //
  442.       this.kbase1.rowset.fields["Category"].canChange = 
  443.          {| c |; var cat = this.parent.parent.parent.parent.category1 ;cat.rowset.applyLocate("CatDescript = '" + escapeChar(c,"'") + "'") ;this.value = cat.rowset.fields["Category"].value; return false}
  444.       this.kbase1.rowset.fields["Category"].beforeGetValue = 
  445.          {; var cat = this.parent.parent.parent.parent.category1 ;cat.rowset.applyLocate('Category = ' + (this.value==null?0:this.value)) ;return (cat.rowset.endOfSet?"":cat.rowset.fields["CatDescript"].value)};
  446.       this.CategorySelect.dataLink = this.kbase1.rowset.fields["Category"];
  447.       //
  448.       // set the field events for the reformat field
  449.       // (this is only necessary in the InterBase version of the Knowledge Base
  450.       //  since there are no boolean type fields in InterBase.)
  451.       //
  452.       this.kbase1.rowset.fields["Reformat"].canChange =
  453.          {| r |; this.value = (r ? 1 : 0); return false};
  454.       this.kbase1.rowset.fields["Reformat"].beforeGetValue = 
  455.          {; return this.parent.parent.endOfSet ? false : (this.value == 1)};
  456.       this.ReformatCheck.dataLink = this.kbase1.rowset.fields["Reformat"];
  457.    }
  458.  
  459.    function ApplyFilterButton_onServerClick()
  460.    {
  461.       if (this.form.rowset.state == STATE_FILTER) {
  462.          this.form.rowset.applyFilter();
  463.          this.form.rowset.first();
  464.       }
  465.       this.form.pageno = 1;
  466.    }
  467.  
  468.    function AbandonFilterButton_onServerClick()
  469.    {
  470.       this.form.rowset.abandon();
  471.       this.form.pageno = 1;
  472.    }
  473.  
  474.    function ApplyQueryButton_onServerClick()
  475.    {
  476.       if (this.form.rowset.state == STATE_LOCATE) {
  477.          if (!this.form.rowset.applyLocate())
  478.             this.form.rowset.first();
  479.       }
  480.       this.form.pageno = 1;
  481.    }
  482.  
  483.    function AbandonQueryButton_onServerClick()
  484.    {
  485.       this.form.rowset.abandon();
  486.       this.form.pageno = 1;
  487.    }
  488.  
  489.    function OtherImage_OnImageServerClick( nLeft, nTop )
  490.    {
  491.       try {
  492.          if (nLeft >= 26*0 && nLeft < 26*1)
  493.             form.rowset.beginAppend();
  494.          else if (nLeft >= 26*1 && nLeft < 26*2) {
  495.             if (!form.rowset.endOfSet) {
  496.                form.rowset.delete();
  497.                if (form.rowset.endOfSet)
  498.                   form.rowset.last();
  499.             }
  500.          }
  501.          else if (nLeft >= 26*2 && nLeft < 26*3) {
  502.             form.rowset.modified = true;
  503.             form.rowset.save();
  504.          }
  505.          else if (nLeft >= 26*3 && nLeft < 26*4) {
  506.             form.rowset.abandon();
  507.             if (form.rowset.endOfSet)
  508.                form.rowset.last();
  509.          }
  510.          else if (nLeft >= 26*4 && nLeft < 26*5)
  511.             form.rowset.beginEdit();
  512.          else if (nLeft >= 26*5 && nLeft < 26*6) { 
  513.             with(this) {
  514.                if (form.rowset.state==STATE_LOCATE) {
  515.                   form.rowset.applyLocate();
  516.                } 
  517.                else {
  518.                   form.rowset.beginLocate();
  519.                   form.pageno = 3;
  520.                }
  521.             }
  522.          }
  523.          else {
  524.             with(this) {
  525.                if (form.rowset.state==STATE_FILTER) {
  526.                   form.rowset.applyFilter();
  527.                } 
  528.                else {
  529.                   form.rowset.beginFilter();
  530.                   form.pageno = 2;
  531.                }
  532.             }
  533.          }
  534.          form.refreshID(form);
  535.       }
  536.       catch (DbException e) {
  537.          if (e.message.indexOf("TITLE") > 0)
  538.             var error = "The Title field must not be blank.<p>" + 
  539.                         e.message + " (" + e.code + ")<p>";
  540.          else
  541.             var error = e.message + " (" + e.code + ")<p>";
  542.          error += "<u>Server Errors:</u><p>";
  543.          for (var i = 0; i<e.errors.length; i++)
  544.             error += e.errors[i].message + " (" + e.errors[i].context + ")<br>";
  545.          _sys.scripts.load("kberror.jfm");
  546.          var f = new kberrorForm();
  547.          f.setError(error);
  548.          f.enableBackButton();
  549.          f.open();
  550.       }
  551.       catch (Exception e) {
  552.          _sys.scripts.load("kberror.jfm");
  553.          var f = new kberrorForm();
  554.          f.setError(e.message + " (" + e.code + ")");
  555.          f.enableBackButton();
  556.          f.open();
  557.       }
  558.    }
  559.  
  560.    function NaveImage_onServerClick (nLeft, nTop)
  561.    {
  562.       try {
  563.          if (this.form.rowset.modified) {
  564.             this.form.rowset.save();
  565.          }
  566.          if (nLeft >= 26*0 && nLeft < 26*1) {
  567.             form.rowset.first()
  568.          } 
  569.          else if (nLeft >= 26*1 && nLeft < 26*2) { 
  570.             if (!form.rowset.next(-1)) 
  571.                form.rowset.next();
  572.          }
  573.          else if (nLeft >= 26*2 && nLeft < 26*3) { 
  574.             if (!form.rowset.next()) 
  575.                form.rowset.next(-1);
  576.          }
  577.          else { 
  578.             form.rowset.last();
  579.          }
  580.       }
  581.       catch (DbException e) {
  582.          if (e.message.indexOf("TITLE") > 0)
  583.             var error = "The Title field must not be blank.<p>" + 
  584.                         e.message + " (" + e.code + ")<p>";
  585.          else
  586.             var error = e.message + " (" + e.code + ")<p>";
  587.          error += "<u>Server Errors:</u><p>";
  588.          for (var i = 0; i<e.errors.length; i++)
  589.             error += e.errors[i].message + " (" + e.errors[i].context + ")<br>";
  590.          _sys.scripts.load("kberror.jfm");
  591.          var f = new kberrorForm();
  592.          f.setError(error);
  593.          f.enableBackButton();
  594.          f.open();
  595.       }
  596.       catch (Exception e) {
  597.          _sys.scripts.load("kberror.jfm");
  598.          var f = new kberrorForm();
  599.          f.setError(e.message + " (" + e.code + ")");
  600.          f.enableBackButton();
  601.          f.open();
  602.       }
  603.    }
  604.  
  605.    function Rowset_onAppend()
  606.    {
  607.       var s = new StoredProc();
  608.       s.database = this.parent.database;
  609.       s.procedureName = "GET_DOC_ID";
  610.       s.active=true;
  611.       this.fields["DocumentID"].value = s.params["NEW_ID"].value;
  612.    }
  613.  
  614.    function Rowset_onNavigate()
  615.    {
  616.       this.parent.parent.refreshID(this.parent.parent);
  617.    }
  618.  
  619.    function refreshID( frm ) {
  620.       frm.DocumentIdFieldHTML.text = frm.DocumentIdFieldHTML.text;
  621.    }
  622.  
  623.    function link_to_home_page()
  624.    {
  625.       location.href="/ibapps/index.htm";
  626.    }
  627.  
  628.    function link_to_search_page()
  629.    {
  630.       location.href="/svr/intrasrv.isv?apps/kbase_ib/kbsearch.jfm";
  631.    }
  632.  
  633. }
  634.  
  635.