Stephen Smith's Blog

Musings on Machine Learning…

Archive for July 2013

Sage Summit 2013

with 7 comments


Sage Summit is our annual North American partner and customer conference. This year it was held at the Gaylord National Resort and Convention Center in Washington, DC. Sage rolled out many exciting new products, upgrades and services. As a blogger I’m glad that they’ve all now been announced since these will provide articles for months to come and I don’t have to hold back waiting for Sage Summit anymore. Most of the topics mentioned here quickly will be the topic for future much more detailed blog postings.


Pascal Houillon kicked off the opening keynote comparing the Sage journey to mountain climbing. Talking about teamwork and overcoming very daunting obstacles. There was also a lot of mention on progress with building the Sage brand in North America.


Included in the keynote were demos of some of Sage’s new mobile applications, showing people buying things from iPads, being dispatched to perform service work from their iPhone and entering construction time card data on an Android tablet. The best demo was Steve Malmgren demoing voice input on a Windows phone where he could just ask general questions with vague input data and get back meaningful answers. He could ask questions like “What’s the address of American in Milwaukee?” and get back the full company name, its address and go to a map to get directions. It was very impressive and the voice recognition worked really well considering the noisy conditions up on stage.

Then the keynotes broke out into several super-sessions. I attended the super-session on technology which was standing room only. This session outlined all our new technology initiatives and all the things that we were delivering now. These included several mobile native applications along with the announcement of the new Sage 300 Online. A lot of time was invested in explaining how the provisioning and signup processes worked and how ISVs can participate in the new Sage Data Cloud that is the backbone for all the new services.

Sage Mobile Applications

We previewed rough prototypes of a number of mobile applications at last year’s Sage Summit conference. This year we are releasing the real things. The first three mobile applications are Sage Mobile Sales, Sage Billing and Payment and Sage Mobile Service.

Sage Mobile Sales is an iPad native application for sales people, Sage Mobile Service is an iPhone native application for receiving service calls. Sage Billing and Payment is a web application for chasing down people who owe you money. All of these take credit cards for payment via Sage Payment Solutions.

Below are some screen shots to give a flavor of what they look like.


Sage Data Cloud

All these Sage Mobile Applications are connected to the Sage Data Cloud. All the data required for these applications to run, as well as all the transactions they generate go through the Sage Data Cloud. The Sage Data Cloud is hosted in Microsoft Azure and is connected to your on-premise ERP system. Your on-premise ERP uploads to data to the cloud like customer and inventory information and then downloads transactions like orders and invoices. It is the glue that connects your on-premise ERP with the cloud world without requiring you to run a web server or any other special infrastructure.


Currently we have connectors to the Sage Data Cloud for Sage 100 ERP and Sage 300 ERP. With connectors to Sage 50 ERP (US and Canadian) to be available shortly.

Sage 300 Online

Sage 300 Online is our new cloud version. This runs Sage 300 ERP 2014 in the Microsoft Azure cloud. It is integrated with SageID and uses new virtualization technology to being an improved application experience.

The following is the web page that you would launch the Sage 300 ERP 2014 Desktop from or transfer data to/from the cloud.


Sage 300 ERP 2014

Sage 300 ERP 2014 is our new version that will be shipping in a couple of months. This version includes many user interface improvements in the main Desktop along with throughout many application screens. There is much more information on what people are doing in the system, improved visual process flows and a number of other improvements that people have been asking for.

Sage City

We introduced Sage City last year and have continued it this year due to popular demand. Sage City includes a keynote address for the Sage Customers, it then breaks up into networking/problem solving sessions where like-minded customers get together to jointly solve their problems.

Sage Marketplace Live Expo

Every year there is an exhibition hall which has booths representing all our main ISV partners. All the Sage business applications act as both a platform and a center for a whole ecosystem of products and services. These products range from small but useful utilities all the way up to major applications and all have the goal of seamlessly integrating with various Sage products. Many lunches, breakfasts and dinners were served here so that partners and customers could eat as well as have plenty of time to investigate all the various products that could make their lives easier.

Social Media

Like any conference, one of the goals is to promote the company and to generate coverage in the press. Besides getting articles written for various publications (mostly online), part of it is generating interest in the social media like Twitter, LinkedIn or Facebook. Seeing all the tweets by industry analysts as well as judging sentiment from the attendees by watching the twitter feeds. You can see this by searching for the hashtag #SageSummit. Often the twitter feeds were displayed on large screens for all to see. Plus Twitter is a great way of people to connect and exchange information. There was also a Sage Summit conference mobile application to show the conference agenda as well as allow people to connect and use social media. Plus points were awarded for using the app where people were competing for a prize.


Sage Summit 2013 was another enjoyable conference. It was a great opportunity to meet many partners and customers. To see all the great products our ISV community are working on. To see some products and people from other parts of Sage that I don’t normally interact with. Next year Sage Summit is in Las Vegas at Mandalay Bay on July 27-August 1, 2014.

Written by smist08

July 26, 2013 at 12:52 pm

Visual Process Flows for Sage 300 ERP 2014

with 10 comments


We introduced Visual Process Flows with Sage 300 ERP 2012. This has been quite a popular feature since it lets you customize people’s desktop to exactly match their real workflow in a friendly intuitive graphic manner. Several other Sage ERP product incorporate the same Visual Process Flow common desktop component including Sage 100 ERP and Sage X3 ERP. A great number of ERP type products have nice graphical tools to launch screens, but a key differentiator of our Visual Process Flows is that they aren’t fixed and hard-coded into the product. You can edit all the existing Process Flows and you can create as many new ones as you like. Then you can assign specific Visual Process Flows to the various users in your organization.

Sage 300 ERP 2014 is now in alpha testing and will be shown at the upcoming Sage Summit conference in Washington, DC. With this release we are adding a number of improvements to the Visual Process Flow features.

New Visual Process Flows

Sage 300 ERP 2014 will be bundled with three new Visual Process Flows. The first one is for Project and Job Costing Transactions shown below:


Then we have on for Canadian Payroll Transactions and another for US Payroll Transactions. Below is the screen shot for the Canadian Payroll one. Notice that I resized the tree of icons down to zero width so you only see the Process Flow. This way you can do away with the tree of icons entirely and run entirely from Visual Process Flows.


Desktop Customization

Generally, you use the provided Visual Process Flows as starting points and then customize them to exactly match the roles within a company. With Sage 300 ERP 2012 you can only add elements to Visual Process Flows that run standard existing UIs. There wasn’t a mechanism to run the other sorts of objects you can add to the Sage 300 Desktop.

With Sage 300 ERP 2014, you can now add and run Crystal Reports, VBA Macros and arbitrary EXE programs just like you can directly from the bare Desktop. When you are have a Process Flow in Edit mode you can now select these as link types and specify them in the designer. Generally you do this by using the Browse (…) button in the Link… dialog.


This way if you have Macros (perhaps custom screens) or custom reports you can include these in a user’s workflow.

Running Other Process Flows

Another ability we’ve added is to run one Visual Process Flow from another. This give you the ability to provide links to common functions as well as create Visual Process Flows with many pages. You could even re-create the Sage 300 ERP Desktop with a Process Flow for each group of icons (with better graphics) and then link them all together to replace the tree of icons entirely.

If a user has multiple roles, you could produce a master page with all their job functions and then each one of these runs a Process Flow for the individual functions. Basically allowing you to automate larger processes than you could before.


Visual Process Flows were introduced in Sage 300 ERP 2012 and with the upcoming Sage 300 ERP 2014 we are adding quite a few enhancements to make these even better.

Launching Non-SDK Programs From the Desktop

with 19 comments



When SDK applications are launched from the Desktop, they are passed an object handle that they can use to create a session that exactly matches the session of the desktop that launched them. Further the desktop can manage these programs and for instance put up an error message if you try to close the Desktop while they are still running.

Quite a few people create programs that aren’t written using our SDK, but still are tightly integrated to Sage 300 ERP via one of our APIs such as the COM API, .Net API or Java API. You can add arbitrary EXE programs to the Desktop as icons and launch them just like any other screen.

When we designed the current UI framework, we had the intention that our UIs could be run from many places, such as VBA macros or hosted inside Internet Explorer. We also envisioned them being strung together in workflow type applications. Towards this we created the Session Manager and the Signon Manager to help tie together programs running inside the desktop with programs running outside the desktop. For information on using the Session Manager, check out this blog posting.

Generally this has worked quite well. Especially if you only signon to one company, then all the various things running will share the same session and you won’t have to signon to everything separately. However there are a few limitations to our current approach. If there are two desktops running (usually signed on to different companies) then when the external program is run, it has to present a dialog to choose which company’s session to use. This makes sense if you say start an EXE program from the start menu, since how would it know which desktop session to use? But when you run from the desktop you would expect it to just use that desktop’s session, rather than being treated like it wasn’t run from the desktop. Similarly if you started an EXE program from the desktop you would expect the Desktop to prevent closing until this program is closed, right now this check is only for SDK programs run from the desktop and doesn’t apply to anything else.

A lot of people are creating standalone EXE’s that use our APIs and they are using the Session Manager, which generally works well, but would like to get the other cases handled as nicely. So for the upcoming Sage 300 ERP 2014 release we have added some support to the Desktop to help with this. To basically allow non-SDK programs to start with the same protocol as the SDK programs so they can behave in the same manner. The alpha (developer) early release of Sage 300 ERP 2014 is available to ISVs so you can try this out now.

New Macro Substitution

If you add a program to a groupfile or if you add a program via file new in the desktop, if you specify $objecthandle$ as an argument, then this will be translated into an object handle when you are run that you can use in other API calls to get a session that matches your desktop. For instance in a group file:

ID = "XX0500"
PARENT = "XX0000"
DESCRIPTION = "test ojbect key"
CMDLINE = "c:\\accpac6\\sm\\testobj\\testobj.exe $objecthandle$"


This is then the token you can use to create your session exactly from the Desktop that ran you.

If you aren’t an SDK program, you probably don’t have your own group file. However you can use a couple of SDK tools to add your item to an existing group file. The program unccgrp.exe (usually installed in c:\pluswdev\bin) will de-compile a group file (these are usually grp.dat files in a programs language folder, like ar62a\eng\grp.dat). Then you can add your own entries to this and then use ccgrp.exe to re-compile the group file. This is a bit of a kludge because it may overwritten by Product Updates and two people trying to do this at once may collide and interfere with each other. But it can be an effective and useful technique.

How to Use the Object Handle

You can then pass the object handle into a session init call and your session will be configured to match the desktop you are run from. Additionally if you want to register your windows handle, you can use the roto api to do so given the object handle. You should also clear this when you terminate.

Below is a VB program which does these things. It uses the session it gets to display the company name in a label. This way it will be connected to the right Desktop and the Desktop knows when it’s running.

Private Declare Sub rotoSetObjectWindow Lib "a4wroto.dll" (ByVal objectHandle As Long, ByVal hWnd As Long)
Dim strObjectHandle As String

Private Sub Command1_Click()
    Unload Me
    ' clear our window handle when closing so we don't block the desktop closing
    rotoSetObjectWindow Val(strObjectHandle), 0
End Sub

Private Sub Form_Load()
    Dim mSession As New AccpacCOMAPI.AccpacSession

    ' Get the object handle from the command line
    strObjectHandle = Command$

    MsgBox "Object Handle = " + strObjectHandle

    ' Use the object handle to intialize the session. With this you will inherit
    ' an open session matching the desktop that launched you.
    mSession.Init strObjectHandle, "XY", "XY1000", "62A"

    ' Set the window handle so the desktop can track whether you have closed
    ' effectively doing a roto openok.
    rotoSetObjectWindow Val(strObjectHandle), Me.hWnd

    Dim mDBLinkCmpRW As AccpacCOMAPI.AccpacDBLink

    Dim CSCOM As AccpacCOMAPI.AccpacView
    Dim CSCOMFields As AccpacCOMAPI.AccpacViewFields
    mDBLinkCmpRW.OpenView "CS0001", CSCOM
    Set CSCOMFields = CSCOM.Fields

    Label1.Caption = CSCOMFields("CONAME").Value

End Sub