Sage 300 2019 Web SDK


The Sage 300 Web SDK (SDK) is a collection of wizards, utilities, samples and documentation for developing Web Screens for the Sage 300 Application.

This week we released the Sage 300 2019 Web SDK to coincide with the release of the Sage 300 2019 Application.

It’s Available!

The SDK is available at


As described in a previous blog and in the README file in the root of the repository, the branches contain the different versions of the SDK.


Contains the current version of the SDK (2019).


Contains the in-progress version of the SDK (2019.1).


Contains the previous versions of the SDK (release-2017, release-2017.1, release-2017.2, release-2018, release-2018.1, and release-2018.2)

What’s New


Updated documentation is available.

In the docs\upgrades folder is a document for the upgrade procedures for moving partner source from Sage 300 2018.2 to Sage 300 2019. There is a manual step in the upgrade process, so please familiarize yourself with the upgrade steps.

In the docs\development folder you will find a new document for partners wishing to add metadata for the Global Search feature.

The docs\presentations folder has been updated and includes a PowerPoint presentation for what’s new in the SDK for 2019.

In the docs\utilities folder the document for the MergeISVProject utility has been enhanced to include the changes for the new ExternalContent folder.

The DPP wiki has two new articles:

  • KB: 91472 (Using Visual Studio 2017 with the Sage 200 2019 SDK (desktop))
    • This covers issues and information discovered wen Sage moved to Visual Studio 2017 to compile the application and Business Views
  • KB: 91473 (Writing SDK (desktop) applications that do not require “Run As Administrator”)
    • This covers the issue and resolution discovered requiring Sage 300 to be Run As Administrator.

Visual Studio 2017

All wizard manifests have been revised to ONLY include Visual Studio 2017 as a target IDE.


Visual Studio 2013 and Visual Studio 2015 are no longer supported targets.

Version Change

The Accpac.Advantage and Accpac.Advantage.Types versions are now and all the AccpacDotNetVersion.props files for the source and samples have been updated.


Going forward, any changes to the version number will be made in all 5 core libraries. 2018.2 introduced a flaw where a matrix was required to know which version of which library was compatible with another. Thus, by keeping all the libraries at the same version, a compatibility matrix will not be required!


The samples have been updated with new global references and no longer require the kendo.all.min.js file to be added to each sample prior to compiling.

The web project in all samples has been renamed to include the module in the name and namespace (ValuedParter.TU.Web) to accurately reflect the name of the web project being generated by the solution wizard.

A defect was corrected in the receipt sample regarding Optional Fields. The property ‘YesNoValue’ was renamed to ‘YesOrNoValue” as the Optional Fields framework expects this name.

Solution Wizard

Sage 300 2018.1 introduced vertical menus for navigation. However, the hardcoded images for partner menus were based upon the position of the partner menu (12 hardcoded images for 12 partner menus). It was not ideal, but all the time we had in 2018.1!

Sage 300 2018.2 removed the hardcoded images and replaced them with default images that maybe overridden by the partner who wishes to supply their own images.

However, this implementation was inefficient and not robust to provide the needed framework for third-party images and other files as well.

Sage 300 2019 introduces the ‘ExternalContent’ folder. This folder exists in the Areas\{module} folder and is the location for the 2 required images for partners and is now the location for any user created folders and content files (i.e. images, JavaScript, etc.) that may need to be delivered with the partner module. The previous implementation had limitations if a partner has multiple modules as well as not providing a place for other files and folders.

2018.2 location: ..\Online\Web\External\Images\nav\{companyname}

2019 location: ..\Online\Web\Areas\{module}\ExternalContent

As you can see, the new location in the Sage 300 installation allows for multiple modules per partner and content not specific or related to images or navigation

The 2 required images, menuBackGroundImage.jpg and menuIcon.png, have been renamed to:

  • bg_menu_{module}.jpg
  • icon_{module}.png respectively

These names follow the naming convention of these images used by Sage 300 for our modules. The Upgrade Wizard will rename these images to the new names.

The {module}MenuDetails.XML files will reference the new location of these files:

2018.2 reference:

<IconName>{companyname}/menuIcon.png</IconName>   <MenuBackGoundImage>{companyname}/menuBackGroundImage.jpg</MenuBackGoundImage>

2019 reference:







References to global files were updated and the Crystal Reports components now reference 13.0.3500.0 instead of 13.0.2000.0

An issue was discovered when attempting to debug a report in Visual Studio. There is a requirement where the ‘aspnet_client’ folder and its contents must exist for the solution. The solution wizard will now create this folder and its contents.

Customization Wizards

References to global files were updated.

The Default Compatibility level was changed from 6.5A+ to 6.6A+.

This property is informational only.

Code Generation Wizard

References to global files were updated.

Several defects were addressed this release:

  • Invalid Character in Property Name
    • Replaced ‘%’ if discovered
  • Duplicate Property Name Message
    • Added property name to message for invalid, blank or duplicate field names
  • The ValidRecordFilter Property in Business repository
    • When a zero value or other irregular value is legitimate, this filter may prevent proper CRUD. The filter is still generated by wizard, but is commented out and a TODO statement is generated:


  • Duplicate Entries in Web Bootstrapper Class
    • Invalid logic was corrected
  • Enumerations in View Model Need Type
    • Enumerations in the web’s ViewModel are used to bind to controls such as the drop-down list. However, the IEnumerable must have a type of CustomSelectList. The wizard now generates the correct code:


Existing partner code will not be modified as it would have to have been modified for it to work and thus already have been modified

Upgrade Wizard

References to global files were updated and the Crystal Reports components now reference 13.0.3500.0 instead of 13.0.2000.0

The web project will be modified to add the ExternalContent folder (see Solution Wizard section).

The ‘aspnet_client’ folder and its contents will need to be added to the web project if it is not already present and the web project contains reports that wish to be debugged in Visual Studio. See the Upgrade document for manual instructions for locating, copying and adding this folder to the web project.

The MergeISVProject.exe will be updated to reflect a change dealing with Minify JavaScript changes (see MergeISVProject Executable section).

Inquiry Configuration Wizard

This is a new wizard that was to be introduced in 2019, but will be delayed until 2019.1

This is the wizard which will create the metadata required to add or modify scripts used to drive the generic and adhoc inquiry displays.

MergeISVProject Executable

This utility is a post-build utility used by various wizards and the generated partner solution to pre-compile Razor Views and deploy assets to a local Sage 300 installation for developer testing.

An issue was discovered where it did not properly deal with sub-folders. This has been addressed.

Process Unit of Work Enhancement

In previous releases, a base class routine was required to be overridden if a return value or values was needed from a process task (Business View).

Changes in this release have made it easier to return values without overriding a base class routine and instead a base class property is simply overridden. This is explained in detail is the following article:


The Sage 300 2019 SDK is released and ready to be downloaded!

Documentation updates, KB articles, the ability to run the wizards ONLY in Visual Studio 2017, updates and corrections to samples, a new ExternalContent folder, synchronization of global files and references in the wizards, and the ability to easily return values from a process task are in the Web SDK.

Functionality, documentation, tutorials, enhancements, etc. that are not currently in the SDK which should be there to better assist with efficient development practices and time-to-market considerations, please contact the Sage 300 Product Manager. The partners voice and feedback resound the loudest!

We continue to look forward to addressing the needs and expectations of the Sage partner community and ecosystem.

As a standard disclaimer, any topic in this article is subject to review and doesn’t represent a commitment as to when it will be available.

20 thoughts on “Sage 300 2019 Web SDK

  1. Hi John,
    I’m stuck! I have reached out to support at Sage and they have pointed me to Stephens and your blog post for answers.
    I’m new to Sage 300 and I have just recently installed Sage 300 ERP (no CRM) on a windows 2016 server. I also installed the web ui and I’m able to use the web features without a problem.

    My goal
    – Is to send customers, vendors, AR and AP from Salesforce using REST based services to the Sage 300 server sitting on the windows 2016 server.

    Here’s what I’m stuck on;
    What I seem to be missing is how to setup the Sage 300 server environment to recognize these calls.
    I have;
    – downloaded the Web SDK,
    – unpacked it and placed it in the online\web directory, I also placed it in the webapi directory (just trying to get it to work as I haven’t found a clear explanation of how and where the SDK folder belongs
    – I have set the ‘Allow’ admin flag to true in the web.config file
    – I have disabled the Windows Authentication in IIS for the Sage300WebAPI app
    – and I’m able to bring up the Sage300WebAPI page (although I get the you do not have the latest IE browser even though I’m using Chrome and I have v11 of IE loaded)
    – the Sign On and Help buttons do nothing

    When I try call one of the sample urls:
    I receive a 404.0 Not found
    (my server name is Sage300)

    Hopefully you can help me with getting ‘unstuck’.




    1. Hey Joe. I’m out in Malaysia this week and apologize for any delay in replying. First off, the Web SDK is not required for the Web API at all. The Web API is installed when the Web Screens option is selected in the application. It is available for anyone with credentials to use.

      So, you can place the SDK anywhere.

      In looking at your URL above, are you attempting to just access the local install? If so, try //localhost/sage300webapi to see if it brings up our landing page.
      when on the same box. If that works there might be an issue with your IIS setup.

      The SAMLTD in the url segment is the company. Do you have a SAMLTD company?

      So, I would ensure that you can access it from the same machine and then expand from there.

      I hope this helps,


      1. Hi JT,
        Thanks for the response.
        I pretty much have a ‘generic’ setup of the Sage 300 server. The server name is Sage300 and I only have http enabled.

        I do have a SAMLTD company file and I can reference this file from the web screens.

        When I enter http://localhost/Sage300WebApi I do see the landing page but I receive the ‘The Sage 300 Web Desktop requires Microsoft Internet Explorer version 5.5 or above. You must first upgrade your browser to the required version before you can access the system.’ even though I have the latest version.

        I have also download POSTMAN and installed the sample postman files and it too receives the 404 file not found.
        Something I’m curious about is the directory structure. Should the WebApi directory be inside the Online directory? right now it is at the same level as the Online (the online has the OAuth, Web, and Worker directories) sorry if this is a bit confusing.




  2. Hi JT,
    I have made a little more progress. All this time I’ve been trying to use Chrome to access the Sage300WebApi site however, when I tried the URL in IE boom it worked. I was able to login and access via the Sage300WebAPI site. The pages served up for the Sage300WebAPI site are quite a bit different from the Sage300 (Web UI) site which is good since I now know the web api site must be setup correctly.

    My guess is that there is a setting in Chrome that is causing the AccpacUtil to server up the Internet Explorer version error.

    Now I just need get the restful side working. I still receive the 404 error when calling the http://localHost/Sage300WebApi/sdata/-/SAMLTD/AR/ARCustomers?$count=true

    This is the first sample in the Postman bundle.

    Again, I appreciate any help you can provide.




    1. Hey Joe, I am back from my trip and trying to get caught up. We have noticed an issue with Chrome:

      After installing Sage 300, go into IIS
      Navigate to Sites  Default Web Site  Sage300WebApi.
      Click on Authentication. Notice that the Windows Authentication is set to enabled.
      Set to disabled and re-started IIS

      I hope this helps


  3. Hi JT,
    Not sure what the Sage300WebAPI site is as it appears to be the older maybe com version of Sage300. When I bring up the Sage300WebApi there isn’t a link/button for the Swagger UI.

    Not sure what I’m missing?




  4. Hi JT,
    Reviewing the installation guide I noticed that in chapter 5 I did not install a JVM as I’m assuming this is part of a portal setup? In Chapter 5 there are a few steps I skipped because the task made reference to the tomcat server which is not installed.

    Since the web ui is working I’m assuming the restful services will leverage that code base?

    Thank you for your time.



  5. Hi JT,
    I’m back, I’ve been able to get quite a bit farther since the last time I posted. After installing the 2018 patch I was able see the swagger page and begin testing my code. Using the Sage 300 web API’s I’m able to;
    – insert a customer using ARCustomers
    – insert a vendor using APVendors
    – insert a AR invoice using ARInvoiceBatches
    – insert a AR invoice adjustment using ARReceiptAndAdjustmentBatches
    – insert a AP invoice using APInvoiceBatches
    – and insert a AP invoice adjustment using APPaymentAndAdjustmentBatches

    However, when I started testing against a different company file I’m NOT able to insert an AP Invoice Adjustment. I can do this against the ‘sample’ company file’ hosted on our server but not a different customer’s company file. There error I’m getting is;
    “There are no outstanding documents for vendor REV657675.\n\nEnter a different vendor number or select one from the finder.”

    The payload I’m passing is;
    “VendorPayeeName”:”Sage & Sons Cartage LLC.”,

    The AP Invoice has been posted but not sure what this error is really pointing to?
    The vendor (REV657675) exists and so does the AP invoice.

    Again, I’ve been able to make this call to our local server which has the sample company file but not to a ‘remote’ customer’s company file.
    Note: The customer’s company file I’m referring to is an actual ‘customer’s’ company file hosted on a separate (remote) server that I need to integrate to.

    Any information you could provide would be greatly appreciated.




  6. Hey Joe. Hmmm. Are you able to do this with going through either the desktop application or the web screens? Sometimes an issue presented in the Web API is not an API issue as it is a result of a business rule restriction. Obviously credentials are an important factor and the user you are using in the Web API must have all of the rights required to access the modules and features in the application since access rights are assigned to the Business View and ensured by the rights granted to the user.

    Since the sample database is successful with the call, this is why I am leaning to the credentials and access rights.


    1. Hi JT,
      Thanks for the response. I have not tried entering the adjustment using the Web screens just the web api. I will see if the customer will let me enter the adjustment through the web screens to see if there is an issue. I’m able to insert and adjustment for AR it’s just the AP that’s not working and unfortunately it’s a little like the blind leading the blind on what the problem might be.




    1. Hi JT,
      Is it possible to insert a AR or AP invoice with a status of ‘Ready To Post’?
      Better yet can I insert the AR or AP invoice with a status of ‘Posted’? This would be best approach then I don’t have to make a second call using the ARPostInvoices/ARPostInvoices API.

      I’m not seeing what field to set in the payload.

      I know this might sound crazy but this seems to be a common request.




  7. Hey, I believe it is a common request, but I also do not believe it is possible. By setting this status to a downstream status directly is potentially problematic as it would bypass business rules, validations, etc. And, there is logic in place to prevent this type of setting as well. Remember that the Web API is a wrapper around the business layer that is also used by the desktop/web screens. Therefore, the restrictions in place in the UI (for the most part) are also in play when driving the API without the UI.

    But, it is not a crazy request!


    1. I’m a little late to the party but you can set the batch status via the COM and .NET API – you can even post a batch through the API. Maybe the 2020 api has been updated to include this functionality?

      Via the com or .NET api:
      You need to Read the batch.
      PROCESSCMD = 2 to lock the record.
      Then set the BTCHSTTS field (7 = ready to post; 3 = posted)
      Update the batch.
      Finally, PROCESSCMD = 0 to release the lock on the record.


  8. Hi JT,
    I have another question for you. FYI(I’ve posted this in Sage City General Disscussion but no responses/answers yet.)

    I’m sending adjustments to Sage 300 ERP Server for ‘posted’ invoices and I know that the adjustment transactions are successful because the webapi call returns a reponse code is 201 and the response back from Sage contains the information (including a batch number) I sent but when I open the adjustment in Sage the detail information is missing. The json I’m passing is;


    The reponse that I receive from Sage is that is it was successful but not seeing the detail information (MiscellaneousReceipts) in Sage?

    Is there a step I’m missing in Sage?

    thanks again for all your help.


  9. Hi JT,

    We intend to add a custom screen on a custom menu which has purpose to select and upload a file to the server.
    Could you guide me how to do that.

    Thank you.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s