Phone800.366.3472 SupportGet Support DocumentationDocumentation Resource CenterResource Center
search
close
Open Menu

Synergex Blog


Virtual Reality: How We Successfully Pulled Off Our First Remote Conference

By Liz Wilson and Heather Sula, Posted on July 27, 2021 at 11:20 am

Liz Wilson and Heather Sula

March 2020. We were three months away from the Synergy DevPartner Conference, an in-person learning event we hold for our customers every 18 months. Then the pandemic hit and upended everything. We had no idea that within a year, we’d have to completely reconceptualize and adapt our entire conference blueprint for a virtual audience while providing the same educational value and keeping the communal spirit of our in-person gatherings.

In the end, we were able to present 16 content-packed virtual sessions to a record number of attendees that, thanks to a boatload of planning and persistence, went off with barely a hitch. (You can watch most of the conference sessions here.)

Conference moderator Haley Hart and subject matter expert Marty Lewis lead a Q&A after a session.

Here’s how we did it.

Planning

Planning any large event is a significant logistical undertaking, requiring coordination and cooperation between multiple departments. The more you plan ahead, the less you have to panic at conference time. We won’t bore you with every detail of our particular planning process, but here are some foundational steps we took to make sure all our bases were covered.

What we did:

  • Held weekly conference check-ins. Communication is key for making sure nothing falls through the cracks.
  • Created standard branding. The conference had its own “look” that was used to design the website, PowerPoint templates, webinar rooms, session landing pages, etc., to ensure a cohesive aesthetic that distinguished it from our usual content.
  • Got organized. Whether it was shared spreadsheets, Kanban boards, etc., we made sure the key players had insight into the necessary tasks and timelines, so no one was in the dark.
  • Allowed time to work on “nice-to-haves” (informal networking sessions, giveaways, etc.) in addition to the necessary components of the conference. Sometimes it’s the little things that make an event special.

Additional Takeaway: Hold a pre-mortem. A pre-mortem is a thought experiment that encourages people to think about what could go wrong. A few members of the conference planning committee got together in April and did some brainstorming about specific issues that could arise during the conference. For example, we determined who would step in as moderator if either of our two main MCs called in sick. Or, if the Q&A portion of a session went on for longer than expected, we came up with a solution: unanswered questions would be collected and answered during the wrap-up session. Thankfully, no one wound up getting sick, but it was comforting to know we had a plan in case that did happen.

Execution

While planning is nine-tenths of the game, you still have to execute. The following are some things to keep in mind so everything goes smoothly when the time comes.

What we did:

  • Created a task force to handle registrant issues that communicated frequently. Because we had additional people on hand to field customer support, the organizers were free to focus on making the conference happen.
  • Kept an eye on statistics. We sent analytics to our sales team after every session so they could reach out to customers accordingly.

Additional Takeaway: Talking to a camera instead of an audience is…weird. Pre-recording most of the sessions was helpful for a handful of reasons: it allowed presenters to take a substantial breather between slides (grab a cup of coffee, get the demo ready without rushing), and we had the opportunity to add some creative flourishes in post-production. Still, most presenters found the camera to be a poor substitute for a live audience. In the future, we’ll consider inviting additional staff to recordings to act as a stand-in audience.

Session recording in our makeshift conference studio at Synergex HQ.

Flexibility

Ultimately, you have to be nimble, ready to adapt to changing circumstances, and take on any challenges that pop up. Luckily, you can prepare for flexibility too.

What we did:

  • Backups, backups, backups. For pre-recorded sessions, the main plan was to upload the files into the webinar platform and hit play. But we always had a backup plan in case something went wrong (private YouTube video versions of the sessions we could link to, etc.).

Additional Takeaway: You don’t need to use a one-size-fits-all formula for conference sessions. We had to work around several factors when recording the 16 sessions, including each presenter’s geographic location and level of comfort in a live vs. pre-recorded context. Rather than make everyone do everything the same way, we gave presenters flexibility in terms of how they wanted to structure and lead their sessions, and we wound up with a nice variety because of it.

We look forward to seeing you at the 2022 conference!

Check out the conference sessions and learn how to do the following:

  • Improve development productivity and practices through adopting more efficient development methodologies.
  • Enhance years of Synergy data and code with new technologies, enabling connectivity through RESTful web services and APIs.
  • Keep up to date with Synergy SSL and operating system security patches. (Security and disaster recovery are important for compliance!)
  • Use traditional Synergy in Visual Studio to gain a huge productivity boost, lower the barrier to continuous code integration, and improve processes and software quality.

Watch sessions here


Announcing Synergy/DE 11.1.1h

By Steve Ives, Posted on July 19, 2021 at 9:49 am

Steve Ives

Synergex is pleased to announce the immediate availability of Synergy/DE 11.1.1h on all platforms. A quality release that includes a wide range of improvements across the entire Synergy product line, and we strongly encourage all Synergy developers to review the release notes for detailed information about everything that changed.

If you are one of the many developers using Synergy DBL Integration for Visual Studio (SDI), please note that this will be the final release that supports Visual Studio 2017. From the next release, SDI will support Visual Studio 2019 as well as the upcoming Visual Studio 2022.

As we continually enhance the isutl utility for improved performance and better recoverability in system crash scenarios, we recommend that all customers using Synergy DBMS download the latest version of the Synergy DBMS Utilities package, regardless of the version of Synergy that you are currently using.

And finally, we want to point out an important bug fix that we applied to xfServer in this release: “On Windows and UNIX/Linux, a pre-version 11.1.1 client connecting to an 11.1.1 through 11.1.1g encrypted xfServer caused the connection to hang on certain functions, such as ISSTS, CLEAR, and STORE. This has been fixed in this release.”

Synergy/DE 11.1.1h is available for download in the Resource Center now.


Elevate Your Endpoints

By Liz Wilson, Posted on July 14, 2021 at 12:55 pm

Liz Wilson

If you’ve checked out our GitHub documentation, attended an office hours session, or watched a web services–related video on our YouTube channel, you may know that OData is a critical layer of the tech stack that makes up our open-source Harmony Core solution.1 There are several reasons for this: OData is standards-based, it supports query validation (so you can choose the data available to users in a given context), and the learning curve is minimal. Developers can look at a sample OData request and immediately get a sense of what is being asked for, and our implementation of OData emits JSON, a standards-based data format that other programming languages can parse with ease.  

OData is easy to work with, but it’s important to know how to make the most of Harmony Core’s API functionality, beyond just the basics. Here are some tips for maximizing the readability and performance of the APIs that you will be generating via Harmony Core’s OData services. 

Use Meaningful Names 

Harmony Core OData services rely partially on data structures and files from Repository. That said, where appropriate, it’s a good idea to have meaningful names for data structures, as these will be turned into URLs. For example, “CustomerNumber” would be better than “CSTNBR.” 

vs.

Don’t Skimp on Data 

It might seem odd to buck a “less is more” approach to exposing your data, but in the world of Harmony Core, the better setup will likely be one in which most of your data is initially made available to developers, and the specificity of who gets what is determined when these developers create URLs, like the one below, to extract the exact information they need:  

To do this, you can configure your Harmony Core environment to enable the entity collection endpoints feature. This will generate a new GET method in each of your controller classes that exposes their respective collections (e.g., all customers, all products, etc.). You can access the GET method through an HTTP GET request without parameters.  

Plan Ahead 

The more planning you do in terms of the data you’d like to query for, the more specific you can make your endpoints. The more specific the endpoint is, the faster your query will be, as asking for a smaller amount of data takes less time than requesting a large collection.  

If you have access to an entity’s primary key, you can adjust your environment configuration to enable single entity endpoints. This will allow you to whittle down your results with a URL that incorporates the item’s unique key, thereby reducing load time. To illustrate, our sample Harmony Core service provides testable queries for all customer data, as well as for a single customer.  

When I tracked how long it took to load each page, I noticed that the “all customers” collection took 114 milliseconds, while the single customer query took about half that time—52 milliseconds. 

vs.

If you’re able to map things out in advance and narrow your data needs further, you can specify an entity’s discrete properties. For example, rather than retrieving the entire data set for an individual customer, you can query for the customer’s phone number, name, or website. To do this, check out the instructions for enabling individual property endpoints on GitHub.   

Get Familiar with Third-Party Tools 

Our documentation references two useful API-related platforms: Postman and Swagger. Postman was created as client for testing API requests and responses and has grown to include functionality for building APIs, creating reports, and generating documentation automatically. You can find more information on Postman in Harmony Core tutorial two in Github

While documentation generation was a recent addition to Postman’s suite of API tools, Swagger has focused on API visualization from the very beginning. In a Harmony Core environment, you will have automatic access to Swagger-generated documentation for your endpoints, but you may have a use case for one of the other tools listed on their website

There are plenty of additional tips scattered  
throughout the Harmony Core tutorials on GitHub
so we encourage you to check them out! If you have  
questions on getting started with or furthering your use  
of web services, be sure to talk to your account executive  
or join us for a session of Harmony Core Office Hours.  
We have more best practices to share from previous  
Harmony Core implementations


1 Under the hood, Entity Framework Core translates OData queries into Synergy Select class operations.


CodeGen 5.7.3 Released

By Steve Ives, Posted on July 9, 2021 at 6:47 pm

Steve Ives

There’s a new version of CodeGen out there, so if you’re using it, here’s what’s changed in this version:

  • We added a new special structure expression token <STRUCTURE_HAS_FIELD_name> that allows you to detect the presence or absence of a named field within the structure.
  • We improved the logic used when processing unique key loops and unique alternate key loops and made a slight change to the way that the unique alternate key loops operate. Previously the loop would not compare alternate key segments with the primary key, but now it does. So the loop now processes any alternate keys that do not have identical key segments to the primary key or any previous alternate keys.
  • We fixed a problem with the implementation of the -pa command line option that would cause CodeGen to fail when used with an input file containing multiple structures.
  • We fixed a problem with the implementation of the -tweaks option which could result in a null reference exception in some rare circumstances.
  • We reviewed and updated all sample templates that ship with CodeGen to ensure they use the latest capabilities such as taking advantage of complex expressions to simplify template complexity resulting from nested expressions.
  • This version of CodeGen was built with Synergy/DE 11.1.1g and requires a minimum of version 10.1.1 to operate.

As always, this new release is backward compatible with earlier releases, so we recommend that everyone download the new version as soon as possible.


Another RESTful web service story

By Cindy Limburg, Posted on May 27, 2021 at 12:26 pm

Cindy Limburg

I hope you had a chance to attend some of the recent Synergy DevPartner Conference virtual sessions. There were many opportunities to learn about the latest Synergex technologies and how customers are taking advantage of them. One of the conference themes was the importance of creating RESTful web services with your legacy applications, and the sessions included some examples of customers doing this with our Harmony Core open-source product. We also just published a new customer success story, which describes how our customer RCC used Harmony Core to create a RESTful web service and provide its customer Legacy Vacation Resorts (LVR) with a new web portal.

Used by vacation property owners, the RCC Resort Management Solution offers features such as a central reservations system, contract management, and sales analysis. LVR offers travel experiences across Florida, Colorado, New Jersey, and Nevada. When COVID hit, LVR wanted to make their resorts safer and more comfortable for their guests. They decided to move their check-in process to the web so guests could minimize the time required to interact with LVR’s front desk agents.

RCC and LVR already had a web access solution, but it used Synergex’s proprietary xfServerPlus product, and they both wanted a more standards-based solution. This was a great opportunity for RCC to modernize their solution and provide a foundation for meeting future demands for access.

RCC started with the data/logic access routines they already had for xfServerPlus, expanded them to meet the needs of the new web service and web UI, and then added new OData controllers and a Harmony Core feature called “adapters” to expose the data and logic as OData resources. Code for the adapters and controllers was generated using Synergex’s CodeGen tool and RCC’s Synergy repository.

RCC and LVR were able to meet the project goals, and both are excited to move forward with their new web services solution. See the full success story for details (and some beautiful resort photos).

Mike Amundsen, the Synergy DevPartner Conference’s keynote speaker, said that when you’re getting started with web services and trying to figure out scope and boundaries, you should look for the smallest problem you have, fix that and learn from it, and then move on to the next smallest problem. In the “Leveraging Web Services for UI” conference session, customer Forward Computers had a similar message: start with a well-defined function. (They also advised making sure it’s not too simple, as you’ll want to evaluate performance.) The new customer success story describes how RCC and LVR got started with LVR’s self-check-in function. What function will you start with?

To learn more about web services and Harmony Core, refer to our web services training videos and our documentation.


Updated Visual Studio Development Tools Update

By Steve Ives, Posted on March 29, 2021 at 10:44 am

Steve Ives

Synergex is pleased to announce the immediate availability of a new release of the Synergy DBL Integration for Visual Studio, Version 11.1.1g-3045.

As always, this latest release contains improvements across the board, but in particular, the focus was placed on these specific areas:

  • Improving the development experience in both the editing and debugging of .NET Core code.
  • Improvements in working with Repository projects in various scenarios.

Some of the improvements in this release were actually in the Synergy .NET Compiler, so in addition to updating the SDI installation, developers working on .NET Core projects (including any Harmony Core projects) should upgrade the version of the Synergex.SynergyDE.Build NuGet package used in the projects to version 11.1.1070.3045 also.

We encourage everyone undertaking any type of Synergy development in Visual Studio to upgrade to this new release as soon as possible. And remember, if you are not ready to upgrade the runtime versions on your production systems yet, you can use runtime version targeting to give you access to the latest-and-greatest development tools while continuing to support older runtime installations.

Head on over to the Resource Center Downloads page to download the new release now.



CodeGen 5.6.9 Released

By Steve Ives, Posted on March 11, 2021 at 8:10 pm

Steve Ives

We are pleased to announce another release of CodeGen, once again including some significant advances in the technology. We recommend that all developers using CodeGen, and especially developers working with Harmony Core, should upgrade to this latest version as soon as possible. This new version includes these changes and enhancements:


Announcing Synergy/DE 11.1.1g

By Steve Ives, Posted on February 26, 2021 at 3:33 pm

Steve Ives

Synergex is pleased to announce the immediate availability of Synergy/DE 11.1.1g, a quality release that includes a wide range of improvements across the entire Synergy product line. We strongly encourage all Synergy developers to review the release notes for detailed information about everything that changed.

Besides a significant focus on quality, we have also made several feature enhancements in our Visual Studio integration tools, enhancing the developers’ experience and improving their productivity.

First off, we have introduced collapsible-region support for many DBL statements and other language constructs. For example, some of the now collapsible statements include BEGIN-END blocks, USING-ENDUSING, CASE-ENDCASE, IF-THEN-ELSE statements, and more. This feature was specifically requested and voted on by developers in the Synergy Ideas Forum.

We also added support for activating the go-to-definition feature via mouse clicks, in addition to using the existing keyboard shortcut-based mechanism. The default behavior is activated via Ctrl + Left-Click but is customizable in the Tools/Options dialog under Text Editor settings.

Another area that we focused on is improving the accuracy of those “red squiggles” that show up in your code when something is wrong and occasionally when something is not wrong! Inaccurate red squigglies should occur less frequently now, although we do know that have some additional work still to do in this area.

To give developers more options when they need to get in quickly and look at something specific, especially in solutions with large numbers of projects, we also implemented support for Visual Studio 2019’s “Filtered Solution” feature that allows you to check a “Do not load projects” option in the Project Open dialog. Visual Studio opens the solution very quickly when you do this, but all projects are in an unloaded state. The developer can then select the projects they wish to work on in Solution Explorer and use the “Reload Project” context menu to load them. The context menu then includes options to allow you to load either direct dependencies or all dependencies of the projects you loaded, meaning that you can quickly get to a buildable scenario without having all projects loaded. Solution Explorer also has options to show or hide unloaded projects.

Having filtered your solution the way you want it, you can then use the “Save as Solution Filter” context menu to save the state of your solution for the next time you need it that way. The file is saved as a .slnf file and can be reopened the same way you open the solution.

We have overhauled our project build system, reduced memory usage, and improved performance for Visual Studio and command-line builds. And at the same time, we have improved and standardized the way they interact with MSBuild, allowing us to adopt new features more quickly.

And armed with our new MSBuild capabilities, we added support for a new feature known as /graphBuild, making pre-build analysis of inter-project dependencies work much more effectively. In turn, MSBuild can now more effectively perform parallel builds of multiple projects simultaneously, in some situations resulting in improvements in overall build time.

We are confident that most developers should experience improvements in overall build times across the board, particularly for traditional Synergy projects. And in some cases, with the right combination of projects and resources, those improvements could be significant.

For example, suppose you have a small number of base libraries used by a large number of higher-level projects. In that case, once those base libraries have been built, there is a good chance that higher-level projects can build in parallel, with the overall process completing more quickly. The more CPU and memory resources that are available, the faster things can proceed. In some environments, such as on dedicated build servers running CICD pipelines, we have seen improvements of up to 30 – 40% in overall build time as compared to the previously released version. But improvements of that order do require access to considerable resources; most improvements will be more modest.

If you’re already using Visual Studio to develop your Synergy code, we encourage you to upgrade to this new version as soon as possible; remember, you can always use runtime version targeting if you’re not ready to upgrade your production systems. And don’t let the fact that you only develop traditional Synergy code or deploy to Unix, Linux, or OpenVMS deter you; Visual Studio can make a great development environment for those scenarios too! Talk to your Synergex account representative for more information.


9 Windows Tips and Tricks You Should Know

By Jerry Fawcett, Posted on February 23, 2021 at 1:45 pm

Avatar

Over many years of being immersed in Microsoft Windows, I’ve come across a few tidbits I think are worthy of sharing. Some of these you may know about, but I hope you find something new here.

1. Opening a command prompt in File Explorer

So, you’re in File Explorer and you want to open a command prompt in the current location. The easiest way is to simply type “cmd” (without the quotes) in the address bar, and there you go: a command window opens to that location. You can also run other commands the same way. Go ahead: type “notepad” into the address bar of File Explorer for yourself. Conversely, you can use a command prompt to open File Explorer in the current location. To do so, issue either of the following commands in the command prompt: “start.” or “explorer .”.

2. Auto inserting the date and time in Notepad

I use Notepad all the time for taking quick notes. Try pressing F5 when you’re in Notepad. This will enter the time and date, which is useful for marking when an entry was made.

3. Changing configuration settings with MSConfig

Many already know about this utility, but it’s worth mentioning for those who don’t. MSConfig.exe is a built-in Windows tool for controlling such things as the manner the next startup boot will occur (normal, diagnostic, or selective), which services will run, and a list of other built-in tools. It’s very powerful, so use it with care. You can find more information here.

4. Understanding system errors

A quick way (yes, quicker than Googling) to look up a Windows system error is to use the command “net helpmsg errornumber”. For example, if you want to know what system error 5 means, enter this at a command prompt:

     C:\>net helpmsg 5

     Access is denied.

5. Activating speech recognition

Tired of typing? No problem: Windows has a built-in solution that allows you to talk to your computer and give your hands a break. To enable this tool, start by pressing the Windows key +H.  This will prompt you with a link to Settings to enable speech recognition. Toggle it on, and the next time a text field is in focus, you can turn listening mode on with Windows key + H. When you start talking, your computer will start typing for you. You’ll find handy documentation on how to use this feature at Windows Speech Recognition commands.

6. Organizing windows

Say you want to re-arrange the windows on your screen. Pressing the Windows key and the right or left arrow will snap a window to either the right or left side of the screen. But what if you have four windows and you want one in each corner of the screen? Well, that’s easy: just grab a window, drag it to the corner of the screen until you see the outline of the window, and then release it. Repeat this for each corner.

7. Accessing control settings with Windows Master Control Panel

There is something called Windows Master Control Panel, aka the God Mode folder. (Don’t blame me; I didn’t name it.) It’s a folder with shortcuts to many different Windows administrative/management settings and Control Panel tools in a single location. To create it, one must be logged in as Administrator (of course), and then simply create a new folder and give it the name 

     SomeName.{ED7BA470-8E54-465E-825C-99712043E01C}

For example,

     GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}

8. Deleting files

It is well known that when a file is deleted it is not truly deleted, but the space the file consumed is now marked as available. However, if you want to make sure a deleted file is actually deleted and not recoverable (by freely available tools), then the space the file consumed needs to be overwritten. There are plenty of third-party tools that will do this, but why bother getting one when Windows has a built-in tool? To overwrite free space in a particular directory or even a drive so the deleted files are not recoverable, use the cipher command. For example, to overwrite free space in the folder C:\Temp, issue the command

     cipher /w:c:\Temp

To overwrite all the free space on the D: drive, issue the command

     cipher /w:d

And of course, a tool named “cipher” can also encrypt files or directories.

9. Checking battery status

Want to know the state of your laptop’s battery? No problem. Use the powercfg command to learn everything about your battery’s current state. Note: Powercfg must be run in an Administrator command window. While powercfg has many options, the two I find most informative are /batteryreport and /energy. When powercfg is run with /batteryreport, it will create an HTML file named battery-report.html with pretty much all there is to know about your battery’s usage and history statistics.  When run with /energy, powercfg will create an HTML file named energy-report.html with a “Power Efficiency Diagnostics Report” that contains all kinds of information on the battery’s current status. For more information about powercfg, visit Powercfg command-line options.

This is only a drop in the (bit) bucket of Windows tips and tricks, so please share the ones you’ve discovered.


When is a page not a page? And when should it act like one?

By Liz Wilson, Posted on February 12, 2021 at 11:30 am

Liz Wilson

The Synergy developer interested in RESTful web services may have noticed a few intriguing things about this liminal era between Web 2.0 and Web 3.0. For starters, a page refresh is not guaranteed each time you navigate to some new corner of a website or app. When it comes to the “traditional” concerns of HTML, Javascript, and CSS—despite what The Offspring may claim—you no longer have to keep ‘em separated. The list of ways that frameworks like Vue, React, and Angular have changed both user and developer experience is extensive, and taken together, all these changes allow for unique and dynamic websites and applications.

That said, while innovation has the potential to take us further from the traditional experience of clicking a link and waiting for a new page to load, there are a few characteristics of those webpages from the early 2000s that the front-end folks would be amiss to innovate away from. Here are just a few!

1. Specific, Descriptive Title Elements

The HTML title element, demarcated by the <title> tag, is meant to provide a succinct description of the document that the browser has just rendered. If you are one of those people who has anywhere from 5 to 50 browser tabs open at any given moment, you probably rely heavily on page titles, as they appear in the tab next to the site’s custom icon.

A specific and descriptive page title is not just beneficial for compulsive tab openers like me, however. Unique titles with more, rather than less, information can improve the search engine optimization of your site. Additionally, page titles are often the first component that screen reader users will refer to in establishing where they are in a site. So adding a company name next to “Home” or “About Us” is a helpful enhancement, as is including information about changes to the page’s state.

For example:

<title>Error – password invalid – Acme Corp: Login</title>

The title element lives with other metadata in the “head” of the document, so it’s not displayed on the page and is therefore relatively easy to neglect. And when you’re working with tools like Angular and React to create single-page applications, you’ll find yourself with one HTML file in your project folder, which means just one <head> section where a title element would obviously be placed. Fortunately, most of these frameworks and libraries have developed tools for generating dynamic page titles.

ASP.NET Core Razor Pages

To ensure that your page titles are being updated dynamically, use the ViewData attribute either in the page’s model (as demonstrated in the documentation) or its .cshtml file. In either case, make sure that if you use Layout, the title element is reading from the ViewData dictionary. If you follow the standard instructions for creating a Razor Pages web application, this is the code you will see in the _Layout.cshtml file:

React

For a similar effect in your React app, install the React Helmet node package. Once that’s done, it’s a simple matter of importing Helmet and adding the document head information within <Helmet> tags within components as needed.

Angular

Similar to React, Angular projects contain a single index.html file, and that’s it for documents with the traditional head/body structure. Angular’s data binding can’t access anything outside of the body tag, so in order to display different titles as the user navigates around the app, you need to use the Title service, which is a very simple class consisting of two methods: getTitle() and setTitle(). The Angular documentation provides clear examples of how to incorporate this class into your application.

2. Semantic/Logical Headings

Whether your site is built with HTML and “vanilla” JavaScript or the client-side framework your cousin’s cousin created last week, at the end of the day, a document object model will be created by the web browser from HTML—whether that HTML was manually written by you or not. The DOM is a cross-platform interface that represents HTML as a tree structure by organizing all the markup’s elements, attributes, and text nodes into objects and creating a logical hierarchy from these objects. The technology was developed in the early days of JavaScript to enable client-side interactivity, and nowadays, the DOM also serves as the foundation for the browser’s accessibility tree, which is a critical layer that allows screen readers and other assistive technology to make sense of the contents of a website. Objects within an accessibility tree contain information ranging from what the specific element is (e.g., heading, input, etc.) to whether the element has a state (e.g., checked or unchecked, collapsed or expanded).

With that in mind, while current design trends indicate that the amount of text on each page remains in decline, it’s still a good idea to create a logical hierarchy of information and use different heading elements accordingly. This will not only benefit assistive technology users, but also the large swaths of us who have been conditioned to look for a big ol’ heading in a prominent position on the page. So even if the page is not technically a page, make sure the main heading is contained in a heading tag (probably an <h1> or <h2>) and the information that is less important is organized under the subordinate heading levels (<h2>, <h3>, <h4>…).

3. Logical Focus Order

In the same way that you may need to apply more thought with new web architectures, it’s very likely that you will have to expend some amount of effort to manage keyboard focus to replicate the way that focus operates in regular old HTML documents. In a traditional website (barring questionable use of CSS), a keyboard user can tab through each page in such a way that mimics the visual flow of information: left to right, top to bottom. In a single-page application where new HTML documents are not actually being loaded in the browser, there is nothing that would necessarily prompt keyboard focus to jump to an element at the top of a new page, because there is no new page. The Angular website (built, naturally, with Angular) provides us with an example of this. If you tab to the footer section from Home and select About, rather than hopping up to something intuitive, like the links at the top of that “page,” your next tab will take you to the next item in the list of footer links.

There are other potential issues relating to mutable content, including focus effectively disappearing, or users getting shot back up to the top of a section if a button is replaced by some other UI component.

Again, today’s popular libraries and frameworks propose techniques for providing a good experience for keyboard users:

To conclude, there is no reason for the not-pages that make up your single-page application to look like they were built in 2006. However, a case can be made for ensuring that certain aspects of the early web experience are not thrown away with the bathwater.1


1The bathwater consists of jQuery, Flash, and frames.


CodeGen 5.6.6 Released

By Steve Ives, Posted on February 5, 2021 at 3:05 pm

Steve Ives

A quick post to announce the availability of CodeGen 5.6.6.  This is a quality release that addresses an issue that could occur when generating code from templates containing certain complex expressions. In particular, several Harmony Core templates contain such complex expressions, so we recommend that all Harmony Core developers upgrade to this new version of CodeGen at their earliest convenience. As always, documentation for this new release can be found at https://codegen.synergex.com.


Synergex Developer Support Has Your Back—Now More than Ever

By Jacklin Garcia, Posted on January 27, 2021 at 11:33 am

Jacklin Garcia

Have you noticed some new names popping up on email signatures from Synergex Support or perhaps a new voice picking up our phones? Have you seen some number patterns appearing in email subject lines related to your cases? Over the last year we’ve made a lot of changes to our Developer Support department to address succession planning and feedback from customer surveys and to improve response times on your cases. We’d love to share a bit of what’s new with you, so you know what to expect the next time you send a case to Support.

Putting names (and faces) with the voices

As many of you know, our longtime Support Manager, Beth Ives, retired at the end of last year. That left some big shoes to fill, and I’m grateful to the whole Synergex team for helping me transition into the role of manager for both our Developer Support and Education teams over the last year. The rest of the Developer Support team members that you’ve grown to know and love are still here and are as reliable and knowledgeable as ever. The more tenured members of the team have been great mentors to our two newest developer support engineers, Matthew Nix and Mike Carleson. Mike and Matthew started with the team back in October of 2020 and are initially focusing on licensing, installation, and traditional Synergy cases. They are especially eager to answer any questions you may have about REV11 licensing as you upgrade your production subscription licenses this year. I’m very excited to have combined the Education team with the powerhouse of Synergy knowledge that is the Synergex Developer Support team. Expect to see some exciting new joint initiatives over the next few years.

Beth Ives’ final team meeting. She is already missed.

Improvements to support case flows

As a team, we’ve identified a few of our policies and procedures that we’d like to update to give you the best experience possible. Many of these changes will take place behind the scenes internally, but you may have already noticed one change. Previously, emailed cases were logged manually by a developer support engineer in our support service desk (we use Salesforce Service Cloud). We knew we could automate this process to ideally result in faster case assignment and initial response from a developer support engineer. We did a soft launch of a feature called Email-to-Case, which uses a reference code in an email to determine which case that email belongs to and logs the interaction accordingly. The strange characters you may have recently seen appended to email subjects are the reference codes. We plan to do a wider launch of this feature next month. You should start to receive notifications that a case was created right after you email a question to Synergex Developer Support. These notification emails will contain your case number and unique reference code. If you need to start a new email thread for an existing case, we ask that you add the reference code to the subject to help us keep the system tidy and keep your case moving forward as smoothly as possible.

Tell us what you think!

When a developer support engineer closes a case, you should receive an automated email from our service desk. These emails often include links to surveys asking for your feedback on the case. We really want to hear from you! These surveys are quick, and your feedback is what will drive internal training and additional process improvements for the Support department. Please take a few moments to fill out the case closure survey the next time one makes it into your inbox. To sweeten the deal, we will enter all survey respondents into a drawing each quarter for a $50 gift card!

What does Support do?

In case you’re not a power user of Synergex Support services yet, I’ll fill you in. First, we strive to make it as easy as possible for you to get in touch with us. You can reach Synergex Developer Support by email (support@synergex.com) from 6am – 5pm Pacific. We are available for phone support (800.366.3472 toll-free US and Canada or +1.916.635.7300 all others) from 7am – 5pm Pacific. You can also submit cases through the Resource Center (log-in required). Our department can answer questions that range from “Will version 11 of Synergy work on my operating system?” to “How do I declare this in .NET?” The team can help you with questions regarding migrations to new versions of Synergy, moving your development environment to Visual Studio, configuring REV11 licensing, and more. We’re also always happy to point you to additional educational materials (e.g., documentation, training videos, code samples, etc.).

An unlimited number of Support contacts are included in your DevPartner subscription, and ad hoc support is available for those not on a subscription yet. To hear about our premier support offerings, contact your account executive. We look forward to working your next case with Synergex Developer Support!


CodeGen 5.6.5 Released

By Steve Ives, Posted on January 24, 2021 at 11:13 pm

Steve Ives

I am pleased to announce the release of a new version of CodeGen, and this release is quite a big one. The changes include the following:

This version of CodeGen was built with Synergy/DE 11.1.1f and requires a minimum of version 10.1.1 to operate.

We recommend that all CodeGen users upgrade to this version, particularly if you are doing Harmony Core development. You can download the new version from GitHub.


10 Tips for Faster Synergy Development in Visual Studio

By Phil Bratt, Posted on January 21, 2021 at 2:12 pm

Avatar

Visual Studio is consistently one of the highest trending IDEs on the market. It has powerful features to increase code productivity. Because of this, Synergex brought traditional Synergy coding into Visual Studio. But how do you use it? I would like to focus on some of the hotkeys and organizational features available inside Visual Studio that will help developers navigate their code.

Editing Code

  1. Easy commenting: While testing code, there are times when you want to disable large sections of code so that you can run alternative code to see the differences. In Visual Studio, you can highlight the code you want to comment out and press CTRL K + C to comment out the lines. You can press this key combination multiple times to add a ‘;’ to the front of each line or CTRL K + U to remove a comment character from each line. The toolbar also contains buttons to comment and uncomment lines:
  2. Multiple line edits: One of my favorite features in Visual Studio that I’m surprised hasn’t made its way into other Microsoft products is the ability to edit multiple lines at once. If you press ALT + SHIFT and (while still holding them) push the UP or DOWN arrow keys, you can expand the cursor to multiple lines. This means that when you press a key, it will edit all of those lines with that key stroke. For example, let’s say you have multiple WRITES statements in your code:
    writes(chnout, rec_1)     
    writes(chnout, " ")
    writes(chnout, rec_2)
  3. Now you want to add an error list to handle record locking on each line. Well, you can use ALT + SHIFT to add the identical error list to each line, which beats copying and pasting to each line.

    writes(chnout, rec_1)       [$ERR_LOCKED=errloc]     
    writes(chnout, " ")         [$ERR_LOCKED=errloc]
    writes(chnout, rec_2)       [$ERR_LOCKED=errloc]
  1. Simple duplication: Speaking of copy and paste, how annoying is it to click, then hold SHIFT, then END, then CRTL C, then click, and then CTRL V? That’s tedious. It was tedious to write it out. If you want to copy the line you are on, you can duplicate the line of code with CTRL D.

Collapsing and expanding code

You may have noticed that when you create a main routine, subroutine, or function, a “-“ appears to the left of the editor. This allows you to collapse that code section to make it easier to edit large pieces of code.

  1. Collapsible labels: You will also notice that internal subroutines/labels are not naturally collapsible. But what if you wanted to make a label collapsible because you have so many of them? You would surround the code with .REGION/.ENDREGION along with a title for the region. (I usually stick with the name of the label.) For example:
    .region "erroloc"
    errloc,
    repeat
    begin
    ...
    .endregion

With .REGION/.ENDREGION in place, you will now get the “-“ around that section that you can collapse.

  1. Hotkeys: A number of hotkeys can be used to collapse and expand these sections:

Toggle outlining expansion – CTRL M + M
Toggle all outlining – CRTL M + L
Stop outlining – CRTL M + P
Stop hiding current – CRTL M + U
Collapse to definitions – CTRL M + O

Navigating code

There are also a few features that can be used to navigate your code that I find extremely helpful:

  1. If you are on a BEGIN or END in code and want to go to the matching END or BEGIN, while the cursor is on the BEGIN or END, press CRTL ] to move the cursor to its pairing statement.
  2. If you are on a variable or subroutine and want to jump to where it is defined in the code, you can either press F12 or right-click and select “Go to definition.”
  3. With this jumping around, you can also push CTRL – to go back to where you were or CTRL + to go forward.

Debugging code

To round off this list, there are a number of function keys that are useful during a debugging session in Visual Studio:

  1. To step into the line of code you are on, so you can see the code run through a subroutine, class, etc., use F11. To step over and go to the next line of the currently executing source code, press F10.
  2. While coding or debugging, pressing F9 will toggle adding or removing a breakpoint on the current line.

Those are my 10 tips for navigating through Visual Studio and making use of its code editing and hotkey features. You can also find our video about Visual Studio hotkeys here. Keep in mind that most of these keys can be changed or customized inside Visual Studio by selecting Options from the Tools drop-down menu. Hope you found some of these helpful.

If you haven’t moved your Synergy development environment to Visual Studio yet, what are you waiting for? Check out our solution for modernizing your development environment and accessing a superior debugging and build experience. You can also reach out to your account executive to discuss how we can help you move to Visual Studio or train your developers to get the most out of their new environment.


Don't miss a post!

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Recent Posts Categories Tag Cloud Archives