|
 This blog is a forum for members of the Sage 300 ERP (Accpac) development team to post their thoughts. It will include news on Sage 300 ERP (Accpac) development and other topics of interest to our developers.
-
Many people are happy to use the mouse extensively while doing data entry, are happy looking up everything in Finders and are happy to consider many fields when entering an accounting document; but, Sage ERP Accpac 5.6A has many productivity features to help you enter data very quickly and efficiently like keyboard shortcuts, good default field values and hiding unused fields. This blog post covers a number of Accpac features that can effectively make you more productive. We will look at the Accpac Order Entry screen and what features are available to make you more productive. Below is the Accpac Order Entry screen:

This is a fairly large screen with many options and potentially many fields to enter. You certainly don’t want to think of and type something into every single field.
The Accpac documentation lists all the Accpac keyboard shortcuts in the on-line help, but beyond these Windows has many keyboard shortcuts as well and often these are not well documented. Below is part of the keyboard shortcuts section from the online help:

Setup Defaults
Accpac has some powerful methods of defaulting fields. Many fields are defaulted to what you want when you choose a customer or an order template. It is well worth your time setting up all your customer records correctly or setup a series of order templates, so that you don’t have to override very many fields when entering orders. It is assumed that you set up the customer or template once, and then enter many orders for that customer or with that template. Saving time at order entry is what you want to do.
Use the Alt Key
First notice any notebook tabs or buttons that have letter underlined in them such as the “Customer” notebook tab. The underlined letter means that you can press this by holding down the Alt key and pressing the underlined letter, in this case Alt-u. This is a handy shortcut to choose notebook tabs, press buttons or access menu items right from the keyboard without reaching for the mouse, or having to move the mouse over the button or tab and clicking it. On some versions of Windows these underlines are hidden until you press the Alt key. Sometime there are shortcuts on groups of fields that you can use the Alt key to quickly move to (but not in Order Entry).
Zoom Forms
Each data entry grid (or table) on the Accpac main data entry screen has a “zoom” form. Generally Accpac has so many features that by default each table is very long with many columns and you have to do a lot of horizontal scrolling to see them all. This can be annoying. You have two options. One is to use the grid controls ability to hide columns to eliminate ones you don’t use, the other is to use the Zoom form. If focus in on the grid hitting F9 will bring up the Zoom form, many forms (like Order Entry) have a button to access it (which doesn’t require focus be on the grid). In Order Entry this the Item/Tax button that you can shortcut with Alt-a. This then gives you a form that contains all the columns from the grid in its own form where you can see all the fields at once. From this form you can create new detail lines and navigate around the existing ones.

Tabbing
The keyboard way to get from field to field is via the Tab key (sorry DOS users not the Enter key). One way to move from field to field quicker is to hide any fields that you don’t use. To do this, use the File – Customize menu to hide the un-used fields. In the grid control, hide a column by sizing it down to nothing. Using a macro you can re-arrange the tab sequence or remove fields from the tab sequence without hiding them.
Grid/Tables
The key to using the grid effectively is to customize it to be optimum for your data entry. Hide any fields you don’t use and move any rarely used fields to the end of the line. Have the most frequently used fields at the front. You hide fields by sizing them down to zero width. Once hidden you can get a field back by right clicking on the Grid’s column headings and selecting the hidden field (or choose restore defaults to get everything back).
Reducing the number of columns is nice because you tab through less fields, don’t need to scroll horizontally so much and when you are entering lines when you tab off the end of one line, the grid automatically creates a new line so you can continue entering data un-interrupted (which you reach quicker with less columns).
Edit Controls
Edit controls aren’t all that interesting. You can right click on them to get a context menu to do things like cut and paste. All the normal shortcuts for cut and paste work fine here. More interesting are edit controls with finders or new buttons. You can activate the new button by hitting the Insert key. Page Up/Page Down will navigate to next and previous records. Ctrl-pageup/ctrl-pagedown will go to the first and last records. F5 will activate the finder.
The concept of entering data here is to use short quick to type codes for things. This is very much how super-markets do their produce checkout. Rather than using a lookup function for every produce item being weighed, the clerks have most of them memorized and just quickly enter produce codes and only need to lookup obscure pieces of produce being bought. Accpac is the same way. Once you’ve been entering data for a while you remember the main customer numbers and item numbers and can type them in very quickly without using the Finder. It works best if frequently used items have short numbers and you can process them quickly, and then just glance at the description field to ensure you are correct.
Fast Order Entry
Let’s see how to configure O/E Order Entry for maximum efficiency to enter simple orders. We will assume that the defaults brought in for the customer will set most header fields correctly and that we only need to enter the customer number, then the items and quantities. Below is the Order Entry screen where we’ve hidden most of the fields using the File – Customize menu and we’ve hidden most of the columns in the order line grid.

Below is the UI Profile listing all the fields we hid:

So let’s see what it now takes to enter an order. We will assume you start with a current order selected and focus in the Order No. field.
· Hit the “Insert” key to create a new order.
· Hit “Tab” to get to the customer number field.
· Type the customer number (say “1200” if you are using sample data).
· Hit “Tab” until you get to the order detail grid (in my case twice once to move to the customer information drilldown and then again to get to the grid, this depends on how many fields you have hidden).
· Hit “Tab” to move to the item entry field
· Type an item number (say “A11030” for sample data).
· Hit Tab twice to move to the Quantity ordered field
· Enter the quantity (say 2)
· Hit tab and a new row is created.
· At this point continue entering items and quantities until done.
· Now press Alt-S to post the order
· Hit Y or N depending on whether you want to print the order confirmation.
This was rather a long procedure to enter an order, but it is key by key. In total we hit Insert once, tab 7 times, Alt-S and the number of characters in the customer number, invoice number and quantity. Generally this is an extremely economical way to enter orders.
Summary
Hopefully this blog posting gave you some ideas on how to setup Accpac for efficient data entry and provided some information on some keyboard shortcuts that can speed up your data entry. Other screens have special productivity helping features like quick entry modes, be sure to check these out too. Happy typing.
with 1 comment(s)
|
-
Over the past couple of months the Sage Accpac User Assistance Team (aka Documentation Team) has connected with several of you (our partners and customers) to get your feedback on Sage ERP Accpac messaging, in-product help, and online documentation. Here’s a summary of what you’ve told us, and the improvements we’re working on.
Messaging
You have made it clear that we need to improve not only the content of the messages, but their delivery. You’re either bombarded with too many messages, or the few that you do encounter are too cryptic to be understood. Many of you mentioned downtime and frustration trying to resolve issues messaged as cryptic tech-speak, such as “Cannot connect to database (error=2)” and the more esoteric “Database error (operation=GET-NEXT, error=3112)."
And you also told us that it can be a struggle to resolve an issue because messages rarely link to contextual help topics that address the specific issue.
This is great feedback, and we intend to dig deeper into this problem and make our message text jargon-free, with links to specific in-product and online assistance to help you resolve issues.
In-product Help
You also told us that Help Search frequently fails to deliver good results. You find good content now and then, but getting to that content using Search is a challenge. Sadly, the search technology in help authoring tools hasn’t evolved much over the years, but we do have some tricks up our sleeve to improve your search experience.
And, when you do find the content you need, it’s sometimes missing a critical piece of information and you have to wait until the next product update or product version to get updated content. With today’s technology, you expect to be able to connect with us to tell us what’s missing, and have us add content or correct inaccurate or misleading content almost immediately.
You also mentioned that we don’t provide enough “best practice” information and answers to frequently-asked questions. We do a very good job at explaining how to use particular screens in the application, but we don’t always give you the best advice on completing an entire process or workflow.
Here are some improvements that we are working on:
- Web-based help. The new web Portal in Sage ERP Accpac 6.0 has web-based help. Web-based help is server-based, so you can access it across a network. That’s a big improvement over our current HTML-based help (CHM files), which you can only access from your local PC. Also, if you don’t like the search in the web-based help, you have other options, including Windows search and Google. And we’re looking to move content online to give you more options to find what you need.
- Going online. We do update the help with product updates, but that’s just not immediate enough! So, we'll be going online. In addition to having immediately-updatable content, we can also connect with you in real time, and get you the content you need must faster than ever before.
- Faceted classification and search. With our current authoring tools, we can provide faceted navigation to help you find the content you need. In a faceted classification system, content is tagged with a specific set of attributes. Content can then be arranged and sorted on these attributes, allowing you to limit search results to a specific category of information.
Faceted classification and faceted search systems are very common on the web. For example, when you search for something on Google, do you notice the pane on the left? It's a list of facets that you can use to filter your search results. You'll see facets at work across the web; for example, on Amazon, and Wikipedia.

- Synonym support. Most current help authoring tools provide stemming and synonym support. So, if you search for the term “dashboard” in the new Sage ERP Accpac 6.0 Learning Centre, you will find information about our new “snapshots.” Stemming support ensures that the help system finds words that derive from the same base or root, so if you search for “reporting,” the system will also find topics on “reports.”
- Embedded help. We’ve implemented some forms of embedded help in Sage ERP Accpac 6.0, and will continue to add more help in future versions. Embedded help is all forms of assistance that appear within the application rather than in a separate Help window. It can be text that is integrated into the user interface, such as grey hint text in a date field that identifies the acceptable format for a date entry (mm/dd/yyyy), or instructive text provided right next to the part of the interface that it applies to. You don’t have to do anything to request this form of “help” — it just simply appears on screen.
- Video-based help. Many of us learned how to do something by watching someone else do it first. Video learning is engaging, and you can perform the actions while you watch.
We’ve created a set of videos for Sage ERP Accpac 6.0 to give you an overview of the new web-based Portal, and show you how to use new features such as Fiscal Period Locking, and Inquiry. You will be able to access online videos from the Help, and we will be providing more video content over time. Delivering videos online opens up some great learning opportunities for our customers — you’ll be able to use RSS feeds to get new content the moment it’s added, and you can share the videos with peers simply by sending them a link over e-mail, a Twitter message, or other communication method of your choosing.
Here's a video that shows you how to use the new Snapshots feature in 6.0.
Documentation
You’re also wondering where the guides are. They are online in PDF format, but we choose not to include many of them in Sage ERP Accpac v5.6 and v6.0 because they are not current. Our mandate is to provide you with accurate, updated information, and that’s what we’re working on doing. We’re moving away from static, “dead-wood” technology to provide you with real time content.
Many of you told us that you find it challenging to print conceptual and background information from the help, and many new customers would like Getting Started information. You'd like this material in PDF or other "book-like" format so that you can easily print pages or sections for offline reading and review. We are working on providing updated content, which we'll make available in the Sage Customer and Partner portals.
Thank you for your honest feedback. We value your business and will strive to exceed your expectations. Please connect with us on twitter or e-mail us at sageaccpacdoc@sage.com to tell us what’s working and what we can do better.
We're excited about the future of Sage ERP Accpac, and we're looking forward to working with you to create a better information experience.
Sharon Murphy Mgr, Sage ERP Accpac User Assistance
with no comments
|
-
As we finish preparing Sage ERP Accpac 6.0A for release, much of the buzz around this release is the new Web Based technology platform. But for existing Accpac customers, what is the compelling business value? Why will existing customers want to upgrade? Will this upgrade be disruptive?
Upgrade Costs
A lot of times choosing to upgrade is a matter of balancing the costs of the upgrade versus the benefits of running the new software. This release is a little different from the past few releases where we were updating the accounting functionality. In the past few releases the costs of an upgrade were taken up by things like the time to convert the database to the new version, the time to verify and update customized reports, the time to verify and update macros and other customizations and then the time of training on any new or affected existing features. With version 6, the database conversion is much smaller than the past few releases and the changes to the database and Accpac Views is very minimal. This means that database activation should be relatively quick and painless, and that very few changes are required to existing customized reports and macros. In fact you could just install the version 6 update to the existing functionality, activate to version 6 and be done. This would reduce your upgrade cost, but not give you the full benefit of the new version (you would still get the lock fiscal periods by module functionality).
The main new features of Accpac 6 are accessed from the new Accpac Web based Portal (or in the case of the new CRM Integration, requires that this be installed). This requires a Web server to run. If you are already using SageCRM then you already have a Web Server and just need to determine if it has the spare capacity to run Accpac as well (which it might already be doing via the current CRM integration). Or you might have a file server that is only doing file serving and has plenty of spare capacity to run the Accpac web components. Otherwise you will need a new server. Installing the new Web components is largely the same as installing Accpac on a current file server, since all the new web components are installed as part of this process. For more information see: http://smist08.wordpress.com/2010/10/02/installing-and-deploying-sage-erp-accpac-6-0a/.
Upgrade Benefits
When we were deciding on the roadmap for rolling in out the new Accpac 6 platform there was a lot of debate about whether to roll out modules (like G/L) ported to the new web based architecture first, or to roll out new features first. A lot of this discussion focused on who would benefit: new users versus the installed base. We do a lot of surveying of customers and a lot of visiting customers to determine what the real pain points are and what the real business needs are. From these studies it was clear that improved reporting, improved business intelligence and improved CRM integration were of a higher need than getting existing modules in the new framework. So below we’ll quickly mention each feature and its benefit to current Accpac users.
Locking Fiscal Periods by Module
One very frequently requested feature is the ability to lock fiscal periods by module. This is now incorporated into Accpac and available to all users whether you use the new web component or not. This is a top vote getter from our idea suggestion web site. This feature gives you the ability say to lock a fiscal period for AR, AP, IC, OE, PO but keep it open for GL as you finish up month end. For more information on this see: http://smist08.wordpress.com/2010/02/19/sage-erp-accpac-6-0-%E2%80%93-locking-fiscal-periods-by-module/.

Reporting and Business Intelligence
A very common feature request is more and better reporting and business intelligence. We made improvements here in 5.6A with the addition on Accpac Intelligence. With 6.0 we continue with the addition of the Portal Dashboards and the new Accpac Inquiry Tool. The goal of the Portal Dashboard is to give you an instant view of the state of your business in a simple graphical snapshot. For more information on the new dashboard see: http://smist08.wordpress.com/2009/12/24/sage-erp-accpac-6-0-data-portlets/. The goal of the new Accpac Inquiry tool is to give you a simple way to view your data without requiring custom Crystal reports. We made the tool extremely simple so that anyone can easily use it to study their Accounting data and to use it to make informed business decisions. For more information on Accpac Inquiry (called Adhoc Query when I wrote this blog article) see: http://smist08.wordpress.com/2009/12/11/sage-erp-accpac-6-0-adhoc-query/.
The New Web Portal
The new Web based portal is a new launch point for doing your work in Accpac. You use it to access all the new functionality including running Accpac Inquiry and viewing the new Dashboards. Plus you can run any existing accounting screens from the Tasks menu or from the easily customized shortcuts bar. For more information on the new portal see: http://smist08.wordpress.com/2009/12/03/the-sage-erp-accpac-6-0a-portal/ and for more information on running accounting screens see: http://smist08.wordpress.com/2010/06/12/running-classic-forms-in-sage-erp-accpac-6/.
Lowering TCO
A key initiative as we move forward is to reduce the Total Cost of Ownership (TCO). This includes making installation and upgrading to new versions easier, providing better active help to prevent you getting stuck and arranging forms for maximum productivity. For all the new features we are developing we are spending a lot of time making sure they are easy to learn and once learned you can use them very efficiently. Hopefully you will see this new ease of use in the new Portal and in the new SageCRM integration components for Quotes to Orders.
The goal in the end is to have a single server install and to not require anything be installed on the workstations, so for an upgrade one simple install is all that is required. We won’t be there until all the accounting screens are moved over to the new framework, but this is the start of that journey.
However as we do move to the new Web accounting screens we will still leave the current Windows screens in place. This allows you to go to these new versions, but to move to the web screens at your own pace. You can even run a mixture of forms since they all access Accpac through shared business logic. This means that if you have invested heavily in customizations, you can keep using these, you don’t need to invest in moving these to the new screens. You can also choose to have some users use the new screens, some the current by the individual user’s preference. Sometimes people have such good muscle memory of using the current screens they can enter data in their sleep and don’t want to lose that productivity.
For more information on TCO see: http://smist08.wordpress.com/2010/03/12/on-total-cost-of-ownership/. For more information on the new User Assistance (help) system see: http://smist08.wordpress.com/2010/06/19/sage-erp-accpac-6-user-assistance/.
Quotes to Orders
SageCRM is already a nice modern Web based application. A common complaint about our CRM integration is that whenever you run an Accpac screen a Windows form leaps up out of the nice CRM web pages. This is disjointing and makes it clear you are running two applications. With Quotes to Orders we have developed web based versions of various screens to do with quote and order entry using the new framework and included them in our CRM integration. So now the Accpac screens are styled like CRM pages and make it appear as if you are staying in one application as you move between CRM pages and Accpac pages. In addition the quote and order screens have been made far easier to use by sales people so that they can be more productive taking orders. For more info on Quote to Orders see: http://smist08.wordpress.com/2009/12/17/sage-erp-accpac-6-0-quote-to-orders/.
Summary
Sometime people just see upgrading as a cost of doing business; that they have to do it now and again to remain supported and to work properly on the newest versions of Windows, Office or other components. We do want to make upgrading have a lot more value than this. And we do want to reduce the disruption and cost that upgrading entails.
We’ve worked hard to reduce the costs of upgrading and worked hard to maximize the value by listening to what you the customer really wants. Hopefully this approach has provided sufficient ROI that people will want to upgrade and the percentage of people that do will be quite high. Hopefully this approach gives you confidence in the future of Accpac that we are actively developing useful new features and technologies while protecting the investments you have made in the present.
with no comments
|
-
In Accpac 6.0, Fiscal Periods can be locked per module. This provides the user the capability to lock down some modules while leaving others open. A new UI for period locking looks like:

A user with the proper security rights can lock/unlock the fiscal periods.
We are going to discuss some details about this new feature.
1. When a database is converted to 6.0 from 5.6, the old fiscal period setting will also be converted. All fiscal modules (see below) will be set to open if the period is open and the fiscal year is active in 5.6.
Notice that not all modules show in the UI because some modules are not related to fiscal periods. A module is called a fiscal module if it uses fiscal period data (e.g. BK, GL, AP, AR, OE, UP, etc.) or a non-fiscal module if it has noting to do with fiscal periods (e.g. TX, EW etc.). Only fiscal modules will display their statuses in the above UI. The fiscal status of a module is defined in its .ini file (e.g. BK.ini). If there is an entry:
FiscalApp=Y
Under the [General] section then it is a fiscal module. Otherwise it will not be considered as a fiscal module. For a 3rd party application, by default it is not a fiscal module. To make it a fiscal module you will need to add the above entry in the .ini file.
However, as a user, never manually edit this line since it could cuase fiscal period function to stop wroking properly.
- As you know, dependencies exist among the ACCPAC modules. You need to be aware of this when locking fiscal periods for the modules. For example, when you post an OE transaction, data will flow to AR then to BK and GL. What happens if the period is locked in BK in this case? Answer: a ‘fiscal period is locked' message from the Bank will be given and the process cannot be completed. This is because BK does not allow to post transactions to a locked period.
Basing on the dependency, ACCPAC core modules can roughly be divided into four levels:
Level 1 IC, OE, PO, PM, CP, UP Level 2 AP, AR Level 3 BK Level 4 GL
As a general rule, always lock the highest level (level 1) first, then the lower ones. Do not lock a lower level module if you still need to post transactions from higher levels. This way, you won't receive messages like above when you post transactions.
The only exception to that rule is Bank reconciliation, where BK also depends on another sub ledger. In this case, both Bank and the sub ledger should be open in order to complete the process.
The idea of making it possible to lock some modules is to allow the user to gradually lock down all modules during a period of time. So locking from the highest level to lower levels does make sense.
- There are several fiscal period related programming changes in 6.0. Any 3rd party fiscal module will need to make adjustments accordingly.
a. API Two functions are obsolete but still work: GetPeriod, GetPeiodDates. (Status will return Open if all modules are open in a period). Four new functions have been added: GetPeriodInfo, GetPeriodFromDate, GetAllPeriod, IsFiscaqlApp. b. Period Picker A new property PGMID has been added to specify the fiscal module. c. VB UI. Like API changes, two functions are obsolete and four new ones have been added. Old functions must be replaced. Please see the DDP web page for more details.
Since fiscal period locking is a new feature for 6.0, there may be room for further improvements in terms of usability. Any suggestion/comments are welcome.
Wesley Deng
with no comments
|
-
Introduction
A key goal of the Sage ERP Accpac 6.x series is to completely revamp the Accpac User Interface technology. The goal is to transform Accpac into a technologically leading product again. We want to ensure that through this technology transformation we make Accpac an extremely competitive market leading product. This blog post will look at the technologies being incorporated into the Accpac 6.x platform and compares them to other technologies to highlight a few of the differentiators that set Accpac apart. We will also examine what we will be able to do with the building blocks being put in place.
This blog posting talks about the technologies being incorporated to make Accpac more competitive. However there is much more to competitiveness than the technology platform being used. We are also making changes to business models, marketing, product features, integrations, migrations, verticals, etc. All of these have just as big an impact on competitiveness as technology. All of these reflect that Accpac isn’t sitting still, but that all departments are moving ahead at a rapid pace to stay ahead of the constant change that we see in the market today. But I’ll leave those topics to other people’s blogs.

Usability
Besides advancing to more modern technologies and providing a platform for future development, we are taking the opportunity of a User Interface rewrite to give the product a usability rework in the process. The goal is to greatly improve the learnability of the product, and to greatly increase the productivity of customers. This is from performing extensive end user testing and from applying modern user interface design techniques. Typically applying advanced usability to an ERP product has been the domain of small business products like Simply Accounting or Peachtree. We are looking to bring the ease of use of a small business product to the mid-market space and to develop this into another competitive advantage. We are also looking to greatly improve our user assistance, for more see: http://smist08.wordpress.com/2010/06/19/sage-erp-accpac-6-user-assistance/.
Technology Direction
The general trend in technology is to go Web. The question isn’t whether, but how and when. A key trend driving this is that people just don’t want to install software anymore. It’s a pain. They want to just browse to a web site, possibly sign up, log on and work. People have many devices whether a PC or Mac, iPad, iPhone or Android. Ideally they would like to do their work from any of these and not have any hassles of downloading and installing applications. This trend on the front end is well underway without any resistance to adoption. On the back end many people are asking the same questions, why do we need to maintain all this server and network infrastructure? How do we reduce these costs and just have our applications work. This is driving SaaS (http://en.wikipedia.org/wiki/Software_as_a_service). This is still underway with many problems still being solved like protection and privacy of data, what happens if you SaaS application goes out of business, control, customizability, etc.

We are fully embracing the new Web based technologies. With our Accpac 5.x platform we were web deployed but relying on ActiveX controls and IE to provide the foundation. These caused problems with security, reliability, ease of use and performance. Learning from this lesson we have gone in the complete opposite direction, writing our new UIs in pure HTML/JavaScript and not relying on any ActiveX controls, Java Applets, Browser Plug-ins or anything else that can cause installation or usage roadblocks. All we require is a modern Browser that runs HTML and JavaScript well.
Many of our competitors continue to develop Windows desktop applications using technologies like .Net WinForms (http://en.wikipedia.org/wiki/Windows_Forms), Java Swing (http://en.wikipedia.org/wiki/Swing_(Java)) or WPF (http://en.wikipedia.org/wiki/Windows_Presentation_Foundation). These applications will only run on Windows, they will not run on mobile devices, Macs or Linux PCs. They are designed exclusively for PC sized monitors and will only run on Intel/AMD hardware. The claim is that they can give a richer user experience than Web based applications, which perhaps true ten years ago, is no longer true today. Currently applications written with HTML4 can easily match the richness while applications embracing HTML5 will exceed this richness of interaction, while remaining open and device/hardware/operating system independent. Typically such applications haven’t reached the ease of use level common in Web applications like Facebook or Gmail.
Many of our competitors still use ActiveX controls (http://en.wikipedia.org/wiki/ActiveX) and Java Applets (http://en.wikipedia.org/wiki/Java_applet). Again requiring special plug-ins or limiting browser and device choices. These are really just ways to start Windows applications from inside the Browser.
Many of our competitors have gone with Adobe Flex/Flash (http://en.wikipedia.org/wiki/Adobe_Flex) to create their Web Based UIs. The problem with these is that you require an Adobe plug-in for your browser for these to operate. This means they do not work on many phones and other devices like the iPad. They also sometimes don’t port to all platforms, so if you have 64-Bit Linux, you are out of luck.
Many of our competitors have embraced Microsoft Silverlight (http://en.wikipedia.org/wiki/Microsoft_Silverlight). This is worse than Flash, in that there are very limited choices for where it runs and you are really limited to only running on Windows PCs in IE or on Microsoft Phones which so far haven’t been very popular.
Again we chose HTML and JavaScript because we get full device and browser independence built on open industry standards. Our competitors will claim that they chose something proprietary to give a richer client experience. This may have been true five years ago, but today even with only HTML4, you can get just as rich an experience as these other technologies. And now with HTML5 and a whole host of newer more powerful Browsers coming to market, we can now exceed the rich client experience of these other technologies without losing TCO or locking in to proprietary platforms.
TCO
Reducing TCO is a key goal of Accpac 6. Initiatives here include requiring only a Server installation, no workstation setup, nothing else that needs to be installed on the individual workstations. Not requiring any special firewall or network setup, having everything use standard HTTP (or HTTPS). Making customizations upgrade safe, allowing you to upgrade and have customized reports and screens just work. For more details see: http://smist08.wordpress.com/2010/03/12/on-total-cost-of-ownership/.
Customization
As we move forwards we want to provide a more powerful customization model. A powerful customization model and robust SDK has always been one of Accpac’s competitive advantages, and we want to extend that. Studying what people customize currently and seeing if we can incorporate this into the product as part of the UCD review process to eliminate the need for customization. But when customizations are required we want to:
· Make more customizations straight from forms without requiring code.
· Make customizations upgrade safe.
· Have many more customizations possible from the UI designer.
· When code is required, ensure we provide the power to do more than we can currently.
For more on customizations see: http://smist08.wordpress.com/2010/02/05/sage-erp-accpac-6-customization/.
Openness
With everything we do, we are trying to be more open. Using open standards like HTML, JavaScript, SData and XML. Any files that we save are now just XML text files that anyone can manipulate with any of the many XML tools out there (including notepad). We want to follow industry standards and best practices. We want to avoid single vendor lock in. We want to make sure we can play when the next disruptive technology comes along. We are avoiding binary file formats and binary network protocols. We are avoiding proprietary technologies developed by a single vendor. We are ensuring we can be as adaptable and open as possible. This also reduces TCO since we can leverage open source technologies like Apache Tomcat (http://en.wikipedia.org/wiki/Apache_Tomcat) and Eclipse (http://en.wikipedia.org/wiki/Eclipse_(software)) which are freely re-distributable.
Future Foundations
Many of the technology choices and architecture we chose was to provide a foundation for future innovations including:
· Browser Independence: Due to time constraints the first version will fully support only IE 7 and 8. But everything we have done is set to support Firefox, Safari and Chrome as well. This would include desktop and mobile versions of these Browsers.
· 64-Bit – All the new technologies are fully 64-bit compliant. You can run the 64-bit versions of the browsers. Now we are set to compile our Views for 64 bit and to produce a 64 bit version of Accpac when needed. As we scale we will be able to take advantage of huge 64-Bit memory spaces.
· SaaS – Although we are shipping as an on-premise install to start, we have architected the system for SaaS deployment at a later version.
· Advanced end to end integrations enabled through SData. As other Sage applications like SageCRM move to the same platform, we have the opportunity to integrate much more closely. With common UI components and a common SData Web Services layer, we can provide much more cross application functionality in UIs, Reports and Workflows. For instance see: http://smist08.wordpress.com/2010/05/07/on-the-sage-gcrm-contract/.
· Performance/Scalability – With the adoption of SData Restful Web Services we can use advanced Web performance tools to test and expand the scalability/performance of Accpac from where it is today. See http://smist08.wordpress.com/2010/02/26/sage-erp-accpac-6-performance-testing/.
· Server Independence – All the technologies involved in the Accpac 6 platform are server operating system independent. So we can produce a Linux Web Server version easily if we choose to do so.
· Full Unicode Support – All the new technologies fully support Unicode, so this sets the stage for creating a full Unicode version of Accpac.
· Mobile – All the new screens are pure HTML/JavaScript and can run on iPhone, Android and Blackberry phones. Plus tablet devices like the iPad. See: http://smist08.wordpress.com/2010/06/25/accpac-on-the-iphone-and-android/.
· HTML5 – For our first version we are only using HTML4 features, but since we are built on the Google Web Toolkit (GWT) and Google is aggressively pursuing HTML5 we will automatically be getting HTML5 features as they become available in the various Browsers.
· Connected Cloud – As a Web Based application, built from the ground up on RESTful Web Services, we are ideally situated to integrate with other Web Based applications based on Web Services whether these are locally installed or cloud based. This can include common ERP services like sales tax calculation or government reporting, but also integration to other services like Social Networks or Web Based Office applications (like Google Docs). Our technology platform is ideal for both consuming and producing such services.
Summary
With the Sage ERP Accpac 6.0A platform we want to ensure that Accpac is a leader in Web Technologies, Usability, Customizability and TCO. Expect to see a progression of exciting releases kicking off with 6.0A later this year.
with no comments
|
-
We’re only a month or two away from the launch of Sage ERP Accpac 6.0A (for details see: http://smist08.wordpress.com/2010/09/25/preparing-for-the-sage-erp-accpac-6-0a-launch/). A major goal of this release is to provide a smooth upgrade transition from 5.x to 6.x. There has been some concern that the new Web based components will make the product harder to install or increase the hardware requirements of the product. This blog posting will go into some detail of the parts that are the same, the parts that are new, what is optional and what you need to watch out for. We’ve put a lot of effort into the Accpac installation program to make the process as transparent and simple as possible. But sometime it’s helpful to know what’s going on behind the scenes and what is being setup for you.
Accpac Classic
If you don’t want to worry about the new Web technologies, you don’t have to. From Accpac’s installation screen you can de-select the “Portal” feature and install just like you always have.

Of course you can always add the Portal feature at any later time.
Accpac Web Portal
Whether you are doing a Workstation Setup, Terminal Server or Local programs installation, you only want to install the portal in one place on the server that will be your IIS Web Server. On all other computers if doing a full installation, be sure to un-check the Portal as an installation option. If you want to run VB UIs from the new Portal, you do need to have the ability to run the classic Windows Desktop via a workstation setup or local install.
Hopefully you will want to use the new Web Base Portal with all the new functionality available there. If you have worked with SageCRM 7.0 then much of the deployment and installation is the same. We both use a combination of IIS and Apache Tomcat to process Web Requests. In fact, when we wrote our installation script, we copied all the sections for Tomcat, Jakarta and IIS from the SageCRM installation script and just modified them for Accpac. So much of the installation is actually field tested since it has been used for many SageCRM installations.
Below is a diagram showing the main components involved in a Web Portal deployment.

IIS
If you are installing the new Web Based Portal or using Quotes to Orders from SageCRM, you need a Web Server. Hopefully you already have such a server being used as a file server or as a SageCRM server. You will install the Accpac Portal here. On this server computer you need to install IIS before you install Accpac. Since IIS is a Windows component, we can’t do that for you from our installation program. You need to either add this as a role to your server or add the Windows component from the control panel. Note that this excludes you running the new Portal on a laptop running Windows Home edition, since it does not have IIS as an option.
You don’t need to do anything beyond adding IIS, our installation program will add all our components to IIS and will configure IIS to work with Accpac. This is true if you are running internally, if you expose this Web server to the Internet or you want better internal security then you have to do a small amount of work to configure the Web Server for HTTPS and add a digital certificate to correctly identify the server to clients.
Below are the virtual directories and application pools added by the Accpac and SageCRM installation programs to IIS.

Tomcat
Our new SData services that process the various SData Web Service requests are programs written in Java (http://smist08.wordpress.com/2009/11/24/sdata-in-sage-erp-accpac-6/). To run this Java program we require a Java Application Server, which is a program that receives web requests and passes them to Java classes to be processed. The Java application server that we use is Apache Tomcat (http://tomcat.apache.org/). Behind the scenes our installation program installs Tomcat in C:\Program Files (x86)\Common Files\Sage\Sage Accpac\Tomcat6 and adds it as a Windows Service. Hopefully you never need to know this program is even here. Hopefully it is all setup perfectly and you will never need to touch it.
Below is the Windows Services dialog showing our usual service for handling .Net Remoting requests and our the new service that is the Accpac instance of Apache Tomcat.

Jakarta
Our installation program adds another component called Jakarta to connect IIS up to Tomcat. All the installation and configuration of this component is done automatically by the installation program and you don’t even have to know it is there. Basically we want IIS to serve up all static web content like HTML pages, JavaScript pages, cascading style sheets and various bitmaps. But we want any SData requests passed on to the Apache Tomcat Java application server running the Accpac SData processor.
Portal Database Configuration
The new Accpac Web Portal has its own database that it uses to store various information like you shortcuts and preferences. So you need to configure this database from Database Setup which now has a “Portal…” button which leads to the following dialog.

HTTPS
If you want to expose your Accpac Portal to the Internet or just want extra internal security then you should configure IIS to use HTTPS rather than HTTP. To do this you add an https binding to the default web site bindings. When doing this it wants a digital certificate to identify the server. You need to get this issued from Verisign (www.VeriSign.com) or another vendor. Otherwise the Browser will complain about accessing this site, since it won’t be able to prove who it’s talking to. Additionally you will then want to disable HTTP so access only happens through a secure connection. Then you would follow all the other security best practices for managing a Windows Server (like be behind a firewall and have all unused services turned off). Often it’s worth running a tool like NMap/Zenmap (http://nmap.org/zenmap/) to confirm that you aren’t running anything unexpected that could be hacked.
Summary
Hopefully this gives some idea of the various issues and considerations installing Sage ERP Accpac 6.0A. If you are familiar with SageCRM 7.0 then this should all be old hat. Otherwise give it a try; it’s not nearly as hard as it might look.
with no comments
|
-
Here in R&D we are working hard to release Sage ERP Accpac 6.0A. This is a really major release for us. It introduces our next generation of Web Based UIs. Whenever the major number in Accpac’s version changes it signals the introduction of a major new technology (1 – Windows, 2 – SQL Server, 3 – Crystal Reports, 4 – 32 Bit, 5 – VB ActiveX UIs). Version 6 is no different, introducing our Sage Web Toolkit (SWT) based zero-client web based (HTML/JavaScript) UIs and the introduction of SData REST based Web Services. I’ve already written quite a few articles on the new features and technologies in Version 6:
· The Portal: http://smist08.wordpress.com/2009/12/03/the-sage-erp-accpac-6-0a-portal/
· Inquiry: http://smist08.wordpress.com/2009/12/11/sage-erp-accpac-6-0-adhoc-query/
· Quotes to Orders: http://smist08.wordpress.com/2009/12/17/sage-erp-accpac-6-0-quote-to-orders/
· Data Snapshots: http://smist08.wordpress.com/2009/12/24/sage-erp-accpac-6-0-data-portlets/
· User Assistance: http://smist08.wordpress.com/2010/06/19/sage-erp-accpac-6-user-assistance/
This posting is to look at what we are doing now that we are code complete. Many of you can see some of the activities as you participate in the Alpha, Beta or Controlled Release programs, but behind the scenes there are many things going on to prepare for release.
Code Complete
We reached code complete back on August 20, 2010. This was after completing 20 3-week agile scrum sprints (http://en.wikipedia.org/wiki/Scrum_(development)). Prior to the start of the scrum sprints, quite a bit of work had been done working out the framework and doing the underlying research. But these 20 sprints were the bulk of the work. This was our first project where we used agile scrum as our development methodology. As a result we had a few problems along the way, but we learned a lot and are all in agreement that the agile method is far superior to the old waterfall methodology we were using previously. The goal of agile is that each sprint is self-contained, in that any feature (or story) is completed entirely within one sprint including development, QA and documentation. Ideally the product is in a releasable state at the end of each sprint.
Regression
Once we reached code complete, we started a regression test phase. This is intended to be a thorough regression test of the entire product to ensure nothing is broken. Ideally if you are perfect at using the agile methodology, you shouldn’t need to do this. You just ship when you are code complete. But we aren’t perfect and we are still learning how to do agile better. In fact agile is a continuous improvement (or kaizen http://en.wikipedia.org/wiki/Kaizen) type of process that never sits still. You are always striving to improve. However Accpac is a large and complicated product with many interactions between all its parts. So we really do need to run a full regression to find and remove any funny bugs that were introduced unawares during the sprint process. We continue to do this testing until we release.
Security Audit
Version 6 will still be an on-premise application. For this version, Sage won’t be hosting it as a SaaS product. However we suspect that some customers will expose the Accpac Web Portal and other screens to the Internet at large. They won’t keep it safely hidden behind multiple layers of corporate firewall protection. Once Accpac is exposed to the Internet, security becomes a much larger concern. Application security is more than just switching to using HTTPS instead of HTTP. To this end we embarked on educating our programmers and QA on Internet security threats and added security related practices to our coding standards. Doing this is often called adding a SDL (Security Development Lifecycle http://www.microsoft.com/security/sdl/default.aspx). As part of this we had an external security firm do a complete security audit on all our new web based technologies. The external firm did find a number of important security vulnerabilities that were all fixed, and we learnt a lot to avoid these problems in the future. This way we received external confirmation that we were following good security practices and would provide a challenge to hackers trying to break in. This testing was started just before code complete and finished during regression.
Performance Testing
With any Web application performance is always an important priority. Over the past couple of releases we’ve been putting more and more performance testing into place to ensure the Accpac application performs well in all areas. This include the performance of a single user doing things, how long does it take for screens to appear, how long to perform processing tasks, etc. Then we have multi-user testing where we want to ensure that the single-user performance doesn’t degrade badly once many users are in the system doing the same thing. Over the web there are a couple of extra complexities such as how good is your network connection. We want Accpac to work well over any Internet broadband network, not just on a fast corporate LAN. Some of the testing we are doing is:
· Using Selenium (http://seleniumhq.org/) to run a wide variety of user tests and record the performance on a weekly basis and compare to benchmarks set by Product Management. These are single user tests to make sure performance is good for a single user. We also use Selenium for automated functional testing.
· Using JMeter (http://jakarta.apache.org/jmeter/) to run a wide variety of tests under multi-user load. JMeter doesn’t test what runs in the browser, it simulates what the browser does at the network level to test the server under heavy load. Again these tests are run weekly and tracked to watch the trends.
· Perform weekly manual multi-user testing. Every week we have all of QA test against the same server and run “scripts” of typical tasks that real customers would do. This gives us confidence that we work well in a real customer environment and it validates that our automated tests are testing the right things.
· Using Fiddler (http://www.fiddler2.com/fiddler2/) to record all HTTP requests made by Accpac and to ensure that these are kept to a bare minimum and that each one is responded to quickly. This is to ensure that we will work well over slower Internet connections with higher latency.
· Continue to use VBA macros to ensure any changes haven’t had a detrimental effect on the business logic performance.
Quality Debt Reduction
With every release we want to improve the quality of Accpac. With this release we have cataloged all known defects at the start of the release and a release certification requirement is that the number of total defects must be lower at release. So from release to release the number of open defects is reducing. There is also a lot of work going on so we prioritize these defects so that the ones that affect customers the most (based on severity and frequency) will be fixed first. We want to ensure this isn’t a numbers game where we just fix lots of issues about under-lining or field widths in reports. The real aim to ensure we have real measurable metrics that are published in a dashboard that is visible to everyone in Sage up to the CEO, to ensure we are improving quality in a real and measurable way.
Alpha
To help our ISVs (http://en.wikipedia.org/wiki/Independent_software_vendor) come up to speed quickly, we’ve released “alpha” versions of the software for them to work with. We release these versions well ahead of code complete so ISVs have plenty of time to learn the new Web UI programming model and incorporate it into their products. We’ve been holding training classes on this; this year at South African Insights (Feb), North American Insights (May) and TPAC (August). We will be holding this training again in Australia and Asia. Having ISVs on board and developing using the new Web based technology is crucial to its success.
Beta
We have now had two Beta releases. These are to start to get business partners familiar with the new features; to test it and to provide feedback. Beta started just before code complete and allows some room to incorporate feedback (which we have) as well as provide enough time to fix bugs. This gives BPs a chance to run test conversions of client data to ensure it can be upgraded to the new version, plus to determine any work that will need to be done to customizations. Since ERP applications tend to be mission critical, we don’t want the beta installed in live environments, just test environments.
If any BPs can send us their client’s data, this is a great help for our real world testing. For the client and BP this ensures that we have used their data as a test case and they will know it will upgrade without problems. Of course the customer has to be OK with sharing their possibly very sensitive data. But if they do, we greatly appreciate it. Sage has a data retention and protection policy that spells out the steps we take to safeguard the data and how long we will keep it.
Controlled Release
Next is controlled release. This is when we take a release candidate of the software and install it in live environments. Due to the mission criticality of these environments, we ensure we have Support and Development on call to quickly address any issues. This is the final test to ensure everything works fine in a real customer environment. We will then help to move the customer to the final version (if necessary). The controlled release program is very important to us and we put a lot of weight in how it goes when deciding whether to release.
Release Certification
Now that all the testing is completed, all the alpha, beta and controlled release programs are finished, we need to decide if we should release. We now prepare a “release certification” report of the results and statistics from all the testing and all the feedback, bring all the stakeholders together and have a meeting to discuss the release. Beta and controlled release feedback is very prominent here. At this meeting we approve, reschedule or reject the release. This is more than just development, this meeting is to also ensure that all training material is in place, documentation is complete, language translations are done, marketing material is ready, the Sage Web site is ready, etc. Once we have the go ahead from this meeting, the release will proceed and you will be able to download the product.
Summary
This was a quick summary of some of the tasks that are being performed prior to the release of Sage ERP Accpac 6.0A. This is a huge project that involves many people. All of whom are working hard to make this a successful release and to launch the next generation of Accpac technology.
with no comments
|
-
I started getting familiar with Excel spreadsheet features when I learned FR. The spreadsheet can be an instrument for calculating the total and average values from a range of cell values.
FR can not only provide me information for account history amounts in General Ledger (GL), it can also interpret a designed spec (a piece of information written in a spreadsheet containing FR formulas and spreadsheet functions) to produce an output I wish to get. It is a tool to print formatted statements from a spec such as quikinc1.xls in GL. By running Print Financial Statement for a spec with selected fiscal period and account ranges, I can get a generated statement.
In some reports, I may not wish to print output which is not useful to me. Take for example, the generated output from quikinc1 are only shown with zero totals when all retrieved amounts are zeros. The last line of the printed output is on row 75. I do not want to print the generated statement if the last line of the output is up to row 75.

In this case, I can put two words like “The End” at row 46 and column E in the spec. When zero history amounts are got through FR, these words are expected showing at row 75 and column E in output.
I can hide the words located at the spec by using font color same as background (white) so I cannot see them in generated output too.
Then, I can go to the visual basic editor to add an available workbook event in quikinc1.xls under “ThisWorkbook” as
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Workbook_BeforePrint(Cancel As Boolean) If Cells(75, 5).Value = "The End" Then Cancel = True End If End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Before printing the output, Excel detects whether the output located at row 75 has the words “The End”. The output will not be shown in printer or preview when the words are found.
After saving the workbook, I can take a test by running the changed spreadsheet under Print Financial Statement. If I cannot get the desired result, I can change the page setup of my workbook to print with row and column headings and the hidden words in the spec back to visible form for further testing. By reading the generated printout, I may check whether the cell location specified in the added workbook event is matched with the location of the printed words.
Do you have any tips and tricks using Financial Reporter with Excel? Feel free to share them in the comments section below.
with no comments
|
-
In the beginning, there was the View. The View is a Sage ERP Accpac Business Logic object, for an introduction to Views see: http://smist08.wordpress.com/2010/09/11/accpac%e2%80%99s-business-logic/. The View is a Windows DLL with a set interface. Views expose a common set of functions, which are displayed below (this set of functions has grown over time):

There are functions to control the View, manipulate fields, get meta-data, manipulate records and manipulate sets of records. Each of these routines has a corresponding function inside the View DLL. In the early days all these functions were exported from the View DLL and theoretically could be called directly. However we never endorsed this, did it ourselves or provided instructions on how to do that. In a way calling these functions directly in the View DLL was the first View interface, even though it was never used. Not listed here is the real function that is called in the View DLL, namely rotoEntry. This function takes a structure as its argument that specifies the function to call and has some generic arguments that are used as the arguments to the various functions following a set convention. Again the users of Views have never loaded the View DLL and called the rotoEntry function directly.
Roto/RotoView
You can call the Views by a couple of System Manager DLLs called Roto and RotoView. Roto is the low level object manager in Accpac, it handles the loading of View DLLs and figuring out things like what to load when Views are sub-classed. Roto also routes messages within Accpac to make sure the right View is called when a View call is made. RotoView is the first View interface that people actually used and is still in use today. Rotoview manages Roto to load the right View and provides convenient functions that correspond to the real functions inside all View DLLs. Below is a diagram showing RotoView and some of its functions using Roto to access a View through its rotoEntry routine.

RotoView provides an easy to use API for accessing Views, you just call viewLoad, viewOpen and then start doing real work. The Views still use this interface to directly talk to each other. All other interfaces talked about below also ultimately call the RotoView interface to do their real work.
Icmd/cmd
One thing that was considered difficult when using the View interface is something called “View Composition” which is how you combine a number of low level Views into higher level objects. For instance to enter an order into O/E you need to use the order header view and order detail view together to enter the order. To use these they need to be composed together to make an order set of Views. This process can be a bit tricky so we wanted to hide it from users using macros. In the original version of CA-Accpac/2000, it shipped with a macro language called CA-BLE (Computer Associates Basic Language Engine). In the macro language we wanted to ability to call Views, but to hide some of the complexity, such as composing Views. The Icmd and cmd interfaces were intended to do this. The View compositions were specified in the Objects section of the application’s xx.ini file, and were done automatically for you. These interfaces were also used for the original import/export program used by our CA-Realizer based User Interface programs. This then led to the architecture of CA-Accpac/2000 1.0A as shown in the diagram below (Roto and RotoView are combined into Roto):

Icmd and cmd are nearly the same, Icmd is just a little lower level and is the actual interface used by the old import/export program. Some other programs used the cmd interface such as the data integrity checker program. Cmd/Icmd are still included with System Manager for any third party programs that might use them, but aren’t used by anything that Sage ships.
Xapi
A weakness of all the APIs discussed so far is that they are only callable by a true Accpac SDK application launched from the Accpac Desktop. As we developed Accpac for Windows 3.0A we were developing the iConnect Server which needed to run independently on a server and not from the desktop. We were also getting complaints that it was hard to integrate Accpac to an existing standalone application, since you needed to develop an Accpac SDK part that would talk to the Views, the standalone non-SDK application couldn’t just call the Views directly itself.
And so was born XAPI. The main innovation in XAPI was that you first opened a session to Accpac providing basic sign-on information then went ahead and used the Views. This meant that anyone could use the XAPI interface whether they were an SDK application or not. So XAPI consists of some session management routines, then a set of routines very similar to what is in RotoView, except that they take the session as a parameter rather than the roto view handle used by RotoView. XAPI also contains routines to print reports and access other System Manager info easily. This way iConnect and non-SDK applications could fully integrate into Accpac. Later the iConnect program would be evolved into the Process Server, but both of these programs are long gone. The XAPI interface remains since it is used by many third party programs to interface to Accpac to this day.
This interface also stopped hiding the View compositions. We found that hiding compositions made it very hard to do some things with the CMD interfaces.
A4wcom
A further weakness of all the APIs mentioned so far is that they are all native DLL interfaces. These are easy to call from C programs, but problematic for other programming systems like Delphi or FoxPro. For Accpac version 4.0A we went 32-Bits and changed macro languages from CABLE to VBA. To integrate to VBA you need to provide a COM interface. So we could kill two birds with one stone, provide a COM interface to allow an easily usable interface for programming systems that have trouble calling DLLs directly and add VBA as Accpac’s macro language.
So was born the a4wcom interface. This is a COM interface that is layered on top of the XAPI interface and hence provides the same functionality of XAPI. It can be used by SDK or non-SDK applications, it can call the Views and print reports. Further it’s easy to use by any programming system that can call COM objects which includes Delphi, Foxpro, VBA, VB, VBScript, JavaScript, Perl, etc.
A4wcomex
Advance to Accpac Advantage Series 5.0A. With this release we re-wrote our User Interface programs from CA-Realizer to Visual Basic (VB). To do this we needed a strong COM interface. Unfortunately you can’t just change an existing COM interface since it will break everything that uses it. So we made the decision to leave a4wcom alone and develop a version 2 COM interface for Accpac namely a4wcomex. This interface doesn’t go through XAPI, it goes directly to RotoView. It’s also designed so that it can be “remoted” meaning that it can be called over the Internet. This was then the basis for Accpac 5.x web deployed mode. See the diagrams below for how remoting is fit into our model (the top purple boxes are the typical components that make up a VB UI program). The AccpacCOMAPI below is really a4wcomex.


Datasources
When talking to Views from a VB UI program, the VB code doesn’t talk directly to a4wcomex, instead the VB UI code talks to an ActiveX control called the DataSource control. The DataSource control then talks to the AccpacCOMAPI to perform the actual View operations. The reason we do this is that the DataSource is actually a visual control which means it can be configured at design time in the form designer. This means you specify which views to use and such in the form designer saving you writing quite a bit of code, most View compositions can also be specified this way. Another function of the DataSource is that it provides caching to reduce the number of View calls over the Internet when running in Web deployed mode.
.Net
With the Accpac Advantage Series 5.0A release we introduced Web Deployed mode where the UIs run as ActiveX controls inside the IE browser. With the original release we accomplished this by using DCOM in place of COM to do the View calls over the Internet. However this proved problematic, because DCOM is slow and DCOM uses random ports to communicate, which means it is very firewall unfriendly. You don’t know what ports it might use, so you have to leave them all open, which is very bad from a security point of View.
So with version 5.1A we added the option to use .Net Remoting as the communications protocol to talk over the Internet. To use .Net Remoting we needed to develop a .Net layer that sat over top of a4wcomex which we could then remote. Since we had to develop this layer anyway, we made it publicly available as another View interface for the added convenience of third party applications that were developing in .Net languages like C# or VB.Net.
Soap
If you have a .Net interface to something, then Microsoft through Visual Studio provides a tool that lets you expose that .Net interface externally as a SOAP web services interface. So when we developed the .Net interface, we got the SOAP interface for free.
However, you tend to get what you pay for, and like relying on DCOM to give you internet access for free over COM, it turned out to not work all that well.
With Version 6 we are removing the SOAP web service to be replaced by the much superior REST based SData web services interface.
Java
Fast forward to Accpac 6.0 where we are using the Google Web Toolkit to move all our user interface programs from VB to the web using HTML and JavaScript. For server processing we are handling Web service requests via a Java program which then needs to talk to the View. Java doesn’t like using COM or .Net. And for that matter it’s hard to use those on Linux Servers (if we ever want to do that).
So for Version 6 we’ve developed a native Java interface that is similar to the a4wcomex interface and talks to RotoView directly. The Java interface also has the distinction of being our first truly multi-threading interface. Multi-threaded programs could call our other interfaces, but would probably be blocked. The Java interface allows many threads to be running at once all doing work without overly blocking each other from operating.
SData
SData is Accpac 6.x’s new REST base Web Services Interface. For more information on SData see http://smist08.wordpress.com/2009/11/24/sdata-in-sage-erp-accpac-6/, http://smist08.wordpress.com/2010/01/18/more-on-sdata-and-sage-erp-accpac-6/, http://smist08.wordpress.com/2010/02/14/stateful-sdata/ and http://sdata.sage.com/.
The way the SData interface works is we have a Java Server application (SDataServlet) that receives the SData webserver requests; it parses and processes these converting the SData web service requests into View calls which are made via the new Sage Accpac Java interface (SA-Java).
with no comments
|
-
When Sophocles wrote, "No one loves the messenger who brings bad news," he wasn't thinking about a software error message -- but if he was alive today and wrestling with a tricky document formatting error, he might well pen the same sentiment. People love to hate software messages -- and there are many good reasons to hate them. They usually arrive bearing bad news: you've made a mistake, or you're about to make a mistake, or something very complicated is broken. Many of the complaints we hear from our partners and customers about messages in Sage ERP Accpac fall into one of three categories: - Messages are unfriendly. A lot of our error messages begin with technical and negative-sounding category statements such as "Incorrect procedure" or "Invalid input." These can make it sound like we're assigning blame -- in fact, one of our business partners compared the tone of these messages to "a slap on the wrist."
- Messages interrupt workflow. This doesn't apply only to errors -- even a seemingly positive "success" message can become irritating if it pops up and forces you to click OK to continue every time you post a batch. If a message like this is part of a workflow that you repeat many times each day, it can add up to a lot of extra (and pointless) clicks.
- Messages are impossible to understand. This happens when messages are written by developers to help them find and fix bugs, but aren't rewritten for customers before the product is released. "94 - Invalid use of Null in ProcessDet_Actual" might make sense to a developer, but most people would prefer a message that says "You must create and post a batch before running a filter."
As we move Sage ERP Accpac from the desktop to the browser, we're adding new messages and revising many existing ones. Here are a few ways we're working to address known pain points with messages and create a more positive experience for our customers: - Focus on helping customers understand and solve problems. We're doing our best to translate messages written in "developer-ese" into plain language. Where possible, we're adding short, descriptive titles to help you get the main idea at a glance. And if we're able to suggest a solution, or at least the first step toward a solution, we're including that information in the body of the message.
- Minimize interruptions. There are many cases in which simply changing the way a message is delivered can make it less disruptive to workflow. For example, a dialog box (which forces you to click a button to continue) can be replaced with an inline message that fades in and out while you continue working uninterrupted. If you're working on a data entry screen and you make a typo while tabbing through fields, an inline message will allow you to continue and correct the mistake later, unlike a dialog box, which forces you to stop and fix the error before moving on.
- Keep it short and friendly. A well-written message communicates necessary information in as few words as possible -- but if adding a few words will change the tone from terse to friendly, we'll do that. (And by "friendly," we don't mean "cute," so don't expect to start seeing messages like Firefox's "Well, this is embarrassing" anytime soon.)
Is there a Sage ERP Accpac message that makes your life miserable? Do you have other ideas for how we can improve messages? I'd love to hear from you.
with 1 comment(s)
|
-
Every week, I receive newsletters and other publications for translators and localization specialists. There seems to be every time more hype going on about Machine Translation. Just yesterday, SDL presented a webinar on Post-editing machine translations. Some say post-editing will inevitably become part of a translator's job.
Despite the many fears this phenomenon can inspire to professional translators, machine translation is unlikely to replace human translation. MT systems are mostly used as an alternative option when human translators cannot be used (for example due to the volume of the data). The translation is used per se (when quality is not a factor) or as a draft and then reviewed by a post-editor/translator.
Machine translation is being used by companies, organizations, government agencies that have very large amounts of data that need to be translated. The list of members of the Translation Automation User Society gives an idea of who is moving towards a greater use of machine translation (not only will you find the most translation/localization solutions' providers in the list, but also companies such as Microsoft, Oracle, Symantec - to name just a few - as well as a fair number of universities). For example, Microsoft uses machine translation to make its knowledge base's articles available to non-English speakers.
Machine translation targets for the most parts Internet and technical texts and doesn't work well with contents that are not clean and clear. The automated translation I use (SDL Trados Studio) offers the opportunity to connect to automated translation servers and out of curiosity I created a dummy (empty) translation memory and opened two documents for translation. In the project setup, I added the 3 automated translation servers (Free versions) and ran the documents through it. For the first document (which contained long and complex sentences), the translation provided by the servers made no sense and would require extensive post-editing before it could be used.

In the above screenshot, the text underlined in green can be reused; all the rest needs to be edited. Needless to say that machine translation is of no help for this kind of texts.
With help files nevertheless, the results are much better:

The text underlined in red needs edit as well as some capitalization edits. There are still some translation segments that sound funny but the amount of editing seems reasonable and tough it is not perfect, most of the translation is understandable.
Combining this technology with existing translation memory might still be an interesting option to make documentation and support materials available to non-English speakers where they wouldn't otherwise be provided with any information in their language.
with 1 comment(s)
|
-
I thought I might spend a few blog postings talking about Sage ERP Accpac’s Business Logic. With all the talk about version 6’s new web based UIs, the Business Logic hasn’t been talked about much lately. However the Business Logic is still the heart and soul of Accpac. It contains all the difficult application logic that provides the true business value and ROI to the product. This blog posting will talk a bit about the architecture and an overview of Business Logic, then in future postings we’ll go into some of the details. Below is an architectural diagram of Accpac showing the Business Logic as the middle tier of a three tier architecture. The Business Logic talks to the Database layer through a database independent API layer (which we talked about here: http://smist08.wordpress.com/2010/07/10/accpac-and-it%E2%80%99s-databases/).

Then the various users of the Business Logic talk to it through a number of standard APIs that are part of the Accpac System Manager. Individual Business Logic objects are called Views (not to be confused with database views).
Encapsulates One Logical Entity and Its Operations
Each Accpac View encapsulates one logical entity and its operations. These entities are things like A/R Customer, G/L Accounts, O/E Order headers, etc. They don’t have to be physical objects, they can be abstract concepts like G/L Posting (the View that posts G/L batches). Even though these entities are very different, each and every View has exactly the same API. Within Accpac, rather than have a unique API for each object, where whenever you encounter a new object you need to learn a new API; every Business Logic Entity in Accpac has the same API. This means that if you learn how to do things with A/R Customers then you have also learned how to do the same things to A/P Vendors or G/L Accounts. This is also why there are many different types of APIs to access the Views. There is the .Net interface, two COM interfaces, several DLL interfaces and the forthcoming Java interface. Since the API is the same for every View, we just need to implement this interface in each technology which is reasonably easy to do.
Implemented as DLLs
Each View is implemented as a Windows DLL (or in our Linux port as a Linux Shared Object (SO)). These DLLs can be implemented in any language that can produce DLLs with the set of API functions that we specify. In the original CA-Accpac/2000 1.0B, G/L, A/R and A/P had their Views implemented in COBOL. Since then all our Views are written in C (sometimes with parts in C++). This is a fairly low level way to do things. It might be nice if we used a higher level language like Java, but then we couldn’t have our Views as DLLs. The benefit of DLLs (or SOs) is that they are the lowest level objects in the operating system and you can build anything on top of them. This is how we can have so many different APIs to access the Views, since anything has a mechanism to call DLLs, since you need to have this in order to talk to the operating system (which is just a set of DLLs (or SOs)). The Accpac SDK contains templates and tools to allow you to generate Views from tables that describe what the View needs to do. Then you fill in routines to code the real functionality. You can open multiple copies of the same View each with its own context, this way a View can be used in many ways at one time.
Standard Protocols
Views often don’t act in isolation. Often it takes the co-operation of several Views to accomplish a task. For instance there are two Views, one for the Order header and another for each detail line. For a given order there is one order header and then multiple details, each one for the purchase of an I/C Item or miscellaneous charge. To enter an order the order header and detail Views need to work together. They do this to ensure transactional integrity, multi-user correctness and that various totals are maintained correctly. To do this we have a set of View protocols. If you are entering documents through Header/Detail type Views then there are protocols that you need to follow. Following these well documented protocols (see the System Manager User Guide or SDK Programming Guide) will ensure things go smoothly. If you don’t follow the protocols than you will get strange errors and you transactions may be rejected. These protocols are followed to insert, update and delete documents.
Combine Logical and Physical Data
The lower level Views or Data Views are thin wrappers over various database tables. They expose the fields in the underlying table almost identically to what is documented in the data dictionary. A good many Views are of this type, exposing the physical data in the database. However they can also add some logical fields such as calculated fields, fields looked up from other Views (like perhaps a description for a G/L account) or anything else that will be useful to the user of this View. Sometimes you can set these logical fields to control how the View does calculations, such as setting whether you want taxes calculated automatically or you will manually enter them.
Avoids Duplication of Code
When a View needs data from a table that it doesn’t manager, it doesn’t just go to the database to get the data, it calls the View that manages that other table. This avoids duplication of code since the code for manipulating that object is in one place, namely its View. Then every View that needs that same data calls that View. In fact Views are the primary user of other Views and the majority of View calls are made by other Views rather than the external users of Views like macros or UIs. This also means the other Views can make use of all the logical fields added by the other Views as well as get at the physical data.
Maintain Database Integrity
Views are responsible for maintaining database integrity. We do not rely on the database server software to do this. Views will maintain field level integrity as data is put to the View records. If it’s something simple like a field needs to be upper case and the caller passed in lower case, it will simply convert the data to upper case as it comes in. This is to make the Views more resilient and friendlier to the View’s users. If it can simply fix data, it will. At the next level it will reject bad data, for instance if you enter an invalid currency code into a currency field, it will immediately reject it (actually there is a flag as to whether it immediately rejects it or waits for you to try to insert or update the record). At insert/update time the View will ensure there is record level integrity, any fields that need to be validated as a set together will be. It is also possible in a header/detail situation where data has to be cross validated across several records. This is all handled for you by the View. This is why we insist that anyone writing data into an Accpac company database, must do this through the Accpac Views. Writing data directly to the database through ODBC or ADO is very frowned on and can cause you to become unsupported.
Centralize Data Security
It might appear that Accpac controls data security through its UIs. This is because if you don’t have access to something then either an entire UI is hidden from you or if you don’t have access to a feature in a UI, then that feature is hidden. However the UI is asking the View if the person has access and then hiding the feature as an UI nicety. If the UI was badly behaved and didn’t hide the feature and tried to use that feature in the View then the View would reject it. This way security it maintained whether the data comes from an UI, a macro, import or from a third party application using one of our APIs.
Allow Distributed Application Architecture
Since the View API is well defined and contains a fixed set of functions for all Views, it allows us to easily serialize the calls. This is the process of taking the arguments for functions and putting them out as a serial set of bytes that can be transmitted over a communications link. This allows the caller to use an API that serializes the calls, sends the serialized stream over a communications link like the Internet, have the receiver interpret the serialized stream and make the View call. This enabled various remote APIs such as the old iConnect and Process Servers along with the newer DCOM and .Net protocols in use today. The new SData protocol works a bit differently since it is based on the standard REST protocol, which is already serialized as an URL and XML payload. This is translated into a number of View calls when received by the server.
Summary
Hopefully this gives an indication of some of the things Views do and they work. In future blog posts I’ll look at various aspects of the Views in more detail.
with no comments
|
-
TPAC (Third Party Advantage Conference, http://www.tpac.biz/) is a conference for Sage ERP Accpac third party developers, that is held yearly in Vancouver, Canada. This year it was held at the River Rock Casino Resort (www.riverrock.com). The idea is that this gives a venue for all the Accpac ISVs (Independent Software Vendors) to showcase their wares to Accpac Business Partners. There is a trade show where everyone gets a booth and each vendor gives a presentation on their products. Then there is plenty of time for networking and education (including a dinner boat cruise). This year there were 32 exhibitors and around 150 attendees. This show is run independently of Sage, though Sage is a sponsor.
Sage’s big North American conference is Insights (http://www.sageinsightsconference.com). This conference highlights all of Sage’s many products, and although the ISVs have booths and presentations, the main focus of the show is Sage, its direction and announcements. TPAC is nice because it is a more intimate affair with only Accpac partners and ISVs, many who have known each other since the Accpac Plus days. The focus in on the ISVs and they have the spotlight. This makes it a very focused and valuable conference for everyone that attends.
The main development center for Accpac is in Richmond, B.C., only a 10 minute drive away from the conference. This meant that many Sage Product Managers and Developers could attend either the whole show, or at least attend for part. Business Partners also have to option of visiting the Sage development center as part of their visit to Vancouver if they want to.
Pre-conference we ran SDK training for 24 or so ISVs on how to develop Accpac 6 Web Based User Interface programs for their applications. This training ran over 2 days and was held at the Sage Accpac development center in Richmond. The training was very successful and a couple of Web Based UIs based on this technology were being displayed at the TPAC tradeshow.
Although Sage isn’t the focus of the show, Sage people give a few presentations including a Sage ERP Accpac 6 roadmap presentation to highlight the road ahead. Sage ERP Accpac 6 is now in beta, so promoting the beta program, highlighting the marketing plan being put together for the release and showing what comes next. There was also a town hall session given by Laurie Schultz, Accpac’s General Manager. There was generally a very positive reception for version 6.0A and a lot of positive feedback on the current version 5.6A.
ISVs are of crucial importance to any ERP software vendor. No vendor can do everything on their own. The key goal of each vendor is to provide a compelling software development platform along with a core set of applications developed on that platform. This is a huge undertaking. Then the ERP vendor relies on ISVs to take the platform and develop all sorts of vertical applications for specific industries, useful add-on programs or integrations to other stand-alone applications. For Accpac, the System Manager is the development platform that provides the frameworks, structure and supporting APIs for developing ERP modules. The System Manager is the runtime component and the Accpac SDK contains all the samples, documentation and tools to develop ERP modules to run on SM. Then Accpac provides the core accounting applications including General Ledger, Accounts Payable, Accounts Receivable, Inventory Control, Order Entry, Purchase Order, Payroll, and Project and Job Costing. Then we rely on ISVs to fill in other industry specific modules like POS (Point of Sale), Manufacturing, Service Management, etc.
To provide some concrete examples of Accpac ISVs, here are the ones that exhibited at TPAC. This isn’t an endorsement of any particular vendor; it just means they exhibited at TPAC. This isn’t meant to exclude anyone, if an ISV isn’t on the list it’s only because they didn’t exhibit at TPAC or I made a mistake. Many of the ISVs below have more products than I list, these are just a sampling.
· Altec (http://www.altec-inc.com/): Provides an integrated document management solution.
· Norming Software (http://www.norming.com/): Provide Asset Management, International Payroll and Timesheet entry.
· Orchid Systems (http://www.orchidsystems.biz/): Inter-entity transactions, Information Manager and Info-Explorer.
· Smart Hotel Software (http://www.smarthotelsoftware.com/): A Hotel Property Management System.
· Accu-Dart (http://www.accu-dart.com/): Warehouse Management.
· Accellos (http://www.accellos.com/): Warehouse Management.
· AutoSimply (http://www.autosimply.com/): Manufacturing.
· Avalara (http://www.avalara.com/): Sales and Use Tax Management.
· BI-Metrix (http://www.bi-metrix.com/): Business Intelligence.
· CGS Datapool Services (http://www.cgsdatapool.com/): EDI Services.
· Configur8or (http://www.configur8or.com/): Product configuration software.
· DataSelf (http://www.dataself.com/): DataHabitat Business Intelligence.
· EDISoft (http://www.edisoft.com/): EDI Software.
· Enabling (http://www.enabling.net/): QuickCost Time Billing Management Software.
· Escape Velocity Systems (http://www.evs-sw.com/): zFind Enterprise Application Search.
· Iciniti (http://www.iciniti.com/Home.aspx): Iciniti Store, Credit Card and Order Reader.
· Industrios (http://www.industrios.com/): Manufacturing.
· Liaison Software (http://www.liaisonsc.com/): Business forms distribution.
· North49 (http://www.north49.com/): Webtelligence eCommerce software.
· Pacific Technology (http://www.pacifictechsol.com/): AuditLogger, Commitment Accounting, Purchasing Workflow.
· Paperless Business Systems (http://www.paperlessbusiness.com/): Consulting Services.
· Red Tail Solutions (http://www.redtailsolutions.com/index.asp): EDI Software.
· RockySoft Corporation (http://www.rockysoft.com/index.php): Inventory Management.
· Stonefield Software (http://www.stonefieldquery.com/Solutions/SageAccpacERP.aspx): Business Intelligence Reporting.
· TaiRox (http://www.tairox.com/): Advanced Financials, Backup, SOX Compliance.
· Technisoft (http://www.technisoft.com/): Service Manager.
· TelPay (http://www.telpay.ca/): Payment Technology Solutions.
· V1 Document Management (http://www.v1documentmanagement.com/): Document Management and Imaging Software.
· Websitepipeline (http://www.websitepipeline.com/): Web Site Development.
· Wellspring Software (http://www.wellspringsoftware.com/): PrintBoss
· XM Oxygen (http://www.xmdevelopments.com/): eCommerce Solutions.
with no comments
|
-
We discussed how to create Accpac 6 Web based UIs in http://smist08.wordpress.com/2010/08/14/creating-a-web-form-for-accpac-6/ and how to write code that runs as JavaScript in the Browser in http://smist08.wordpress.com/2010/08/21/client-logic-for-an-accpac-6-web-form/. This blog posting looks at how you can write server side code in Java to assist your UIs do their job more efficiently.
Accpac 6 Web UIs communicate with the Server using SData (http://smist08.wordpress.com/2009/11/24/sdata-in-sage-erp-accpac-6/ and http://sdata.sage.com/) which is a REST based Web Services protocol. On the Server we run a Java application that converts incoming SData requests into Accpac View calls. Accpac Views are the business logic objects within Accpac. The Accpac business logic is remaining largely unchanged in this new environment and it’s the job of this Java application to convert the new world into the older world.
Theoretically then, you could do much of what we are talking about directly in the Views. We could expose new calculated fields or new functionality directly from the Views. However Views are used by all sorts of things including VB based UIs, macros, import/export as well as by third party applications. We don’t want to clutter up the Views with lots of extra logic needed to support or optimize the new Web based UIs. What we are looking to do is split the code that used to run entirely in VB UIs to half run in the browser and half run on the server. We also want to provide support for our Web based UIs to minimize program size running in the Browser and to minimize the number of RPC (remote procedure calls) they need to make to the server. The current VB UIs call many Views at once to do what they need, but this won’t work so well over the Internet since it will require many SData calls to do things, we really want to consolidate all the info the UI requires in one feed, so it only needs to do one SData call to get everything it needs.
Within the SData server’s configuration are a number of XML files that define all the SData feeds for the various accounting applications. For each application there is a classmap.xml file that lists all the feeds and the Java class that processes that feed. Then for each feed there is a specific resourcemap.xml file that defines various properties or configurations for that feed such as which Views is sits on, or some extra fields to present. To add an SData feed on top of an existing View is easy and just a matter of creating these simple XML files. There is a generic class ViewResourceKind that will provide standard SData functionality for any View. But if you want to add your own functionality you need to extend one of our classes and add your own logic.
The hardest way to implement an SData service is to create a class that implements our SDataResourceKind interface. This interface defines what a class needs to implement in order to be used as an SData feed from our SData application server. Here you need to do all the work, but if you want to implement a feed that hasn’t got anything to do with normal Accpac processing, perhaps this is a way to go. Fortunately we provide a class that implements this interface that you can extend. This is the ViewResourceKind class, mentioned previously, that implements SData on top of a View. This is really intended for data type Views. You can extend this to add fields and/or provide other helpful services for your UI form (or other consumer of your SData feed).
SData provides data type feeds similar to Views built closely over database tables, but it also provides “service” feeds that are similar to Accpac superviews. These feeds are meant to perform service type operations like printing a report, posting a batch or doing a calculation. They can operate asynchronously, meaning the originating call returns immediately, but then can poll the service for status updates (which can be used to update a meter control).
Here is a bit of sample code from the SData service that provides the data for the pie charts in the G/L Balance Sheet data snapshot.
public class GLBALSHTService extends BaseService
{
private final SDataView viewGLFSUM;
private final List<ServiceField> requestFields;
private final List<ServiceField> responseFields;
private static final String STR_RSCID = "GLBALSHTSP";
private boolean bPermitted = false;
private GLLanguageResourceContents GLLanguageResource;
public GLBALSHTService(final ApplicationContext applicationContext, final ResourceContextImpl resourceContext,
final Resource resource, final Service service, final SDataViewSet viewSet)
{
super(applicationContext, resourceContext, resource, service, viewSet);
viewGLFSUM = new SDataView(getResourceContext().getAccpacProgram(), GLFSUM.VIEW, resource);
bPermitted = getResourceContext().getAccpacProgram().isPermitted(STR_RSCID);
if (!bPermitted)
{
String appVersion;
String appLang;
//language dependent resource content is only used when access is not permitted.
appVersion = resourceContext.getAccpacProgram().getActiveApplications().get(GLLanguageResourceContents.APPL)
.getAppVersion();
appLang = viewGLFSUM.getProgram().getSession().getUserLanguage();
GLLanguageResource = new GLLanguageResourceContents(appVersion, appLang);
}
requestFields = new ArrayList<ServiceField>();
responseFields = new ArrayList<ServiceField>();
setupRequestFields();
setupResponseFields();
}
@Override
public void shutdown()
{
if (this.viewGLFSUM != null)
this.viewGLFSUM.dispose();
}
private void setupRequestFields()
{
requestFields.add(ServiceHelper.viewFieldToServiceField(viewGLFSUM.getFields().get(GLFSUM.IDX_YEAR)));
requestFields.add(ServiceHelper.viewFieldToServiceField(viewGLFSUM.getFields().get(GLFSUM.IDX_PERIOD)));
requestFields.add(ServiceHelper.viewFieldToServiceField(viewGLFSUM.getFields().get(GLFSUM.IDX_PERIODS)));
}
private void setupResponseFields()
{
responseFields.add(ServiceHelper.viewFieldToServiceField(viewGLFSUM.getFields().get(GLFSUM.IDX_ENDDATE)));
responseFields.add(ServiceHelper.viewFieldToServiceField(viewGLFSUM.getFields().get(GLFSUM.IDX_CASH)));
// … Lots more response fields defined …
}
protected List<ServiceField> createRequestFields(final SDataRequest request)
{
return requestFields;
}
@Override
protected List<ServiceField> createResponseFields(final SDataRequest request)
{
return responseFields;
}
@Override
protected List<ServiceField> execute(SDataResourceElement payload, SDataRequest request, AsyncStatusListener listener)
{
List<ServiceField> list = new ArrayList<ServiceField>();
if (!bPermitted)
{
throw (new RuntimeException(GLLanguageResource.getValue(GlobalContent.ACCESS_DENIED_MSG.toString()), null));
}
int errorCode;
this.viewGLFSUM.recordClear();
setGLFSUMViewFieldsValue(payload);
MeterEventListener meterListener = null;
if (listener != null)
{
meterListener = new MeterListener(listener, listener.getProgress().getProgressPct(),
TrackingPayload.PROGRESSPCT_GET_RESULT);
}
errorCode = viewGLFSUM.process(meterListener);
if (errorCode > 0)
{
throw (new RuntimeException(null, null));
}
list.add(ServiceHelper.viewFieldToServiceField(viewGLFSUM.getFields().get(GLFSUM.IDX_ENDDATE)));
list.add(ServiceHelper.viewFieldToServiceField(viewGLFSUM.getFields().get(GLFSUM.IDX_CASH)));
// … Lots more reponse fields added …
return list;
}
/**
* function to set field value
*/
private void setGLFSUMViewFieldsValue(SDataResourceElement payload)
{
for (SDataResourceElement elem : payload.getContents())
{
final String name = elem.getName();
String value = (String)elem.getValue();
if (value != null)
{
viewGLFSUM.putBySDataPropertyName(name, value, Boolean.FALSE);
}
}
}
/**
* set the default value for the request fields
*/
@Override
protected List<ServiceField> createTemplateFields(final SDataRequest request)
{
List<ServiceField> list = new ArrayList<ServiceField>();
this.viewGLFSUM.recordClear();
list.add(ServiceHelper.viewFieldToServiceField(viewGLFSUM.getFields().get(GLFSUM.IDX_YEAR)));
list.add(ServiceHelper.viewFieldToServiceField(viewGLFSUM.getFields().get(GLFSUM.IDX_PERIOD)));
return list;
}
}
This service is then defined in the GLServiceMap.xml file under the tomcat\portal directory:
<?xml version="1.0" encoding="UTF-8"?>
<serviceMap>
<services>
<service name="glbalsht"
className="com.sage.accpac.gl60a.common.server.GLBALSHTService">
</service>
… other definitions …
</services>
</serviceMap>
In the execute method, notice the View calls to the GLSUM View. You can see calls to recordClear and process. Basically these are calls to our Java JNI layer (Java Native Interface, http://en.wikipedia.org/wiki/Java_Native_Interface). Here we have a hierarchy of classes very similar to what we had in COM for VB programming where you can access all the View methods as well as a selection of convenient other System Manager APIs.
The basic logic here is to first initialize the operation in the constructor, get the input fields from the SData feed (the request fields as in setupRequestFields), perform the various View operations that are required (the execute method) and then setup the response fields to send back to the UI running in the Browser (created in setupResponseFields and then set in the execute method).
Hopefully, this gives a bit of a flavor for what sort of programming goes on the server for helping User Interface programs from an SData point of view.
with no comments
|
-
Last week we talked about creating Accpac 6 Web UIs (http://smist08.wordpress.com/2010/08/14/creating-a-web-form-for-accpac-6/). Part of the process is creating the XML representation of the Web Form which we discussed previously: http://smist08.wordpress.com/2010/05/28/how-to-layout-forms-in-sage-erp-accpac-6/. Now suppose you have an XML form designed either in an XML editor or using our SwtUIDesigner and you want functionality beyond that which is given to you by default. By default you have record navigation, save and delete. From last week’s article you will now have a simple runnable project. So where do you put your client side code? Within the client files is a file xxFeatureModule.java which contains:
/**
* Copyright 2010 Sage Software Inc. All rights reserverd.
*/
package com.sage.accpac.SS60A.ss1005.client;
import com.sage.swt.client.ui.builder.AbstractSynchronousFeatureModule;
import com.sage.swt.client.ui.builder.InstanceContext;
public class SS1005FeatureModule extends AbstractSynchronousFeatureModule
{
public String getDebugName()
{
return "SS1005 Feature Module";
}
protected boolean handleInstanceLoaded(InstanceContext context)
{
// TODO: Handle what happens when an instance context is loaded.
// Return true if the handling was successful; false otherwise.
return true;
}
}
This is where you put your code. The handleInstanceLoaded routine is provided for you to hook your code in. Basically this is called once the UI has initialized and the XML form has been processed and everything has been created. At this point you can hook into any UI controls, data sources or do any other initialization you require. The context that is passed into this routine is the object from which you can get to everything else in the UI. It contains the collection of controls on the form, collection of datasources , etc. Below is a snippet of code for a simple handleInstanceLoaded routine that retrieves a button from the context by calling its getWidgets() method. Then it calls addClickListener() to add a listener that will be called whenever the button is clicked.
protected boolean handleInstanceLoaded(InstanceContext context)
{
DefaultAllClickListener defaultAllListener = new DefaultAllClickListener(context);
SwtButton btnDefaultAll = (SwtButton) context.getWidgets().get
( UIConstants.WidgetIDs.CONFIG_BTN_DEFAULTALL );
if (null != btnDefaultAll)
btnDefaultAll.addClickListener(defaultAllListener);
return true;
}
private class DefaultAllClickListener implements ClickListener
{
public DefaultAllClickListener(InstanceContext context)
{
}
public void onClick(Widget sender)
{
SwtMessageDialog.showMessageDialog(
UILanguageResources.AppContent.DIALOG_RESTORE_DEFAULT.getValue(),
UILanguageResources.AppContent.DIALOG_CONFIRM_DEFAULT.getValue(),
SwtMessageDialog.ResponseButtonSetType.YES_NO,
SwtMessageDialog.MessageType.CONFIRM, "",
new MessageDialogListener[] {new ConfirmDefaultAllListener()});
}
}
private class ConfirmDefaultAllListener implements MessageDialogListener
{
public void onRespond(MessageDialogEvent evt)
{
SwtMessageDialog.ResponseButtonType response = evt.getResponse();
if (response == SwtMessageDialog.ResponseButtonType.YES)
{
defaultConfigInfo(popupContext);
}
}
}
Notice that we defined a new class DefaultAllClickListener which implements ClickListener. Basically this is defining the class for the object that will be called whenever a button is pressed. So in handleInstanceLoaded we call “new DefaultAllClickListener(context)” to create a new object in the DefaultAllClickListener class. This object will now be called whenever the button is pressed. In Java this is the typically way you get event notifications. There is nothing like a COM Event special type of method. Event handlers are just regular methods in regular classes. You hook them up by passing them to the object that does the notifying, usually by some sort of addXXXListener() type method call. It’s up to each routine that does notifications to keep a list of all the objects they need to notify and to call each one in turn whenever anything happens.
This is true for all UI events, notice that even the confirmation dialog displayed has a ConfirmDefaultAllListener() that will be called when the button is pressed on this dialog. All notifications are asynchronous like this. You can’t call a UI action and expect to wait (in the code) for a response. If VB we could just do answer = MsgBox () and our code would wait for the user to choose Yes or No. In the browser, everything is asynchronous, nothing waits, everything is via notifications. This is a different metaphor than people are used to. In languages like VB some things are asynchronous and work via event notifications and some things are synchronous. The big difference is that calls to the server are asynchronous, so whenever you make an SData call, you are notified via this mechanism when something arrives. Contrast this to VB where you make a server call, your code waits for the response and no more code is executed until you get it. In the web world this could take quite a long time and the browser would be completely unresponsive if no code executed until you got this response. This is the world of AJAX (Asynchronous JavaScript and XML http://en.wikipedia.org/wiki/Ajax_(programming) ). AJAX is the key to creating rich internet applications in the Browser. If we didn’t use this, then the input forms would be quite boring lists of titles and edit boxes followed by a submit button, where nothing happens until you hit submit. This is another reason that you want to put groups of View calls in your server module, where everything works synchronously as normal. Generally you only want to make one server call at a time, since then you don’t need to chain together a number of responses, plus you get the performance benefit of only making one server call over the Internet.
Here we’ve been putting the code in the xxFeatureModule.java file, but unlike VB, there are no restrictions on how many source files you have and no rules that certain things have to be in certain files. So you can freely create as many class files as you like and organize your code in whatever manner you like. The nice thing is that you can follow industry best practices and aren’t under constraints like an event listener has to be in a special file in order to be called. So the expectation would be that you can create common Java libraries to share over UI projects and that you can keep your class files small and maintainable without putting everything including the kitchen sink into the xxFeatureModule.java file.
One aspect of Java that trips up VB (and C) programmers is the use of inheritance. When using an API or framework in C or VB, basically you look for all the functions, properties and events you can use. If you take this approach with Java, you will probably find that you are having trouble finding what you are looking for. This is because Java supports inheritance in a proper object oriented manner. So often the paradigm isn’t to do something by calling API functions, rather what you do is extend a class that does much of what you want and then just add the code that’s needed to make the difference. People new to Java often take a bit of time getting used to this. If you are stuck and aren’t finding an API that you are sure must be provided, instead look for a class that is along the lines of what you need that you can extend.
This code is Java and definitely not JavaScript. Yet this is what we are writing to run in the Browser. To produce the final runnable code we have to feed this through the GWT Compiler to get it compiled into JavaScript. The GWT Compiler will produce 6 versions of JavaScript from this code, one optimized for each major Browser family including WebKit (Safari and Chrome), Gekko (Firefox) and separate versions for IE 6 and 8. This then is the final code that you would deploy to your customer’s web servers to run.
In the meantime while you are developing, you keep working in Java. You can run this code as a Java application inside the Eclipse IDE. You can use the Eclipse Java debugger to single step through the code, set breakpoints and examine variables. You can also use all sorts of other Java tools to make yourself more productive like JUnit (http://www.junit.org/), Emma (http://emma.sourceforge.net/) or TPTP (http://www.eclipse.org/articles/Article-TPTP-Profiling-Tool/tptpProfilingArticle.html). Plus you can use all the plug-ins that are available for Eclipse such as say SubVersion for source control (http://en.wikipedia.org/wiki/Apache_Subversion).
All the methods are documented in the HTML JavaDoc which is generated from the comments in the source code. This is included as part of the SDK. Below is a sample of the beginning of the page that documents the InstanceContext. This page documents all the methods in this object.

Customization
Generally you can do quite a bit of customization just with the screen XML file. But at some point you are going to have to write some code to do the more deep customizations. To customize such UIs with code, you basically want to get hold of the context object, so you can access the collections of widgets and datasources. Then you can add your own listeners, or change the properties of the various objects. Basically you extend the main entry point class of the UI and extend the xxFeatureModule class. Add your functionality and then feed everything back through the GWT compiler to generate a new set of web pages to deploy.
Summary
Hopefully this gives a flavor for how the Browser part of a UI control is coded in the new Accpac SWT framework. Most of the basic functionality is automatic from the XML screen definition, but UIs are more complex than just CRUD (Create/Read/Update/Delete) and this is how you add that extra complexity to handle sophisticated UI needs.
with no comments
|
More Posts « Previous page - Next page »
|
|
|