home *** CD-ROM | disk | FTP | other *** search
/ Thinkpad Essentials 1997 / cd1may97.iso / confpos2 / SBW.Z / relnotes.txt next >
Text File  |  1996-09-19  |  103KB  |  3,110 lines

  1.  
  2.                               
  3.        
  4.        
  5.        
  6.        
  7.        
  8.        
  9.        
  10.        
  11.        SalesBUILDER for Windows
  12.        
  13.        
  14.        
  15.        
  16.        
  17.        
  18.        
  19.        
  20.        
  21.        
  22.        
  23.        
  24.        Release Notes 4.1
  25.        
  26.        
  27.        Trilogy
  28.                               
  29.         ⌐ Copyright by Trilogy Development Group.
  30.                               
  31.                     All rights reserved.
  32.                               
  33.   This material is unpublished and Confidential Information
  34.      of Trilogy Development Group and is available under
  35.      license only.  This material is not to be copied or
  36.    disclosed without the prior written approval of Trilogy
  37.                      Development Group.
  38.                               
  39.                      September 19, 1996
  40.  
  41. ========================================================
  42. 4.1.13
  43. --------------------------------------------------------
  44. Release Note
  45.  
  46. System Diagram supports new instance shapes
  47.  
  48.  
  49. The following is a brief summary of the extensions that
  50. have been made to the system diagram (and how to enable
  51. them with CML). Note that all of these new attributes
  52. are of type "String" and should be declared:
  53. "String <attribute name> {preserve TRUE;}".
  54.  
  55. 1.  The system diagram is now able to draw not only
  56. rectangles, but also ellipses, rounded rectangles and
  57. icons.  To do this, declare a string attribute named
  58. "sb_Shape" and set it one of the following: ELLIPSE,
  59. ROUND_RECT, RECTANGLE, or ICON.  If you specify anything
  60. other than ICON, then the system diagram will draw the
  61. shape specified using the height and width parameters to
  62. determine the size of the shape drawn.  To draw a
  63. circle, just specify an ellipse with the same height and
  64. width.  If you specify ICON, you must also declare and
  65. set a string attribute named "sb_Icon".  This attribute
  66. must point to the full path name of an icon (.ICO) file
  67. which the system diagram will read in and draw.  The
  68. height and width parameters are used to specify the size
  69. of the box that encloses the icon.  This box must be at
  70. least as large as the icon, but can be bigger.  Note:
  71. Due to limitations in the 16-bit Windows API, only 16 by
  72. 16 icons are currently allowed on Win16.
  73.  
  74. 2.  You can now specify "settable" labels, label
  75. locations and label orientation.  To create a modifiable
  76. label declare and set the "sb_Label" to be the
  77. text you wish to decorate the instance shape in the
  78. diagram. Note that the value of sb_Label will override
  79. the value of the intrinsic attribute "label" if
  80. "sb_Label" is set. Note that "modifiable" labels
  81. not yet supported in SBW, but other system diagram based
  82. applications may make use of them via the system diagram
  83. API.
  84.  
  85. To determine the label's orientation, declare and set
  86. the attribute "sb_Label_Orientation". Set this to
  87. HORIZONTAL to have labels drawn horizontally and
  88. VERTICAL to have labels drawn vertically.  If this
  89. variable is not set or not declared, the system diagram
  90. will choose the orientation that best fits the component
  91. it's drawing on.
  92.  
  93. Declare and set the attribute "sb_Label_Location" to
  94. position the label within the instance at a location
  95. different from the default (the system diagram used to
  96. draw horizontal labels in the upper left hand corner of
  97. the component and draw vertical labels in the upper
  98. right hand corner of the component).  There are now nine
  99. possible settings for location: TOP_LEFT, MIDDLE_LEFT,
  100. BOTTOM_LEFT, TOP_CENTER, CENTER, BOTTOM_CENTER,
  101. TOP_RIGHT, MIDDLE_RIGHT, BOTTOM_RIGHT.  Note: These
  102. settings are absolute and do not depend on label
  103. orientation.
  104. --------------------------------------------------------
  105. Bug Fix
  106.  
  107. Entering small floats (< 0.1) into edit fields, can
  108. yield incorrect results
  109.  
  110.  
  111. History and Origins:
  112.  
  113. Typing "0.08" into an edit field, then tabbing away,
  114. will leave "8.00000001" in the field.
  115.  
  116. Resolution:
  117.  
  118. Small values were being represented in scientific
  119. notation (0.08 = "8.000000010000E-02"), with the
  120. exponent portion of the value truncated because of the
  121. field length.  These values now remain displayed in
  122. normal decimal notation.
  123.  
  124. ========================================================
  125. 4.1.9
  126. --------------------------------------------------------
  127. Bug Fix
  128.  
  129. Selection Set with attribute initialization results in
  130. crash
  131.  
  132.  
  133. History and Origins:
  134.  
  135. Form set included a set of Radio Buttons and a Dynamic
  136. Table.  The radio buttons initialized attributes that
  137. where used by constraints on the dynamic table.  These
  138. constraints controlled the availability of items on the
  139. dynamic table.  On the first selection of the radio
  140. button, the attribute would be set and the constraint on
  141. the dynamic table would function.  Any subsequent use of
  142. the the radio buttons would cause SBW to crash.  The
  143. problem is repeatable regardless of which radio button
  144. is first selected or which radio button was subsequently
  145. selected
  146.  
  147. Resolution:
  148.  
  149. This problem was due to impropoer handling of
  150. SelectionSet initialization list by the API call
  151. sb_SetSelectionStatus when the initialization list ID
  152. provided to the API call was NULL (a valid value,
  153. indicating that a null initialization list should
  154. replace the existing initialization list for the
  155. SelectionSet).  This problem has been fixed.
  156. --------------------------------------------------------
  157. Bug Fix
  158.  
  159. -0 in table bound from 0 to some positive number causes
  160. SBW to crash
  161.  
  162.  
  163. History and Origins:
  164.  
  165. If the legal values in a table are restriced between and
  166. a positive value, entering "-0" causes an error.
  167.  
  168. Resolution:
  169.  
  170. Typing -# in a SBW table no longer causes an error in
  171. SBW.
  172.  
  173. ========================================================
  174. 4.1.8
  175. --------------------------------------------------------
  176. New Feature
  177.  
  178. Allow dynamic tables to initialize attribute values
  179.  
  180.  
  181. Context and Motive for Implementation:
  182.  
  183. Allow dynamic tables to specify an attribute which is
  184. initialized by the values entered in the table.
  185.  
  186. Resolution:
  187.  
  188. Dynamic tables can now specify an attribute that will
  189. get initialized by the values entered in the table.  If
  190. an attribute is specified it changes the behavior of the
  191. requests made by the table.  Dynamic tables can be
  192. viewed as a set of component-quantity request pairs.  A
  193. table with N items has pairs C1 Q1 thru CNQN.  For each
  194. pair that has Qi greater than 0, the table would
  195. normally request Qi copies of the component Ci with
  196. sb_SelectionCount initialized to Qi .  When a dynamic
  197. table specifies an attribute to be initialized, the
  198. behavior of the requests changes to: for each pair that
  199. has Qi greater than 0, the table requests 1 component Ci
  200. with sb_SelectionCount initialized to Qi and the
  201. attribute specified initialized to Qi.  Other attribute
  202. initialization via the initialization list is
  203. unaffected.  A dynamic table that specifies an attribute
  204. to initialize uses the attributes sb_Max and sb_Min for
  205. range checking similar to the standard dynamic table.
  206. To change the quantity of items selected in the
  207. interface set the attribute specified to the desired
  208. value in the model.  This differs from standard dynamic
  209. tables where you set sb_SelectionCount to change the
  210. interface.
  211.  
  212. To specify one of these dynamic tables in the forms
  213. language, create a dynamic table description (the same
  214. as a regular dynamic table) and add the following to the
  215. definition: INITATTR <attrname>.
  216.  
  217. Form set:
  218.  
  219. // Definition of dynamic table that initializes an
  220. attribute.
  221.  
  222. frmBaseSystem: dlt1 {
  223.     FROM Item
  224.     DISPLAY description
  225.     CUMULATIVE
  226.     INITATTR itemAttr1 }
  227.  
  228. Product base:
  229.  
  230. Float sb_Min; 
  231. Float sb_Max; 
  232. Float sb_SelectionCount;
  233. Float itemAttr1;
  234.  
  235. productLine plAll "All product lines";
  236.  
  237. class Item : Component { 
  238. attributes:
  239.     sb_Min = 0;
  240.     sb_Max = 1;
  241.     sb_SelectionCount;
  242.     itemAttr1; }
  243.  
  244. component item1 : Item { 
  245. productLines: plAll;
  246. description: "Item 1"; }
  247.  
  248. component item2 : Item { 
  249. productLines: plAll;
  250. description: "Item 2"; 
  251. attributes:
  252.     sb_Max = 2; }
  253.  
  254. // Active constraints can be written against the class
  255. // Item to dynamically change the values of sb_Min,
  256. // sb_Max and itemAttr1 based on the values of itemAttr1
  257. // and sb_SelectionCount passed in the interface.
  258.  
  259.  
  260. Example use:
  261.  
  262. Item 1     Quantity: 0
  263.     Range: [0-1] 
  264. Item 2    Quantity: 2
  265.     Range: [0-2]
  266.  
  267. This would produce the following:
  268.  
  269. request 1 item2 where sb_Selection=2 and itemAttr1=2
  270.  
  271. --------------------------------------------------------
  272. Bug Fix
  273.  
  274. SBW Dynamic List Box within Iteration does not
  275. auto--re-populate the list as well as after "reset all"
  276.  
  277.  
  278. History and Origins:
  279.  
  280. SBW Dynamic List Box within Iteration does not
  281. auto--re-populate the list as well as after "reset all"
  282.  
  283. Resolution:
  284.  
  285. The Dynamic List Box control in SBW now auto-repopulates
  286. correctly.
  287.  
  288. ========================================================
  289. 4.1.6
  290. --------------------------------------------------------
  291. New Feature
  292.  
  293. SBW Implementation of Selection Sets Does Not Give
  294. Modelers a Way to Distinguish Selected from Selectable
  295. Candidates
  296.  
  297.  
  298. Context and Motive for Implementation:
  299.  
  300. The current SBW selection set implementation marks all
  301. the candidates in a selection set as selected when no
  302. candidates in the set have been selected.  This design
  303. was chosen presumably to avoid filtering out candidates
  304. which might require a selection in a set for which the
  305. user has not yet made a selection.  However, this
  306. approach makes it impossible for a model's active
  307. constraints to distinguish when a candidate has actually
  308. been selected versus when it is selectable.  The problem
  309. is particularly bad when the selection set contains a
  310. single candidate or when the selection set allows
  311. multiple choices.
  312.  
  313. Resolution:
  314.  
  315. There is a new flag that can be used in the FRS file.
  316. If you want all items in a selection set to be initially
  317. unselected, add the following line to your FRS file.
  318.  
  319.     SSAllInitiallySelected = 0
  320.  
  321. The default value for this is 1, which is the current
  322. behavior, and causes all items in a selection set to be
  323. initially selected.
  324.  
  325. --------------------------------------------------------
  326. New Feature
  327.  
  328. Option to not save configured system in quotesheet
  329.  
  330.  
  331. Context and Motive for Implementation:
  332.  
  333. Configured systems take up the largest portion of space
  334. for a saved quotesheet.  Customer would like an option
  335. to not save the configured system, and to regenerate it
  336. from the requirements when the quotesheet is reopened.
  337.  
  338. Customer is aware that this has potential data migration
  339. pitfalls (if the productbase or formset changes, the
  340. resulting configuration may be quite different), but is
  341. still interested in having the option.
  342.  
  343. Resolution:
  344.  
  345. SBW now has an option to disable saving systems in
  346. quotesheets.  To set the option add the following line
  347. in the sbw.ini file in the [Options] section.
  348.  
  349.     SaveSystemInQuoteSheet=0
  350.  
  351. The default value for this option is 1.  This affects
  352. saving quotesheets to the database and to flat files.
  353.  
  354. Note: By not saving out a system, you are relying on the
  355. saved requirements set to regenerate the system.  If the
  356. form set or the product base has changed, the system
  357. that is generated may be different than the system that
  358. was initially generated for the quotesheet.
  359.  
  360. --------------------------------------------------------
  361. New Feature
  362.  
  363. SBW Exploitation of Quantity Based Selection sets
  364.  
  365.  
  366. Context and Motive for Implementation:
  367.  
  368. SBW needs to exploit the quantity based selection set
  369. support provided by the engine in the June '96 release.
  370.  
  371. Resolution:
  372.  
  373. Support for quantity based selection sets has been added
  374. to SBW.  SBW now has a new control type dynamic table.
  375. See "Support for tables and list buttons to be dynamic
  376. using selection sets" for an explanation of how to add
  377. dynamic tables to a form set.
  378.  
  379. The following is an example form set and product base
  380. which shows how to use dynamic tables.  In the example
  381. there is a list box which contains cabinets (resource
  382. providers) and a table which contains various types of
  383. items (resource consumers).  Initially when no cabinet
  384. is selected, no items are enabled.  If you select a
  385. cabinet, then the model figures out how many of each
  386. item can now be selected.  For instance if you select
  387. the cabinet which provides 100 units, then you can
  388. select between 0 and 5 of an item that consumes 20
  389. units, and 0 to 3 of an item that consumes 30 units.
  390. The table enforces this range by providing a spin button
  391. for each entry.  The quantity requested can be
  392. incremented or decremented using the up and down arrows,
  393. or you can type directly in it.  After changing a
  394. quantity and leaving the cell, the table recalculates
  395. the minimum and maximum values and will update the
  396. ranges and enabled status for each entry.  All tables
  397. will use the attributes sb_Max, sb_Min and
  398. sb_SelectionCount to denote the maximum and minimum
  399. quantities of an item that can be selected, and the
  400. amount selected.  All of the attributes are floats
  401. though only integer values are valid.  sb_Max must be
  402. defined or else the range will default to 0-0 and no
  403. selections will be possible.  sb_SelectionCount is set
  404. by SBW to the quantity that is selected in the interface
  405. and can be set to another value by the model which will
  406. be reflected in the interface.
  407.  
  408. ******************************
  409. ***  form set (infile.frs) ***
  410. ******************************
  411.                     
  412.  
  413. // Note: There are a few important flags which need to
  414. // be set in the FRS file in order to enable quantity
  415. // based selection sets.  The two flags are
  416. // SSCapacityFiltering and SSProviderFiltering and both
  417. // need to be set to 1.
  418.  
  419. FORMSETID @1
  420. NEXTID @200
  421. MODULE @2 mod0011a.mod
  422.  
  423. SSExtraIterations = 10 
  424. SSMakeActiveSelected = 0
  425. SSMakeInactiveUnselected = 1 
  426. SSSelectedInAllInstances = 0 
  427. SSCapacityFiltering = 1 
  428. SSProviderFiltering = 1
  429. SSAllInitiallySelected = 0
  430.  
  431. *******************************
  432. *** form set (module01.mod) ***
  433. *******************************
  434.  
  435. Form @8 frmBaseSystem "Base System" 0, 20, 645, 538 {
  436.     ClassDynamicListBox @10 dlb1 "Cabinet" 0, 0,
  437.         235, 200
  438.     ClassDynamicTable @20 dlt1 "Items" 0, 0, 235,
  439.         200 }
  440.  
  441. Initial All_in_one frmBaseSystem
  442.  
  443. frmBaseSystem: dlb1 {
  444.     FROM Cabinet
  445.     DISPLAY description }
  446.  
  447. frmBaseSystem: dlt1 {
  448.     FROM Item
  449.     DISPLAY description
  450.     CUMULATIVE }
  451.  
  452. *********************************
  453. *** product base (infile.prs) ***
  454. *********************************
  455.  
  456.  
  457. //
  458. // Quantity-based filtering example
  459.  
  460. /////////////////// 
  461. // Product Lines // 
  462. ///////////////////
  463. productLine All_in_one "Example Productline";
  464.  
  465. //
  466. // Classes: 
  467. // Cabinet - members provide resource Cabinet_Space 
  468. // Item - members consume resource Cabinet_Space
  469. // 
  470. // Attributes:
  471. // cabinetSpaceRequired - defines how much Cabinet_Space 
  472. //     required by an Item 
  473. // sb_Max - computed number of a member of Item that can
  474. //     be added recorded here 
  475. // providerClass - class from which the resource allocator 
  476. //     gets providers 
  477. // providers - list of providers, accumulated by the 
  478. //     resource allocator
  479. // providersIdentified - flag indicating that the resource
  480. //    allocator has identified its resource providers 
  481. // sb_Min - computed value for the minimum number of a 
  482. //     selected resource provider (Cabinet) recorded here
  483. // sb_SelectionCount - number of occurrences of a component
  484. //     (Cabinet or Item) assumed in the configuration (set
  485. //    by the application)
  486.  
  487. Boolean providersIdentified;
  488.  
  489. Float cabinetSpaceRequired; 
  490. Float sb_Min; 
  491. Float sb_Max;
  492. Float sb_Min; 
  493. Float sb_SelectionCount;
  494.  
  495. class Component { 
  496. attributes:
  497.         sb_SelectionCount = 0;
  498.         sb_Min = 0; }
  499.  
  500. class Cabinet : Container { 
  501. attributes:
  502.         sb_Max = 1; }
  503.  
  504. class Item : Component { 
  505. attributes:
  506.         cabinetSpaceRequired;
  507.         sb_Max = 0; }
  508.  
  509. class System : Composite { }
  510.  
  511. Component_Class providerClass; 
  512. Multivalued Component_Instance providers;
  513.  
  514. //------------------------------------------------------
  515. // The abstract resource Space is defined, and allocator
  516. // constraints are applied to this abstract resource, in
  517. // order to specify allocator behavior for multiple
  518. // allocators.  
  519. // Note: only one allocator is used in this example.
  520. //------------------------------------------------------
  521. resource Space { 
  522. attributes:
  523.         providersIdentified = FALSE;
  524.         providerClass;
  525.         providers; }
  526.  
  527. resource Cabinet_Space : Space { 
  528. attributes:
  529.         providerClass = Cabinet; }
  530.  
  531.  
  532. component cabinet100 : Cabinet { 
  533. productLines:
  534.         All_in_one; 
  535. resource: Cabinet_Space 100; 
  536. values: sb_Max = 1; 
  537. description: "Super cabinet 100"; }
  538.  
  539. component cabinet160 : Cabinet { 
  540. productLines:
  541.         All_in_one; 
  542. resource: Cabinet_Space 160; 
  543. values: sb_Max = 1; 
  544. description: "Super-duper cabinet 160"; }
  545.  
  546. component item30 : Item { 
  547. productLines:
  548.         All_in_one; 
  549. values: cabinetSpaceRequired = 30;
  550. description: "Widget (30)"; }
  551.  
  552. component item60 : Item { 
  553. productLines:
  554.         All_in_one; 
  555. values: cabinetSpaceRequired = 60;
  556. description: "Gizmo (60)"; }
  557.  
  558. component item90 : Item { 
  559. productLines:
  560.         All_in_one; 
  561. values: cabinetSpaceRequired = 90;
  562. description: "Bracket (90)"; }
  563.  
  564. component item120 : Item { 
  565. productLines:
  566.         All_in_one; 
  567. values: cabinetSpaceRequired = 120;
  568. description: "Whizzo attachment (120)"; }
  569.  
  570. component item20 : Item { 
  571. productLines:
  572.         All_in_one; 
  573. values: cabinetSpaceRequired = 20;
  574. description: "Fly-wheel (20)"; }
  575.  
  576. component item40 : Item { 
  577. productLines:
  578.         All_in_one; 
  579. values: cabinetSpaceRequired = 40;
  580. description: "Whatzit (40)"; }
  581.  
  582. component item80 : Item { 
  583. productLines:
  584.         All_in_one; 
  585. values: cabinetSpaceRequired = 80;
  586. description: "Thinga-ma-bob (80)"; }
  587.  
  588. component item100 : Item { 
  589. productLines:
  590.         All_in_one; 
  591. values: cabinetSpaceRequired = 100;
  592. description: "Doo-hickey (100)"; }
  593.  
  594. constraint active; 
  595. constraint count; 
  596. constraint selection;
  597.  
  598. constraint installItem on Item {
  599.     requiresContainer(Cabinet,
  600.                       Cabinet_Space(
  601.             ?this.cabinetSpaceRequired *
  602.                             ?this.sb_SelectionCount,
  603.                 Consumed),
  604.                       ?cab); }
  605.  
  606. constraint alwaysSucceed on Component {
  607.     // The active constraint evaluation for Items will
  608.     // always succeed. In this example, we assume that
  609.     // the application will use the sb_Max
  610.     // attribute to determine that the associated
  611.     // candidate cannot be added
  612.     // to the configuration (i.e., is effectively
  613.     // inactive).  Alternatively,
  614.     // this active abstract constraint could 
  615.     // fail if sb_Max == 0, achieving
  616.     // the same effect by making the candidate inactive.
  617.     TRUE; }
  618.  
  619. constraint countInitialization on Item {
  620.     SETVALUE(?this.sb_Max, ?this.sb_SelectionCount);
  621.     count(?this);
  622.     ?this.sb_Max > 0; }
  623.  
  624. constraint itemActive on Item {
  625.     // Allocate required resources
  626.     requiresComponent(Cabinet,
  627.                       Cabinet_Space(?this.cabinetSpaceRequired,
  628.               Consumed),
  629.                       ?cab);
  630.  
  631.     // Update sb_Max, used by the interface to 
  632.     // display maximum number of
  633.     // instances of this component that can be added
  634.     // (i.e., upper bound of the range)
  635.     SETVALUE(?this.sb_Max, ?this.sb_Max + 1);
  636.  
  637.     // Recurse
  638.     count(?this); }
  639.  
  640. constrain class Item with installItem; 
  641. constrain class Item active with countInitialization; 
  642. constrain class Item count with 
  643.     (itemActive OR alwaysSucceed);
  644. constrain class Item selection with installItem;
  645.  
  646. // 
  647. // SelectionSet resource pool allocator constraints
  648. //
  649.  
  650. constraint findSpaceProviders on Space {
  651.     NOT ?this.providersIdentified;
  652.  
  653.     // Get the next provider
  654.     requiresComponent(?this.providerClass, ?provider,
  655.                   Existing);
  656.     NOT MEMBER(?provider, ?this.providers);
  657.     SETVALUE(?this.providers, 
  658.              ?this.providers + {?provider});
  659.  
  660.     // Compute the maximum resource provided
  661.     // by a single selection
  662.     SETVALUE(?this.resourceQuantity,
  663.              (?this.resourceQuantity <
  664.               (?provider.(?this.resourceType).resourceQuantity) *
  665.                ?provider.sb_SelectionCount)
  666.              ?
  667.                (?provider.(?this.resourceType).resourceQuantity
  668.                 * ?provider.sb_SelectionCount)
  669.              : ?this.resourceQuantity); }
  670.  
  671. constraint findSpaceProvidersTermination on Space {
  672.     NOT ?this.providersIdentified;
  673.  
  674.     SETVALUE(?this.providersIdentified, TRUE); }
  675.  
  676. constraint allocateSelectionRequest on Space {
  677.     ?this.providersIdentified;
  678.  
  679.     // Is resource available?
  680.     ?this.resourceAvailable >= ?this.resourceRequested;
  681.  
  682.     // Allocate the resource
  683.     SETVALUE(?this.resourceConsumed,
  684.              ?this.resourceConsumed + ?this.resourceRequested);
  685.     SETVALUE(?this.resourceAllocationComplete, TRUE); }
  686.  
  687. // // Cabinet filtering constraints //
  688.  
  689. constraint filterCabinet on Cabinet_Space {
  690.     // SelectionSet resource pool/allocator filtering
  691.     // Cabinet selections.
  692.     // These conditions are needed if the Cabinet
  693.     // SelectionSet is non-cumulative,
  694.     // since a single selection must provide the
  695.     // requried resource.
  696.  
  697.     // Does the selected component provide 
  698.     // sufficient resource?
  699.     (parent(?this,
  700.             Cabinet).Cabinet_Space.resourceQuantity
  701.        * parent(?this, Cabinet).sb_SelectionCount)
  702.      >= (?this.resourceConsumed + ?this.resourceShared);
  703.  
  704.     // Compute the minimum selection count that 
  705.     // will satisfy the resource requirement
  706.     SETVALUE(parent(?this,
  707.                     Cabinet).sb_MinSelectionCount,
  708.              ceil((?this.resourceConsumed +
  709.                    ?this.resourceShared)
  710.                   / parent(?this,
  711.                    Cabinet).Cabinet_Space.resourceQuantity)); }
  712.  
  713. ********************************************************
  714.  
  715. --------------------------------------------------------
  716. Bug Fix
  717.  
  718. SBW does not filter selection sets correctly on initial
  719. view of forms
  720.  
  721.  
  722. History and Origins:
  723.  
  724. On start up and viewing the form set for a new system,
  725. the SBW does not filter the selection sets choices
  726. properly.  All choices are sometimes present and show
  727. selected, even though they are not valid choices.  If a
  728. user changes the selection, the set is filtered
  729. properly.  The dynamic list box does not allow use to
  730. make an invalid choice however the it is confusing to
  731. see all choices and then they disappear if the user
  732. tries to select an invalid choice.
  733.  
  734. Resolution:
  735.  
  736. SBW did not properly filter selection sets when there
  737. were default selections.  Now SBW waits until all
  738. dynamic controls have been set up and assigned default
  739. values before it performs it's first filter.  This way
  740. the default selections cause filtering to take place.
  741.  
  742. --------------------------------------------------------
  743. New Feature
  744.  
  745. Support for attribute initialization on components
  746. requested in a selectionSet
  747.  
  748.  
  749. Context and Motive for Implementation:
  750.  
  751. Add support for using attribute initialization on
  752. components requested in a selection set.  This feature
  753. should be added to FormBUILDER as well.
  754.  
  755. Resolution:
  756.  
  757. Attributes set by controls can now initialize components
  758. that are part of dynamic controls at the point when the
  759. control is changed instead of waiting until
  760. configuration time.  In order to use this functionality
  761. the model and form set need the following:
  762.  
  763.     - A dynamic control which is initialized by an
  764.       attribute list.  
  765.     - A control which initializes an attribute on
  766.       that attribute list.
  767.     - A model which defines an active constraint
  768.       which uses the attribute that was initialized.
  769.  
  770. In the following example, a set of radio buttons control
  771. the enabled status of the items in a dynamic list box.
  772. The radio buttons initialize the attribute
  773. fRequestedType on the list alBoxes.  This list in turn
  774. initializes the dynamic list box frmBoxes: dlbBoxes.  In
  775. the model, the class Box has an active constraint which
  776. checks the attribute fRequestedType against fType,
  777. another attribute defined on the class Box.  The end
  778. effect on the form set is:
  779.  
  780.     - If item 1 is selected all items are enabled.  
  781.     - If item 2 is selected only items 2 and 3 are 
  782.       enabled.  
  783.     - If item 3 is selected only item 3 is enabled.
  784.  
  785. *********************************
  786. *** product base (infile.prs) ***
  787. ********************************* 
  788.  
  789. String sColor; 
  790. Float fType; 
  791. Float fRequestedType; 
  792. Float sb_DefaultRequestPriority; 
  793. Float sb_DefaultRequestQuantity;
  794.  
  795. class Component {
  796.     attributes:
  797.         sb_DefaultRequestPriority = -1;
  798.         sb_DefaultRequestQuantity; }
  799.  
  800. class Box : Component {
  801.     attributes:
  802.         sColor;
  803.         fType;
  804.         fRequestedType; }
  805.  
  806. productLine plBox "Boxes";
  807.  
  808. component box0001 : Box {
  809.     productLines:
  810.         plBox;
  811.     values:
  812.         fType = 1;
  813.     description:
  814.         "Box 0001-" + ?this.sColor; }
  815.  
  816. component box0002 : Box {
  817.     productLines:
  818.         plBox;
  819.     values:
  820.         fType = 2;
  821.     description:
  822.         "Box 0002-" + ?this.sColor; }
  823.  
  824. component box0003 : Box {
  825.     productLines:
  826.         plBox;
  827.     values:
  828.         fType = 3;
  829.     description:
  830.         "Box 0003-" + ?this.sColor; }
  831.  
  832. constraint active;
  833.  
  834. constraint activeBox on Box
  835. doLookAhead : TRUE; 
  836. {
  837.     ?this.fType >= ?this.fRequestedType; 
  838. }
  839.  
  840. constrain class Box active with activeBox;
  841.  
  842. *****************************
  843. *** form set (infile.frs) ***
  844. *****************************
  845.  
  846. FORMSETID @1 
  847. NEXTID @22 
  848. MODULE @2 module01.frm
  849.  
  850. SSExtraIterations = 10 
  851. SSMakeActiveSelected = 0
  852. SSMakeInactiveUnselected = 1 
  853. SSSelectedInAllInstances = 0 
  854. SSCapacityFiltering = 0 
  855. SSProviderFiltering = 0
  856.  
  857. ********************************
  858. *** form file (module01.frm) ***
  859. ********************************
  860.  
  861. Form @3 frmBoxes "Boxes" 0, 20, 544, 327 {
  862.     ClassDynamicListBox @4 dlbBoxes "Boxes" 300, 30, 193, 224
  863.     ListButton @5 lbColor "Color" 35, 45, 230, 100
  864.     StaticField @6 StaticField_1 "Color" 35, 20, 230, 25
  865.     RadioButton @10 rbType1 "Type 1" 35, 100, 141, 29 0
  866.     RadioButton @11 rbType2 "Type 2" 35, 150, 141, 29 0
  867.     RadioButton @12 rbType3 "Type 3" 35, 195, 141, 29 0
  868.     ATTRIBUTELIST alBoxes }
  869.  
  870.  
  871. Initial plBox frmBoxes
  872.  
  873.  
  874. frmBoxes: dlbBoxes {
  875.     FROM Box
  876.     DISPLAY description
  877.     ORDER BY description
  878.     INITIALIZEDBY alBoxes }
  879.  
  880. frmBoxes: lbColor {
  881.     @17 "Red" DEFAULT {INITIALIZES alBoxes sColor "Red" }
  882.     @18 "Blue" {INITIALIZES alBoxes sColor "Blue" }
  883.     @19 "Green" {INITIALIZES alBoxes sColor "Green" } }
  884.  
  885. frmBoxes: rbType1 @20 { 
  886. INITIALIZES alBoxes fRequestedType "1" }
  887.  
  888. frmBoxes: rbType2 @21 DEFAULT { 
  889. INITIALIZES alBoxes fRequestedType "2" }
  890.  
  891. frmBoxes: rbType3 @22 { 
  892. INITIALIZES alBoxes fRequestedType "3" }
  893.  
  894.  
  895. ********************************************************
  896.  
  897. ========================================================
  898. 4.1.5
  899. --------------------------------------------------------
  900. New Feature
  901.  
  902. Ability to run with uncompiled PB/forms files
  903.  
  904.  
  905. Context and Motive for Implementation:
  906.  
  907. For customers who are using SBW exclusively, it would be
  908. helpful to model development efforts to be able to run
  909. SBW against uncompiled productBase and form set files
  910. (as is possible in PSB).  Having to recompile each time
  911. they make a change to the model can eat up a big chunk
  912. of a developers time.
  913.  
  914. It might be necessary to disable some functionality
  915. (such as saving quotesheets), as is the case in PSB when
  916. running against source files.
  917.  
  918.  
  919. Resolution:
  920.  
  921. SBW can now load uncompiled product bases and form sets.
  922. To access these features use the following command line
  923. options:
  924.  
  925. -frmlf    Load an uncompiled form set.  SBW will look for
  926.     the file infile.frs in the model directory.  Any
  927.     modules specified in infile.frs must be
  928.     qualified with a path or reside in the SBW
  929.     application directory or SBW will not be able to
  930.     load them.
  931.  
  932. -pbli     Load an uncompiled product base.  SBW will look
  933.     for the file infile.prs in the model directory.
  934.  
  935. -pblf     Load an uncompiled product base.  SBW will look
  936.     for the file infile.prb in the model directory.
  937.     This file should contain the name of 1 or more
  938.     CML files.  The name of these files should
  939.     either be fully qualified with a path or reside
  940.     in the same directory as infile.prb.
  941.  
  942. Note: This is intended as a feature to be used only for
  943. development.  This should NOT be used as a deployment
  944. solution for the following reasons: 
  945.  
  946. 1) it is not as memory efficient as loading compiled
  947.    product bases and form sets, 
  948.  
  949. 2) it is not fully DBCS compliant, 
  950.  
  951. 3) various features are not available when running in
  952.    this mode (eg. client server).
  953.  
  954. --------------------------------------------------------
  955.  
  956. Bug Fix
  957.  
  958. SBW commandline (except -lq) is not double-byte enabled
  959.  
  960.  
  961. History and Origins:
  962.  
  963. The code for command line parsing is not DB-enabled.
  964.  
  965. Resolution:
  966.  
  967. SBW now has the following commandline options:
  968.  
  969. -NLS_LQ - Loads the quotesheet with the description set
  970. in the [Options] NLS_LoadQuoteSheetDesc ini file
  971. setting.  -NLS_U - Uses the user name set in the
  972. [Options] NLS_User ini file setting.  -NLS_P - Assumes
  973. the rest of the commandline is the password.  -NLS_D -
  974. Sets the model directory to the directory set in the
  975. [Options] NLS_ModelDir ini file setting.  -NLS_SD -Sets
  976. the server model directory to the directory set in the
  977. [Options] NLS_HostModelDir ini file setting.
  978.  
  979. The old ones work as before with the following changes:
  980.  
  981. -lq is now -LQ for consistency
  982.  
  983. All options can now be quoted strings to allow for
  984. spaces.
  985.  
  986. --------------------------------------------------------
  987. New Feature
  988.  
  989. Simplify SBW Attach Table Installation
  990.  
  991.  
  992. Context and Motive for Implementation:
  993.  
  994. The existing installation process is too complicated.
  995. You need to edit several macros if your host is not sbw
  996. and your login is not trilogy/trilogy1.  It also
  997. requires Microsoft Access which is a pretty significant
  998. prerequisite.
  999.  
  1000. Resolution:
  1001.  
  1002. The attach table process works like this:
  1003.  
  1004. 1.  You specify the data source name for your host
  1005. database in the [Database] DataSourceName ini file
  1006. setting.
  1007.  
  1008. 2.  Upon running SBW for the first time, if you have set
  1009. the [Database] ResetAttachTables = 1, SBW will attempt
  1010. to attach each of its tables to the specified datasource
  1011. using your login and password.  It will prompt you if
  1012. it is about to delete a local table so you don't
  1013. accidentally lose your data.
  1014.  
  1015. 3.  If the attach process completes successfully, SBW
  1016. sets ResetAttachTables = 0 so the process is not
  1017. repeated.
  1018.  
  1019. ========================================================
  1020. 4.1.4
  1021. --------------------------------------------------------
  1022. New Feature
  1023.  
  1024. Permit configured systems to be exported from SBW
  1025.  
  1026.  
  1027. Context and Motive for Implementation:
  1028.  
  1029. Permit configured systems to be exported from SBW
  1030. menu. Add a "Current System" option to the "File|Export"
  1031. menu. When selected, user is presented with Save Dialog
  1032. with which current system can be saved to a file. As
  1033. many customers will not want to expose such
  1034. functionality, this feature should only be enabled when
  1035. a preference (AllowSystemExport in [Options]) is set to
  1036. a non zero value (with the default value set to 0).
  1037.  
  1038. Resolution:
  1039.  
  1040. The feature has been implemented as suggested.
  1041.  
  1042. --------------------------------------------------------
  1043. New Feature
  1044.  
  1045. Command-line option to load QuoteSheet
  1046.  
  1047.  
  1048. Context and Motive for Implementation:
  1049.  
  1050. A "load quotesheet" command-line option is needed.
  1051.  
  1052. Resolution:
  1053.  
  1054. The loadQuoteSheet command-line option (-lq) works as
  1055. follows:
  1056.  
  1057. If -lq is specified on the command line, SBW looks in
  1058. the sbw.ini file for the QuoteSheet description under
  1059. the [Options] LoadQuoteSheetDesc setting.This is done so
  1060. that QuoteSheet descriptions that contain double-byte
  1061. characters can be parsed and loaded properly.
  1062.  
  1063. ========================================================
  1064. 4.1.3
  1065. --------------------------------------------------------
  1066. New Feature
  1067.  
  1068. Support for tables and list buttons to be dynamic using
  1069. selection sets
  1070.  
  1071.  
  1072. Context and Motive for Implementation:
  1073.  
  1074. Add support for tables and list buttons to be dynamic
  1075. using selection sets.
  1076.  
  1077. Resolution:
  1078.  
  1079. SBW now supports dynamic list buttons and dynamic
  1080. tables.  To add a dynamic list button, in the form
  1081. definition you need to add the following line.
  1082.  
  1083. ClassDynamicListButton <widgetName> <left, top, width,
  1084. height>
  1085.  
  1086. The control definition of ClassDynamicListButton is
  1087. similar to that of a ClassDynamicListBox.  It can handle
  1088. all of the same elements except for the HIDEDISABLED
  1089. flag.  For dynamic list buttons, this flag is always set
  1090. meaning that you never see disabled items in the list
  1091. button.  The definition syntax is:
  1092.  
  1093. <formName> : <widgetName> [ (<priority>)] [MANDATORY] {
  1094.     FROM <className>
  1095.     [WHERE "<whereClause>"]
  1096.     [DISPLAY <attributeName>]
  1097.     [WITH DEFAULT]
  1098.     [INITIALIZEDBY <attributeListName>] }
  1099.  
  1100. See the definition of ClassDynamicListBox for a
  1101. description of the various fields.
  1102.  
  1103. To add a dynamic table, in the form definition you need
  1104. to add the following line:
  1105.  
  1106. ClassDynamicTable <widgetName> <left, top, width,
  1107. height>
  1108.  
  1109. The control definition of the dynamic table is identical
  1110. to the dynamic list box.  In addition, dynamic tables
  1111. can support range checking by using the model to define
  1112. minimum and maximum quantities.  See the issue on
  1113. Quantity-based filtering in selection sets and SBW
  1114. Exploitation of Quantity Based Selection sets for a more
  1115. thorough description of how to define a model to take
  1116. advantage of dynamic tables.
  1117.  
  1118. ========================================================
  1119. 4.1.1
  1120. --------------------------------------------------------
  1121. Release Note
  1122.  
  1123. New Customer Browser functionality
  1124.  
  1125.  
  1126. The customer browser in SBW now contains the same
  1127. functionality as the quotesheet browser.  The customer
  1128. browser is user-customizable in the following ways:
  1129.  
  1130. (1) Any of the customer fields can be added, deleted and
  1131. resized.  Click the "Change View" button to bring up a
  1132. dialog to add or delete fields from the browser.  The
  1133. size of columns in the spreadsheet can be changed by
  1134. dragging the border of the column header (similar to
  1135. other spreadsheets).  (2) The size and location of the
  1136. browser window can be changed.  (3) Searching and
  1137. sorting can be keyed by any field displayed in the
  1138. spreadsheet.  Fields to search and sort on are selected
  1139. from a drop-down list.
  1140.  
  1141. Changes made by the user to the browser are maintained
  1142. across SBW sessions.
  1143.  
  1144. The initial customer find functionality remains the same
  1145. as before.
  1146.  
  1147. --------------------------------------------------------
  1148. Bug Fix
  1149.  
  1150. Iterations Not Correctly Restored when Importing
  1151. a Saved Request File
  1152.  
  1153.  
  1154. History and Origins:
  1155.  
  1156. If a request file (.req) is saved to record the
  1157. requirements for a configuration and then reloaded and
  1158. reconfigured, the new configuration has a quoted price
  1159. that is significantly higher than the quoted price for
  1160. the original configuration.
  1161.  
  1162. Resolution:
  1163.  
  1164. Default values from tables, list boxes, and list
  1165. buttons from forms with default product lines, were
  1166. getting incorrectly added to iterations when loading a
  1167. request file.  Iterations were not being properly
  1168. restored, and default requests were being added to the
  1169. iterations, incorrectly resulting in additional
  1170. components in the configuration, which caused the
  1171. quoted price increase.
  1172.  
  1173. ========================================================
  1174. 4.0.5
  1175. --------------------------------------------------------
  1176. Bug Fix
  1177.  
  1178. Not all of a large selection set is displayed in a
  1179. dynamic listbox
  1180.  
  1181.  
  1182. History and Origins:
  1183.  
  1184. For a selection set with a large number of items
  1185. (100-200, depending on the length of the descriptions),
  1186. not all of the items are displayed in the dynamic
  1187. listbox.
  1188.  
  1189. Resolution:
  1190.  
  1191. All items in a selection set now display properly in
  1192. ClassDynamicListBoxes.
  1193.  
  1194. --------------------------------------------------------
  1195. Bug Fix
  1196.  
  1197. Assertion Failure with empty Dynamic List Boxes
  1198.  
  1199.  
  1200. History and Origins:
  1201.  
  1202. If a dynamic list box control query returns an empty
  1203. list, this results in an assertion failed error and
  1204. crashes SBW.
  1205.  
  1206. Resolution:
  1207.  
  1208. ClassDynamicListBoxes now properly handle the case of an
  1209. empty selection set (by displaying nothing in the
  1210. listbox).
  1211.  
  1212. ========================================================
  1213. 4.0.4
  1214. --------------------------------------------------------
  1215. Bug Fix
  1216.  
  1217. Crash if quotesheet is minimized with Configurations tab
  1218. displayed
  1219.  
  1220.  
  1221. History and Origins:
  1222.  
  1223. Customer has several custom reports created in
  1224. sbreport.dll and available in the Report menu choice. If
  1225. a report is opened and then closed from the
  1226. Configurations tab, then the Config window is resized
  1227. and truncated (cannot see scale listbutton and 3D
  1228. checkbox at bottom right). If the user minimizes the
  1229. quotesheet, then SBW generates the error message
  1230. "Invalid Propery Value" and exits.
  1231.  
  1232. Resolution:
  1233.  
  1234. SBW would crash if the quotesheet was minimized while
  1235. the Configurations tab was displayed.  This had nothing
  1236. to do with reports per se.
  1237.  
  1238. The problem has been fixed.
  1239.  
  1240. --------------------------------------------------------
  1241. Bug Fix
  1242.  
  1243. Values for Address3 and Zip are switched when added to
  1244. QuoteSheet Browser
  1245.  
  1246.  
  1247. History and Origins:
  1248.  
  1249. If you add the Address3 and Zip fields to the Quote
  1250. Browser in SBW, then the Address3 value will appear
  1251. under the Zip field and the Zip value will appear under
  1252. the Address3 field.  This happens in SBW 2.0.7 and in
  1253. the GA release.
  1254.  
  1255. Resolution:
  1256.  
  1257. Address3 and Zip now display properly in the QuoteSheet
  1258. Browser.
  1259.  
  1260. ------------------------------------------------------------
  1261.  
  1262.  
  1263.        Release Notes 4.0.0
  1264.  
  1265.  
  1266. ------------------------------------------------------------
  1267.   Note
  1268.  
  1269.   Known Limitations in 4.0
  1270.  
  1271.   
  1272.   Resolution: 
  1273.  
  1274.      When running in client/server mode (engine running on a
  1275.      server),
  1276.  
  1277.      a. OS/2 server is sensitive to buffer sizes when
  1278.      transfferring files between client and server. The APIs
  1279.      sb_GetFileBug and sb_PutFileBuf take as an argument a
  1280.      maximum buffer size. For some values of buffer size,
  1281.      these operations succeed, for others, they fail with an
  1282.      invalid bound RPC error.  These operations are invoked
  1283.      when a quotesheet is saved/loaded.
  1284.  
  1285.      b. Some SBW operations are slow when running in
  1286.      client/server mode.  They are: browsing the productline
  1287.      tree, expanding product categories in the Parts
  1288.      Library, and viewing Additional Components or the
  1289.      Failed Requests lists when on the configurations tab.
  1290.  
  1291.      c. When performing client side tracing
  1292.      (e.g. sbHost=<hostname>:trace), viewing a system
  1293.      diagram can cause a crash.
  1294. ------------------------------------------------------------
  1295.   Note
  1296.  
  1297.   Floating point error in BC30RTL.DLL on Windows 95
  1298.  
  1299.  
  1300.   Resolution:
  1301.  
  1302.      Some users have reported encountering the error:
  1303.  
  1304.      Floating point error: Square root of negative number
  1305.  
  1306.      in BC30RTL.DLL while running Portable SalesBUILDER or
  1307.      SalesBUILDER for Windows on Windows 95, on particular
  1308.      machines.  The most common situation in which this has
  1309.      been reported is loading a ProductBase, but it has also
  1310.      been reported in connection with compiling forms and
  1311.      navigating forms.
  1312.  
  1313.      This problem has been very difficult to reproduce and
  1314.      isolate.  As a result, no reliable workaround has been
  1315.      discovered.  Trilogy encourages customers to report
  1316.      incidents of this problem (even though it is already
  1317.      known), to help us track down the cause.
  1318.  
  1319.      In one case, the problem was correlated with running
  1320.      "System Agent" in the background; however, this program
  1321.      was not even present in other cases.
  1322. ------------------------------------------------------------
  1323.   Note
  1324.  
  1325.   Using SBW/QB with Attached Tables
  1326.  
  1327.  
  1328.   Resolution:
  1329.  
  1330.      To connect to Oracle using attatched table you need to:
  1331.  
  1332.      ODBCDIR = \\roadrunner\app\pcinstal\odbc\oracle
  1333.  
  1334.      0. Install SBW or SBW/QB
  1335.      1. Install Sqlnet.
  1336.      2. Install ODBC driver for Oracle.
  1337.      3. Create a Datasource named SBW if you don't have
  1338.     Microsoft Access.
  1339.      4. Modify sbw.ini
  1340.  
  1341.  
  1342.      1. Installing Sqlnet.
  1343.       a. Goto the Oracle Installation Directory
  1344.       b. run ORAINST.EXE
  1345.       c. Install the following products;
  1346.      1. SQL*NET TCP/IP 1.1.7.10.4
  1347.      2. SQL*Plus 3.1.2.2.6
  1348.       d. Check connectivity by using sqlplus:
  1349.      e.g. plus31 user/password@T:149.74.255.255:machine
  1350.       e. If you get an error message with a number you will
  1351.      need to either login to a machine which has
  1352.      Oracle error messages onlie or get the Error codes manual.
  1353.      f. Useful locations:
  1354.     C:\ORAWIN is the default installation dir.
  1355.     WINDIR\ORACLE.INI is where the oracle ini file is,   
  1356.  
  1357.      2. Installing the ODBC driver for Oracle.
  1358.       a. Got to Oracle ODBC install dir
  1359.       b. Run SETUP.EXE
  1360.       c. Follow instructions to set up the ODBC driver.
  1361.  
  1362.      3. Creating a datasource named SBW.
  1363.       a. Run the ODBC manager: ODBCADM.EXE
  1364.       b. Add Driver oracle7.
  1365.  
  1366.      4. Modifying SBW.INI
  1367.       a. In SBW.INI change the DatabaseName ini setting in
  1368.      the Database Section to SBDBAC20.MDB
  1369.       b. The login should exist in the sb_salespersons table
  1370.      in Oracle.
  1371.  
  1372.      How to get error messages:
  1373.      e.g. 
  1374.      telnet machine
  1375.      user: oracle
  1376.      password: oracle
  1377.      type: oerr errnum
  1378.      and follow instructions to correct the error
  1379.      E.g. if you get the error 1056
  1380.      Type: oerr ORA 1056
  1381.  
  1382.       c. Connect string is t:149.74.255.255:machine (where
  1383.      machine is the correct machine name and the IP address
  1384.      is the IP address of the Oracle server).
  1385. ------------------------------------------------------------
  1386.   New Feature
  1387.  
  1388.   Configure Menu Item
  1389.  
  1390.  
  1391.   Context or Motive for Implementation:
  1392.  
  1393.      A menu item is desired that will perform the configure
  1394.      command.  This item will provide an easily-accessible,
  1395.      consistent place for configuration to be triggered,
  1396.      rather than finding a Configure button in the form set.
  1397.  
  1398.   Resolution:
  1399.  
  1400.      While the Requirements Tab is active, there is a System
  1401.      menu which contains a Configure menu item.
  1402. ------------------------------------------------------------
  1403.  
  1404.  
  1405.        Release Notes 2.1.13
  1406.  
  1407.  
  1408. ------------------------------------------------------------
  1409.   Bug Fix
  1410.  
  1411.   MANDATORY Enabled when Control is Disabled
  1412.  
  1413.  
  1414.   History and Origins:
  1415.  
  1416.      A control on a form has been denoted as Mandatory.  If
  1417.      the control is disabled by another control using 
  1418.      Control Modifications, the error message appears at
  1419.      run-time stating that the user must select an entry
  1420.      from the Mandatory control.
  1421.  
  1422.   Resolution:
  1423.  
  1424.      All actions on disabled controls are ignored, including
  1425.      MANDATORY and requests.
  1426. ------------------------------------------------------------
  1427.  
  1428.  
  1429.        Release Notes 2.1.12
  1430.  
  1431.  
  1432. ------------------------------------------------------------
  1433.   New Feature
  1434.  
  1435.   Version Checking Enabled by Default
  1436.  
  1437.  
  1438.   Context or Motive for Implementation:
  1439.  
  1440.      To help protect users from possible DLL and VBX
  1441.      conflicts, SalesBUILDER for Windows should have version
  1442.      checking turned on by default in the SBW.INI.
  1443.  
  1444.   Resolution:
  1445.  
  1446.      By default, previous releases of SBW did not perfom
  1447.      version checks on dependent modules (DLLs and VBXs)
  1448.      when the SBW.INI setting VersionInfoFile in the
  1449.      [Options] section was unset.  (If VersionInfoFile was
  1450.      set to a filename, then the results of the module check
  1451.      were written to that filename.)  Starting with this
  1452.      release, SalesBUILDER for Windows will always check for
  1453.      the existence and the required version of all its
  1454.      dependent modules by default.  If the VersionInfoFile
  1455.      setting is set to a filename, then the results will be
  1456.      logged, otherwise no results will be saved.  For some
  1457.      critical modules (the engine DLL, for example) error
  1458.      dialogs will be used to report the attempt to load
  1459.      modules whose version numbers do not match those
  1460.      expected by the application.  The user will be
  1461.      encouraged, but not required, to exit SalesBUILDER for
  1462.      Windows at this point.
  1463. ------------------------------------------------------------
  1464.  
  1465.  
  1466.        Release Notes 2.1.11
  1467.  
  1468.  
  1469. ------------------------------------------------------------
  1470.   Bug Fix
  1471.  
  1472.   Failure in Attached Table Operation Causes Crash
  1473.  
  1474.  
  1475.   History and Origins:
  1476.  
  1477.      SalesBUILDER for Windows crashes after displaying an
  1478.      ODBC error dialog.  The error is caused by a save
  1479.      failure in an attached table.  This problem can occur
  1480.      if the database server runs out of disk space.
  1481.  
  1482.   Resolution:
  1483.  
  1484.      Most database operations now have primitive error
  1485.      handling, however the database may still be corrupted
  1486.      if an error occurs in the middle of an operation.
  1487.      SalesBUILDER for Windows now handles those errors
  1488.      gracefully, however data corruption may still occur
  1489.      if a database operation fails on any database,
  1490.      including the attached tables.
  1491. ------------------------------------------------------------
  1492.   Bug Fix
  1493.  
  1494.   Show Requirements Summary Option Not Working
  1495.  
  1496.  
  1497.   History and Origins:
  1498.  
  1499.      The ShowRequirements option available either through
  1500.      the SBW.INI or via the  View | Options, Display tab
  1501.      Show Requirements Summary by Default does not work.
  1502.      The application behaves the same with the option
  1503.      checked or not checked.  Desired behavior is when
  1504.      option is checked, the Road Map is display with system
  1505.      requirements.
  1506.  
  1507.   Resolution:
  1508.  
  1509.      When the ShowSummary option is set, the Requirements
  1510.      Summary window is shown the first time the user goes to
  1511.      the Requirements tab.
  1512. ------------------------------------------------------------
  1513.   Bug Fix
  1514.  
  1515.   Changing User ID or Password in Client/Server Mode
  1516.   Modifies Incorrect Database
  1517.  
  1518.  
  1519.   History and Origins:
  1520.  
  1521.      If the user ID or password is changed on the options
  1522.      menu while running client/server mode, only the local
  1523.      database will change.  The net result is that you
  1524.      cannot log in to SalesBUILDER for Windows without
  1525.      either A) editing your SBDB.MDB directly with Microsoft
  1526.      Access to change the user ID and password field to
  1527.      match a valid account on the server or B) reinstalling
  1528.      SalesBUILDER for Windows.  Local userid/password
  1529.      checking should be disabled when running client/server
  1530.      mode or the ability to modify the user ID and password
  1531.      should be disabled.
  1532.  
  1533.   Resolution:
  1534.  
  1535.      When SBW is running in client/server mode, it no longer
  1536.      logs into the local database.  The user ID and
  1537.      password are only used for the connection to the
  1538.      server.  The preference dialog for users has also been
  1539.      changed to disable editing of the user ID and password
  1540.      when running in client/server mode because it had no
  1541.      effect on the server.
  1542. ------------------------------------------------------------
  1543.  
  1544.  
  1545.        Release Notes 2.1.10
  1546.  
  1547.  
  1548. ------------------------------------------------------------
  1549.   Note
  1550.  
  1551.   New System Diagram DLL (SBDIAG.DLL)
  1552.  
  1553.  
  1554.   Resolution:
  1555.  
  1556.      The System Diagram DLL (SBDIAG.DLL) has been integrated
  1557.      into SBW.  For the most part, the display of a system
  1558.      diagram should not look any different than prior to
  1559.      this integration--the responsibility for the display
  1560.      has just been shifted from SBW.EXE to SBDIAG.DLL. The
  1561.      differences fall into 5 cateories: (1) Configuration
  1562.      Tab layout differences, (2) Level of interactivity, (3)
  1563.      the Parts Library, (4) the popup system diagram menu,
  1564.      and (5) some new SBW.INI settings.
  1565.  
  1566.      1.  Configuration Tab layout.  
  1567.  
  1568.      The tab is divided into 3 layers: on top are the system
  1569.      icons, in the middle is the drawing area, and along the
  1570.      bottom is the system diagram status bar.  The status
  1571.      bar contents track the mouse as it moves over the
  1572.      diagram. The leftmost four fields summarize the
  1573.      properties of the component instance currently under
  1574.      the cursor.  The presence of the characters "D", "R",
  1575.      "M", and "A" signify that the instance is deleteable,
  1576.      replaceable, movable, and can be added to (as
  1577.      determined by the value of the sb_Interactive component
  1578.      attribute).  The large field just to the right of these
  1579.      fields displays the current component instance's
  1580.      description.  On the far right of the status bar are
  1581.      two fields which permit the display to be altered: a
  1582.      checkbox that toggles the 3D view and a listbox that
  1583.      permits zooming.  The old panel that displayed the
  1584.      location of the "selected instance", the Additional
  1585.      Parts and Failed Requests list boxes, the 3D checkbox
  1586.      and the Zoom listbox has been removed.  The instance
  1587.      information can be retrieved by first selecting an
  1588.      instance and then right clicking to bring up the system
  1589.      diagram popup menu and selecting the "Show Selected
  1590.      Item Details" menu item.  The window that comes up is a
  1591.      floating window that will stay up until you close it
  1592.      (it becomes invisible if you change tabs but will
  1593.      reappear when you return).  While open, it will change
  1594.      contents when the selected instance changes.  The
  1595.      Additional Parts and Failed Requests data are also
  1596.      accessible from the system diagram popup menu (via the
  1597.      Show Additional Parts and Show Failed Requests menu
  1598.      items).
  1599.  
  1600.      2.  Level of interactivity.  
  1601.  
  1602.      As menitioned above, the status bar contents tracks the
  1603.      mouse as it moves over the diagram.  Additionally,
  1604.      items can be deleted, cut, copied, and pasted into the
  1605.      diagram by selecting an instance (left click) and then
  1606.      performing the desired operation via the system diagram
  1607.      popup menu (right click).  Items cut or copied are
  1608.      automatically placed into the Windows clipboard.  If
  1609.      the selected instance has dependent parts in the
  1610.      diagram they will be highlighted as well.  If you left
  1611.      click and hold the mouse down for a couple of seconds
  1612.      on a movable item, the diagram will calculate and
  1613.      highlight the locations to which it could be dragged
  1614.      and dropped (its "Valid Destinations").
  1615.  
  1616.      3.  Parts Library.  
  1617.  
  1618.      The parts library is another floating window that can
  1619.      be brought up via the system diagram popup menu (right
  1620.      click) (Show Parts Library).  The parts library is a
  1621.      categorized listing of parts that may be added to the
  1622.      current system.  The contents of the parts library
  1623.      (both the categories and the parts) are determined by
  1624.      the model.  The categories are components of the class
  1625.      PartsLibClass and the topmost categories are components
  1626.      of its subclass, PartsLibRootClass.  If the class
  1627.      PartsLibRootClass does not exist in the model, then the
  1628.      parts library will not be shown.  Subcategories are
  1629.      determined by the PartsLibTreeChildren attribute of the
  1630.      category.  The parts themselves are determined by the
  1631.      PartsLibEquivClass attribute.  This attribute should be
  1632.      set to the existing model class from which you wish to
  1633.      populate the parts library category ("Hardware" and
  1634.      "Software" in the example below).  The current system's
  1635.      product line is used as a further filter on the parts
  1636.      listed.  Listed parts may be dragged from the parts
  1637.      library onto the system diagram.
  1638.  
  1639.  
  1640.      // These definitions set up the Parts Library hierarchy
  1641.      // and are necessary for any models using the Parts Library
  1642.  
  1643.      Multivalued Component PartsLibTreeChildren;
  1644.      String PartsLibEquivClass;
  1645.      String PartsLibName;
  1646.      Boolean Presentable;
  1647.  
  1648.      class PartsLibSpec : Component
  1649.      {
  1650.      attributes:
  1651.          Presentable = FALSE;
  1652.      }
  1653.  
  1654.      class PartsLibClass : PartsLibSpec
  1655.      {
  1656.      attributes:
  1657.      PartsLibTreeChildren;
  1658.      PartsLibEquivClass;
  1659.      PartsLibName;
  1660.      }
  1661.  
  1662.      class PartsLibRootClass : PartsLibClass
  1663.      {
  1664.      }
  1665.  
  1666.      // Following is an example Parts Library hierarchy
  1667.  
  1668.      component PL_HW : PartsLibRootClass
  1669.      {
  1670.      values:
  1671.      PartsLibEquivClass = "Hardware";
  1672.      PartsLibName = "The Metal";
  1673.      }
  1674.  
  1675.      component PL_SW : PartsLibRootClass
  1676.      {
  1677.      values:
  1678.      PartsLibEquivClass = "Software";
  1679.      PartsLibName = "The GUI Stuff";
  1680.      }
  1681.  
  1682.  
  1683.      4.  System Diagram Popup Menu.  
  1684.  
  1685.      Right clicking on the drawing area of the
  1686.      configurations tab will bring up a short menu of system
  1687.      diagram operations, most of which have been mentioned
  1688.      above.  Additionally, a floating "Legend" can be
  1689.      displayed that details what the highlighting colors and
  1690.      the single character status bar codes mean.
  1691.  
  1692.      5.  New SBW.INI settings.  
  1693.  
  1694.      In addition to the existing ini settings
  1695.      TopLevelComponentPerPage and SystemDiagramFont, there
  1696.      are seven new settings that can be used to change the look
  1697.      of the diagram.  All of the system diagram ini settings
  1698.      are explained below.
  1699.  
  1700.  
  1701.      // TopLevelComponentPerPage=0, [Company Preference] 
  1702.      //      If =1 then each top level component
  1703.      //    in the system diagram is printed on a separate page.
  1704.      TopLevelComponentPerPage=0
  1705.  
  1706.      // SystemDiagramFont=, [Company Preference]. 
  1707.      //      If =<fontName>, then <fontName> will 
  1708.      //    be used to display the labels on the system
  1709.      //    diagram drawing. If unset, then
  1710.      //    the font "Arial" will be used.
  1711.      SystemDiagramFont=Arial
  1712.  
  1713.  
  1714.      // SystemDiagramFontSize=12, [Company Preference]. 
  1715.      //        If =<fontSize>, then <fontSize> will be
  1716.      //    the max font size used to display the labels 
  1717.      //     on the system diagram drawing. If unset, 
  1718.      //    then 16 will be the max size.
  1719.      SystemDiagramFontSize=12
  1720.  
  1721.      // SystemDiagram3D=1, [User Preference] 
  1722.      //    If =0, then no shading is provided
  1723.      //    when displaying or printing the System
  1724.      //    Diagram. This setting can be toggled
  1725.      //    during the use of SBW.
  1726.      SystemDiagram3D=1
  1727.  
  1728.      // SystemDiagram...Color=Red Green Blue, [Company Preference] 
  1729.      //    Determines the colors used when
  1730.      //     interacting with the System Diagram.
  1731.      //    Each of the color values must be between 0 and 255.
  1732.      SystemDiagramSelectColor=128 255 255
  1733.      SystemDiagramHighlightAddColor=255 255 128
  1734.      SystemDiagramHighlightReplaceColor=255 128 255
  1735.      SystemDiagramDependentColor=128 128 255
  1736.      SystemDiagramDestinationColor=255 128 0
  1737. ------------------------------------------------------------
  1738.   Note
  1739.  
  1740.   Changes to System Diagram Model Attributes
  1741.  
  1742.  
  1743.   Resolution:
  1744.  
  1745.      The interactive system diagram DLL (SBDIAG.DLL) uses
  1746.      the CML attributes sb_ReplacementClasses and
  1747.      sb_PossibleReplacements differently from the old system
  1748.      diagram.  Previously, the system diagram would look at
  1749.      these attributes on the drop target and compare their
  1750.      values to the type of the component being dropped.  Now
  1751.      the system diagram looks at these attributes on the
  1752.      component being dropped and compares their values to
  1753.      the type of the component being dropped on.
  1754.  
  1755.      This behavior creates consistency among the attributes
  1756.      sb_ReplacementClasses, sb_ReplacementComponents
  1757.      (successor to sb_PossibleReplacements),
  1758.      sb_ContainerClasses, and sb_ContainerComponents.
  1759.  
  1760.      NOTE:  This is a backwardly incompatible change and any
  1761.      models which used the sb_ReplacementClasses or
  1762.      sb_PossibleReplacements attributes should be examined
  1763.      for necessary changes; however, in the majority of
  1764.      cases, no changes need to be made because the
  1765.      set of replacements and replacees are equivalent.
  1766. ------------------------------------------------------------
  1767.   New Feature
  1768.  
  1769.   Ability to Disable Component Information in System Diagram
  1770.  
  1771.  
  1772.   Context or Motive for Implementation:
  1773.  
  1774.      The Component Info panel of the Configurations tab
  1775.      contains information that a customer does not want
  1776.      their users to see.  They would like to be able to
  1777.      permanently disable this panel via SBW.INI. 
  1778.  
  1779.   Resolution:
  1780.  
  1781.      SalesBUILDER for Windows maintains a preference that
  1782.      allows the functionality of the system diagram to be
  1783.      disabled.  When the AllowInteractiveMode preference in
  1784.      the [Configurations] section of the SBW.INI is set to
  1785.      0, all mouse movements and mouse clicks over the system
  1786.      diagram drawing are ignored.  The effect of this is
  1787.      that no component instance information is displayed on
  1788.      the status bar, no instance may be selected (via
  1789.      left-clicking), and the system diagram popup menu
  1790.      (normally brought up by a right-click) is disabled.
  1791.      Note that disabling this menu disables all interactive
  1792.      operations on the diagram.  This same preference,
  1793.      AllowInteractiveMode, used to control the interactive
  1794.      mode window, which no longer exists.  The default value
  1795.      for this preference is 1 (note that it used to be 0).
  1796. ------------------------------------------------------------
  1797.   Bug Fix
  1798.  
  1799.   Product Descriptions Truncated in Quote Export
  1800.  
  1801.  
  1802.   History and Origins:
  1803.  
  1804.      If the product description extends beyond the width of
  1805.      the quote description column, exporting that quote
  1806.      truncates the product description (at the same point).
  1807.  
  1808.   Resolution:
  1809.  
  1810.      SalesBUILDER for Windows now supports the maximum
  1811.      length product descriptions (250 characters) and model
  1812.      numbers that the PCM supports (or 256) whichever is
  1813.      smaller.
  1814. ------------------------------------------------------------
  1815.   Bug Fix
  1816.  
  1817.   Lack of Bundling Files Prevents Bundling with Model Bundler
  1818.  
  1819.  
  1820.   History and Origins:
  1821.  
  1822.      If SalesBUILDER for Windows is used with a model that
  1823.      uses the Model Bundler instead of the PCM Bundler and
  1824.      consequently no bundling files are present, it is unable to
  1825.      recognize that no such files are needed and prevents
  1826.      bundling without them.
  1827.  
  1828.   Resolution:
  1829.  
  1830.      When running against the Model Bundler and no bundling
  1831.      files are present, SBW will create an empty PCM to be
  1832.      used when bundling.
  1833. ------------------------------------------------------------
  1834.   New Feature
  1835.  
  1836.   Starting SalesBUILDER for Windows a Second Time
  1837.  
  1838.  
  1839.   Context or Motive for Implementation:
  1840.  
  1841.      When attempting to start a second copy of the application on a
  1842.      single machine, focus should be brought to the already 
  1843.      running incarnation of the application.  This will
  1844.      simplify the situation for novice users.
  1845.  
  1846.   Resolution:
  1847.  
  1848.      If SalesBUILDER for Windows is launched while another
  1849.      copy is already loaded, focus will be brought to the
  1850.      original copy of SalesBUILDER for Windows.
  1851. ------------------------------------------------------------
  1852.  
  1853.  
  1854.        Release Notes 2.1.7
  1855.  
  1856.  
  1857. ------------------------------------------------------------
  1858.   Bug Fix
  1859.  
  1860.   Problems with 256-color Bitmaps on Toolbar and Roadmap
  1861.  
  1862.  
  1863.   History and Origins:
  1864.  
  1865.      Bitmaps on buttons change colors and sometimes flash
  1866.      different colors in 256-color mode.  The color changing
  1867.      happens at various times, including switching active
  1868.      application focus away from SalesBUILDER for Windows
  1869.      and then back again.  The problem does not manifest
  1870.      itself in 16-color mode.
  1871.  
  1872.      In addition, clicking on the toolbar "star" in the
  1873.      Requirements Tab before a system is selected causes a
  1874.      crash in VGA and SVGA modes, but not with a particular
  1875.      third-party video driver.
  1876.  
  1877.   Resolution:
  1878.  
  1879.      SalesBUILDER for Windows now uses 16-color bitmaps on
  1880.      the toolbar and the roadmap instead of 256-color
  1881.      bitmaps.
  1882. ------------------------------------------------------------
  1883.   Bug Fix
  1884.  
  1885.   Missing IDs for Top-Level Browser Items no Longer Reported
  1886.  
  1887.  
  1888.   History and Origins:
  1889.  
  1890.      The IDREPORT.TXT produced by SBCMPFRM.EXE reports any
  1891.      IDs created by the compiler which were not specified in
  1892.      the form set source.  This informs modelers who are
  1893.      manually maintaining form sets (i.e., not with
  1894.      FormBUILDER) whether they missed any locations where
  1895.      IDs should have been included.
  1896.  
  1897.      The report includes a message for every browser,
  1898.      indicating that an ID was created for the top-level
  1899.      browser item.  Such ID's are indeed created during
  1900.      compilation, although they are not currently used by
  1901.      the runtime application; however, it is not possible in
  1902.      the FML syntax to specify an ID for a top-level browser
  1903.      item.  Therefore, this message is misleading to
  1904.      modelers, since there is no way they can change the
  1905.      source to remedy the situation.
  1906.  
  1907.      The immediate way to fix this is to suppress that
  1908.      message.  If there is some possibility that the
  1909.      top-level browser item ID might be used by applications
  1910.      in the future, then the FML syntax should be changed to
  1911.      allow it to specified explicitly.
  1912.  
  1913.   Resolution:
  1914.  
  1915.      Since it is not possible to specify the ID for a top
  1916.      level browser entry, the ID report no longer generates
  1917.      a warning about the ID missing for a top level browser
  1918.      entry.
  1919. ------------------------------------------------------------
  1920.   New Feature
  1921.  
  1922.   ID Report Lists Actual IDs
  1923.  
  1924.   
  1925.   Context or Motive for Implementation:
  1926.  
  1927.      It would be helpful if the Form Compiler's ID report
  1928.      listed the actual IDs created by the compiler, so that
  1929.      the modeler could easily cut and paste them back into
  1930.      the source.
  1931.  
  1932.      At the very least, a summary at the end of the report
  1933.      indicating "XX new IDs generated" would save the
  1934.      modeler from having to count lines to figure out how
  1935.      much to bump up NEXTID.  (In a large formset, there can
  1936.      be many missing ID's.)
  1937.  
  1938.   Resolution:
  1939.  
  1940.      The ID report format has changed to include the IDs
  1941.      that are generated.
  1942.  
  1943.      Old format:
  1944.      module01.frm (157): Item: Form Context: frmSomeForm
  1945.  
  1946.      New format:
  1947.      module01.frm (157): Item: Form ID: 935 Context: frmSomeForm
  1948. ------------------------------------------------------------
  1949.  
  1950.  
  1951.        Release Notes 2.1.6
  1952.  
  1953.  
  1954. ------------------------------------------------------------
  1955.   Bug Fix
  1956.  
  1957.   Export Requirements Report Empty Without Roadmap Loaded
  1958.  
  1959.   
  1960.   History and Origins:
  1961.  
  1962.      If selections are made without the Roadmap loaded,
  1963.      Export Requirements Report generates a zero-byte file.
  1964.      A side-effect of this bug is that future attempts to
  1965.      bring up the Roadmap result in a blank Roadmap.
  1966.  
  1967.   Resolution:
  1968.  
  1969.      The bug has been fixed and the Roadmap no longer
  1970.      affects the requirements report.
  1971. ------------------------------------------------------------
  1972.   Bug Fix
  1973.  
  1974.   Hourglass Needed When Expanding Parts Library List Items
  1975.  
  1976.   
  1977.   History and Origins:
  1978.  
  1979.      Expanding the Parts Library list can take some
  1980.      time, therefore the hourglass cursor should be
  1981.      used to indicate that some activity is occurring.
  1982.  
  1983.   Resolution:
  1984.  
  1985.      The hourglass cursor is displayed when a Parts
  1986.      Library item is expanded or collapsed.
  1987. ------------------------------------------------------------
  1988.   Bug Fix
  1989.  
  1990.   Need More Space Between Quantity and Description in
  1991.   Requirements Summary
  1992.  
  1993.  
  1994.   History and Origins:
  1995.  
  1996.      When an item description begins with a number (such as
  1997.      "500MB SCSI drive"), it is difficult to distinguish
  1998.      where the quantity stops and the description begins.
  1999.      More space between them would make the distinction
  2000.      clearer.
  2001.  
  2002.   Resolution:
  2003.  
  2004.      In the Requirements Summary, quantities and
  2005.      descriptions are now separated by three spaces instead
  2006.      of one to make it more apparent that the quantity is
  2007.      not part of the description.
  2008. ------------------------------------------------------------
  2009.   New Feature
  2010.  
  2011.   Forms Road Map to Improve Navigational Workflow
  2012.  
  2013.  
  2014.   Context or Motive for Implementation:
  2015.  
  2016.      A Road Map will provide a guide to the structure of
  2017.      a Form Set and eases movement between those forms.
  2018.  
  2019.   Resolution:
  2020.  
  2021.      The Road Map is a new feature to help improve the
  2022.      navigation through a requirements session.  It groups
  2023.      forms in logical topics, tracks what part of the map
  2024.      has been visited and what parts are required.  It also
  2025.      allows the user to navigate easily through the
  2026.      requirements session and create new request groups
  2027.      (iterations).  The Road Map is located on the same
  2028.      palette as the requirements summary.  If the road map
  2029.      is active then it will show up as an additional tab on
  2030.      the Requirements Summary palette.
  2031.  
  2032.      In order to use this new functionality, you need to do
  2033.      the following:
  2034.  
  2035.      1) set the SBW.INI setting [Requirements] ShowRoadMap=1
  2036.  
  2037.      2) add the Road Map definition to your model.  The road
  2038.      map definition contains two types of classes:
  2039.      categories and iterations.  All categories are
  2040.      components derived from the class SB_Category.  A
  2041.      category can have zero or one form and can have zero to
  2042.      many subcategories.  All iterations are derived from
  2043.      the class SB_Iterator.
  2044.  
  2045.      In order to define a road map you need the following
  2046.      attributes defined in your model:
  2047.  
  2048.      // forward declaration 
  2049.      class SB_Category: Component;
  2050.  
  2051.      // SB_Required defines whether the category is required or not
  2052.      Boolean SB_Required;
  2053.  
  2054.      // SB_SubCategories contains a list of subcategories.  This can be null.
  2055.      Multivalued SB_Category SB_SubCategories;
  2056.  
  2057.      // SB_Form names the form in the form set that the 
  2058.      // user will go to when they navigate to this node.
  2059.      String SB_Form;
  2060.  
  2061.      // SB_CreationControl is defined on the class SB_Iterator 
  2062.      // and is used to name the control in the form set
  2063.      // that starts this iteration.  This is a required field.
  2064.      String SB_CreationControl;
  2065.  
  2066.      // SB_CreationForm is defined on the class SB_Iterator
  2067.      // and is used to name the form in the form set that
  2068.      // owns the creation control.  This is a required field.
  2069.      String SB_CreationForm;
  2070.  
  2071.      // SB_GroupName is defined on the class SB_Iterator
  2072.      // and is used to name the group in the form set that
  2073.      // will be started from this node.  This group must
  2074.      // correspond to an iteration name in the form set.  
  2075.      // This is a required field.
  2076.  
  2077.      Then you must define the following classes in your model:
  2078.  
  2079.      class SB_Category: Component
  2080.      {
  2081.      attributes:
  2082.          SB_Required = FALSE;
  2083.          SB_SubCategories;
  2084.          SB_Form;
  2085.      }
  2086.      class SB_Iterator: SB_Category
  2087.      {
  2088.      attributes:
  2089.          SB_CreationControl;
  2090.          SB_CreationForm;
  2091.          SB_GroupName;
  2092.      }
  2093.  
  2094.      Then you must define a heirarchy of components derived
  2095.      from SB_Category and SB_Iterator.  The root of the
  2096.      heirarchy has to be named SB_Cat_Root, without this
  2097.      component the road map will not show up.  Note: the
  2098.      hierarchy is defined in the order from root to
  2099.      children.  In order to use this in a model, the order
  2100.      has to be reversed or the children have to be forward
  2101.      declared.  The example hierarchy below is for a portion
  2102.      of a fictional library.
  2103.  
  2104.      component SB_Cat_Root : SB_Category
  2105.      {
  2106.      productLines:
  2107.          // The product line specification can be used 
  2108.          // to filter the categories.  Only categories
  2109.          // that belong to the product line that is 
  2110.          // being configured are available.
  2111.          plAll;
  2112.  
  2113.      values:
  2114.          // navigating to this form (double clicking
  2115.          //  on this node) will go to the form frmInitialAll.
  2116.          SB_Form = "frmInitialAll";
  2117.  
  2118.          // This category has two subcategories
  2119.          //  Mysteries and Science Fiction.
  2120.          SB_SubCategories =
  2121.          {
  2122.              SB_Cat_Mysteries,
  2123.              SB_It_ScienceFiction
  2124.          };
  2125.  
  2126.      description:
  2127.          // The description is used as this node's
  2128.          // description in the Road Map.
  2129.          "Book Store";
  2130.      }
  2131.  
  2132.      component SB_Cat_Mysteries : SB_Category
  2133.      {
  2134.      productLines:
  2135.          plAll;
  2136.      values:
  2137.          // No definition of SB_Form so this
  2138.          // is an abstract category.
  2139.          SB_SubCategories =
  2140.          {
  2141.              SB_Cat_AgathaChristie,
  2142.              SB_Cat_ACDoyle
  2143.          };
  2144.      description:
  2145.          "Mysteries";
  2146.      }
  2147.  
  2148.      component SB_Cat_AgathaChristie : SB_Category
  2149.      {
  2150.      productLines:
  2151.          plAll;
  2152.      values:
  2153.          SB_Form = "frmAgathaChristie";
  2154.          SB_Required = TRUE;
  2155.      description:
  2156.          "Agatha Christie Mysteries";
  2157.      }
  2158.  
  2159.      component SB_Cat_ACDoyle : SB_Category
  2160.      {
  2161.      productLines:
  2162.          plAll;
  2163.      values:
  2164.          SB_Form = "frmACDoyle";
  2165.      description:
  2166.          "Sherlock Holmes";
  2167.      }
  2168.  
  2169.      component SB_Cat_ScienceFiction : SB_Iterator
  2170.      {
  2171.      productLines:
  2172.          plAll;
  2173.      values:
  2174.          SB_CreationControl = "btnSciFi";
  2175.          SB_CreationForm = "frmSciFi";
  2176.          SB_Form = "frmInitialAll";
  2177.          SB_GroupName = "Science Fiction";
  2178.          SB_SubCategories =
  2179.          {
  2180.              SB_Cat_StarTrek;
  2181.              SB_Cat_HHGTTG;
  2182.          };
  2183.      description:
  2184.          "Sci Fi";
  2185.      }
  2186.  
  2187.      component SB_Cat_StarTrek : SB_Category
  2188.      {
  2189.      productLines:
  2190.          plAll;
  2191.      values:
  2192.          SB_Form = "frmStarTrek";
  2193.      description:
  2194.          "Start Trek Books";
  2195.      }
  2196.  
  2197.      component SB_Cat_HHGTTG : SB_Category
  2198.      {
  2199.      productLines:
  2200.          plAll;
  2201.      values:
  2202.          SB_Form = "frmHHGTTG";
  2203.          SB_Required = TRUE;
  2204.      description:
  2205.          "Hitch Hiker's Guide to the Galaxy"
  2206.      }
  2207. ------------------------------------------------------------
  2208.  
  2209.  
  2210.        Release Notes 2.1.5
  2211.  
  2212.  
  2213. ------------------------------------------------------------
  2214.   Bug Fix
  2215.  
  2216.   Some Execution Paths Leave DynaSets Open
  2217.  
  2218.  
  2219.   History and Origins:
  2220.  
  2221.      Several database functions contain execution paths that
  2222.      could result in opened DynaSets remaining open.
  2223.  
  2224.   Resolution:
  2225.  
  2226.      The database functions have been corrected.
  2227. ------------------------------------------------------------
  2228.   Bug Fix
  2229.  
  2230.   "Invalid Use of Null" Error on Loading QuoteSheet
  2231.  
  2232.  
  2233.   History and Origins:
  2234.  
  2235.      A particular QuoteSheet has a valid country but a null
  2236.      currency.  If both sCountry and sCurrency are NULL,
  2237.      SalesBUILDER for Windows assumes it is an old
  2238.      quotesheet and set sCountry=United States and
  2239.      sCurrency=$.  SalesBUILDER for Windows failed to take
  2240.      into account that one of these values could be NULL.
  2241.  
  2242.   Resolution:
  2243.  
  2244.      If a QuoteSheet is loaded that contains a NULL country
  2245.      setting, "United States" will be assumed.  If the
  2246.      QuoteSheet contains a NULL currency setting, then "$"
  2247.      will be assumed.
  2248. ------------------------------------------------------------
  2249.  
  2250.  
  2251.        Release Notes 2.1.4
  2252.  
  2253.  
  2254. ------------------------------------------------------------
  2255.   Bug Fix
  2256.  
  2257.   SBREQENU.DLL or SBWENU.DLL Failed to Load
  2258.  
  2259.  
  2260.   History and Origins:
  2261.  
  2262.      Some users receive an error message that SalesBUILDER
  2263.      for Windows was unable to load SBREQENU.DLL, when
  2264.      saving a quotesheet.  This can cause a crash,
  2265.      corrupting the SalesBUILDER for Windows database.
  2266.  
  2267.      Other users receive an error message that SalesBUILDER
  2268.      for Windows was unable to load SBWENU.DLL on startup.
  2269.      They are therefore unable to run the application unless they
  2270.      restart Windows.
  2271.  
  2272.   Resolution:
  2273.  
  2274.      There were two problems that could lead to this behavior:
  2275.  
  2276.      1) The module name was different from the filename of
  2277.      the DLL, causing it not to be recognized by the
  2278.      application.  This has been fixed.
  2279.  
  2280.      2) The application could fail to recognize certain
  2281.      valid module handles passed to it by the operating
  2282.      system, so it wouldn't realize the module was loaded;
  2283.      these handles are now recognized as valid.
  2284. ------------------------------------------------------------
  2285.  
  2286.  
  2287.        Release Notes 2.1.2
  2288.  
  2289.  
  2290. ------------------------------------------------------------
  2291.   New Feature
  2292.  
  2293.   SelectionSet Hierarchical Support on Iterative Forms
  2294.  
  2295.  
  2296.   Context or Motive for Implementation:
  2297.  
  2298.      A hierarchy of selection sets is desired where
  2299.      selections in a "parent" group of selection sets
  2300.      affects "child" groups, whereas "sibling" groups of
  2301.      selection sets do not.
  2302.  
  2303.      An example usage of hierarchical selection sets is an
  2304.      iterative form containing two dynamic controls: a
  2305.      selection set list of printers and a list of printer
  2306.      features which are constrained by the printer
  2307.      selection, which is further constrained by the
  2308.      processor selection on a non-iterative form.  The
  2309.      processor selection should control the list of printers
  2310.      on the iterative forms, however the printer selection
  2311.      should only affect the printer feature list on the
  2312.      individual iterative form.
  2313.  
  2314.   Resolution:
  2315.  
  2316.      Dynamic list boxes in forms associated with iterations
  2317.      are now independent and replicated per iteration.  The
  2318.      dynamic list box control specification is the same, and
  2319.      no additional information need be specified if the
  2320.      control appears in an iterative form.
  2321.  
  2322.      Given the following characteristics of dynamic list
  2323.      boxes and iterations:
  2324.       - dynamic list boxes are implemented via
  2325.         configuration engine SelectionSets,
  2326.       - SelectionSets are associated with a Class
  2327.         defined in the ProductBase (model),
  2328.       - only one SelectionSet for a Class is considered
  2329.         when filtering a particular SelectionSet
  2330.         candidate, and
  2331.       - multiple instances of an iteration generate
  2332.         multiple SelectionSets for a specific Class,
  2333.      additional semantics for filtering and identifying a
  2334.      SelectionSet during filtering have been added to
  2335.      accomodate dynamic list boxes in iterative forms.
  2336.  
  2337.      Iterative forms use the RequestGroup facility of the
  2338.      configuration engine.  RequestGroups mirror, in the
  2339.      configuration engine request queue, the hierarchical
  2340.      structure of iterations created in the interface.
  2341.      Consequently, a dynamic list box is associated with a
  2342.      particular iteration (possibly the top level) and its
  2343.      associated SelectionSet is associated with the
  2344.      corresponding RequestGroup.  During filtering, when a
  2345.      candidate of a particular SelectionSet (call this the
  2346.      source SelectionSet) is searching for a SelectionSet of
  2347.      a particular Class (call this the target SelectionSet),
  2348.      the current RequestGroup (iteration) is examined for
  2349.      the target SelectionSet.  If found, this SelectionSet
  2350.      is used.  If not found, the search proceeds up the
  2351.      RequestGroup hierarchy until the target SelectionSet is
  2352.      located or until no parent RequestGroup exists.  If the
  2353.      target SelectionSet is not found in the RequestGroup
  2354.      hierarchy, SelectionSet filtering assumes that no such
  2355.      SelectionSet is defined, and normal engine search
  2356.      ensues.
  2357.  
  2358.      In addition to identifying the target SelectionSet, the
  2359.      semantics of adding selected candidates to
  2360.      %allInstances have been modified as well.  When
  2361.      selected candidates are added to %allInstances during
  2362.      filtering, all selected candidates of the current
  2363.      iteration (RequestGroup) and all selected candidates of
  2364.      all ancestor iterations (RequestGroups) are added.
  2365.  
  2366.      Given that constraint evaluation during filtering
  2367.      selections in a dynamic control of an iteration cannot
  2368.      observe selections in a sibling iteration, conditions
  2369.      involving capacity required by selections across
  2370.      sibling iterations should be solved by requesting
  2371.      resource from a selection in a parent iteration.  The
  2372.      quantity-based SelectionSet functionality will be
  2373.      available in SelectionSets created by iterations,
  2374.      thereby providing a means for addressing this capacity
  2375.      filtering requirement.
  2376. ------------------------------------------------------------
  2377.   New Feature
  2378.  
  2379.   Create New Customer Record and Associate with
  2380.   Quotesheet on Save
  2381.  
  2382.  
  2383.   Context or Motive for Implementation:
  2384.  
  2385.      A customer desires the ability to perform a "Save As"
  2386.      on a quotesheet that has already been saved with
  2387.      customer information and associate the quotesheet with
  2388.      a new customer record in the database.  Currently, if
  2389.      the customer information is modified, the only choices
  2390.      are (1) replace the existing customer record with the
  2391.      new information and (2) save the quotesheet without a
  2392.      customer record.  The request is for a third option
  2393.      that creates a new customer record and associates it
  2394.      with the quotesheet.
  2395.  
  2396.   Resolution:
  2397.  
  2398.      Now, when you save, but choose not to update the
  2399.      current customer information, you get a new dialog
  2400.      asking if you want to create a new customer based on
  2401.      current values; if you say "Yes", this is done; if you
  2402.      say "No", the quotesheet is saved with the old customer
  2403.      information.
  2404. ------------------------------------------------------------
  2405.   Bug Fix
  2406.  
  2407.   Wrong Iteration Deleted in View Iterations
  2408.  
  2409.  
  2410.   History and Origins:
  2411.  
  2412.      If multiple iterations go out from a form and View
  2413.      Iteration is used to delete an iteration, the incorrect
  2414.      iteration is sometimes deleted.
  2415.  
  2416.   Resolution:
  2417.  
  2418.      Fixed.  The View Iteration dialog now works correctly
  2419.      for deleting and editing iterations.
  2420. ------------------------------------------------------------
  2421.   New Feature
  2422.  
  2423.   Tool/Status Bar
  2424.  
  2425.  
  2426.   Motive or Context for Implementation:
  2427.  
  2428.      A tool and status bar would provide several interface
  2429.      benefits to the application.  It would reduce the
  2430.      clutter on forms, ease navigation, and provide
  2431.      one-stop-shopping for commonly used functions.  Common
  2432.      buttons such as CONFIGURESYSTEM, ADDTOSYSTEM,
  2433.      RETURNTOPREVIOUS and a new "go to initial form" button
  2434.      can be placed on the toolbar instead of on each form.
  2435.      The bar could also maintain a forms history and provide
  2436.      FWD and BACK buttons.
  2437.  
  2438.   Resolution:
  2439.  
  2440. There is a tool bar on SBW that is enabled by default.
  2441. It may be disabled by setting the SBW.INI setting in
  2442. the [Options] stanza ShowToolBar = 0.
  2443.  
  2444. The tool bar contains the following at all times:
  2445.  
  2446.      - Progress monitor - The progress monitor is now
  2447.        located on the tool bar.  If the tool bar is not
  2448.        shown then the old progress monitor is used.
  2449.  
  2450. The tool bar contains the following when the
  2451. requirements tab is active:
  2452.  
  2453.      - home button - navigates back to the initial form.
  2454.      - navigation button - shows window containing new
  2455.        floating palette requirements summary and
  2456.        possibly new road map.
  2457.      - new system button - creates a new system.
  2458.      - delete button - deletes the current form.  If
  2459.        the form is part of the current product line's
  2460.        default requests, then this button has the same
  2461.        effect as the "reset form" button.  If the form
  2462.        is the initial form of an iteration, this action
  2463.        deletes the iteration.  If the form is the
  2464.        initial form of a product line, this action is
  2465.        the same as deleting the system.
  2466.      - reset form button - resets the current form.
  2467.      - configure button - configures the current system.
  2468.      - show configuration errors button (Optional) -
  2469.        This button will appear if there is a custom
  2470.        error handler.  If there is a custom error
  2471.        handler, this button will call the
  2472.        sbw_ReportConfigError API function.
  2473.      - form help button - brings up form help for the
  2474.        current form if a help topic exists.  
  2475.      - form label - shows the current form's name as
  2476.        well as any group names.  For instance if you
  2477.        are creating a group "Texas" and you are on form
  2478.        "Support" the form label would show
  2479.        "Texas:Support".
  2480. ------------------------------------------------------------
  2481.   New Feature
  2482.  
  2483.   Floating Palette for Requirements Summary
  2484.  
  2485.  
  2486.   Context or Motive for Implementation:
  2487.  
  2488.      The current requirements summary takes up a lot of
  2489.      screen real estate.  It often needs to be very wide in
  2490.      order to show the full labels, yet when it is very wide
  2491.      it tends to cover a good portion of the forms.
  2492.  
  2493.   Resolution:
  2494.  
  2495.      The requirements summary is now a floating palette.  To
  2496.      view it select the menu option Window | Requirements
  2497.      Summary.  This option is only available when the
  2498.      requirements tab is active.  Selecting this option will
  2499.      show the requirements summary palette.  If another tab
  2500.      is activated, then the palette will be hidden until the
  2501.      requirements tab is reactivated.  The functionality of
  2502.      the requirements summary is the same as when it was
  2503.      attached to the QuoteSheet.
  2504. ------------------------------------------------------------
  2505.   New Feature
  2506.  
  2507.   SBW.INI Setting to Specify Default for System Diagram
  2508.   (Wireframe vs. 3-D)
  2509.  
  2510.  
  2511.   Context or Motive for Implementation
  2512.  
  2513.      It would be nice to be able to set the default system
  2514.      diagram style (wireframe vs. 3-D) in the SBW.INI file,
  2515.      rather than using the checkbox on the configurations
  2516.      tab every time.
  2517.  
  2518.   Resolution:
  2519.  
  2520.      The preference SystemDiagram3D=1 in the
  2521.      [Configurations] stanza of SBW.INI enables shading for
  2522.      a 3-D effect in the system diagram.  If
  2523.      SystemDiagram3D=0, then no shading will be used in the
  2524.      system diagram.  This setting can also be toggled
  2525.      within the application.
  2526. ------------------------------------------------------------
  2527.  
  2528.  
  2529.        Release Notes 2.1.1
  2530.  
  2531.  
  2532. ------------------------------------------------------------
  2533.   Bug Fix
  2534.  
  2535.   Dynamic Labels not Shown in System Diagram
  2536.  
  2537.  
  2538.   History and Origins:
  2539.  
  2540.      The system diagram displays the component's rather than
  2541.      the label when the label is dynamic.
  2542.  
  2543.   Resolution:
  2544.  
  2545.      sb_GetInstanceDisplayInfo was not setting the system
  2546.      context correctly before evaluating the dynamic label.
  2547.      This has been corrected.
  2548. ------------------------------------------------------------
  2549.  
  2550.  
  2551.        Release Notes 2.0.7
  2552.  
  2553.  
  2554. ------------------------------------------------------------
  2555.   New Feature
  2556.  
  2557.   Improve time to exit SBW
  2558.  
  2559.  
  2560.   Context and Motive for Implementation:
  2561.  
  2562.      It seems to take an unusually long time to exit SBW.
  2563.      Can this be improved?
  2564.  
  2565.   Resolution:
  2566.  
  2567.      A preference in the [Options] section has been added to
  2568.      sbw.ini called "FastExit". If set to 1, then the product
  2569.      base, the PCM, and the forms set will not be
  2570.      unloaded. This can significantly speed up exit time of
  2571.      SBW. The default value for this preference is 0.
  2572. ------------------------------------------------------------
  2573.  
  2574.  
  2575.        Release Notes 2.0.5
  2576.  
  2577.  
  2578. ------------------------------------------------------------
  2579.   Bug Fix
  2580.  
  2581.   Icons Disappear when Icon on Second Row is Deleted
  2582.  
  2583.  
  2584.   History and Origins:
  2585.  
  2586.      If more systems are configured than will fit on a
  2587.      single row of the system icons bar, then a scroll bar
  2588.      is enabled to provide access to further icons in the
  2589.      second and subsequent rows.  If a system represented by
  2590.      an icon in the second row is opened and then deleted,
  2591.      the icon bar remains on the second row even if no icons
  2592.      remain on that row.
  2593.  
  2594.   Resolution:
  2595.  
  2596.      The problem has been fixed.
  2597. ------------------------------------------------------------
  2598.   Bug Fix
  2599.  
  2600.   Selections in Query-Populated Controls Fail to Restore
  2601.  
  2602.  
  2603.   History and Origins:
  2604.  
  2605.      Selections from query-populated controls fail to load
  2606.      when restoring requirements from a previous session
  2607.      (from a quotesheet or exported requirements) that were
  2608.      saved using the current formset.  Loads of the same
  2609.      requirements during the same session work properly.
  2610.  
  2611.   Resolution:
  2612.  
  2613.      The problem has been corrected.
  2614. ------------------------------------------------------------
  2615.   Feature Request
  2616.  
  2617.   Matching Behavior for Priorities on Static and
  2618.   Dynamic Control Entries
  2619.  
  2620.  
  2621.   Motive or Context for Implementation:
  2622.  
  2623.      The order of precedence for setting 
  2624.      priority on dynamic component requests in  the forms 
  2625.      language should match the order of precedence for 
  2626.      setting priority on static component requests.  A 
  2627.      priority set at the component level should override a 
  2628.      priority set at the widget level.  Widget level 
  2629.      priorities should be used when the component priority 
  2630.      is minus one (-1).
  2631.  
  2632.   Resolution:
  2633.  
  2634.      The priority for dynamically populated control entries
  2635.      is now determined first by the component Float
  2636.      attribute sb_DefaultRequestPriority.  If the value of
  2637.      the component attribute is minus one (-1) then the
  2638.      priority of the entry will be determined by the
  2639.      priority of the widget (if one is assigned).  If the
  2640.      attribute sb_DefaultRequestPriority has not been
  2641.      assigned to a component, then the priority of the
  2642.      attribute will be zero (0) and not the priority set by
  2643.      the widget.  This is often not the desired behavior.
  2644.      To ensure that components without a priority do not
  2645.      receive a priority of zero (0), set a default priority
  2646.      of minus one (-1) for all components to permit widget
  2647.      priorities to take effect where applicable.  To set a
  2648.      default priority of minus one (-1) for all components,
  2649.      assign the attribute sb_DefaultRequestPriority to the
  2650.      generic Component class with a default value of minus
  2651.      one (-1) using the following CML syntax:
  2652.  
  2653.          Float sb_DefaultRequestPriority;
  2654.  
  2655.          class Component {
  2656.          attributes:
  2657.               sb_DefaultRequestPriority = -1;
  2658.          }
  2659.  
  2660.      Note: This release note supercedes the description in
  2661.      the Forms Management Language Reference of the behavior
  2662.      of query-populated controls.
  2663. ------------------------------------------------------------
  2664.  
  2665.  
  2666.        Release Notes 2.0.4
  2667.  
  2668.  
  2669. ------------------------------------------------------------
  2670.   Bug Fix
  2671.  
  2672.   Dynamic Listbox Shows Extra Checkmark Upon Return to Form
  2673.  
  2674.  
  2675.   History and Origins:
  2676.  
  2677.      This bug is manifested when the following actions are
  2678.      taken:  make a selection in a ClassDynamicListBox;
  2679.      leave the form and then return to it; make another
  2680.      selection in the same listbox.  When you make the new
  2681.      selection, the check mark for the old selection does
  2682.      not go away, even though only the new selection is
  2683.      shown in the Requirements Summary.  This happens
  2684.      whether the navigation is done with buttons or via the
  2685.      requirements summary.
  2686.  
  2687.   Resolution:
  2688.  
  2689.      This bug has been fixed.  Making a new selection in a
  2690.      ClassDynamicListBox now correctly overrides the
  2691.      previous selection.
  2692. ------------------------------------------------------------
  2693.   Bug Fix
  2694.  
  2695.   MultiChoice Browser Resets to Zero
  2696.  
  2697.  
  2698.   History and Origins:
  2699.  
  2700.      If a quantity in a multichoice browser is made active
  2701.      (as if to edit) but no edits are made and then focus is
  2702.      changed away from the quantity edit field, the quantity
  2703.      will reset to zero.
  2704.  
  2705.   Resolution:
  2706.  
  2707.      This behavior no longer occurs.  If a quantity in a
  2708.      multichoice browser is activated, but not edited, the
  2709.      original quantity will remain (and not be reset to
  2710.      zero).
  2711. ------------------------------------------------------------
  2712.   New Feature
  2713.  
  2714.   Custom Failure Message Handling
  2715.  
  2716.  
  2717.   Context or Motive for Implementation:
  2718.  
  2719.      Customer wants to allow different kinds of error
  2720.      message handling: e.g., halt immediately for failure
  2721.      messages that are marked "fatal" in some way; logging
  2722.      messages vs. (or in addition to) popping-up dialog box,
  2723.      etc.
  2724.  
  2725.      One way to achieve this is to provide a "hook" for a
  2726.      customer-supplied error message handler, which could be
  2727.      registered and called instead of the standard error
  2728.      message handler.
  2729.  
  2730.   Resolution:
  2731.  
  2732.      Due to many customer demands for enhanced configuration
  2733.      failure handling in SalesBUILDER for Windows, the
  2734.      SalesBUILDER for Windows configuration error handling
  2735.      mechanism is now customizable.  Customers can now
  2736.      create an interface for handling messages in whatever
  2737.      manner desired.  To use the new configuration error
  2738.      handler, set [Configurations] CustomFailureHandler=1 in
  2739.      SBW.INI.  Create a DLL named SBWCH.DLL (for SBW Custom
  2740.      Handlers) which contains the following three functions.
  2741.  
  2742.      long _far _pascal sbw_BeginConfig( long sysID, int hwndParent);
  2743.      long _far _pascal sbw_EndConfig( long sysID, int hwndParent );
  2744.      long _far _pascal sbw_ReportConfigError( const char *errmsg, 
  2745.          long *continueConfig);
  2746.      long _far _pascal sbw_ShowConfigErrors( long sysID, 
  2747.          int hWndParent);
  2748.  
  2749.      sbw_BeginConfig is called immediately before
  2750.      SalesBUILDER for Windows calls sb_ConfigureSystem.  The
  2751.      function takes the system ID that is currently being
  2752.      configured and the handle of the QuoteSheet that
  2753.      initiated the sb_ConfigureSystem call.  The window
  2754.      handle can be used as the parent of any dialogs that
  2755.      are created in the DLL.
  2756.  
  2757.      sbw_EndConfig is called immediatedly after SalesBUILDER
  2758.      for Windows calls sb_ConfigureSystem.  The function
  2759.      takes the system ID of the system that was just
  2760.      configured.
  2761.  
  2762.      sbw_ReportConfigError is only called during a
  2763.      sb_ConfigureSystem call if a constraint failure occurs.
  2764.      The constraint failure message from the engine is
  2765.      passed on to this function.  A continuation flag is
  2766.      also passed to this function.  To halt the
  2767.      configuration the flag should be set to 0, otherwise it
  2768.      should be set to 1.  Between the time when this
  2769.      function is called and the time when it returns, only
  2770.      modal dialogs should be displayed.  The DLL should not
  2771.      yield control back to SalesBUILDER for Windows before
  2772.      returning.
  2773.  
  2774.      If CustomFailureHandler=1, then a menu item will appear
  2775.      on the Window menu following configuration to allow the
  2776.      user to view the configuration failure messages for a
  2777.      system to be shown.  This menu item calls
  2778.      sbw_ShowConfigErrors, which should handle the display
  2779.      of the messages.  The function arguments are the system
  2780.      ID of the system in question and the window handle of
  2781.      the QuoteSheet that initiated the call.
  2782. ------------------------------------------------------------
  2783.  
  2784.  
  2785.        Release Notes 2.0.3
  2786.  
  2787.  
  2788. ------------------------------------------------------------
  2789.   New Feature
  2790.  
  2791.   Export Diagram for One Top Level Component per Metafile
  2792.  
  2793.  
  2794.   Context or Motive for Implementation:
  2795.  
  2796.      The system diagram can be exported, however for large
  2797.      or complex systems, this one diagram contains too much
  2798.      information to be understood.
  2799.  
  2800.   Resolution:
  2801.  
  2802.      SalesBUILDER for Windows can now export one top level component per
  2803.      metafile.  Now when you select export system diagram,
  2804.      you have the choice of saving to either a Windows
  2805.      metafile (WMF) or a list of WMF files.  To export the
  2806.      system as a list of WMF files, give a file name with
  2807.      any other extension besides .WMF.  SBW will create a
  2808.      file that looks like this:
  2809.  
  2810.      metafile.lst -
  2811.  
  2812.      [system1]
  2813.      name=The Big System
  2814.      component1=<Window's temp dir>\<name of temp meta file 1>
  2815.      ...
  2816.      componentN=<Window's temp dir>\<name of temp meta file N>
  2817.  
  2818.      The format of the list file is the same as Window's ini
  2819.      files to make it easy to retrieve the data.  Each file
  2820.      represents the drawing of a top level component.  The
  2821.      user is responsible for deleting both the list file and
  2822.      each of the temporary files used for the metafiles.
  2823. ------------------------------------------------------------
  2824.   New Feature
  2825.  
  2826.   Search QuoteSheets by Description (or any field)
  2827.  
  2828.  
  2829.   Context or Motive for Implementation:
  2830.  
  2831.      The current Open QuoteSheet dialog does not allow you
  2832.      to search on QuoteSheet description.  Quotesheet
  2833.      description is the most natural way to refer to a
  2834.      quotesheet. 
  2835.  
  2836.   Resolution:
  2837.  
  2838.      The new QuoteSheet browser allows you to search on any
  2839.      field.  To change the visible fields, use the Change
  2840.      View... button to bring up a dialog that allows you to
  2841.      change the visibility of each the available fields.
  2842. ------------------------------------------------------------
  2843.   New Feature
  2844.  
  2845.   Click on System Icon to Refresh System Diagram
  2846.  
  2847.  
  2848.   Context or Motive for Implementation:
  2849.  
  2850.      A customer would like SalesBUILDER for Windows to
  2851.      redraw a system that has been modified by an external
  2852.      application.  This can be enabled by allowing the user
  2853.      to refresh the system diagram by clicking on the system
  2854.      icon.
  2855.  
  2856.   Resolution:
  2857.  
  2858.      The SBW.INI setting [Configurations] AlwaysRefresh=1
  2859.      causes SalesBUILDER for Windows to refresh the system
  2860.      diagram every time a mouse-click is performed on the
  2861.      system icon on the configurations tab.
  2862. ------------------------------------------------------------
  2863.   New Feature
  2864.  
  2865.   Ability to Assign a Bitmap as a Form Background
  2866.  
  2867.  
  2868.   Context or Motive for Implementation:
  2869.  
  2870.      The appearance and usefulness of SalesBUILDER for
  2871.      Windows can be dramatically improved by using bitmaps
  2872.      as backgrounds on forms.  Doing this converts
  2873.      SalesBUILDER for Windows from a text-based data-entry
  2874.      system into a graphically-oriented environment.
  2875.      Transferring static text into a bitmap allows fonts to
  2876.      be changed, and also helps in those rare instances
  2877.      where there are large numbers of widgets.
  2878.  
  2879.   Resolution:
  2880.  
  2881.      FormBUILDER and SalesBUILDER for Windows support a new
  2882.      attribute "Picture" defined on forms or dialogs.  The attribute is
  2883.      used to display a bitmap on the background of a form or
  2884.      dialog.  If the property is entered by hand it must be
  2885.      entered after the help and product line attributes and
  2886.      before the control definitions.  Example form
  2887.      definition:
  2888.  
  2889.      < form declaration >
  2890.      {
  2891.          < optional help topic >
  2892.          < optional product lines >
  2893.          < optional picture >  // Picture = "filename";
  2894.          < control list >
  2895.      }
  2896.  
  2897.      Form @100 frmStoreFront 0, 0, 640, 400
  2898.      {
  2899.          Picture = "store.bmp";
  2900.          CheckBox cbOpen "Open" 10, 10, 200, 30
  2901.      }
  2902.  
  2903.      In order for FormBUILDER to display the bitmap, the
  2904.      file specified in the picture property must be either
  2905.      in the current directory or have a fully qualified path
  2906.      name.  At runtime, SalesBUILDER for Windows will look
  2907.      for the file in the bitmap directory, the model
  2908.      directory and the application directory.
  2909. ------------------------------------------------------------
  2910.   New Feature
  2911.  
  2912.   Optional Ability to Select Baseline for System Upgrade
  2913.  
  2914.  
  2915.   Context or Motive for Implementation:
  2916.  
  2917.      The old behavior allows that the first time an
  2918.      ADDTOSYSTEM is invoked, the current system is
  2919.      "baselined" before the configuration is begun.
  2920.      Subsequent ADDTOSYSTEMs will update the original
  2921.      baselined system, NOT necessarily the current system.
  2922.  
  2923.      This behavior consistently causes user confusion
  2924.      because it is fairly unintuitive.  Also, if the user is
  2925.      playing around a lot with different
  2926.      configuration/upgrade scenarios, they should not have
  2927.      to invest the overhead (time OR space) to do a manual
  2928.      save.  The ability is needed to allow the user to
  2929.      decide when to baseline and when not to.  Also, if
  2930.      configuration is performed from an external or custom
  2931.      interface, the additional capability to baseline from
  2932.      outside SalesBUILDER for Windows is also needed.
  2933.  
  2934.   Resolution:
  2935.  
  2936.      If ResetRollbackOnConfig set to 1 in the [Options]
  2937.      section of SBW.INI then SBW will re-baseline a system
  2938.      when the ConfigureSystem button is pressed.  With
  2939.      ResetRollbackOnConfig=0, the default setting, old
  2940.      behavior will be preserved: re-baselining will occur
  2941.      only after a QuoteSheet save.
  2942. ------------------------------------------------------------
  2943.   Bug Fix
  2944.  
  2945.   Requirements Summary Displays Zero-Valued Entries
  2946.  
  2947.  
  2948.   History and Origins:
  2949.  
  2950.      Since the control for the Requirements Summary was
  2951.      changed, the outline now includes all zero-valued
  2952.      entries in the display, including editfields and all
  2953.      table entries.  For a formset with many entries, few of
  2954.      which are used for a given configuration, this makes
  2955.      the Requirements Summary extremely unwieldy to use.
  2956.      Only those entries with non-zero values should be
  2957.      displayed in the Requirements Summary.
  2958.  
  2959.   Resolution:
  2960.  
  2961.      The Requirements Summary now displays only controls
  2962.      with non-zero values.
  2963. ------------------------------------------------------------
  2964.  
  2965.  
  2966.        Release Notes 2.0.0
  2967.  
  2968.  
  2969. ------------------------------------------------------------
  2970.   Bug Fix
  2971.  
  2972.   ProductBase Load Failure Causes Errors
  2973.  
  2974.  
  2975.   History and Origins:
  2976.  
  2977.      When the ProductBase fails to load, either because the
  2978.      correct files are not available locally or because the
  2979.      product base is not loaded into the database where it
  2980.      is expected, several (usually four) engine API errors
  2981.      are presented and then crashes SalesBUILDER for
  2982.      Windows.  This is correct behavior except that if a
  2983.      database bridge is being used SalesBUILDER for Windows
  2984.      leaves both the DBADLL.DLL and the database specific
  2985.      DLL in memory.  This prevents SalesBUILDER for Windows
  2986.      from logging into the database once the ProductBase has
  2987.      been loaded unless Windows is re-started.  There should
  2988.      just be one error message which tells the user
  2989.      "ProductBase not found" and then the application should
  2990.      then exit and take all of its DLL's with it.
  2991.  
  2992.   Resolution:
  2993.  
  2994.      SalesBUILDER for Windows now reports that the
  2995.      ProductBase failed to load and exits gracefully when
  2996.      there is a ProductBase load failure.
  2997. ------------------------------------------------------------
  2998.   Bug Fix
  2999.  
  3000.   Default Requests Made from Cancelled Dialogs
  3001.  
  3002.  
  3003.   History and Origins:
  3004.  
  3005.      SalesBUILDER for Windows is sending in default requests
  3006.      when a dialog box is visited, but cancelled.  This can
  3007.      lead to unexpected configuration results.
  3008.  
  3009.   Resolution:
  3010.  
  3011.      If you visit a dialog box that does not send in
  3012.      requests by default and select Cancel, then the default
  3013.      requests for the dialog are not sent in.  If you
  3014.      revisit a dialog on which you have previously made
  3015.      selections and select Cancel, the selections you made
  3016.      in your last visit (in which you selected OK) will be
  3017.      sent in.
  3018.  
  3019.      If requests from a dialog should be sent in by default,
  3020.      the dialog should be declared as part of a product
  3021.      line.
  3022. ------------------------------------------------------------
  3023.   New Feature
  3024.  
  3025.   Version Checking of Required Modules
  3026.  
  3027.  
  3028.   Context or Motive for Implementation:
  3029.  
  3030.      If SalesBUILDER for Windows checked to make sure that
  3031.      all of its required modules (DLLs and VBXs) could be
  3032.      loaded, at load time, and that their versions matched
  3033.      the expected version, then mismatched DLLs and VBXs can
  3034.      be detected as causes of a reported error.
  3035.  
  3036.   Resolution:
  3037.  
  3038.      A new SBW.INI preference, VersionInfoFile, (in the
  3039.      [Options] section) has been added.  If set to a
  3040.      filename, then SalesBUILDER for Windows will check for all its required
  3041.      modules before starting up.  The results of this check
  3042.      will be written to the specified file.  If modules are
  3043.      missing, then SBW will display a message to this effect
  3044.      and halt.  If modules are present but are older than
  3045.      expected, SalesBUILDER for Windows will tell the user which version was
  3046.      found, and give a warning that the application may not operate
  3047.      properly, but give the user the option of
  3048.      continuing.  If newer versions are found, then no
  3049.      warning/prompt is given.  
  3050.  
  3051.      The format of the VersionInfoFile is a header line,
  3052.      "MODULE VERSION STATUS", followed by one line of
  3053.      information per module: <module name> <expected
  3054.      version> <nothing, found version, or "Missing">.  
  3055.  
  3056.      For example, if SBW expected to find sbfrm.dll stamped
  3057.      with version information 1.1.0.2 but found 1.1.0.3 then
  3058.      there will be a line in VersionInfoFile:
  3059.       sbfrm.dll 1.1.0.2 1.1.0.3
  3060.  
  3061.      If the DLL could not be loaded at all, then the line
  3062.      would look like this:
  3063.       sbfrm.dll 1.1.0.2 Missing 
  3064.  
  3065.      If the expected version was found, then the 3rd column
  3066.      would be left blank.
  3067. ------------------------------------------------------------
  3068.   Bug Fix
  3069.  
  3070.   Specifying the Server Model Directory from the Client
  3071.  
  3072.  
  3073.   History and Origins: 
  3074.  
  3075.      When using the -D option with the SBW client (for
  3076.      Client/Server installations of SBW), an attempt is made
  3077.      to open the local file "INFILE.ASC" in the specified
  3078.      working directory, instead of going to the server for
  3079.      the ProductBase.  SBW client correctly ignores
  3080.      "INFILE.ASC" when the -D option is not used.
  3081.  
  3082.   Resolution:
  3083.  
  3084.      The SBW Client no longer uses the -D option to specify
  3085.      the server model directory.  There are two ways to
  3086.      specify the server model directory now.  
  3087.  
  3088.      1) On the command-line use the option "-SD <server model
  3089.      directory>" where <server model directory> is the path
  3090.      describing where the model is located.  Alternatively,
  3091.  
  3092.      2) Specify the server model directory in the SBW.INI
  3093.      file and in the [Options] stanza, set
  3094.      "SBHostServerDir=<server model directory>".
  3095.  
  3096.      When running the SBW Client, it will look for the
  3097.      ProductBase and the PCM in the server directory.  The
  3098.      form set is still loaded locally and will use the
  3099.      directory specified with the -D option.  SBW Client
  3100.      will no longer check to see if the ProductBase and PCM
  3101.      files exist on the local machine since these files are
  3102.      never used.
  3103.  
  3104.      Note: If the server model directory is specified and
  3105.      does not end with a '\' or '/' then a '/' is appended.
  3106.      This may not be appropriate for all server file systems
  3107.      so it is best to be explicit with the path and include
  3108.      the appropriate ending slash.
  3109. ------------------------------------------------------------
  3110.