Main Menu

Recent posts

#1
Language Features / ScriptBasic Download
Last post by root - Nov 06, 2026, 04:38 PM
If you do BOI scripting with VBScript, you may find ScriptBasic a better option. I'm working on allowing ScriptBasic to be used with internal BOI scripting but have used ScriptBasic for external BOI scripting / interfaces for years.

Give ScriptBasic a try by downloading the Windows 32 bit installer from the repository. Example scripts are included. It's free and open source.

ScriptBasic Repository

#2
Open Sage 100 Overview / Re: Web 100
Last post by root - Oct 31, 2026, 07:07 PM
The ScriptBasic webserver has in memory session management and variables. Once a session is deleted, all its variables are released. This should reduce the size of a SY_Session module. Session ID is stored as a browser cookie.

I'm leaning toward Bootstrap as the UI framework. I've used it in the past and it seems to have become an industry standard. Acumatica uses it in its final UI generated code to the browser.

This is a link to my Bootstap demo for QBO when I was creating apps for that product. This is running on the ScriptBasic webserver under Linux on AWS. Bootstrap is mobile centric so give it a try on your laptop and phone.

Bootstrap Demo
#3
Open Sage 100 Overview / Web 100
Last post by root - Oct 31, 2026, 10:36 AM
I'm curious how much interest from the Sage 100 user / partner community there is in an open source version of Sage 100 that runs on Linux and uses a web browser for the UI?

I can do framework creation but doing this project is going to require participation by the Sage 100 community. This is my 'Web 100' Linux development server.



The CPU

Join the forum by sending me an email which you can find on the intro board if you would like to contribute your spare time to this project.

#4
BOI Overview / Re: Internal BOI
Last post by root - Oct 27, 2026, 11:11 PM
I have abandoned the Sage forum due to petty moderation and a couple members with open source phobia.

ScriptBasic was born as an embeddable scripting engine with an object like API that is written in ANSI C which allows it to run on any OS with a C compiler. The console and Windows interpreters are examples of the ScriptBasic API in use. The webserver demonstrates the multi-threaded features and memory management.

The bulk of BOI script management is done in the SY_Maint ProvideX object. I'm going to create a ScriptBasic only version of SY_Maint eliminating all references to WSH and the scripting languages it supports. Microsoft has deprecated VBScript as a malware risk. It's not enabled in Windows 11 by default. It's eventually going to disappear.

I plan to have a script IDE that will use the SQLite extension module to store BOI event scripts.

The advantage of using ScriptBasic for BOI scripting is that it gives you full access to all ScriptBasic's extension modules. (CURL for REST should be popular)

ScriptBasic is VB Classic friendly to create OCX form controls that can callback to functions in your script. TwinBASIC is a VB Classic workalike that also generates 64 bit code and objects

When I have a proof of concept working, I'll post the code.
#5
Introduction / Salutations!
Last post by Mike Kaney - Oct 06, 2026, 12:45 PM
Hi All

I am a Sage 100 end user with an above average appetite for all things tech. I am hoping to learn how to interface with Sage data a bit easier by being a part of this community. I love and believe in FOSS, so I presume this is a good place to be in both regards!

Thanks!
Mike K
#6
Open Sage 100 Overview / Open Sage 100 Design Concepts
Last post by root - Jun 07, 2026, 10:33 AM
Open Sage 100 is an open source project creating a work-a-like accounting solution with a web browser UI using the ScriptBasic webserver.

A three tier architecture will be maintained using MODULEs instead of ProvideX emulated objects. This eliminates the need for COM and BOI scripting. OS100 will have a REST API for external interfacing. UI events from the Bootstrap framework UI will be handled as Fetch API calls.

MODULEs will focus on business logic, not legacy support.

Open Sage 100 is targeted for Linux but can run on a Windows server or on a standalone PC.

I'm going to do an AR_Customer MODULE as an example to show the differences between ProvideX and ScriptBasic.
#7
Introduction / Sage 100 Web
Last post by root - Jun 02, 2026, 08:42 PM
Once I get the internal ScriptBasic BOI working and a 64 bit version of the COM extension compiled, I'm going to create a new category for a Sage 100 work-a-like for the web.

When Stephen Kelly was CEO of Sage, he gave me a contract to do a proof of concept of Sage 100 running as a web browser application with ScriptBasic. The project died when he left abruptly.

PeovideX objects will become ScriptBasic MODULEs and the UI will be done with the Bootstrap framework with form templates.

The ScriptBasic webserver has a built-in memory based session management system with session variables. The ScriptBasic webserver is multi-threaded with it own thread safe memory management environment.

Interm, Sage 100 Hybrid will be the bridge.

The key features of Open Sage 100 is unlimited users and everyone can be a master developer with its open source.
#8
BOI Overview / Internal BOI
Last post by root - May 27, 2026, 08:52 PM
Working with Chris Mattson, I think I've found a compatible solution for using ScriptBasic embedded for internal BOI scripting.

When using Custom Office to create your script, write it in ScriptBasic COM and save the script with a .sb file type attribute. This is simular to using WSH .js scripts.

This will embed ScriptBasic as the scripting engine instead of instantiating MSScriptControl.ScriptControl.

I will post an example after doing some testing.
#9
Introduction / Hi all
Last post by Chris Mattson - May 26, 2026, 08:10 AM
Just checking in to introduce myself.  I'm a Sage 100 developer from way back in the v1.41 days when Sage 100 was a character app in BBx2.0.  I currently work for Nuvei integrating Sage 100 with Nuvei's Commerce Suite platform.
#10
BOI Overview / Excel COM
Last post by root - May 25, 2026, 05:46 PM
This is an example of using the ScriptBasic COM extension module to create an Excel spreadsheet workbook without human interaction. The example pops the DI (Display Interface) to show what the WorkBook object interface offers.

IMPORT COM.sbi

filename = "C:\\ScriptBASIC\\examples\\excel_test.xls"

IF FileExists(filename) THEN
  PRINT "File already exists deleting: ", filename,"\n"
  DELETE filename
END IF

oExcelApp = COM::CREATE(:SET, "Excel.Application")
' oExcelApp = COM::CREATE(:SET, "{00024500-0000-0000-C000-000000000046}")

IF oExcelApp = 0 THEN
  PRINT "Failed to create Excel Object do you have it installed?\n"
  END
END IF

' VBS: Set ExcelWorkbook = ExcelApp.Workbooks.Add
oWorkBook = COM::CBN(oExcelApp, "Workbooks", :GET)

IF oWorkBook = 0 THEN
  PRINT "Failed to create Workbook\n"
  END
END IF

oExcelWorkbook = COM::CBN(oWorkBook, "Add")
COM::DI(oExcelWorkBook)
' VBS: Set ExcelSheet = ExcelWorkbook.Worksheets(1)
oExcelSheet = COM::CBN(oExcelWorkbook, "Worksheets", :GET, 1)

IF oExcelSheet = 0 THEN
  PRINT "Failed to get oExcelSheet\n"
  END
END IF

' Adding cells...

oRange =  COM::CBN(oExcelSheet, "Range", :GET, "G3")

IF oRange = 0 THEN
  PRINT "Failed to get oRange\n"
  END
END IF

COM::CBN(oRange, "Value", :LET, "123")
COM::RELEASE(oRange)

oRange =  COM::CBN(oExcelSheet, "Range", :GET, "B1:B5")

IF oRange = 0 THEN
  PRINT "Failed to get oRange\n"
  END
END IF

' Place BOLD border around range
CONST XlBorderWeight_xlMedium = -4138
COM::CBN(oRange, "BorderAround", :CALL, 1, XlBorderWeight_xlMedium, 3)

oInterior = COM::CBN(oRange, "Interior", :GET)

IF oInterior = 0 THEN
  PRINT "Failed to get oInterior\n"
  END
END IF 

COM::CBN(oInterior, "ColorIndex", :LET, "38")
COM::CBN(oInterior, "Pattern", :LET, "xlSolid")

COM::RELEASE(oRange)
COM::RELEASE(oInterior)

FOR i=1 TO 10
  FOR j=1 TO 10
'   VBS: ExcelSheet.Cells(i, j).Value = "test-" & i & "-" & j
    oCell = COM::CBN(oExcelSheet, "Cells", :GET, i, j)
    COM::CBN(oCell, "Value", :LET, "test-" & i & "-" & j)
    COM::RELEASE(oCell)
  NEXT
NEXT

' Saving spreadsheet
COM::CBN(oExcelWorkbook, "SaveAs", :CALL, filename)
COM::CBN(oExcelWorkbook, "Close")
COM::CBN(oExcelApp, "Quit")

' Releasing objects from memory
COM::RELEASE(oExcelSheet)
COM::RELEASE(oExcelWorkbook)
COM::RELEASE(oWorkBook)
COM::RELEASE(oExcelApp)

PRINT "Spreadsheet Created.\n"

Output:

C:\ScriptBasic\examples>sbc excel.sb
Spreadsheet Created.

C:\ScriptBasic\examples>