TMS Software. All-Access

3 upcoming free webinars!

We especially ramped up organizing webinars this year to give your more opportunities than ever to learn about what is available to empower you as Delphi developers to deliver great solutions to your customers. In the coming 3 weeks, there are 3 upcoming free webinars. So, don’t tell us we didn’t inform you  FNC Cloud components webinar : Apr 29, 14h UTC Embarcadero Germany organizes on April 29 a free webinar about using FNC cloud components to consume cloud services in  a service agnostic way. The webinar will be held in German language. The official title of the webinar is:“Plattformübergreifend Webdienste einfach nutzen mit TMS FNC Cloud Pack” and is presented by Matthias Eißing and Holger Flick. See the full webinar info and register here First steps into using an ORM with Delphi : May 5, 15h UTC If you are completely new to using an ORM (Object Relational Mapping), this webinar is for you. Our product manager and architect of the BIZ product line, Wagner Landgraf will introduce you to the concepts of ORM, why you can benefit from using it and how it will change your developer life forever when you abstract the database you use via an ORM.This webinar centers around the flagship Delphi ORM: TMS Aurelius and is even more interesting as TMS Aurelius was recently added to our academic program. This means that students and teachers can register for their fully free and fully functional version. We offer this free webinar via our own TMS Web Academy webinar platform. Register now for your free seat! First steps into creating web apps with Delphi : May 12, 15h UTC While since the introduction of TMS WEB Core a lot of Delphi developers picked up this tool to produce web client applications with the familiar RAD component based Delphi development approach, for many Delphi developers it is still a big step to enter the world of web application development. This webinar is especially focused at Delphi developers with no prior experience with web application development and we will introduce the concepts and approaches to create these web client applications with TMS WEB Core step by step. After this webinar, you’ll be comfortable to set your first steps into a new and exciting platform to deliver applications to your customers. This webinar is hosted by Bruno Fierens, CTO of tmssoftware.com and architect of the TMS WEB Core framework. We offer this free webinar via our own TMS Web Academy webinar platform, that was by the way entirely developed using TMS WEB Core! Register now for your free seat! More webinars?  If you have ideas, let us know what you want to see covered in upcoming webinars! We are eager to learn where we can add value with content offered via a webinar. Or, if you created a great application or have an original or creative use case for any of our products and you feel like presenting this to your fellow Delphi developers, don’t hesitate to reach out and you could be next offering a webinar on our TMS Web Academy.Or meanwhile you can have a look at the previous webinars we offered and for which the recorded sessions are available.

Read More

TMS WEB Core for Visual Studio Code v1.3 beta is available

We’re pleased to inform that we have released the beta for TMS WEB Core for Visual Studio Code v1.3 to our TMS ALL-ACCESS customers and customers of TMS WEB Core for Visual Studio Code.  What is on the table This is a very exciting new version as it brings: Support for packagesYes, from now on, it is easy to create your own custom components and compile & install these for use at design-time. The package system is similar to how you can use packages to install components in the Delphi IDE or Lazarus Support for workspacesWith workspaces, now you can have multiple projects in a folder and activate and select which project to compile/run/debug. Support for using the entire FNC component suiteAs our entire set of FNC components is ready for use in web client applications, the new package support in TMS WEB Core for Visual Studio Code enables to install all TMS FNC components in the TMS WEB Core for Visual Studio Code IDE. The latest FNC registered version updates released last week contain all the required packages for this. Brings the framework up-to-date with latest version as available in TMS WEB Core for Delphi/Lazarus v1.7The TMS WEB Core framework that comes with TMS WEB Core for Visual Studio Code is now in sync and up-to-date with the latest release of TMS WEB Core for Delphi. This means that all new components and component improvements are now also available for Visual Studio Code users. This includes the new USB components, local file access components, new Firestore dataset capabilities, extensions to grids, web socket connection improvements and much more…  One important note though, the Miletus application type is not yet in our release for Visual Studio Code release but scheduled for the next release.  Start learning Developing your own custom components is for sure a very powerful way to fully apply a RAD component based and in a sense also low-code approach to become productive at developing web client applications with TMS WEB Core.Our chief architect José Leon Serna explains in this video how you can use packages and start writing your own components. We held a webinar (on our TMS Web Academy platform that was by the way developed entirely with TMS WEB Core for Visual Studio Code) with a sneak preview of TMS WEB Core for Visual Studio Code v1.3 earlier this week, so you can see the replay and see the package support, FNC components in the IDE and learn from the discussion and Q&A with attendees.  Start developing TMS ALL-ACCESS customers and customers of TMS WEB Core for Visual Studio Code, login on our website and under Account / My Products, you will find the beta download of TMS WEB Core for Visual Studio Code v1.3. Enter your credentials to activate the product. If you also have the full FNC component suite, open the FNC web specific packages from the FNC product folder opened in Visual Studio Code and activate and install these packages.From here, you’ll have the full power of TMS WEB Core + custom packages + well over 200 FNC components to start developing exciting web client applications!  Your feedback We are now testing, polishing, fine-tuning till we can officially release TMS WEB Core for Visual Studio Code v1.3.Your feedback is crucial to achieve […]

Read More

Introduction to using Firestore and new Firestore features in TMS WEB Core v1.7

This article is the first in a 4 part series that will explore the new features available in the TWebFirestoreClientDataSet component in TMS Web Core v1.7. A quick summary of the basic features in the previous version of Firestore ClientDataSet component   Here’s a quick introduction for those developers who have not had a chance to use the component so far.   TWebFirestoreClientDataSet was introduced in TMS Web Core v1.3 to enable the developers to use Google Firestore as a cloud-hosted, NoSQL database for their web apps. By using this component, you can use a Google Firestore collection as a dataset and get a full CRUD functionality to update it. As you make changes to the dataset, the component updates the Firestore collection behind the scenes. What is more, since the component is a ClientDataSet, you can bind the component to various DB-aware TMS WEB Core UI controls via a TWebDataSource.   Here are the steps to use a Firestore collection as a dataset: In order to connect to a Firestore collection, all you have to do is drop a TWebFirestoreClientDataSet component on a form and set a few Firebase properties and CollectionName in it. Then define the dataset fields either in design view or in code and make the component Active. Additionally, you can bind the component to various DB-aware TMS WEB Core UI controls via a TWebDataSource. What you get is a basic App with a CRUD functionality out-of-the-box. A Firestore collection is created automatically as soon as you insert the first record. Any dataset updates you make in code or via the DB-aware controls are automatically sent to Firestore collection by the component. Further, the basic authentication of a Google Sign-In is also available in the component so that you can force the user to Sign-In with Google before the data in the Firestore collection can be accessed. This requires a simple Authentication rule to be set up in the Firestore dashboard. Then all you need to do in the component is switch ON its property SignInIsRequired. It takes care of presenting a Google Sign-In popup as soon as you make the dataset active. Complete details for the above steps are given in the TMSWeb Core Firestore documentation. You will also find a TodoList Demo in the folder “DemoDBBackendFirestore” that demonstrates the above features. Please follow the instructions in the TMS Web Core Firestore documentation to set up and run this Demo.   Here is a screenshot of the demo: What you will see in action is a web app that displays the Task records from a Firestore collection called “Tasks” and provides the features to edit the data by means of various DB-aware controls bound to the data source. It also prompts for a Google Sign-In if the user is not signed in. Although the basic demo does a good job of showing the CRUD features, it has some problems in the way its start up logic is coded and there is a reason for it as explained below. The demo expects the end user to enter the API Key and other Firebase parameters The values for these parameters are used to set Firebase properties in the Firestore ClientDataSet after the Open button is clicked The values are remembered in the local storage to be used […]

Read More

Multi-tenant TMS WEB Core client applications with Firestore

This is the 2nd article in a series of 4 about Firestore features in TMS WEB Core v1.7. Firestore is a cloud based solution from Google allowing to create modern web client backend databases in the Google cloud. So, there is zero config or server setup, all is managed by Google. This article series explores how components in TMS WEB Core facilitate the use of a Google Cloud Firestore backend in your web client applications. Previous Firestore ClientDataSet component Before TMS WEB Core v1.7, the built-in dataset component only supported a shared usage of a Firestore collection as a dataset. This means a collection is shared between different users who can sign-in and can access all the records in the collection through the dataset and are able to modify them.  This kind of shared usage is still supported and may be desirable for certain collections depending on the requirements of the web app.  But consider the case where you want to develop a web client application where each signed-in user can only see and change his own data. Such a feature is called Multi-tenancy.  If you were to develop this kind of Multi-tenant App directly in JavaScript that uses the Firestore API, you will need to devise your own scheme to keep each user’s data separate. A common approach is based on an internal-user-id of the signed-in user that is available from the API. But how your design uses that user-id is entirely up to you. There are many alternate designs possible to support this kind of Multi-tenancy. One design may use the relational approach of keeping a user-id field with each row or data object (called document in Firestore). Another design may create a nested collection whose name is based on the internal-user-id.  The new version of TWebFirestoreClientDataSet makes it simple for you by taking care of this internally as described next. New Multi-tenancy feature in TWebFirestoreClientDataSet  The new Firestore  specific TWebFirestoreClientDataSet component makes it easy for you to keep the data separate for each signed-in user. You tell it to do so by using the following property: property UserIdFilter The new version of the component has an internal implementation of the relational approach described above whereby it can automatically attach the internal-user-id of the signed-in user as an additional field to keep the data separate for the user.  To get this feature, all you need to do is set the property UserIdFilter as active.   fireStoreClientDataSet.UserIdFilter := ufActive; Once you do that, the component adds a new field named ‘uid’ to each new object (called document in Firestore) to identify the documents belonging to the signed-in user. Similarly when getting the initial list of objects on opening, it filters the collection on the ‘uid’ field. However, this automatic adding of ‘uid’ field happens only when creating new objects or documents. Hence, you may use this feature on a new collection only unless an existing collection already has the data separated by the same scheme–a field containing the internal-user-id. This is described next. property UserIdFieldName Suppose you want to connect to a pre-existing collection made by another app with the same scheme where the difference is that the user id field is not named ‘uid’ but is ‘userid’. To connect to such a collection with the feature to view […]

Read More

TMS WEB Core v1.7 Ancona is released

The main new features are: Miletus framework : desktop application development with web technology Introduction of async methods in many areas USB device access Firestore filtering, multi-tenant, async functionality added Local file access TWebStringGrid, TWebDBGrid enhancements Popup menu component Enhanced TWebForm TMS WEB Core for Visual Studio Code v1.3 The new version v1.3 of TMS WEB Core for Visual Studio Code is also around the corner. The major new feature of v1.3 will be extensibility via 3rd party components with a package system and with this, the whole portfolio of TMS FNC components will also become usable at design-time in Visual Studio Code. The TMS WEB Core framework will be at the same level as TMS WEB Core v1.7 for Delphi & Lazarus. The only feature that will not yet be included in TMS WEB Core for Visual Studio Code v1.3 is Miletus support. That is reserved for v1.4 and with this, it is expected to already bring Miletus for Windows, macOS, and Linux. More content Feedback We are curious to hear what you like the most about TMS WEB Core v1.7 Ancona or what you wish to see in future versions of TMS WEB Core! We look forward to discussing all these great milestones with you!

Read More

Customer Case Study: Viasoft Korp

Wagner Landgraf, TMS Business Product Manager, has recently published a post in his landgraf.dev blog, with a transcription of a nice interview he has made with Alexandre Henzen, Technical Director at Viasoft Korp, a big software company in Brazil that provides ERP software for industry and belongs to Viasoft group, which also has software for other segments like agribusiness, retail stores, among others. The interview was in Portuguese but the the English transcription of the main parts of it is provided by the blog. It’s really great to see how TMS Software and Delphi made an important role in the company history. The company now has more than 70 employees, being part of the group that has more than 500 employees. According to Alexandre himself: All the architecture of our software written in Delphi is built around TMS Business. He uses TMS Scripter, TMS Workflow Studio, TMS Aurelius, TMS RemoteDB and TMS XData, among other products belonging to the TMS Business line of products. Some of their customers are as big as having 500 simultaneous users, with thousands of operations every day. TMS Business products are handling it hands down. He also mentioned his experience after upgrading to Delphi 10.4.2 Sydney. In his own words: Sydney 10.4.2 is the most stable release that I’ve seen since XE2. Compilation time was 58 minutes, it dropped to less than a half of it just by upgrading to it. It’s a very interesting interview when they also talk about other topics, including the role Alexandre had in TMS Aurelius development. Visit landgraf.dev interview post to see the full text and let us know in your comments what did you think about it!

Read More

TMS Aurelius academic license

In February 2020 we announced the TMS Academic Program. Today we are happy to extend the TMS Academic Program with a new product : TMS Aurelius v5.1. This license can be used with Delphi 10.4.x Sydney. With the Delphi Academic edition students already have an extremely powerful tool in their hands and we want to enrich this with offering our most popular products also free to students with the TMS Academic Program. Getting started : Register for a free TMS Aurelius Academic license with a school or university email address Receive your credentials to login on our website via your student email address Login and download your free TMS Aurelius Academic installer Install the product in the Delphi 10.4.x edition. Enjoy being part of the TMS family with full access to our website, TMS support center, product updates for 1 year and develop great Delphi VCL applications Interesting video’s: TMS Aurelius video’s Available books: IntroducingDelphi ORM: Object Relational Mapping Using TMS Aurelius. Get started with TMS software today and secure your place for the future in the Delphi world! TMS Aurelius is our new addition to the family and we plan to extend this academic program. We are curious to know how the TMS Academic Program helped you so far in achieving exciting software development challenges and we are eager to learn what next TMS products you would wish to see in the academic program.

Read More

Introducing TMS WEB Core for Visual Studio Code 1.3

We are on the verge of rolling out the first beta of the next milestone of our TMS WEB Core for Visual Studio Code product. This is the version v1.3 and along all TMS WEB Core framework enhancements that will come in TMS WEB Core for Delphi 1.7, the new release v1.3 will introduce the major new feature that is package support. Learn all about in in our upcoming free webinar! Package support comes to TMS WEB Core for Visual Studio Code Package support is what will enable software developers to install packages containing component code for install of components for design-time use. While it is perfectly possible to use custom components with the current release of TMS WEB Core for Visual Studio Code, it was restricted to use these components at runtime. So, developers had to create and instantiate classes of components in code. With the new release, we will bring the RAD experience also for custom components. You write your custom component, add its source code to a package and then compile and install the package in the IDE. After this step, the registered component classes are added on the tool palette and can be dragged on the form designer and can be customized visually by changing properties via the object inspector. Our architect of TMS WEB Core for Visual Studio Code created this video for you to explain this: FNC comes to TMS WEB Core for Visual Studio Code Yes, the exciting news is not just that you can now add custom components for design-time use in TMS WEB Core for Visual Studio Code, but also that the entire range of TMS FNC components becomes available for use with TMS WEB Core for Visual Studio. We lost count of the total number of FNC components but this must meanwhile be approaching 300 or perhaps more. So yes, you will be able to install into TMS WEB Core for Visual Studio Code and use all of these components for creating classic web client applications, PWA’s (Progressive Web Applications) or Electron based cross-platform desktop apps* for Windows, macOS and Linux. And of course, you will be able to develop these applications from a Windows, macOS or Linux machine as the Visual Studio Code IDE is at home on these operating systems and so will be our FNC components. Opening, compiling & installing the package from the IDE List, add & remove component packages in the IDE Components on the tool palette and use the FNC components on the designer * Note that our Miletus technology for creating cross-platform desktop apps that will come in TMS WEB Core for Delphi 1.7, is scheduled for TMS WEB Core for Visual Studio Code v1.4 and will at that point also offer Windows, macOS and Linux support for and from these three operating systems. Join our upcoming free webinar Interested in learning all about the new version v1.3? We have a free webinar coming up for you via our platform TMS Web Academy (built with TMS WEB Core for Visual Studio Code by the way) and we have as host our chief architect José Leon Serna assisted by Bruno Fierens. Register now for this free webinar and be first to learn everything about component creation from TMS WEB Core for Visual Studio Code.

Read More

#WEBWONDERS : Making web async easy

Even these Delphi developers who have only set the very first steps into web client development will realize that quite a few important functionalities in web clients are executed only asynchronously by the browser.  Why asynchronous? First of all, why did the creators of browser implement certain functionality only asynchronously? The answer to this question is quite simple. For the developers behind the browser, the user experience comes first and a UI that freezes is a big no-go. At all times, the user interface should remain response. The user should never get the impression that the browser or the machine hangs while navigating on the internet. Now, several operations happening in the browser client application can by nature have a fairly unpredictable time to execute. So, no such function should stop the execution of user interface handling code in the browser.  Traditionally, the browser developers solved this “issue” by JavaScript event handlers that are called asynchronously when the result of a certain operation is ready and meanwhile, any other code can continue to execute. This is no different in TMS WEB Core web client applications written in Object Pascal (but of course compiled to JavaScript by the pas2js compiler). Here, we typically solved this with the Object Pascal event paradigm. When a class instance method is invoked that can only have its result asynchronously, this class instance triggers an event handler when the underlying function completed. When the pas2js compiler also introduced support for anonymous methods, we offered for various such asynchronous operations, anonymous result handlers. To focus on this, let’s take the example of a TWebHttpRequest class. This class permits to invoke HTTP(s) requests from the web client application. Clearly, this is an operation with an unpredictable duration, hence, the result of the request should be asynchronously handled. Classic approaches Example 1: handling via an event: // method starting the HTTP request procedure TForm1.WebButton1Click(Sender: TObject); begin   WebHttpRequest1.URL := ‘https://www.tmssoftware.com/sample.json’;   WebHttpRequest1.Execute(); end; // TWebHTTPRequest event handler for OnResponse procedure TForm1.WebHttpRequest1Response(Sender: TObject; AResponse: string); var jo: TJSONObject; jv: TJSONValue; begin jo := TJSONObject.Create; try jv := jo.ParseJSONValue(AResponse) // do any further processing here on the parsed JSON finally end; end; Example 2: handling via an anonymous method: procedure TForm1.WebButton1Click(Sender: TObject); begin WebHttpRequest1.URL := ‘https://www.tmssoftware.com/sample.json’;WebHttpRequest1.Execute( procedure(AResponse: string; ARequest: TJSXMLHttpRequest) var jo: TJSOBject; jv: TJSONObject; begin jv := TJSONObject.Create; try jv.ParseJSONValue(AResponse); // do any further processing here on the parsed JSON finally end; end); end; Introducing promises Now, while the implementation using anonymous methods probably leads to fairly readable code, imagine needing to handle with multiple HTTP requests that depend on each other, which is in web development a fairly common use-case. While you can in theory invoke another http request from the anonymous method handler that is in turn also handled by a new anonymous method handler, you can see that it quickly becomes clumsy. In the JavaScript world, a more elegant solution was introduced in 2015 with the ES6 standard and by now, any modern browser adopted this and supports it. The good news is that the pas2js v2.0 compiler also embraced and adopted JavaScript promises and offers a Pascal styled equivalent. If you want to read all about JavaScript promises, there are many good resources, but this is a well-written and concise one. In a nutshell, with pas2js […]

Read More

Coming in TMS WEB Core v1.7: Miletus

When it comes to bringing web applications to a desktop enviroment the choice falls on Electron as it’s the most popular framework among web developers. We offer support for Electron applications already, but the downside is always there: it’s a 3rd party solution that we have no control over. At the end of the last year we asked ourselves if we can provide an alternative that fits us better. A few months later here we are about to release a beta version of TMS WEB Core v1.7 with Miletus! What is Miletus exactly? Named after Thales of Miletus, Miletus is a framework that enables TMS WEB Applications to run as desktop applications and it also provides access for native features. In a nutshell, you can fully reuse code created for a web application, take advantage of HTML/CSS for creating a modern & spectacular responsive user interface, access local files & local databases or closely integrate with operating system capabilities and still easily deploy the application as standalone executable. Our colleague Holger Flick explains it in more detail how one could create such Miletus application with TMS WEB Core: Let’s take a look at the available classes, functions and components that will enable you to interact with native operating system functionalities! Classes and functions TMiletusStringList: Read and write local text files. TMiletusBinaryDataStream: Similarly to TMiletusStringList this enables you to write and read local binary files. It also provides multiple formats to access the data. TMiletusClipboard: Read from and write to the OS clipboard. TMiletusShell: Exposes some shell functionalities: open a file with its default application, open an external URL with the default browser, move files to the trash and show files in the containing folder. GetCursorPos: Returns the position of the cursor. GetMiletusPath: Returns the common paths. StartFileDrag: Start dragging a file from your application to any destination where the file is accepted. Components TMiletusOpenDialog: Displays a native open dialog and returns the selected path(s). TMiletusSaveDialog: Similarly to TMiletusOpenDialog, it displays a native save dialog and returns the selected path. TMiletusMessageBox: Shows a native message dialog. The labels, the dialog type, the buttons and the verification checkbox are all customizable. TMiletusErrorBox: Shows a native error message dialog. TMiletusMainMenu: Creates and appends a native main menu to the form where it’s dropped. TMiletusPopupMenu: Creates and displays a native popup menu  TMiletusNotificationCenter: Allows you to show notifications on the operating system.  TMiletusWindow: Allows the creation of multiple application windows which can be linked to forms or other sources. TMiletusTrayIcon: Creates a tray icon on the OS tray. An optional popup menu can be assigned to it. TMiletusFileWatcher: Monitors a list of files for changes. Each file has its own event handler which will be triggered when the file has changed. TMiletusGlobalShortcuts: Add a list of keyboards shortcuts that will be recognized even when the application is not in focus.  What about database support? We also added support for local databases! The component TMiletusClientDataSet makes it easy for a Miletus application to create and use local databases by a familiar syntax of using TClientDataSet. It also allows a seamless integration of multiple types of databases with data-aware components like TWebDBGrid, TWebDBTableControl, TWebDBEdit etc… All the database operations can be done in the standard Delphi way through the TMiletusClientDataSet component.  We prepared 5 database drivers to […]

Read More