Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Running my first Micros IFS file

Status
Not open for further replies.

leadingpeak138

IS-IT--Management
Oct 23, 2016
10
US
Hello,

I am writing my first ISL file for RES 3700 v5.0 that looks like this.

event inq : 1
window 3, 34, "Hello Micros"
display 2,@CENTER
waitforclear
endevent

NOw, I'm trying to invoke the ISL file.

Question #1: Should I put my isl file in the MICROS\res\pos\scripts or in MICROS\res\pos\etc?

I have read many posts that mention putting the file in MICROS\res\pos\etc. But I see a folder on my RES server called MICROS\res\pos\scripts that has TMSInteface.isl, OCBClient.isl, and PCD.isl. So, where is the correct place to put my new ISL file: in scripts or in etc?


Question #2: What is the correct name of my ISL file?

The 3700 SIM manual says to create a scripts.ISL or a PMS###.isl file where ### is the interface number. So, does it matter which filename I use? Also, do I have to check the "SIM Interface" checkbox in the POS Configurator's Interface screen?


Question #: What is an IFS error?

In the meantime, I configured a SIM/PMS Inquire button on the touchscreen designer to call my interface. When I click this button, I see this entry in the 3700d.log file.

IFS : No IFS configuration in registry
MDSIFSAdapter: IfsSendComError [0x8....]
...
IFS: IFS not configured for this node. Existing.

Any ideas how I can fix this IFS error?

Thank you so much!!!
 
I'm still figuring out ISL myself, so I can't speak with much authority, but I might be able to point you in the right direction while you wait for someone more knowledgable to comment.

You do need to put your script file in MICROS\res\pos\etc, and you do need to name it PMS###.isl where ### is the interface number. That's how it knows where to find it.

That's how you make the file accessible for your server computer. If you want to have it on a workstation, you have it drop it into MICROS\res\CAL\####\Files\CF\Micros\etc where #### is the type or types of workstation you're pushing it to (WS5A, for example).

You don't need to check SIM Interface, or at least I haven't for any of my scripts.

Your code is a little out of order. "Hello Micros" is an argument for the display command, not the window command.

event inq : 1
window 3, 34
display 2, @CENTER, "Hello Micros"
waitforclear​
endevent

Make sure you have a CLEAR button on whatever screen you run this on, otherwise you'll be stuck. For testing, you might want to start with something simpler like:

event inq : 1
InfoMessage "Hello Micros"​
endEvent

I've not encountered an IFS error before, not sure where to start with that. Maybe play around with the settings for your interface in POS Config? Could be you have it calling a network node that isn't configured for this, or calling on a port that it shouldn't. I don't think you'd need either of those set up for just a window display, but if it's set up incorrectly it would probably kick an error.

Also, when adding the button to the touchscreen that calls your script, make sure you enter the inquiry number. On mine, I have to click off and then back onto the button in Touchscreen Designer before it gives me a field to fill in.

Just a quick note, for someone else figuring out ISL, google is your friend. I've learned so much just from googling:

site:tek-tips.com "micros" [insert micros topic]

There's a decade of forum posts here, with a lot of responses from some very intelligent people.

Good luck.
 
Did you mark your interface as a SIM? You should only do that if the SIM has a service backing it that communicates over a TCP or COM port.

If you don't have network communication going on, literally, the only thing you need to do is having the interface record. Don't even need to get it a name. Fill nothing else out. The rest of the settings all pertain to SIM files that are part of a back-end. Thats likely where you IFS error came from as the IFS service is what handle the communication. It probably failed a keep alive given you don't have a service.


Google might be your friend, but the documentation should be your bible. Every micros system has a copy: "C:\MICROS\Documentation\Help\SIMHelp.chm
 
Thanks AloysiusPercival and Moregelen!

I will try your suggestions today.

BTW: I spent 2 hours trawling tek-tips for ISL information and also read the entire 3700-sim pdf manual that I found on tek-tips <-- super valuable to have a forum like this!
 
Well, I'm willing to help when I can - I do tend to cherry pick the more interesting things. I have a lot of experience with SIM, with writing DLL's for them (both CE and Win32) and building back of house services for communication. I enjoy playing with it all. I tend to ignore generic POS questions though like how to configure a workstation - my favorite is SIM questions haha.
 
Here is the function library I tend to import into my SIMS! Might help with your understanding:

Code:
VAR SQL_H       : N12 = 0
VAR SQL_CMD     : A2000
VAR NEXT_PAGE_KEY : KEY = KEY(1,2)
VAR PREV_PAGE_KEY : KEY = KEY(1,1)






//////////////////////////////////////////////////
///////////    FORMAT/LOG FUNCTIONS   ////////////
//////////////////////////////////////////////////


SUB LOG_MESSAGE( VAR FILE : A200, VAR MESSAGE : A5000 )
	VAR FN : N5
	FOPEN FN, FILE, APPEND
	FWRITELN FN, MESSAGE
	FCLOSE FN
ENDSUB

SUB PAD_LINE( REF OUT, VAR LINE : A40)
	VAR PADDING : A40 = "                                        "
	FORMAT OUT AS MID(PADDING,1,(32-LEN(LINE))/2.0), LINE 	
ENDSUB


//////////////////////////////////////////////////
///////////       INPUT FUNCTIONS     ////////////
//////////////////////////////////////////////////
SUB GET_YES_NO( REF ANSWER, VAR MESSAGE : A78 )
	CLEARISLTS
		SETISLTSKEYX 2, 10, 4, 4, 2, @KEY_ENTER, 10059, "LEFT", 10, "YES"
		SETISLTSKEYX 2, 16, 4, 4, 2, @KEY_CLEAR, 10058, "LEFT", 10, "NO"
		SETISLTSKEYX 11, 12, 2, 6, 2, @KEY_CANCEL, 10392, "LEFT", 10, "CANCEL"
	DISPLAYISLTS
	
	VAR CENTER : N3 = (78-LEN(MESSAGE))/2
	WINDOW 3,78
	DISPLAY 2, CENTER, MESSAGE
	
	VAR KEY_PRESS : KEY
	VAR DATA : A20
	INPUTKEY KEY_PRESS, DATA, MESSAGE
	
	IF KEY_PRESS = @KEY_ENTER
		ANSWER = 1
	ELSEIF KEY_PRESS = @KEY_CANCEL
		EXITCONTINUE
	ELSE
		ANSWER = 0
	ENDIF
	WINDOWCLOSE
ENDSUB

SUB GET_INPUT( REF ANSWER, VAR MESSAGE : A78, VAR TS_SCRN : N9 )
	VAR CENTER : N3 = (78-LEN(MESSAGE))/2
	WINDOW 3,78
	DISPLAY 2, CENTER, MESSAGE
	
	VAR KEYPRESS : KEY
	IF TS_SCRN > 0
		TOUCHSCREEN TS_SCRN
	ENDIF
	INPUTKEY KEYPRESS, TIPAMT, MESSAGE
	WINDOWCLOSE
ENDSUB

SUB SHOWPAGINATIONKEYS( VAR RESULTSPERPAGE : N4, VAR RESULTSIZE : N4, VAR CURRENTPAGE : N4, REF NAMES[], REF OBJNUMS[] )

	CLEARISLTS
	
	WHILE (CURRENTPAGE - 1) * RESULTSPERPAGE + 1 > RESULTSIZE AND CURRENTPAGE > 1
		CURRENTPAGE = CURRENTPAGE - 1
	ENDWHILE

	VAR NUMPAGES : N5 = 1
	WHILE NUMPAGES*RESULTSPERPAGE < RESULTSIZE
		NUMPAGES = NUMPAGES + 1
	ENDWHILE

	VAR KEYHEIGHT : N1 = 6
	VAR KEYWIDTH : N1 = 30 / (ResultsPerPage / 2)
	
	VAR FIRSTITEM : N5 = (CURRENTPAGE - 1) * RESULTSPERPAGE + 1
	
	VAR I : N5

	FOR I = FIRSTITEM TO FIRSTITEM + RESULTSPERPAGE / 2 - 1
		IF I > RESULTISIZE
			BREAK
		ENDIF
		SETISLTSKEYX 1, (I - FIRSTITEM) * KEYWIDTH + 1, 3, KEYWIDTH, 1, KEY(1, OBJNUMS[ I ]), 0, "C", 1, NAMES[I]
	ENDFOR

	FOR I = I TO FIRSTITEM + RESULTSPERPAGE
		IF I > RESULTSIZE
			BREAK
		ENDIF
		SETISLTSKEYX 4, (I - FIRSTITEM - RESULTSPERPAGE / 2) * KEYWIDTH + 1, 3, KEYWIDTH, 1, KEY(1, OBJNUMS[I]), 0, "C", 1, NAMES[I]
	ENDFOR

	IF CURRENTPAGE > 1
		SETISLTSKEYX 11, 1, 2, 2, 1, PREV_PAGE_KEY, 10388, "C", 10, ""
	ENDIF
	IF CURRENTPAGE < NUMPAGES
		SETISLTSKEYX 11, 3, 2, 2, 1, NEXT_PAGE_KEY, 10389, "C", 10, ""
	ENDIF
	
	SETISLTSKEYX 9, 27, 4, 4, 1, @KEY_CLEAR, 10058, "L", 10, "Done/Exit"
	
	DISPLAYISLTS

ENDSUB

SUB SHOWISLKEYBOARD( VAR KEYBOARD_WIDTH : N2, VAR KEYBOARD_HEIGHT : N2)

	CLEARISLTS

	VAR X : N2 = (30 - (10 * KEYBOARD_WIDTH)) / 2
	VAR Y : N2 = 12 - (KEYBOARD_HEIGHT * 3) + 1

	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 0),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,81),0,"C",10,"Q"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 1),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,87),0,"C",10,"W"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 2),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,69),0,"C",10,"E"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 3),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,82),0,"C",10,"R"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 4),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,84),0,"C",10,"T"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 5),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,89),0,"C",10,"Y"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 6),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,85),0,"C",10,"U"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 7),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,73),0,"C",10,"I"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 8),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,79),0,"C",10,"O"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 9),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,80),0,"C",10,"P"

	X = (30 - (10 * KEYBOARD_WIDTH)) / 2 + 1
	Y = 12 - (KEYBOARD_HEIGHT * 2) + 1

	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 0),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,65),0,"C",10,"A"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 1),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,83),0,"C",10,"S"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 2),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,68),0,"C",10,"D"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 3),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,70),0,"C",10,"F"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 4),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,71),0,"C",10,"G"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 5),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,72),0,"C",10,"H"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 6),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,74),0,"C",10,"J"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 7),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,75),0,"C",10,"K"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 8),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,76),0,"C",10,"L"

	X = (30 - (10 * KEYBOARD_WIDTH)) / 2 + 2
	Y = 12 - (KEYBOARD_HEIGHT * 1) + 1

	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 0),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,90),0,"C",10,"Z"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 1),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,88),0,"C",10,"X"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 2),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,67),0,"C",10,"C"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 3),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,86),0,"C",10,"V"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 4),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,66),0,"C",10,"B"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 5),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,78),0,"C",10,"N"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 6),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,77),0,"C",10,"M"
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 8),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,91),10072,"C",10,""
	SETISLTSKEYX Y,X + (KEYBOARD_WIDTH * 7),KEYBOARD_HEIGHT,KEYBOARD_WIDTH,1,KEY(1,92),0,"C",39,"|__|"
	SETISLTSKEYX 9,27,4, 4, 1, @Key_Clear, 10058, "L", 10, "Done/Exit"
	
	DISPLAYISLTS

ENDSUB


/////////////////////////////////////////////////
///////////        SQL FUNCTIONS      ///////////
/////////////////////////////////////////////////


SUB LOADSQL
	CALL LOADDLL
	CALL OPENSQL
ENDSUB

SUB LOADDLL
	IF SQL_H = 0
		DLLLOAD SQL_H, "MDSSysUtilsProxy.dll"
	ENDIF
ENDSUB

SUB OPENSQL
	IF SQL_H = 0
		RETURN
	ENDIF
	VAR CON_STATUS : N9
	DLLCALL_CDECL SQL_H, sqlIsConnectionOpen( REF CON_STATUS )
	IF CON_STATUS = 0
		DLLCALL_CDECL SQL_H, sqlInitConnection("micros", "ODBC;UID=custom;PWD=custom", "")
	ENDIF
ENDSUB

SUB SQL_QUERY( REF SQL_CMD )
	DLLCALL_CDECL SQL_H, sqlGetRecordSet( SQL_CMD )
	
	SQL_CMD = ""
	DLLCALL_CDECL SQL_H, sqlGetLastErrorString( REF SQL_CMD )
	IF SQL_CMD <> ""
		ERRORMESSAGE "SQL ERROR: ", SQL_CMD
	ENDIF
	
	DLLCALL_CDECL SQL_H, sqlGetNext( REF SQL_CMD )
ENDSUB

SUB SQL_EXEC( REF SQL_CMD )
	DLLCALL_CDECL SQL_H, sqlExecuteQuery( SQL_CMD )
	SQL_CMD = ""
	DLLCALL_CDECL SQL_H, sqlGetLastErrorString( REF SQL_CMD )
	IF SQL_CMD <> ""
		ERRORMESSAGE "SQL ERROR: ", SQL_CMD
	ENDIF
ENDSUB

SUB SQL_RECORDSET( REF SQL_CMD )
	DLLCALL_CDECL SQL_H, sqlGetRecordSet( sql_cmd )

	SQL_CMD = ""
	DLLCALL_CDECL SQL_H, sqlGetLastErrorString( REF SQL_CMD )
	IF SQL_CMD <> ""
		EXITWITHERROR "SQL Error: ", SQL_CMD
	ENDIF
ENDSUB

SUB SQL_NEXTRECORD( REF SQL_CMD )
		DLLCALL_CDECL SQL_H, sqlGetNext( REF SQL_CMD )
ENDSUB

SUB CLOSESQL
   IF SQL_H <> 0
         DLLCALL_CDECL SQL_H, sqlCloseConnection()
	 DLLFREE SQL_H
   ENDIF
   SQL_H = 0
ENDSUB
 
Hi,

I got the script to work by fixing the Inquire number on the Touchscreen Designer. It was set to 0. And when I set to 1, then my "Hello Micros" dialog popped up and the IFS error no longer occurs!

Thanks for the tips!
 
Ah. Yeah, inquiry 0 hard codes it to a COM communication if I remember correctly. Used for PMS systems.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top