How to Set Up Communication Between iLeave/iHR and S900 Proximity Terminals

These instructions explain how to set up communication between Apex Software and S900 proximity terminals. They are written for system administrators who are familiar with installing windows services and reviewing event logs.

If you have any questions then call (317) 225-4415 or email

1. Pick Server and Disable Firewall

Decide where to install the terminal polling service. Setup will be easier if you pick the server that is already hosting the iHR database, but you can pick any server that is on the same network. Turn off the firewall on your selected server. (After installation, you can enable the firewall and pinhole it to allow communication with the terminal.)

2. Set Up Terminal and Enroll Yourself as Admin

On the terminal, click the M/← key to open the menu. Use the arrows to select the icon labeled 2. Comm and click the OK key. Click OK again to open the network settings. Assign the terminal a unique IP address that is on the same subnet as the server In the NetSpeed setting, change the speed from Autodetect to 100Mbs (unless your router only supports 10Mbs). Click OK. Use the arrows to select the icon labeled 1. User Mng. Click 1. New User. Enroll yourself. To type letters, click the * key. Enroll your fingerprint. Grant yourself admin permissions. Click OK when prompted to save and exit the menu. Do not enroll any other users.

3. Download Apex Terminal Manager and Terminal Polling Service

Download the Apex Terminal Polling Service from and install it on your server.
Download the Apex Terminal Manager from and install it on your server.

4. Use Terminal Manager to Copy Employees to the Terminal

Open Apex Terminal Manager (Start > Program Files > Apex > Terminal Manager). After you log on to the database, right-click the white frame on the left and either add a terminal or edit the existing terminal to match the IP settings that you used in step 2. When prompted, use port 4370.

Right-click the frame again and click Synchronize > All Db Employees with All Terminal Users. After the command completes, right-click the terminal and click List Users. You should now see all of your employees listed as users on the terminal.

5. Enroll Fingerprints in Terminal and Back Up Enrollment

Return to the terminal. Click the menu key. Click 1. User Mng. Click 2. Manage User. Enroll user's fingerprints one-by-one, clicking OK to save when prompted. After you enroll all of the fingerprints, back up your work. In Terminal Manager, right-click the terminal and then click Back up Users to File.

6. Configure Service

In Terminal Manager, right-click the frame on the right and then click Service Settings. Review the settings. Make sure that the synchronization service is enabled. The settings control how often swipes are moved from the terminal to the Db, how often newly-entered (or modified) employees are synchronized with the terminal, and how often all of the employees are forcibly synchronized. The terminal is unresponsive when it is communicating with the service, so the fingerprints should not be synchronized more often than once every five minutes. Likewise, synchronizing the entire employee list ties up the terminal for about two minutes, so you will probably not want to schedule that operation more frequently than once a day -- in the middle of the night.

Next point the service to the Db. In Windows Explorer, open the folder C:\Program Files\Apex\Apex Time Terminal Service. Open the file apexTerminalServices.xml. You will probably need to right-click the file and choose to open it with notepad, otherwise Internet Explorer will open a read-only copy.

In the file, edit the value for the connectionString setting. Enter the server/instance name beside "Data Source" and the database name (which is usually iHR) beside "Database". Example values are shown below. Note that the values can specify Windows Authentication or SQL Authentication. Apex recommends using Windows Authentication if the service will run on the same server as the database. Otherwise, create a SQL login and use SQL Authentication. (Open the Apex Client, click Company > Security, create the login, enroll it in db_owner or go to its permissions tab and select "RWCD" by "Terminals".)

-- Connect to the local server on the default instance. Use the service's Windows credentials to log in.
<connectionString value="Data Source=.;Trusted_Connection=Yes;Database=iHR" />

-- Connect to the local server on the SQLExpress instance. Use the service's Windows credentials to log in.
<connectionString value="Data Source=.\SQLExpress;Trusted_Connection=Yes;Database=iHR" />

-- Connect to a remote server on the default instance. Use the SQL login "daemon" to log in.
<connectionString value="Data Source=Server1;Database=iHR;User ID=daemon;Password=colts2008" />

-- Connect to a remote server on the IHR instance. Use the service's Windows credentials to log in.
<connectionString value="Data Source=Server1\IHR;Trusted_Connection=Yes;Database=iHR" />

6. Start Service

Open Service Manager and start the Apex Terminal Polling Service. Insure that the service is set to start automaticly instead of manually. Open the application event log and check for messages and errors. The most common initial error message indicates connection problems. If you see a database connection error then double-check your connection string in the xml file.

If you set the connection string to use Windows Authentication then the Windows account that runs the service must be granted access to the database, and must be granted execute permission on the stored procedure dbo.spTerminalPunch. By default, the Windows account that the service uses is LocalSystem which should have full permissions on all local databases. If the event log shows permission errors then choose one of three actions:

Correct any connection errors by editing the xml file, changing database permissions, and/or reassigning the account that the service uses. Restart the service with each change. Upon success, you will see an informational entry in the event log.

7. Test Communication

Test the communication between the terminal and the service. Open Apex Software, open your employee record, go to your timecards tab, and you should see your punch. Time can be shown in terms of "in time/out time" or date/hours. The "Time Schema" selection determines the format.

8. Troubleshooting

If you see an error in the server's event log like the one below then verify that your server's firewall is not blocking the port (4370). While troubleshooting, you should temporarily turn off the firewall altogether. Next make sure that the terminal's IP is unique on your network. Then ping the terminal's IP from your server's command line. If ping fails then you most likely have a bad Ethernet chord or bad net mask setting on the terminal. If ping succeeds then go to the terminal and use the menu to open the TCP/IP communication settings. Set the connection speed to 10Mbs. Make sure that the password on the terminal matches the password in the software. Save the settings. Turn the terminal off and back on. Restart the Apex Terminal Polling service from Service Manager and check the event log again. If ping succeeds and the issue is not resolved then contact support.

System.ApplicationException: Error occurred during Connect_Net(x.x.x.x)(Terminal x). Unspecified error code -6.

If the event log does not show an error, and you do not see a punch in Apex Software then open Apex Software, click Timecards > Terminals, and confirm that the port numbers are all set to 4370. Confirm that the employee # entered in Apex matches the enrollment number entered in the terminal.

Note that, by default, the service will poll the terminal when it first starts and then again every 5 minutes. So if you change the port numbers then it may take 5 minutes to see the punch. You can increase the polling frequency in Timecards > Terminals. When the service is polling a terminal, the terminal briefly displays a busy message and cannot accept a swipe.