VOLUME LXIII               12/08/2020

Client Showcase

By Dottie Worster, Media Manager

Mark is the CEO of Memsco. Memsco is a processor of QME (Qualified Medical Exam) cases and information in California.  Qualified Medical Examiners are licensed to evaluate the treatment provided to injured workers when the California legal system requires it.  Memsco uses Ninox and the full NioxusPLUS suite: ReportsPLUS, CalendarPLUS, and DocumentsPLUS.

 

Ninox

Initially, Mark was looking for a CRM solution and database.  He was searching for a platform that would be easy to understand, with a good user experience.  He also needed a platform with expansive consulting options “and a good relationship to accelerate a buildout and to do what I can’t do or don’t have time to”. He looked at other options, such as netsuite and salesforce, but decided they were too expensive.  After coming across Ninox and Nioxus, he decided it was the best fit for his needs.

 

Solution

Nioxus set up a system to take clerical duties that when done manually might take an hour, and condense them to 5 to 10 minutes.  This project is ongoing, as it has evolved and taken new directions, something Mark likes about working with Ninox and the Nioxus team.  “It’s all about taking something that could be done on a typewriter or a form-filler and having the data all in one place.  It’s about having all forms able to access that data, creating something that’s super easy, high quality, and with high integrity.  This drastically speeds up the process”.

 

ReportsPLUS

Mark loves ReportsPLUS for it’s email, print, and dashboard functions. “Now I can register a new applicant or injured worker and I have the ability to email out a standardized email so everyone using the tool does it the same way.  Then I can attach forms to be filled by the information that’s already in the database, and the whole thing takes about a two minute phone call”.  This greatly expedites the CRM process for Memsco, saving time and money for the company.  Mark also loves that he can integrate KPIs into ReportsPLUS and create dashboards for providers.  He said he also loves that ReportsPLUS is feature-rich with modules, “you just need to turn them on.”  He said that ReportsPLUS gives him reports crucial to his business that Ninox could never produce.

 * Screenshot of a report from Memsco

CalendarPLUS

Mark likes to use CalendarPLUS to keep track of deadlines and project management. “Not only do we make an appointment but we have 10 or 12 deadlines that follow that get mapped out to the calendar.  We measure if those deadlines have been met, and we can provide exception reporting to our customers”. Mark loves that CalendarPLUS makes it easy to make sure cases are being handled fully in a timely manner. 

DocumentsPLUS

Mark uses DocumentsPLUS every day, as that’s where they store all of their work.  He likes using the PDF reader so that document’s can be read without being printed, and he’s looking forward to exploring the workflow automations within DocumentsPLUS.  Mark also loves that DocumentsPLUS is HIPAA compliant, since he works with the medical community. 

Mark’s final comment was that he hopes everyone can develop the trusted relationship with Nioxus that he has.  He sees Nioxus as a trusted advisor, who’s there whenever he needs to change something, or start a new project.

“My experience is finding the glove that fits well.  This has been perfect for my application.  I think it’s extremely scalable, and what I like about that is one day I can private label every piece of the product, and I’m looking forward to enjoying the integration when Memsco is larger”.

-Mark B., CEO of Memsco

Ninox University YouTube Channel

Nioxus has created nearly 100 videos and over 200 hours of content teaching you how to use and optimize Ninox, as well as our supplementary products: CalendarPLUS, ReportsPLUS and DocumentsPLUS

Nioxus Today

By Amelia Neighbors, GM Global Operations

We are reaching the time of year that people start taking more vacation time and enjoying leaves of absence. Well here at Nioxus we don’t do so much of that – we are busy working on all the products and services to support the global Ninox community that you have come to rely on. We are continuing our free Learning Lab webinars on Thursdays, we continue to add content through video and templates on our membership and web pages, and we continue to improve and refine our existing products and client projects.

 We love that we can offer unlimited support tickets and strive every day to deliver excellence in all that we do. We appreciate getting that from our vendors and partners and hope that you do too. 

As ReportsPLUS (and other Nioxus products) get more mature, there seems to be more and more to do and we are happy to do it. Thank you, as always, for being a part of the Nioxus family and for your ongoing support – we are all committed to your success so let us know how we can best support you.

This Week in the Learning Lab

Be sure to join Thursday on the 10th at 12:00pm EST for our Learning Lab open Q&A! Make sure to register and have your questions ready!

Did you know that Nioxus has built over 125 templates which are available to all Standard, Deluxe and Premier Nioxus members?

Gold Star Program

By Jim Harris, The Stargazer

Now with everything happening here at Nioxus, I find it hard to believe that we’re already a week into December. Normally, Miami at this time of year is still warm, but we had some very cool weather and cold temperatures.

Despite these cool temperatures, things are going to get hot for those who have been attending Learning Lab. As stated at the Learning Lab last week (12/3), The Gold Star Program will officially be open starting at the next Learning Lab (12/10), but I had a few inquiries about Gold Stars recently, and I will be answering these questions this Thursday at the Learning Lab.            

Okay, as promised – my fondest Christmas memory? I was still very young, around 14 or 15. It seems odd to see people getting trees before Thanksgiving nowadays and in early 1970s that was never heard of. I was part of the Boy Scouts and  we were selling the Christmas trees. I was helping a family pick out a tree and after finding the perfect tree, I placed it carefully into their station wagon. The man paid for the tree, told me he was once a Boy Scout Master and although we were not allowed to receive any tips, he insisted. I was astounded as he handed me a $20 bill, which was more than the cost of the tree. As I was telling the man that I could not take that money, my scout master heard the commotion. They all felt that it was okay for me to take the money and put it to good use. Right away,  I knew exactly what I wanted to use it for. As it was soon to be my parents’ 20th anniversary, I decided to give them a special gift of 20 dollar coins.

Jim the Stargazer — Jim@Nioxus.com

Developer Tips of the Week

Ninox & Calendar Plus Tips

SOMETIMES I JUST DRAW THE LINE

By Jennifer Neighbors, Senior Consultant

Lately I’ve been thinking about form design and reflecting on, among other things, how odd it is that Ninox doesn’t offer the ability to draw lines on forms. Because sometimes you just need to draw a line to separate the parts of a form: Not a thick line with text that draws attention to itself like a “head” layout element, for example, but instead just a plain thin line that separates one area of a form from the next. I sometimes want something to use that organizes the form, but not in a loud way.

If you experiment a bit, you will find that there are several ways to do this. Here’s my favorite: Create a “free text” layout element. Use the style function to make the text color match your form’s background color so it doesn’t show up. Put a border under the element (only under it) of whatever color you like. Save your changes. You now have a nice thin line across your form. 

Here’s an example of how I would use a line:

See how the top line of fields doesn’t line up with the ones below? And, notice that those fields on top are of somewhat greater significance? By drawing a line, I’ve made this difference seem intentional. Without it the form would look a little jumbled up.

Why did I choose to use a “free text” layout element instead of something else? Because it takes up the least amount of vertical space.

What Working on Calendar Plus has Taught me about Ninox Date Fields

By Adam Davidson, Senior Developer

If you’ve worked with Ninox date fields chances are you’ve noticed that they don’t always work as you might expect.  If you haven’t read David’s article titled “Do As Server – Chapter 2″ in the October 27th issue of our newsletter I highly recommend you check it out here as this article expands on some of the stuff that was mentioned there. 

Here are the biggest things that tripped me up about date fields when developing Calendar Plus.  You probably know about some of them already.  A lot of these things are equally applicable to date-time and appointment fields, which are both stored in the same way.  I don’t have the space to provide solutions to these issues here, but my hope is that a knowledge of what is going on with dates behind the scenes will help you work around the weirdness!

  1. Dates are stored as Unix timestamps behind the scenes and include a time component which is not visible in the date field. 

As an example, if I set a date field to December 10th 2020 here in New York, David looks at it in Dallas Texas (1 hour behind) and sees December 9th 2020. If he were to add a formula field with the code:

							
					format('Date Field', "YYYY-MM-DD hh:mma");				
			

He would see: 2020-12-09 11:00pm. The timestamp was set to midnight on the 10th New York time,  and it has been read in his local time (1 hour behind), and displayed without the time component. AH! 

  1. Dates are accessed in local time when code is executed on the browser, and in server time when code is executed on the server.

This is explained in David’s article linked to above. As an example of this, if I in NYC place a button on my record with the following code:

							
					do as server 'Date Field' := date(2020, 12, 10) end;				
			

and click the button, I will see the date field change to 12/09/2020.  This is because my database is on the public cloud, and the code is being executed in Germany. The situation is the same as if someone has gone into my database in Germany and changed the date to the 12th, resulting in the same problem we saw in number 1.  David shows a neat way to address this using the format() function in his article linked to above.  

  1. Trigger after update and Trigger on create functions are always executed on the server.  

This is something that is very useful to know given the above information. As an example of how this affects dates, let’s say I insert the following code into a trigger after update function on ‘Date Field’:

							
					'Date Field' := date('Date Field')				
			

then I set the date field to 12/10/2020. What do you think will happen? This is a bit of a tricky one to think through, but the date is immediately changed to 12/09/2020. Any date that I choose gets changed to the previous day. Here’s why:

  1. When I click on the date in NYC, first it sets the Unix timestamp to midnight of the chosen date, NYC time, which is 6am on that day German time.
  2. Then the trigger after update function runs on the server in Germany, and reads the time as 6AM on the 10th. 
  3. The date() function then takes this timestamp and lops off the 6am part, changing the timestamp to midnight of the 10th German time. 
  4. When that value is sent back to my browser, it is changed back into my local time, which is 6pm NYC time, on the previous day.  AH!
 

In general if you are manipulating dates in script you need to know exactly where your code is being run.  Trigger after update and Trigger on create functions are always run on the server, and there is no way around it.  On click and formula functions are run locally (on your computer) unless you specify “do as server”.  Global functions are run wherever you call them, unless the global function itself includes “do as server”. 

  1. Don’t forget about the time shift!

I’ve seen this come up in a couple of circumstances.  A big one  is when adding a day or days  to a date.  Let’s say we have this code in a button: 

							
					let firstDate := date(2020, 10, 1);
let secondDate := date(2020, 11, 1);
alert(text(firstDate + 1) + " " + text(secondDate + 1));				
			

When we click the button we see an alert that reads “10/02/2020 11/01/2020”.  A day was added to the first date, but it doesn’t look like the second one was affected!  This is because of the time shift on November 1st 2020 in New York.  The results may be different where you are, depending on when your time shift occurs.  By changing date + 1 to date(date + 1.5) this issue can be avoided. 

Creating Table Records

By Jennifer Neighbors, Senior Consultant 

Whether or not you have administrative rights, it’s easy to insert new records into your database tables. Click the “+” after the last record in a table when you are in table view or click the plus symbol inside of the circle in the upper right corner of the screen in either table or form view. A new, blank form will open for you to use to enter your new record. However, if you have administrative rights, and you are writing code in your database, you may want to make a new table record using code. The simplest and most common situation I encounter is when I want to add a NEW button to a form to let the user simply press that button to add a new record. A big, bold, colorful button is easier for users to see and understand than Ninox’s small plus symbol inside a circle and it provides you the opportunity to add some values to the resulting record as well. Create a button, and, in the button’s “on click” function, enter code like this:

							
					let x := (create INVOICES);
 popupRecord(x);				
			

This code creates a new record in the Invoices table and then opens that record for the user to see and edit. Remember I said I could also add a field value to my new record? Using the variable as a reference to the new record, I can enter the value I want the new record to have. Then my code would look something like this:

							
					let x := (create INVOICES);
x.('Invoice Date' := today());
popupRecord(x)				
			

The next method I’ll demonstrate is takes things further using this same method. I use it when I’m writing code to execute a longer function that includes creating some records. First, I pick a simple variable and use it with the Create Record function. Then I define each field value in my new record using the variable as a reference like this:

							
					let i := (create Customer);
i.( 'Customer First Name' := “Alicia”);
i.('Customer Last Name' := “Smith”);
i.('Sales Territory' := 5);
i.('Sales Rep' := “Sam Strong)” 
…more code
(Invoice.Customer := i);
…more code				
			

Notice that, not only have a created a new table record, but also I have referred back to that new record later on in my code when I need to do so. If you are like me, you’ll be writing longer and longer blocks of code as you gain experience and programming ambition. However, with really long code blocks, you will eventually either run out of letters to use as variables or you will start to forget which ones you’ve already used (and you do not want to reuse these variables in the same code block). When this has happened a few times, try this variant of the code above:

							
					let xCustomer := 0;
(create Customer).( 
    'Customer First Name' := “Alicia”;
    'Customer Last Name' := “Smith”; 
    'Sales Territory' := 5; 
    'Sales Rep' := “Sam Strong”;
    xCustomer := number(Id)
    )
… more code
Invoice.Customer := xCustomer
… more code				
			

This style of creating records discards the variable while allowing you to accomplish the same thing. Once again, I have referred back to the new record later in my code, but this time I did it a little differently. If you are relatively new to creating records using Ninox coding, I hope this introduction will help you get started. Once you try these methods a few times, I am sure you’ll agree that it’s easy to do!

 

Jennifer welcomes feedback and can be reached at jennifer@nioxus.com

Copyright 2020 © All Rights Reserved.

All logos, trademarks and names are the protected property of Nioxus Corporation or their respective owners.

“Ninox,” “Ninox Database” and the blue Ninox owl eye logo are the property of Ninox Berlin and are used with permission.