<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7246998669224682678</id><updated>2012-01-25T18:00:58.220-06:00</updated><category term='Dec 2005'/><title type='text'>Manage 2000 Programming</title><subtitle type='html'>Reflections and musings on the legacy ERP product of ROISystems.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-8513721176078708753</id><published>2012-01-25T14:52:00.006-06:00</published><updated>2012-01-25T18:00:58.231-06:00</updated><title type='text'>Web Function Usage Tracking</title><content type='html'>&lt;span style="text-align: left; "&gt;Previous releases have attempted to provide usage tracking beyond the standard IIS logging, but have not been all that useful. Manage 2000 release 7.3 provides better tracking by recording web function start events in the WEB_USAGE_LOG file within the UniData database where Manage 2000 reporting tools are available.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To enable tracking simply go to WEB.CONSTANTS screen 5 and turn it on.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-k6VN27ETcFQ/TyCRPqfRheI/AAAAAAAAAP0/64LU4Xay9P8/s1600/WebConstants5.png"&gt;&lt;img src="http://2.bp.blogspot.com/-k6VN27ETcFQ/TyCRPqfRheI/AAAAAAAAAP0/64LU4Xay9P8/s400/WebConstants5.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5701716826540574178" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 285px; " /&gt;&lt;/a&gt;&lt;br class="Apple-interchange-newline"&gt;Enter 'Y' to post WEB_USAGE_LOG records as web functions are run on this account. Enter 'N' to disable posting of log records. A null entry is treated the same as 'N'.&lt;br /&gt;&lt;br /&gt;Control the purging of WEB_USAGE_LOG records through PURGE.CONTROLS. The purge type is WUL and the standard configuration is to purge back to the last 3 weeks once a month.&lt;br /&gt;&lt;br /&gt;View log records through WEB.USAGE.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/-gRFNTHITOfY/TyCRP8_xH2I/AAAAAAAAAQE/PioWkiwTzJ4/s1600/WebUsageLog.png"&gt;&lt;img src="http://3.bp.blogspot.com/-gRFNTHITOfY/TyCRP8_xH2I/AAAAAAAAAQE/PioWkiwTzJ4/s400/WebUsageLog.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5701716831508701026" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 125px; " /&gt;&lt;/a&gt;&lt;br class="Apple-interchange-newline"&gt;The standard functionality provides lots of identifiers, but if you want meaningful company and person names you will need to set up some I-Descriptors in the WEB_USAGE_LOG file and copy the WEB.USAGE REPORT.BUILD report from the MT library to your local library and add the fields you want.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-8513721176078708753?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/8513721176078708753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=8513721176078708753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/8513721176078708753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/8513721176078708753'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2012/01/web-function-usage-tracking.html' title='Web Function Usage Tracking'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-k6VN27ETcFQ/TyCRPqfRheI/AAAAAAAAAP0/64LU4Xay9P8/s72-c/WebConstants5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-7130206406973766791</id><published>2012-01-19T13:23:00.012-06:00</published><updated>2012-01-20T18:08:03.795-06:00</updated><title type='text'>Top Ten Things To Know on Manage 2000 7.3</title><content type='html'>1. What preferences settings exist and how to set them globally, by role&lt;br /&gt;2. How to turn on and use web function usage tracking&lt;br /&gt;3. How to use web performance exception reporting&lt;br /&gt;4. How to present different views to different roles&lt;br /&gt;5. How to setup mobile access to Manage 2000&lt;br /&gt;6. How to setup and externally facing portal&lt;br /&gt;7. How to setup AR KPI dashboard displays&lt;br /&gt;8. How to enable attachments in web portals&lt;br /&gt;9. How to extend web portals by creating REPORT.BUILD functions as web functions&lt;br /&gt;10. How to develop web functions with Visual Studio&lt;br /&gt;&lt;br /&gt;I'll try to post on these topics over the coming weeks.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Web Preferences&lt;/h3&gt;&lt;br /&gt;Web preferences allow you to configure behavioral characteristics of Manage 2000 web sites. They can be set globally in WEB.CONSTANTS on screen 3. They can be set per role in the CNT.SYSTEM.REFS function. They can be set per user in screen 8 of CONTACTS.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-x0JSZhWqn2w/TxnKLiCIJvI/AAAAAAAAAPo/u-sG7-m_kec/s1600/WebPreferences.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 228px;" src="http://2.bp.blogspot.com/-x0JSZhWqn2w/TxnKLiCIJvI/AAAAAAAAAPo/u-sG7-m_kec/s320/WebPreferences.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5699809102877173490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Web Preferences are cached on a per user basis. To get preference changes to take effect you need to logoff your web session and start a new one. You can logoff the web session from the Welcome Portal or the My Account menu or by running WebLogoff from PWS.&lt;br /&gt;&lt;br /&gt;The most sought after preference change has been turning off the autocomplete behavior in web functions which seems to annoy users more than help them. So in WEB.CONSTANTS on screen 3 add Preference Code &lt;span style="font-weight:bold;"&gt;12&lt;/span&gt; Minimum Length for Autofill and set the value to &lt;span style="font-weight:bold;"&gt;999&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Preference &lt;span style="font-weight:bold;"&gt;1&lt;/span&gt; External Home Page controls what happens when a user logs off the website.  You can use it to redirect them to your company web site. You can also set it to a value of &lt;span style="font-weight:bold;"&gt;../../mt/login/login.aspx&lt;/span&gt; which redirects them to the web login page. This feels nice and somehow harmonic to end the session where it began.&lt;br /&gt;&lt;br /&gt;Preference &lt;span style="font-weight:bold;"&gt;9&lt;/span&gt; M2k Home Page controls what happens when a user logs into the web site. Using this preference in CNT.SYSTEM.REFS and by selecting the appropriate web function name you can start your customers in the shopping cart when they login, while directing sales reps to select the customer they wish to represent as they login, and direct service reps in the service portal as they come in.&lt;br /&gt;&lt;br /&gt;As a developer constantly testing web functions I particularly like &lt;span style="font-weight:bold;"&gt;13&lt;/span&gt; Use LK as Default set to &lt;span style="font-weight:bold;"&gt;Y&lt;/span&gt;. Which does pretty much what you would expect. If users often want to view in a web function what they were just accessing in PWS then they might like this too. &lt;br /&gt;&lt;br /&gt;Explore other preferences using ?? in one of the web preferences prompts. To avoid disturbing other users you can test just on yourself by setting preferences in CONTACTS screen 8. &lt;br /&gt;&lt;br /&gt;Some preferences are fairly obvious like &lt;span style="font-weight:bold;"&gt;4&lt;/span&gt; Items Per Page.  Others are a bit more mysterious like &lt;span style="font-weight:bold;"&gt;8&lt;/span&gt; Page Smoothing which can be used on users with older version of IE to cut down on the screen flickering during postbacks.&lt;br /&gt;&lt;br /&gt;A number of them like the ...PDF..  settings can be tested from the REPORT.BUILD report viewer, or HyperQuery functions like CustOpenSalesOrders which provide export links for PDF viewing.&lt;br /&gt;&lt;br /&gt;I'll cover the mobile and attachments preference settings in later postings on those topics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-7130206406973766791?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/7130206406973766791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=7130206406973766791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/7130206406973766791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/7130206406973766791'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2012/01/top-ten-things-to-know-on-manage-2000.html' title='Top Ten Things To Know on Manage 2000 7.3'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-x0JSZhWqn2w/TxnKLiCIJvI/AAAAAAAAAPo/u-sG7-m_kec/s72-c/WebPreferences.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-6194797635560669381</id><published>2012-01-07T15:01:00.005-06:00</published><updated>2012-01-11T09:49:48.227-06:00</updated><title type='text'>In Defense of the Multi-Value Database</title><content type='html'>Reading Andrew E. Wade's chapter "Business Objects in Object Databases" of Andrew Carmichael's anthology of OO practitioners "&lt;span style="font-style:italic;"&gt;Developing Business Objects&lt;/span&gt;" from 1997 I am struck by the parallels between the advantages of Object Oriented databases and Multi-Value databases over RDBMS for complex business modeling such as ERP systems.&lt;br /&gt;&lt;blockquote&gt;RDBMSs provide a simple, flat, tabular view of all information. The user must map his application data structures, whatever they might be, into those tables. Other traditional database systems require similar mapping down to simple, flat records. The user must work at the level of only the table data structure and only a small set of simple operations (select,project,join). Now, if the application data structures is naturally simple and flat, and the application operations are also simple, this mapping is straightforward and not an issue. On the other hand, when the application structures and operations become complex, the RDMBS approach forces the user to deal with this directly.&lt;br /&gt;&lt;br /&gt;An ODBMS offers the ability to model an application in terms of objects, which may have any user-defined structure and any user-defined operations. &lt;span style="font-weight:bold;"&gt;Applications that require nested structures, dynamically varying sized structures, many-to-many relationships, and complex operations can map these directly&lt;/span&gt; to objects. &lt;span style="font-weight:bold;"&gt;Not only is the support far more efficient, far faster at run time, but the user may work at higher levels of abstraction&lt;/span&gt;. Instead of translating the application down to records and tuples with joins, &lt;span style="font-weight:bold;"&gt;the user can work directly with objects such as customers or manufacturing processes&lt;/span&gt;, and the natural, application-defined operations on these. &lt;span style="font-weight:bold;"&gt;The result is easier and faster for the developer and the end user&lt;/span&gt;.&lt;br /&gt;...&lt;br /&gt;&lt;h3&gt;When to Use an ODMS&lt;/h3&gt;...&lt;br /&gt;Second, &lt;span style="font-weight:bold;"&gt;if the application's information is complex and interconnected, an ODBMS can provide much better performance and ease of use&lt;/span&gt;. To contrast, if the information being modeled consists of simple, flat, fixed-length field, that fit nicely into tables, an RDMBS can be a fine fit. On the other hand, &lt;span style="font-weight:bold;"&gt;if the information contains complex structure, nested structures, dynamically varying sized structures, including images, audio, and video, all these can be represented directly&lt;/span&gt; as objects. Saving the need to translate not only eases the developer's load, but also eliminates the need to translate at run time, making it faster.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;To some users, the interconnections in their information model are even more important.&lt;/span&gt; In an RDBMS, such relationships are represented by creating secondary data structures, foreign keys. At run time, the system searches down two tables, comparing key values, until it discovers two that match.This search-and -compare process is called a join, an it's the weak point  of relational technology. Even with the help of indices, it's slow, and the bigger the database, the slower it gets. In an ODBMS, there is no need to create and manage secondary data structures... &lt;span style="font-weight:bold;"&gt;Referential integrity, a difficult issue in traditional database systems, comes along automatically and easily&lt;/span&gt;. Moreover, the traversal is direct, with no need to search or compare, resulting in performance that is orders of magnitude faster. &lt;span style="font-weight:bold;"&gt;The more relationships, the more the application will benefit&lt;/span&gt; from an ODMBS.&lt;/blockquote&gt;&lt;br /&gt;Although to my way of thinking the most critical advantage of Multi-Value databases is their elasticity. They accomodate change. And change is the greatest challenge to software development and software field operations.&lt;br /&gt;&lt;br /&gt;One example of this is the ability to add domain specific vocabulary to a database in the field. The I-Descriptor feature in file dictionaries allows one (among other things) to describe how the system should retrieve a single foreign field. This is, effectively, a class definition for a field level join. Once defined the foreign sourced field may be used as if it were local for query and record selection purposes. Some users shy away from creating new custom dictionaries, but I see this as teaching the database how to be more useful to the users, how to be more functional in the users natural business vocabulary. &lt;br /&gt;&lt;br /&gt;Some argue that Multi-Value is dead. I hear this mostly in context of sales and marketing. But the absolute dominance of the healthcare sector by Intersystem's Cache and its predecessor MUMPS would seem to contradict this assertion. Critics will point out that Cache is not Multi-Value, but it most certainly is NOT first normal! In fact, one can argue that the Multi-Value database design is a subset of Cache's architecture.&lt;br /&gt;&lt;br /&gt;I would argue that the default Multi-Value Telnet based UI is the major problem for sales and marketing. Cache supports HTML as an immediate client protocol. This has been a conspicuously missing piece in U2 and other Multi-Value vendors offerings. While there are many ways to mix-in HTML client protocols such as UO, RBO, BlueFinity, or developing your own data components as we did on the Manage 2000 team, these all introduce tons of extra complexity. On most Multi-Value platforms there is no native MV Basic way to simply and directly code HTML UI's.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-6194797635560669381?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/6194797635560669381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=6194797635560669381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/6194797635560669381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/6194797635560669381'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2012/01/reading-andrew-e.html' title='In Defense of the Multi-Value Database'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-3144491217782418458</id><published>2011-10-26T14:15:00.004-05:00</published><updated>2011-12-16T10:18:23.967-06:00</updated><title type='text'>Out Of the Box Experience (OOBE Newbie New)</title><content type='html'>&lt;div style="text-align: left;"&gt;Well the development cutoff of Manage 2000 7.3 sp3 is done.  I have upgraded our build system and development web server to sp4 where 7.3 future development will happen, and created the views for patching sp3.  Now I wait and wait and wait while Release Control readies installs for the field and customer sites slowly rollout new service pack upgrades or come on board from older major releases.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the areas I have been trying to enrich is the How To documentation on various web setup processes.  I hope this combined with more appropriate Sales Rep and Customer menus and default role preferences will make setting up external access to Manage 2000 less daunting, and thereby give more Manage 2000 sites ROI justification for upgrading to the newest Manage 2000 release.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/-ObOtQCA7oYU/TqhxJyvBPbI/AAAAAAAAAPc/FGZsH4zrIIk/s1600/MobileUser_Menu.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img src="http://3.bp.blogspot.com/-ObOtQCA7oYU/TqhxJyvBPbI/AAAAAAAAAPc/FGZsH4zrIIk/s400/MobileUser_Menu.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5667904544097516978" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 296px; height: 400px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Imagine Sales Reps, Service Personnel, Buyers for customers at trade shows pulling out their IPhone, Droid, or IPad and interacting directly with your Manage 2000 site.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-3144491217782418458?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/3144491217782418458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=3144491217782418458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/3144491217782418458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/3144491217782418458'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2011/10/out-of-box-experience-oobe-newby-new.html' title='Out Of the Box Experience (OOBE Newbie New)'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-ObOtQCA7oYU/TqhxJyvBPbI/AAAAAAAAAPc/FGZsH4zrIIk/s72-c/MobileUser_Menu.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-2329627654161553894</id><published>2011-08-27T16:51:00.003-05:00</published><updated>2011-08-27T17:23:53.226-05:00</updated><title type='text'>IE 9.0 Firefox 4,5,6... and counting and Chrome</title><content type='html'>Manage 2000 7.3 sp3 is now building in development with IE9 compatibility in standards mode with HTML 5.0 support. WhooooooooooooHooooooooooooooooo!!!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Development is scheduled to continue till mid-October giving a nice cushion for alpha testing to clean up any construction debris. So things are looking good for 7.3 sp3.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I still need to spend some quality time with the roiScreenControl used in the web product configurator to implement the new scrolled set capability and make it cross browser compatible with Chrome and Safari.  But other than that everything seems to be running well in IE9, Chrome, Firefox and Safari.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A nice side benefit of the IE9 project for 7.3 sp3 is that more of the mobile tools and applications slated for 7.4 will make an early appearance. The ESOP module in particular will start sporting a sleek mobile look with a sales product code browsing app with add to cart capability, and mobile formatted shopping cart and checkout pages.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-2329627654161553894?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/2329627654161553894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=2329627654161553894' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/2329627654161553894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/2329627654161553894'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2011/08/ie-90-firefox-456-and-counting-and.html' title='IE 9.0 Firefox 4,5,6... and counting and Chrome'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-2602200637817564415</id><published>2011-06-09T15:07:00.007-05:00</published><updated>2011-06-09T15:35:28.066-05:00</updated><title type='text'>Wizard's Work</title><content type='html'>&lt;div style="text-align: left;"&gt;Manage 2000 7.4 development now includes a wizard that is capable of generating a maintenance web function with single valued fields and scrolled sets somewhat akin to PWS.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/-CeoxElmLt0Y/TfEszx2bW6I/AAAAAAAAAPM/a21dfgZxbR0/s400/GeneratedWebMaintFunction.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 331px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5616319478374292386" /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;And there were a LOT of bytes in that elephant!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But the payback is a reduction in cost of writing web clients for Manage 2000 maintenance and posting functions, which we will leverage during the remainder of the standard system development cycle. And it will produce further payback as a tool for custom development projects.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; The Manage 2000 tooling for the faux scrolled sets leverages the ajax validation, last keys, and prompt stack features of the roiTextbox and provides smooth keyboard navigation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It takes just a few moments to select fields from a business transaction object and generate a working web function, which can be further enhanced and polished in Visual Studio.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://4.bp.blogspot.com/-Hq_RgvwQVf8/TfEs7pkuemI/AAAAAAAAAPU/NMsSnfPHPJE/s400/m2kBTOPostingWizard.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 394px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5616319613591517794" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-2602200637817564415?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/2602200637817564415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=2602200637817564415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/2602200637817564415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/2602200637817564415'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2011/06/wizards-work.html' title='Wizard&apos;s Work'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-CeoxElmLt0Y/TfEszx2bW6I/AAAAAAAAAPM/a21dfgZxbR0/s72-c/GeneratedWebMaintFunction.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-7337409145915043252</id><published>2011-03-08T17:34:00.008-06:00</published><updated>2011-03-08T18:20:50.932-06:00</updated><title type='text'>ITouch'd Manage 2000</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Well the Manage 2000 7.4 web repository is finally branched and 7.4 only development can now be checked in. But one last web tools development project did make it into the 7.3 sp3 code base before the branch; MT/M2000Mobile/M2000Mobile.aspx provides navigation based on MENU.MASTER trees and DEMO/MobileStockStatusByLoc/MobileStockStatusByLoc.aspx which provides an example application to copy.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The idea is to build HTML, javascript, and CSS styles that mimic mobile applications, rather than building applications in proprietary environments one end-user device at a time. Using micro-frameworks like WebApp.Net one can build a web page that looks and feels like a mobile app although it runs in the browser.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/-MVdsyix7MN4/TXbHKkuX9AI/AAAAAAAAAOU/j2nmyVvAFVg/s200/Login.png" style="cursor:pointer; cursor:hand;width: 135px; height: 200px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5581867772643111938" /&gt; &lt;img src="http://2.bp.blogspot.com/-12U3ZT92LdI/TXbHKtbTymI/AAAAAAAAAOc/Ux03ti3OLzo/s200/LoginEntry.png" style="cursor:pointer; cursor:hand;width: 132px; height: 200px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5581867774979066466" /&gt; &lt;img src="http://1.bp.blogspot.com/-XaktXP7FK6g/TXbHnGl4DEI/AAAAAAAAAOk/vgj6rLfty30/s200/Menu.png" style="cursor:pointer; cursor:hand;width: 133px; height: 200px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5581868262770609218" /&gt; &lt;img src="http://3.bp.blogspot.com/-Xywdfb62bmc/TXbHnVjZjwI/AAAAAAAAAOs/V0LPsnwxVyM/s200/OnHand.png" style="cursor:pointer; cursor:hand;width: 131px; height: 200px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5581868266786754306" /&gt; &lt;img src="http://4.bp.blogspot.com/-d88Mu70pz_s/TXbHnmWZt-I/AAAAAAAAAO0/2OzXtfto6Ls/s200/Avail.png" style="cursor:pointer; cursor:hand;width: 132px; height: 200px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5581868271295641570" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;Sp2 just went out the door so we won't be launching sp3 for awhile but it should be available in plenty of time for stocking stuffers.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-7337409145915043252?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/7337409145915043252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=7337409145915043252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/7337409145915043252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/7337409145915043252'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2011/03/i-touchmanage-2000.html' title='ITouch&apos;d Manage 2000'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-MVdsyix7MN4/TXbHKkuX9AI/AAAAAAAAAOU/j2nmyVvAFVg/s72-c/Login.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-1531796220630568296</id><published>2011-01-30T11:29:00.005-06:00</published><updated>2011-02-08T09:52:11.642-06:00</updated><title type='text'>iManage2000</title><content type='html'>This last month I've been testing and researching issues related to accessing Manage 2000 web functions from IPhone and Android based mobile devices.  Since these internet enabled devices include web browsers the basic ability to run Manage 2000 web functions is built right in.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However there are stumbling blocks to their usability. The most obvious problem is the small screen and the large complex pages of standard Manage 2000 web function pages. A little further examination reveals navigation problems in the drop down menus. These are rendered by Infragistics UltraWebMenu controls which do not work properly with WebKit based browsers. Another issue to consider is performance when accessing the net through slower connections. (How many G's are there in T1?)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, though you can go the discount route and setup phone desktop buttons to target specific standard Manage 2000 web functions, a little more work can lead to a much better user experience.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The road map to a better user experience includes replacing the standard heading banner with a navigation app based on IUI, WebApp.Net, or Sencha Touch.  The menus should still be administerable in MENU.BUILD, but the whole mobile menu tree would get loaded to the mobile browser as a multi-layer page with anchor navigation between layers.  This would provide the user with rapid menu navigation including familiar slide transitions and header navigation buttons.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Functions would work off of standard hyperlinks and load and postback in their usual fashion.  Though any specific mobile web function development should consider leveraging the layer tools in these micro-frameworks. Other mobile web function best practices would include avoiding the IG Grid in lieu of lighter weight options, minimizing the information displayed in any given layer to 5-7 items and providing &lt;i&gt;multiple choice&lt;/i&gt; data entry in place of &lt;i&gt;fill in the blank&lt;/i&gt; wherever possible. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sizing the formatting table to 480 x 320 can help give a design time feel for mobile screen territory at standard magnification. HTML meta tags like &amp;lt;&lt;b&gt;meta name="viewport" content="width=device-width; initial-scale=1.0;" /&amp;gt; &lt;/b&gt;can be used to control the magnification level of the web function when initially displayed. Since these micro frameworks tend to use CSS hiding techniques they interfere with the design time WSYIWYG in Visual Studio.  You can temporarily comment out the stylesheet link in the aspx file to get a better designer experience.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-1531796220630568296?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/1531796220630568296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=1531796220630568296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/1531796220630568296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/1531796220630568296'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2011/01/imanage2000.html' title='iManage2000'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-4179601543751334594</id><published>2010-12-17T15:30:00.008-06:00</published><updated>2011-02-10T11:00:21.477-06:00</updated><title type='text'>2 bits 4 bits 64 bits a dollar</title><content type='html'>The good news: "Mr Newby your new 64 bit Windows-7 8 gig package is ready for you."&lt;div&gt;The bad news: "Program Files or Program Files (x86)" and "How about that WOW6432Node Eh!"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sooooooo, I've been installing and uninstalling and tweaking vbproj files and futsing with Visual Build scripts and messing about with InstallShield 2010 scripts and repeating, ad naseum.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But if you are a developer loading up Manage 2000 7.3 sp2 web tools on 64 bit Windows 7 box and you should run into issues, be thankful, it could be much much worse.  The sp2 installs are now much more solid.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The most likely annoyance will be dataset references pointing into "Program Files" that can't be resolved because the dataset libraries are now in "Program Files (x86)".  You can, of course, simply delete them and then re-add them from the correct location on your box.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Or you can copy the typed library &lt;i&gt;en-masse&lt;/i&gt; from &lt;i&gt;Program Files (x86)&lt;/i&gt; to &lt;i&gt;Program Files&lt;/i&gt;. You just need to remember to copy over dlls anytime you regenerate them through the dataset utility.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another option is to use the Path Conversion Utility to do a mass change on all the vbproj files in a Manage 2000 web site.  This makes sense if all of your production and development web servers are 64bit.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have also added a PreBuild.cmd script at the Manage2000.vbproj level that you can add under advanced compile options "..\..\..\PreBuild.cmd" for a more surgical approach.  As you build projects it will convert the references from hardcoded to "$(ProgramFiles)" which will load and build in either 64 or 32 bit environment.  This will prompt you to reload the project during the build if it finds references that must be changed.   Otherwise it will let the build continue normally.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-4179601543751334594?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/4179601543751334594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=4179601543751334594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/4179601543751334594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/4179601543751334594'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2010/12/2-bits-4-bits-64-bits-dollar.html' title='2 bits 4 bits 64 bits a dollar'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-7870068977325917329</id><published>2010-11-06T12:20:00.004-05:00</published><updated>2010-11-12T15:41:38.500-06:00</updated><title type='text'>Manage 2000 7.4 Web - The Beginnings</title><content type='html'>Manage 2000 7.3 field release is well underway and I have finally got some of the bug reports I have been begging for since Beta.  Yes, be careful what you wish for.  But each one is a treasure that will make 7.3 sp2 a better more solid product when it launches in Q1 of 2011.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Perspectives 2010 is done and now I can turn my attentions to some serious development work for Manage 2000 7.4.  My first major task is to build a foundation for web update functions that will be as nice for the keyboard oriented users as PWS functions and that will be as quick to build for the developer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There have been 4 or 5 update web functions in Manage 2000 since release 7.1 and the BTO framework has always supported update business object processes.  But is is not an easy task to build an update web function and the user experience falters particularly for keyboard oriented folks in scrolled set scenarios.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is remarkable how effective one level of de-normalization in the user interface can be.  When you look around at the thousands of Manage 2000 PWS functions almost all of the screens are a collection of single valued prompts with a few scrolled sets.  The application developer can express the modeling of complex business processes quite efficiently with this one level de-normalization, taking the user through multiple screens/pages traversing deeper business processing levels. And I wonder if this does not reflect a characteristic of human perception to be interested in a set of data and its immediate context, but no further.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using grids to implement scrolled sets is like converting an all-terrain vehicle into a riding lawn mower;  sure it can be done, but is it the most practical approach? The programming model is too complex and the performance too poor.  A much leaner model that only does what is required for scrolled set entry and does not try to be a generalized do everything-2-dimensional container is needed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So here I am re-casting the SCROLL.MAINT logic Doug wrote 20 years ago into an HTML/JavaScript mold.  Am I going backwards, or am I bringing those things that worked and added value into the Dot World?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-7870068977325917329?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/7870068977325917329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=7870068977325917329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/7870068977325917329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/7870068977325917329'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2010/11/manage-2000-7.html' title='Manage 2000 7.4 Web - The Beginnings'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-3233542168092640964</id><published>2010-09-21T17:39:00.003-05:00</published><updated>2010-09-21T18:08:28.974-05:00</updated><title type='text'>REST Web Services from UniBasic</title><content type='html'>In the midst of working up some labs for Perspectives I started thinking about REST web service access from UniBasic.  The lab I happened to be working-up is on SOAP based RPC web service usage, for which we have a number of working examples and implemented projects.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But in creating services for Manage 2000 internal consumption I have all but abandoned SOAP RPC in favor of the far more elegant JSON REST model.  I am usually working in ASP.NET and IE DOM client land, thankfully with the prototype.js library. So the question of the day was what would REST JSON access look like from UniBasic and what are the central issues in using it?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well in addition to all the SOAPRequest support added with the UniBasic Extensions are a couple of simple little commands for retrieving the content from a URL.  Now URLs often return HTML intended for human consumption and are not very easy to parse.  The JSON REST model however returns very nice orderly string serializations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With something as simple as:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;CREATE.REQUEST.RTN.CODE = createRequest(URL:"?":QS,HTTP.METHOD,HTTP.REQUEST.HANDLE)                      &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;SUBMIT.REQUEST.RTN.CODE = submitRequest(HTTP.REQUEST.HANDLE,'','',HTTP.RESPONSE.HEADERS,HTTP.RESPONSE.DATA,HTTP.RESPONSE.STATUS)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;you can get orderly responses like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;HTTP.RESPONSE.DATA = {'oValItem':{'FileName':'CM', 'TableNbr':'', 'ItemId':'1024&lt;/div&gt;&lt;div&gt;', 'NewItemId':'1024', 'Valid':'True', 'Display':'Sears Systems, Incorporated', &lt;/div&gt;&lt;div&gt;'ErrorFlag':'False', 'ErrorMsg':''}}                                            &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;UniData does not yet include a JSON DOM to match the XML DOM of the UniBasic Extensions, but the parsing difficulties of JSON serializations are relatively minor.  And if you need to directly access JSON REST services in the middle of UniBasic code this seems like nice direct approach.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The real stumbling blocks aren't coding difficulties, but security of your application server if you open up the HTTP or HTTPS ports for UniBasic to "see" services on the Internet.  One answer to this is to go through a proxy server.  This also points out one of the benefits of the architecture of Manage 2000 with its ASP.NET arm which may be used in a similar manner to delegate interaction with the messy world away from your closely guarded business database into a DMZ area.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-3233542168092640964?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/3233542168092640964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=3233542168092640964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/3233542168092640964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/3233542168092640964'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2010/09/rest-web-services-from-unibasic.html' title='REST Web Services from UniBasic'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-4054807701875449774</id><published>2010-09-02T14:53:00.020-05:00</published><updated>2010-09-02T18:24:10.131-05:00</updated><title type='text'>Dynamic Dropdowns and TM JSON arrays</title><content type='html'>&lt;div&gt;&lt;div&gt;Whether you call it RIA or Web 2.0 or AJAX enabled, there is an evolutionary process taking place on the web these days with UIs morphing from BLOCK-TERM like full page postbacks to much more granular dynamic changes in the page as the user interacts with it. And you can certainly see the effects of this progression in Manage 2000 release 7.3.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A developer friend asked if I preferred coding in VB in the code-behind ("code-beside" in the new parlance) or on the client using javascript and such. This is one of those questions that makes my brain churn for awhile.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The central conclusion I finally came to was that if it makes the UI more convenient for the user, that I dynamically change control configurations (like reloading drop down options based on previous answers they've selected) as they progress through a page then I prefer taking manual control on the client using javascript. I still use code-behind and aspx templates to push the HTML out in the first place, but then shift to javascript-AJAX-JSON-DHTML to make the user interface reactive and dynamic so that it responds more intelligently to the conversation that the user is having with it without having to pause and reprocess major Page construction code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So how does one go about dynamically loading an HTML SELECT with options from a Manage 2000 TM table?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have added a new service called GetTMTable in /mt/JSONServices for just this purpose, using much of the same code as my last post:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Private Function GetTMTableAsJSONArray(ByVal context As HttpContext) As System.Text.StringBuilder&lt;/div&gt;&lt;div&gt;Dim TableNbr As String = context.Request.QueryString("TableNbr")&lt;/div&gt;&lt;div&gt;Dim result As New System.Text.StringBuilder&lt;/div&gt;&lt;div&gt;Dim arTableEntries As New System.Collections.Generic.List(Of Array)&lt;/div&gt;&lt;div&gt;Dim ds As New ROISystems.Components.roiDataSet&lt;/div&gt;&lt;div&gt;Dim TableMaster As New ROISystems.WebControls.roiTableMaster&lt;/div&gt;&lt;div&gt;ds = TableMaster.GetTable(TableNbr)&lt;/div&gt;&lt;div&gt;For Each entry As DataRow In ds.Tables("VALIDATION_Validation_Info").Rows&lt;/div&gt;&lt;div&gt;Dim row() As String = {entry.Item("Code"), entry.Item("Desc")}&lt;/div&gt;&lt;div&gt;arTableEntries.Add(row)&lt;/div&gt;&lt;div&gt;Next&lt;/div&gt;&lt;div&gt;Dim JSONSerializer As New System.Web.Script.Serialization.JavaScriptSerializer&lt;/div&gt;&lt;div&gt;result.Append(JSONSerializer.Serialize(arTableEntries))&lt;/div&gt;&lt;div&gt;Return result&lt;/div&gt;&lt;div&gt;End Function&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is the js portion of my testcode.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;function LoadTable() {&lt;/div&gt;&lt;div&gt;var Site = document.location.pathname.Field('/', 2, 1);&lt;/div&gt;&lt;div&gt;var svcUrl = document.location.protocol&lt;/div&gt;&lt;div&gt;+ '//' + document.location.host&lt;/div&gt;&lt;div&gt;+ '/' + Site + '/MT/JSONServices/GetTMTable.ashx';&lt;/div&gt;&lt;div&gt;var TableNbr = $F('TableNbr');&lt;/div&gt;&lt;div&gt;var qs = 'TableNbr=' + TableNbr + '&amp;amp;Cid=' + $F('hedtcid');&lt;/div&gt;&lt;div&gt;new Ajax.Request(svcUrl + '?' + qs, {&lt;/div&gt;&lt;div&gt;method: 'get', asynchronous: false,&lt;/div&gt;&lt;div&gt;onSuccess: function(transport) {&lt;/div&gt;&lt;div&gt;var arTableEntries = transport.responseJSON;&lt;/div&gt;&lt;div&gt;// clear and reload the dropdown with the new table&lt;/div&gt;&lt;div&gt;$('ddlTMTable').options.length = 0&lt;/div&gt;&lt;div&gt;$A(arTableEntries.each(function(item) {&lt;/div&gt;&lt;div&gt;var opt = document.createElement('option');&lt;/div&gt;&lt;div&gt;opt.text = item[1];&lt;/div&gt;&lt;div&gt;opt.value = item[0];&lt;/div&gt;&lt;div&gt;$('ddlTMTable').options.add(opt);&lt;/div&gt;&lt;div&gt;}))&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;});&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The result is blindingly fast reloads of the dropdown list from various tables.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When you do finally postback you will run into some MS security checking unless you disable event checking in the page declaration in the aspx file, or in a web config setting:&lt;/div&gt;&lt;div&gt;@ Page EnableEventValidation="false"&lt;/div&gt;&lt;div&gt;or&lt;/div&gt;&lt;div&gt;pages enableEventValidation="false"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You may also run into occasional confusion during postback on the part of webcontrols code trying to figure out why what is coming back doesn't match what was sent out. To avoid this confusion you can either just use plain ol HTML controls or check the Request.Form("lbID") array directly if it gets to be a problem.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately I had to change the roiTableMaster control to remove a dependency on roiPage so that it would work out of JSONServices. This makes it difficult to patch, but it is all better for 7.3 sp2.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the mean time you could, of course, implement a version of /mt/JSONServices that descends from roiPage rather than IhttpHandler, it just would have all the application overhead that roiPage carries around.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-4054807701875449774?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/4054807701875449774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=4054807701875449774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/4054807701875449774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/4054807701875449774'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2010/09/dynamic-dropdowns-and-tm-json-arrays.html' title='Dynamic Dropdowns and TM JSON arrays'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-8550326243754507470</id><published>2010-07-21T17:46:00.002-05:00</published><updated>2010-07-21T18:00:53.683-05:00</updated><title type='text'>JSON Conversions</title><content type='html'>So, I am integrating a provided web page into a Manage 2000 site and I need to supply this external page with a JSON array of data on the querystring based on the contents of a Manage 2000 TM Table.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;How to get a JSON serialization out to the client world?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is a very nice little namespace that I have not previously run across, System.Web.Script.Serialization.  And in it you will find a JavaScriptSerializer class (read JSON serializer!).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With the JavaScriptSerializer you can convert a .Net Hash to or from a JSON object, or a .Net System.Array to or from  a JSON array, or a bunch of other mappings including your own.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my case I want to end up with a JSON array of elements with each element comprised of an array of code description pairs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;    Private Function GetTMTableAsJSONArray(ByVal TableNbr As String) As System.Text.StringBuilder&lt;/div&gt;&lt;div&gt;        Dim result As New System.Text.StringBuilder&lt;/div&gt;&lt;div&gt;        Dim TM As New System.Collections.Generic.List(Of Array)&lt;/div&gt;&lt;div&gt;        Dim ds As New ROISystems.Components.roiDataSet&lt;/div&gt;&lt;div&gt;        ds = TableMaster.GetTable(TableNbr)&lt;/div&gt;&lt;div&gt;        For Each entry As DataRow In ds.Tables("VALIDATION_Validation_Info").Rows&lt;/div&gt;&lt;div&gt;            Dim row() As String = {"", ""}&lt;/div&gt;&lt;div&gt;            row(0) = entry.Item("Code")&lt;/div&gt;&lt;div&gt;            row(1) = entry.Item("Desc")&lt;/div&gt;&lt;div&gt;            TM.Add(row)&lt;/div&gt;&lt;div&gt;        Next&lt;/div&gt;&lt;div&gt;        Dim JSONSerializer As New System.Web.Script.Serialization.JavaScriptSerializer&lt;/div&gt;&lt;div&gt;        result.Append(JSONSerializer.Serialize(TM))&lt;/div&gt;&lt;div&gt;        Return result&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    End Function&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Yes, the JavaScriptSerializer is my new favorite toy for transforming data during client side AJAX activity.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-8550326243754507470?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/8550326243754507470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=8550326243754507470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/8550326243754507470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/8550326243754507470'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2010/07/json-conversions.html' title='JSON Conversions'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-5713929344557546484</id><published>2010-07-09T11:45:00.004-05:00</published><updated>2010-07-09T14:07:44.503-05:00</updated><title type='text'>Hyper Activity</title><content type='html'>A recent treasure from our 1st live Manage 2000 7.3 site led me back to researching performance issues in the Pegged Detail page of ItemActivity.  This has been a long standing issue in the field for certain customers on certain parts under certain circumstances. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Previous optimizations have included converting dynamic arrays to dimensioned arrays when handling the TD_ITEM_PEG_ACT_RESULT file items.  But even with attributes stored in separate dimensioned elements the immense number of values that may be generated in the real world overwhelm the UniData box and then moving the gigantic business object to the web server overwhelms that box.  The resulting user experience "just sucks".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The real detail work of analyzing pegged detail is done in SUB.BUILD.ITEM.ACT.PEGGED, and entails building a number of attributes for each detail and sorting by date and by a peculiar transaction type order.  And there is no good way of separating the selection and sorting of keys from generation of detail data as described in the PAGED.BTO document because the whole point is to keep a running total of availability and a number of calculated and summarized values.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To meet these requirements and scale to many thousands of lines of detail I created a process work file keyed by date and by sequence number and wrote simple flat records for each detail. Then SSELECT the work file and update the small simple records with the running total fields.  This replaces a LOCATE and INSERT loop that hockey sticks as the the value count exceeds a thousand.  And finally write the results in pages to the WEB_COOKIE_DATA file where each page record only contains, say 25 (users current items per page preference) values for each attribute.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The business object returns only the 1st page of pegged detail and the cookie where the rest of the pages may be found.  The web page may then use another business object to read any page of the result the user wishes to view. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Where the business object is handling 3000-4000 details the whole-view multi-valued set approach was taking 6+ seconds on a modern Itanium UNIX box.  The work file approach reduced this to less than 1/2 second.  And testing shows a performance curve up to 20,000 details running at about 7,000 details per second on our development box.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On the web side the performance improvement is even more dramatic as the dataset and grid processing on large local datasets just overwhelms the web server processor.  Eliminating the large business object result, and asking the web server to only create objects representing a single page of the pegged detail, results in near instantaneous page changes even with the trip back to the application server to pick up the page data.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Conventional wisdom says memory is fast, disk is slow. But in this particular scenario it is much more efficient to create a work file, populate it, SSELECT it and work with small flat dynamic arrays than to follow the standard path and attempt in memory sorting of large deep dynamic arrays.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-5713929344557546484?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/5713929344557546484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=5713929344557546484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/5713929344557546484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/5713929344557546484'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2010/07/hyper-activity.html' title='Hyper Activity'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-9212849721139976174</id><published>2010-06-03T17:41:00.013-05:00</published><updated>2010-06-11T11:12:13.261-05:00</updated><title type='text'>Sub Valued Level Prompting Details</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MzPOQw5WKOI/TAg3RS4760I/AAAAAAAAALQ/JzP6uq9PTUk/s1600/AttachmentSVMLevel.JPG"&gt;&lt;/a&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;How do you fixup the screen and do cross referencing and other validations when you use SUB.VALUE.PROMPTING on a SUB.MT500 screen?&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Here is an example where we want to prompt for multiple file names and within each file for multiple item ids.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;img src="http://1.bp.blogspot.com/_MzPOQw5WKOI/TAg0X9UHtgI/AAAAAAAAAK4/PzI9xXNN49Y/s320/AttachmentScreen.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5478686532896798210" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 320px; height: 225px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:arial;"&gt;Instead of calling SUB.VALUE.PROMPTING directly from the SCREEN, call your subroutine which in turn will call SUB.VALUE.PROMPTING.&lt;/span&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;span class="Apple-style-span"   style="font-family:arial;color:#000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;img src="http://2.bp.blogspot.com/_MzPOQw5WKOI/TAg06UiCwrI/AAAAAAAAALA/0OQ7tk0-_y0/s320/ScreenBuildC2.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5478687123244761778" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 320px; height: 225px; " /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; font-family:Georgia, serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://3.bp.blogspot.com/_MzPOQw5WKOI/TAg1VCA400I/AAAAAAAAALI/7i5aVXIb-iM/s320/ScreenBuildPWS.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5478687582130328386" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 320px; height: 225px; " /&gt;&lt;/span&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Remember to add right justified fields using the PWS screen in SCREEN.BUILD if you want the count of sub-valued items to line up nicely.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:arial;"&gt;You can add logic to execute only at the sub-valued level by checking X_Data_2 for the FROM.SCROLL.MAINT flag.&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'Times New Roman';"&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;2200* Before prompt logic for Item_Attachments    &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;*  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     IF INDEX(Prompt.X_Data_2, 'FROM.SCROLL.MAINT', 1) &amp;gt; 0 THEN&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;* Handle inner event from SUB.VALUE.PROMPTING execution of SCROLL.MAINT&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;* Reset SIP.VAL.FILE to enable cross referencing&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        FILE.VALUE = FIELD(Prompt.Display_Text_2, ",", 2)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        FILE.LIST = MAIL.FILE.File_Attachments&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        CURRENT.FILE = FILE.LIST&amp;lt;1,FILE.VALUE&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        CALL GET.DB.FILE(SIP.VAL.FILE, CURRENT.FILE)   &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        ERROR = 0&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        RETURN&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     END&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;* Handle MAILBOX.ATT prompt event&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        GOSUB 2210;* Fixup Prompt Label with SUB.VALUE level display text&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;* Setup XREF stuff&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        Prompt.Conversions_Edits = '0X':@SVM:Prompt.Conversions_Edits&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;* remove compiled edits to force recompile&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        Prompt.Conversions_Edits = FIELD(Prompt.Conversions_Edits,roiDataMark4,1)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        CALL GET.DB.FILE(SIP.VAL.FILE, CURRENT.FILE)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        CALL SUB.VALUE.PROMPTING(ANSWER,SUB.DATA,P.NBR,PMT,SAVE.FN,VALUE) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     END   &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     RETURN&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://3.bp.blogspot.com/_MzPOQw5WKOI/TAg3RS4760I/AAAAAAAAALQ/JzP6uq9PTUk/s1600/AttachmentSVMLevel.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_MzPOQw5WKOI/TAg3RS4760I/AAAAAAAAALQ/JzP6uq9PTUk/s320/AttachmentSVMLevel.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5478689716964158274" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 320px; height: 225px; " /&gt;&lt;/a&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;If you want to fix up details like the screen labels and prompt text while at the sub-valued level you can do this sort thing:&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'Times New Roman';"&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;2210* Display SubValue Level Label Text&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     SET.NBR = Prompt.Scroll_Field_Type[2,2]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     LOCATE SET.NBR IN SCROLL.DATA&amp;lt;9,1&amp;gt; SETTING PRIMARY.IDX ELSE RETURN&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     PRIMARY.PMT.NBR = SCROLL.DATA&amp;lt;1,PRIMARY.IDX&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     PRIMARY.PMT = PID(PRIMARY.PMT.NBR)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     STARTING.ROW = PRIMARY.PMT&amp;lt;1,7&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     HEAD.ROW = STARTING.ROW-1&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     DISP.MASK = "L#":Prompt.Display_Length&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     ID.LABEL = XLATE("DICT ":CURRENT.FILE, "F0", 61, "X")&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     IF ID.LABEL = "" THEN ID.LABEL = "Item Id"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     LABEL.TEXT = FMT(P.NBR,"2\0R"):".":VALUE:' ':ID.LABEL&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     Prompt.Text = "Enter ":ID.LABEL&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     REDIS.MISC&amp;lt;10&amp;gt; = L(HEAD.ROW):C(PMT&amp;lt;1,6&amp;gt;):LABEL.TEXT DISP.MASK&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     PRINT REDIS.MISC&amp;lt;10&amp;gt;:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     RETURN&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;For Validation after prompting you can check the X_DATA_2 flag again and if you are at the multi-valued level simply request a repaint with ERROR=1000, but at the sub-valued level actually carry out input validations programmatically.  Remember that your sub-valued level validation logic is being called from SCROLL.MAINT so do not use ERROR codes like 200, 1000 as you would for SUB.MT500, simply 0 or 1.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'Times New Roman';"&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;3200* After prompt logic for Item_Attachments&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;*                                                  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     IF INDEX(Prompt.X_Data_2, 'FROM.SCROLL.MAINT', 1) = 0 THEN&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;* Remove SV Label Text&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        REDIS.MISC&amp;lt;10&amp;gt; = ''&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        ERROR = 1000&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     END ELSE              &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        IF NOT(SIPDATA) THEN RETURN&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        FILE.VALUE = FIELD(Prompt.Display_Text_2, ",", 2)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        FILE.LIST = MAIL.FILE.File_Attachments&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        CURRENT.FILE = FILE.LIST&amp;lt;1,FILE.VALUE&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        REC = XLATE(CURRENT.FILE, ANSWER, -1, 'X')&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        IF REC = '' THEN&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;* Message 502: %1 item %2 not on file&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;           CALL SCREEN.MSG(GetMessageText(502,CURRENT.FILE:@VM:ANSWER,0):";H;#M446065")&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;           ERROR = 1&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;        END&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     END&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;     RETURN&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-9212849721139976174?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/9212849721139976174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=9212849721139976174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/9212849721139976174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/9212849721139976174'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2010/06/sub-valued-level-prompting-details.html' title='Sub Valued Level Prompting Details'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_MzPOQw5WKOI/TAg0X9UHtgI/AAAAAAAAAK4/PzI9xXNN49Y/s72-c/AttachmentScreen.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-8982702704924875558</id><published>2010-04-26T18:22:00.004-05:00</published><updated>2010-06-04T16:07:50.189-05:00</updated><title type='text'>7.3 sp1 GA Cutoff Week</title><content type='html'>Well midnight Thursday is the end of the line for 7.3 sp1 development.  I've been cleaning and testing and sweeping up crumbs.  My latest clean-up binge has been the DEMO.DATA.  The lack of examples of web feeds has been bothering me for the last couple of years, so I bit the bullet and started creating a series of example web feeds for customers, and sales reps, and executives.  It's not the end-all and be-all of demo material, but at least it will be there in the SSP account.  And it has brought out a number crumbs to clean up :)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've got one or two more bugs (legitimately called treasures if I can fix them prior to them getting to the field)  to clean up before the Thursday cutoff.  But I am feeling really good about the Manage-2000 7.3 release.  It just has a ton of good stuff.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-8982702704924875558?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/8982702704924875558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=8982702704924875558' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/8982702704924875558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/8982702704924875558'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2010/04/71-sp1-ga-cutoff-week.html' title='7.3 sp1 GA Cutoff Week'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-8646206772465132960</id><published>2010-03-17T11:35:00.003-05:00</published><updated>2010-03-17T15:57:48.749-05:00</updated><title type='text'>The Wonderful World of Wizards</title><content type='html'>It has been an exhilarating and somewhat exhausting spring here in Minneapolis; from 2+ feet of snow pack to clear yards and 60 degree sunshine in 2-3 weeks.  Getting beta's underway has not been fast enough or clean enough for my impatient expectations.  But that's why you have betas to find the stumbling blocks. While waiting to enhance as-yet unidentified pre-enhancement conditions, I have been working on a pet project to create web function wizards with more specific generation capabilities.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My first re-visitation to IWizard has resulted in a modest little wizard that will help you generate a HyperQuery web function.  The HyperQuery control allows configuration of a REPORT.BUILD like query based web function.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The second undertaking turned out to be a lot more interesting and a lot more work.  The BTO Inquiry Wizard allows you to select a business object, select from its available fields and generate a working inquiry with all the data access components and controls configured, and with a FormView containing single valued fields labels and textboxes, and GridView controls for each set.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The great part about wizards is, of course, that you can take the results and enhance the heck out of them.  They provide RAD starts to developing your own web functions while still leaving you in total control.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-8646206772465132960?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/8646206772465132960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=8646206772465132960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/8646206772465132960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/8646206772465132960'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2010/03/wonderful-world-of-wizards.html' title='The Wonderful World of Wizards'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-2538535863138202496</id><published>2009-12-20T23:40:00.002-06:00</published><updated>2009-12-21T12:30:17.059-06:00</updated><title type='text'>Twas The Night Before Cutoff</title><content type='html'>&lt;span class="Apple-style-span"   style="  ;font-family:Verdana;font-size:13px;"&gt;&lt;h2  style=" ;font-size:14pt;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Twas The Night Before Cutoff&lt;/span&gt;&lt;/h2&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Twas the night before cutoff, when all through the house,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Not a programmer was keying, no&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;r&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; clicking their mouse.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;The updates all filed into StarTeam with care,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;In hopes that Seven_Three soon would be there.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Customers all nestled, snug in releases,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;While palmtops and I-Phones sat dark in valises&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;And Jimmy in &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;his &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;whites, and I in my cap,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Had just settled our brains for a long winter’s nap.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;When out &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;n the &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Net&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; there arose such a clatter,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;I sprang from &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;my twitter&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; to see what was the matter.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Away &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;from&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; my &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;W&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;indow&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; I crept like a &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;gnome&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Searched through my desktop&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; and opened up &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Chrome&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);  font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;The&lt;/span&gt; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);  font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;G&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);  font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;r&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);  font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;a&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);  font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;p&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);  font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;h&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);  font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;ic&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);  font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt; &lt;span class="Apple-style-span"  style="color:#38761D;"&gt;in the heading &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;of the new-painted &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;page&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Gave &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;mirth to results&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; there&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; listed by age&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;When, what should appear down the page not too far,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;But a Manage &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;2000&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; and 5 rating gold stars.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;With data entry screens,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; so lively and quick,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;I knew without thinking it started on&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; PICK&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;On UniData it thrives with GFE-free frames,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;And whistles, and whirrs, and remembers their names&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;"N&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;ow &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Namer&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;! now &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Schoolboy! now Farmboy &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;and &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Widget&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;!&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;On &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Motor Mouth&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;! On &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Cheese Head&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;! on &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Professor&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; and &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Gidget&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;!&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;To EDX,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; to SCREEN.BUILD, to BX REBUILD ALL&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Now &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;dot&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; away! D&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;ot&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; away! D&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;ot&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; away all!"&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;The founder with his satchel all stuffed full of papers.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;The performer and painter both cooking up capers.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;The young black bird that had grown up so tall,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Leading us onward from the end of the hall.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;As dry leaves that before the wild hurricane fly,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;When they meet with an obstacle, mount to the sky.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;So with hope of happy &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;havens away they all &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;flew,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Leaving a product &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;full of toys, and &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Last Keys&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; support&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt; too.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;And then from the Palace, gave we measured lecture,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;With summary and bullet of each treasured feature.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;As I drew in my head, with my neck like a crane,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Down the cat-5 a new release came.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;It spoke not a word, but went straight to its work,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;And filled all the data, then re-painted with perk.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;And laying a finger on top of my mouse,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;I attached on my portal a jpg'ed house!&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;And then on a lark in a moment of need,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;I dialed in from home to setup a Feed.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;It summarized sales figures and displayed on my mobile,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;It remembered my context and let me go global.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Saved out on disk, Install Shield's new folder,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;Languishing there whilest the weather grows colder.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;I heard it exclaim, ‘ere it shrank out of sight,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=" ;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;"Happy upgrade to all, and to all a good-night!"&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;- with inspiration from the Sniggletter&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0pt; margin-bottom: 0px; margin-left: 0pt; "&gt;&lt;span class="Apple-style-span"   style="font-family:'Times New Roman';color:#808080;"&gt;&lt;b&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="color:#38761D;"&gt;- and with apologies to Clement Clark Moore and Henry Livingston&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-2538535863138202496?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/2538535863138202496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=2538535863138202496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/2538535863138202496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/2538535863138202496'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2009/12/twas-night-before-cutoff.html' title='Twas The Night Before Cutoff'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-168378145129634896</id><published>2009-12-13T17:58:00.002-06:00</published><updated>2009-12-13T18:13:48.230-06:00</updated><title type='text'>Whats It All About ... Alpha</title><content type='html'>The alpha test cycle of Manage 2000 release 7.3 is complete.  Time to send it through the car wash and prepare for delivery to our beta sites.  Lane and Alky will have a busy January getting a clean release ready for Tina, Mark, and Mike.  I have to bite my development tongue and stop trying to sneak one more feature into the web tools.  Time to get busy on the component and control documentation and the web course-ware instead, to catch it up to the VS2008 world.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Can't stop thinking about the impact of all the development work from over the past two years for Manage 2000 sites going to 7.3.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-168378145129634896?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/168378145129634896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=168378145129634896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/168378145129634896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/168378145129634896'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2009/12/whats-it-all-about-alpha.html' title='Whats It All About ... Alpha'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-6372786616080598527</id><published>2009-11-27T11:45:00.004-06:00</published><updated>2009-11-27T15:14:59.335-06:00</updated><title type='text'>Sprinting To The 7.3 Finish Line</title><content type='html'>Funny things happen when you present your work to others.  Brain cells fire about what you wish you had done in addition to what you did actually accomplish.  I had just finished talking about the web last keys enhancements and was getting ready to talk about web feeds when some severely neglected axons and dendrites conspired to revolt, or in this case maybe just volt, and then it occurred to me...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, what if you put up the Manage 2000 7.3 site as an externally facing portal.  And what if the portals supported attachments.  Customers could attach documents to sales orders, or vendors could attach documents to purchase orders and internal users could interact with the attachments from the internal portals, or in fact from PWS functions.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I was not thinking I could sneak this in before Beta, but as of Wed. morning I have been merrily attaching objects via portals on our development box.  And more importantly (as Jim often reminds me) it's cute.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-6372786616080598527?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/6372786616080598527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=6372786616080598527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/6372786616080598527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/6372786616080598527'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2009/11/sprinting-to-73-finish-line.html' title='Sprinting To The 7.3 Finish Line'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-4800836975875861614</id><published>2009-10-07T20:13:00.002-05:00</published><updated>2009-10-07T20:26:37.727-05:00</updated><title type='text'>Summer's End 2009</title><content type='html'>Perspectives session material was due in last Friday.  Now I can get back to building new stuff.  I still haven't finished the display panel memory.  It is a small annoyance, but a general client side context persistence mechanism will come handy over and over.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There also remains some fleshing out of the metadata implementation.  In particular being able to set an M2k edit pattern and have a Regex generated and applied to the input would be sweet.  I'd also like to get any existing pattern matching or required validators to be automatically tied in...December is rapidly approaching, we'll see what we can sneak in.  The performance exception logging and user preference extensions are a must, so I guess I better start on those directly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I just put in a replacement for the dorky alerts with which I was displaying ?3 and ?5 help.  Now we have a nifty m2kShowMessage(hmtlMsg) js function with which it is easy to compose an HTML display and pop it up using an in-line div that won't set off the pop-up blockers.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-4800836975875861614?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/4800836975875861614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=4800836975875861614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/4800836975875861614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/4800836975875861614'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2009/10/summers-end-2009.html' title='Summer&apos;s End 2009'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-2690206215169841309</id><published>2009-08-22T22:57:00.002-05:00</published><updated>2009-08-22T23:11:26.380-05:00</updated><title type='text'>Now What To Do With All This Cool Stuff</title><content type='html'>So we've got prototype.js and .Net 3.5, what does that mean to the users.  Well for ESOP users it means a killer shopping cart app.  Fast, fast, fast.  Constantly saved carts.  In screen customer pricing and critical path availability date calculations.  Cart navigation using page-up, page-down, line-up, line-down keyboard keys, or of course, mousing. 2-3 click checkout.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SoPortal advance search now sports a faster cleaner data entry screen with instant validation displays.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ProductConfigurator generates CONFIG.CODE based model entry screens with high speed data entry using delimiter and section lengths.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And of course lots better cross browser support for Firefox users.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-2690206215169841309?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/2690206215169841309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=2690206215169841309' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/2690206215169841309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/2690206215169841309'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2009/08/now-what-to-do-with-all-this-cool-stuff.html' title='Now What To Do With All This Cool Stuff'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-1774075674256199780</id><published>2009-07-16T20:38:00.002-05:00</published><updated>2009-07-16T21:10:51.288-05:00</updated><title type='text'>Manage 2000 Web 2.0</title><content type='html'>No, I don't know what it means either.  But I do think the web user experience  on Manage 2000 7.3 is going to be noticeably and, in many cases, dramatically improved from the 7.1/7.2 technology.  It seems to me like the we are passing through the 3rd generation up the web UI S-curve.  With release 7.0 we dabbled with asp script based web infrastructure.  We've had a good run with Visual Studio 2003 and ASP.NET 1.1 as a basis for Manage 2000 7.1/7.2 releases.  And now with release 7.3 we are working on top of ASP.NET 3.5 using VS 2008 with more current infragistics controls and a much more robust client side javascript infrastructure library &lt;b&gt;roiGlobal.js&lt;/b&gt; with deeper support from the &lt;b&gt;Prototype.js&lt;/b&gt;, which underlies many other clientside toolsets such as &lt;b&gt;Ruby-On-Rails&lt;/b&gt; and &lt;b&gt;Scriptoculus&lt;/b&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Every project brings with it opportunities to enrich the roiGlobal.js library and move more time sensitive user interactions to the client-side world of javascript, D-HTML, JSON, and AJAX. Yet even as I explore these new environments and tools I find myself re-creating patterns from the PWS / SUB.MT500 world.  There are few things as elegant and powerful as the declaritive UI specificaton for a computer prompting a user which is called the PID in M2k geekspeak. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Following that pattern Manage 2000 7.3 web pages all have the equivalent of PID available.  It is defined in roiGlobal.js based on a Prototype.js class called a Hash.  It's name in nvcMetaData, and it is to the web function what PID(40) is to the PWS function.  That is to say that dynamically altering the metadata item for an HTML textbox effectively controls its behavior. Thus, application behavior can be achieved by setting properties of the metadata instead of having to code up all the necessary javascript. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-1774075674256199780?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/1774075674256199780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=1774075674256199780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/1774075674256199780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/1774075674256199780'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2009/07/manage-2000-web-20.html' title='Manage 2000 Web 2.0'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-4073254302158862930</id><published>2009-05-24T11:37:00.002-05:00</published><updated>2009-05-24T12:03:01.657-05:00</updated><title type='text'>Puttin On The Ritz</title><content type='html'>The Mid-Western User Group meeting was held on Thursday with folks coming in from as far away as Indiana and Illinois.  It was, as usual, a family reunion atmosphere with familiar faces and warm greetings.  What strikes me about the content, looking back at it, is the amount of information exposure possiblities.  MITS 2nd go-round on its report writer looks well done.  The NovoRoiSystems real-time SQL data warehouse continues to wow.  Now with more in-bound interfacing it is starting to grow into something much more significant than just an on-ramp to MS Reporting Services.  I spent some time on the growing ATOM/RSS news feed capabilities.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The most fun, for me, was showing off the 7.3 web UI improvements with Last Keys, Most Recently Used stacks and AutoFill.  We broke the seamingly endless barage of technical detail with YouTube clips from the "Puttin On The Ritz" Gene Wilder/Peter Boyle song and dance number in "Young Frankenstein".  Don't know that I could sing and dance on the same stage as Gene Wilder, but I feel pretty confident about being able to croon along with the monster!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After a memorial day break I'll be heading back into the 15 portal projects.  I am adding a news reader panel that can display a configurable Manage 2000 news feed, and converting them from XSLT generated forms to WebControls so that they can be controlled through the PageViewFilter system. Fun, fun, fun....&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-4073254302158862930?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/4073254302158862930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=4073254302158862930' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/4073254302158862930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/4073254302158862930'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2009/05/puttin-on-ritz.html' title='Puttin On The Ritz'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-3939337279259877045</id><published>2009-04-04T15:20:00.003-05:00</published><updated>2009-04-04T15:29:08.163-05:00</updated><title type='text'>Last Keys and Other UI Friendliness</title><content type='html'>The last keys project is winding down.  I just checked in the latest round of javascript upgrade for the m2kInputData function which includes a Most-Recently-Used stack on the up/down arrows, automatic display of validation name or description, and Auto-Fill from the MRU stack.  Yes scope creep is a problem, but they were low hanging fruit once the \LK infrastructure was developed. It would be wasteful not to gather them in while I was harvesting.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are still a few more i's to dot and t's to cross, but it is starting to feel pretty impressive when you type along on the devweb and get the sort of experience you are only used to from PWS.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next up will be some refactoring to reduce the startup time from PWS.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-3939337279259877045?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/3939337279259877045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=3939337279259877045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/3939337279259877045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/3939337279259877045'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2009/04/last-keys-and-other-ui-friendliness.html' title='Last Keys and Other UI Friendliness'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-4864470223802065282</id><published>2009-03-08T23:36:00.002-05:00</published><updated>2009-03-08T23:49:27.949-05:00</updated><title type='text'>Last Keys Part I</title><content type='html'>The Last Keys project is well under way.  I've just completed the conversion on the UniBasic side that will allow participation from the web side to work.  Last Friday I got far enough to run a few timings from an HttpHandler through from the web site and am getting last keys values in less than 1/30 of a second. So performance-wise the current design is proving out well.  Lots of work awaits in the roiTextbox and javascript libraries. Switching from heavy Unibasic work back to .NET seems alot like getting ones sea legs.  Takes a couple of days before I can code straight, or perhaps at the correct Microsoft pitched angles.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A major part of the speed I am seeing is from tools improvements that Doug and I were able to put into the CallRPCSub routine which shepards all the calls coming in across RedBack.  We've been able to shave .1 to .4 seconds off of each RPC call.  This has been patched back to 7.1 and 7.2 so 7.1sp7 and 7.2sp4 should show significant speed improvements for all the web functions. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-4864470223802065282?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/4864470223802065282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=4864470223802065282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/4864470223802065282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/4864470223802065282'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2009/03/last-keys-part-i.html' title='Last Keys Part I'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-3223577450686152513</id><published>2009-01-31T13:08:00.003-06:00</published><updated>2009-01-31T13:26:36.676-06:00</updated><title type='text'>Release 7.3 Project Progress</title><content type='html'>Despite broken ankles and bouts of pneumonia Doug and I finally have the Manage 2000 web functions building under VS2008.  There remains a little tweaking to do on the installations routines.  But at last I feel like I can concentrate on new feature development.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have started down the development list and finished my first significant web tools enhancement for 7.3, the integration of ECA's and the news feed system.  ECA's provide rich html scripting from all sorts of system events.  News feeds provide standard pluggable integration to Sharepoint and other web platforms.  Putting the two together really extends  the news source capabilities to 'broadcast' all sorts of automated news articles as the ERP systems churns through its machinations. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next up is Last Key integration between PWS sessions and web functions.  This will, in all likely hood, be the largest project I undertake for the 7.3 release (not counting the VS2008 ASP.NET 3.5 infrastructure upgrade).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am still in the early stages of design, but have identified a whole raft of issues that were not obvious to me during my initial rough cut do-ability considerations.  I didn't realize how much of the fun part of working on Manage 2000 are these design conundrums that must be puzzled and teased out.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-3223577450686152513?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/3223577450686152513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=3223577450686152513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/3223577450686152513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/3223577450686152513'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2009/01/release-73-project-progress.html' title='Release 7.3 Project Progress'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-387466861238571099</id><published>2008-12-12T14:27:00.004-06:00</published><updated>2009-02-01T11:36:55.790-06:00</updated><title type='text'>Visual Studio 2008 and Manage 2000 Web Functions</title><content type='html'>Mark your calendar 13:58 on December 12, 2008 the development staff completed the last of the 295 ASP.NET web projects, thus heaving the Manage 2000 7.3 web footprint on top Microsoft's not-so-backwardly-compatible Visual Studio 2008 designer.&lt;br /&gt;&lt;br /&gt;This is an important achievement in terms of product life expectancy as it puts the Manage 2000 web presence on supported Microsoft technology for at least the next 5 years.&lt;br /&gt;&lt;br /&gt;Hopefully, next time they will be a little kinder and gentler with backward compatibility.&lt;br /&gt;&lt;br /&gt;This is not the end of development for the 7.3 release. It is not even the beginning of the end, but merely the end of the beginning,to paraphrase Carnahan  paraphrasing Churchill.&lt;br /&gt;&lt;br /&gt;Next up is build and install capability so that as developers add and enhance application functionality we can easily re-install development sites and do integration testing.&lt;br /&gt;&lt;br /&gt;Then the real fun begins putting to good use all of the fantastic enhancements in ASP.NET 3.5 and Infragistics 2008 to make Manage 2000 7.3 web functions sizzle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-387466861238571099?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/387466861238571099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=387466861238571099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/387466861238571099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/387466861238571099'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2008/12/visual-studio-2008-and-manage-2000-web.html' title='Visual Studio 2008 and Manage 2000 Web Functions'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-107074288542483376</id><published>2007-02-12T01:11:00.000-06:00</published><updated>2008-11-15T13:13:25.346-06:00</updated><title type='text'>7.2 Release and Looking Ahead</title><content type='html'>Entry for February 11, 2007&lt;br /&gt;&lt;br /&gt;    After 10 days of negatives temps, some days with -5 for a high, I am ready to be out of the deep freeze. Past -10 my car sleeps with a trouble light under the hood to make sure I can get the kids to school in the morning. Maybe time to add that block heater.&lt;br /&gt;&lt;br /&gt;    The 7.2 release is currently in Beta. Lots of positive feedback, as well as, bug reports and clean-up work.&lt;br /&gt;&lt;br /&gt;    We are currently conducting training presentations to helpline, custom code and consultants. Last week I covered PageViewFilters and other tools enhancements, as well as, the new web ProductConfigurator interperter for implementing CTO on the web.&lt;br /&gt;&lt;br /&gt;    I continue to scout out the direction ahead with Visual Studio 2005 and ASP.NET 2.0. The way looks rough but passable at the moment, though where we all end up is sure to be filled with complaints. There are some tools I can write to smooth the way, but there are significant short-comings in the VS2005 IDE. The VS team seems to have fixated on codeless access to SQL and forsaken all other paths. Everything is focused on stateless, first-normal data updates between flat UI components and the SQL database, or some other object which must be organized along the same CRUD lines in a first normal world. They do not appear to have made any accomodation for web base applications with rich hierarchical complex UI's. Apparently we are supposed to use winforms unless we are implementing an Amazon.com web site. There are web sites and then there are web applications. Microsoft appears to be pressuring the web application camp back to winforms.&lt;br /&gt;&lt;br /&gt;    In particular databinding UI from hierarchical datasets to webcontrols is just plain gone. They have drastically different models for winform data access as compared to web forms. They are pushing ObjectDataSource and SqlDataSource as codeless access to databases and great productivity enhancements. But these depend on new TableAdapters within the dataset to orchestrate flat table accesses back and forth to the DB. They are tightly coupling the UI to the DB.&lt;br /&gt;&lt;br /&gt;    For thoses of us with ACID processes based on hierarchical datasets there is no room to fit in. The idea that first normal database requirements are going to start driving UI design is just plain scary. It may be ultra productive for the person creating it, but it's going to be butt ugly for the poor soul who has to actually use such software.&lt;br /&gt;&lt;br /&gt;    On another front I am watching Orcas with amusement. They are so hyped about LINQ and the ability to hook up SQL query statements to gridview. Manage 2000 has been delivering web query capability for over 5 years which include embedded sub-tables and hyperlinking. Our queries can even be defined from a report generator UI. I predict that when LINQ gets to field everyone will discover there is still a lot of problems because they will often want a three dimensional query result and you can't get that from a first-normal database without a lot of effort.&lt;br /&gt;&lt;br /&gt;    The reign of quality fights for a hierarchical object oriented UI. The reign of quantity fights for simple flat table models. Who will win?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-107074288542483376?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/107074288542483376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=107074288542483376' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/107074288542483376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/107074288542483376'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2007/02/72-release-and-looking-ahead.html' title='7.2 Release and Looking Ahead'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-1492929602365106157</id><published>2006-10-10T01:10:00.000-05:00</published><updated>2008-11-15T13:24:59.090-06:00</updated><title type='text'>ERPBusinessObjectService - M2k SOA</title><content type='html'>Entry for October 09, 2006&lt;br /&gt;&lt;br /&gt;    Manage 2000 7.2 sp0 is "in the can".  Most of the preparations for Perspectives have been finished.  And now the development team is settling into a pleasant lull after the long hard summer.  There remain the perrenial small projects to occupy us until the beta sites start feeding us the work which will make 7.2 "sea-worthy".&lt;br /&gt;&lt;br /&gt;    I am happy with amount of "cool stuff" which made it into 7.2.  And yet, in each major project, I can see another level to climb up to.&lt;br /&gt;&lt;br /&gt;    The ERPBusinessObjectService, in particular, has some very important new features.  Unfortunately there is no session planned for it as Perspectives.  But maybe I can sneak in some attention to it.&lt;br /&gt;&lt;br /&gt;    There is the beginnings of legitmate interest in web services among clients, and 7.2 ERPBusinessObjectService provides new useful methods:&lt;br /&gt;&lt;br /&gt;        * ValidateRecordKey -  for validating parts and customers without having to export and refresh Manage 2000 file contents to SQL tables&lt;br /&gt;        * CallUdtSub - for running UniBasic subroutines across SOAP.  A Unibasic programmer can write a routine and a web developer can instantly make use of it.&lt;br /&gt;        * UniQuerySelect, GetKeysFromCookie, and GetItemsAsXML provide the foundation for running UniQuery processes returning XML content.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-1492929602365106157?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/1492929602365106157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=1492929602365106157' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/1492929602365106157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/1492929602365106157'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2006/10/entry-for-october-09-2006-manage-2000-7.html' title='ERPBusinessObjectService - M2k SOA'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-5974652513312431893</id><published>2006-04-19T01:09:00.000-05:00</published><updated>2008-11-15T13:26:04.911-06:00</updated><title type='text'>Product Configurator Challenge</title><content type='html'>Entry for April 18, 2006&lt;br /&gt;&lt;br /&gt;    The long nights of winter have passed.  The garden is uncovered.  Most of the spring pruning is complete and life is bursting out to greet the strong sun shine.&lt;br /&gt;&lt;br /&gt;    FRx deployment has been passed along to Lane.  The PageView Filter system has been completed.  The web Product Configurator is undergoing testing and revision.  Some version of rule support will definitely make the 7.2 cut.  Trying to run Unibasic prompt after subs in the middle of a web page will not make the cut.  Although it does make my head hurt.&lt;br /&gt;&lt;br /&gt;    "The World Is Flat" continues to resonate with increasing numbers of 7.1 Manage 2000 sites.  We have work to do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-5974652513312431893?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/5974652513312431893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=5974652513312431893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/5974652513312431893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/5974652513312431893'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2006/04/entry-for-april-18-2006-long-nights-of.html' title='Product Configurator Challenge'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-8296484474556425732</id><published>2006-02-10T01:08:00.000-06:00</published><updated>2008-11-15T13:26:52.006-06:00</updated><title type='text'>FRx Interuptions</title><content type='html'>Wimpy Winter Weather here in Minneapolis this year.  The side roads are finally died white after todays not so rush hour dusting.  Like one who grew up with the white trunks of a birch forest there is an unconscious expectation of color reversal which surprises me when it goes missing.&lt;br /&gt;&lt;br /&gt;    Round II of PageViewFilters and completion of the CTO Interpreter have languished while I help with field support for the FRx interface to the GltInquiry web function. &lt;br /&gt;&lt;br /&gt;    All of my relections lately are colored by Thomas Friedman's "The World Is Flat".  I wonder about the shift of emphasis from internal development in Manage 2000 to building the myriad of interfaces onto complimentary products available with 7.1.  I wonder how the 7.1 web function capabiliy will help customers cope with the flattening world.  How fast is the game changing.  How much time do business have to adjust, deploy, invent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-8296484474556425732?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/8296484474556425732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=8296484474556425732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/8296484474556425732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/8296484474556425732'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2006/02/wimpy-winter-weather-here-in.html' title='FRx Interuptions'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7246998669224682678.post-1236408274111283235</id><published>2005-12-07T01:05:00.000-06:00</published><updated>2008-11-15T13:28:32.853-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dec 2005'/><title type='text'>Through the Looking Glass</title><content type='html'>Well I am getting ready for move number 3 since EPICOR bought out ROI Systems.  Friday I pack up my cubicle for relocation to the 11th floor.  Somehow the square footage of cubible allocated per programmer continues to dwindle.  I am hoping the accountants are not shooting for equilibrium based on square foot costs in Monterey.  On the upside the hallways are very wide and luxurious!&lt;br /&gt;&lt;br /&gt;    As I reflect on email queries from client web programmers obviously schooled in SQL and not so familiar with the Unidata world or the Manage 2000 toolset, it is clear to me that the REPORT.BUILD interpreter and the roiHyperQuery control offer extremely cheap efficient options for exposing ERP data out to the world.  Only it is difficult to help them 'see' it.  The expectation that knowing sqlCommand is enough is too stultifying.  Is it worth learning another layer beyond Microsoft technology?  When that layer provides CrossRef and Function Security and F1 help and edit patterns and defaults maintainable in dictionaries on the application server, and dictionary driven queries, and interactive UI screens based on REPORT.BUILD prompt definitions, the answer to me is clearly yes.  But you have to expect to spend some time coming up to speed.  There is a lot of tooling knowledge to learn.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7246998669224682678-1236408274111283235?l=peternewby.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://peternewby.blogspot.com/feeds/1236408274111283235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7246998669224682678&amp;postID=1236408274111283235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/1236408274111283235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7246998669224682678/posts/default/1236408274111283235'/><link rel='alternate' type='text/html' href='http://peternewby.blogspot.com/2005/12/well-i-am-getting-ready-for-move-number.html' title='Through the Looking Glass'/><author><name>Peter Newby</name><uri>http://www.blogger.com/profile/00570041695435240933</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_MzPOQw5WKOI/Sb7ZI5p8E7I/AAAAAAAAAIQ/qU75qsZokMk/S220/PeterNewby.jpg'/></author><thr:total>0</thr:total></entry></feed>
