๐Ÿ”ฅ Priority Software Developer Cheat Sheet

Fast. Clean. Accurate. Written for real Priority developers.

๐ŸŸฆ SQL System Functions

Priority exposes builtโ€‘in SQL functions prefixed with SQL.. These return system values usable in triggers, procedures, and reports.

  • SQL.DATE โ€” current date & time
  • SQL.DATE8 โ€” current date only
  • SQL.TIME โ€” current time
  • SQL.DAY โ€” weekday number
  • SQL.USER โ€” internal user ID
  • SQL.ENV โ€” current company
  • SQL.ENVLANG โ€” current company language
  • SQL.WEBID โ€” current web user id (number)
  • SQL.CLIENTID โ€” current web user id (string)
  • SQL.LINE โ€” row counter
  • SQL.TMPFILE โ€” path to temp file
  • SQL.GUID โ€” random GUID
  • SQL.GROUP โ€” current user Group
SELECT SQL.DATE, SQL.USER 
INTO :now, :usr 
FROM DUMMY;
    
๐Ÿงฎ SQL Variables

Variables begin with : and can be form variables, parameters, or system variables.

  • :RETVAL โ€” return value of last query
  • :SCRLINE โ€” current form line
  • :PAR1โ€“:PAR3 โ€” message parameters
  • :FORM_INTERFACE โ€” 1 when form load is running
  • :FORM_INTERFACE_NAME โ€” the name of the interface (when form load is running)
  • :ACTIVATEREFRESH refresh the form after direct activation run
  • :KEYSTROKES โ€” simulate keyboard actions
  • :SQL.NET โ€” 0 = Windows, 1 = Web
  • :PRINTFORMAT current selected print format
  • :SENDOPTION current selected print option
  • :ISSENDPDF current selected print as pdf
  • :WANTSEDOCUMENT current selected send print by Email
  • :EXTERNAL.VARNAME get the variable from External winrun
SELECT DOC
FROM DOCUMENTS
WHERE CURDATE >= (SQL.DATE - 24:00 * 3);
:TotalLines = (:RETVAL <= 0 ? 0 : :RETVAL);
    
๐Ÿ”ค String & ODBC Functions
  • STRCAT(a,b) โ€” concatenate
  • SUBSTR(str,start,len) โ€” substring
  • LENGTH(str) โ€” length
  • UPPER() / LOWER()
:first = 'First Text Here ' ;
:last = ' Last Text Here' ;
:full = STRCAT(TOLOWER(:first), ' ---> ',TOUPPER(:last));
output text: 
first text here ---> LAST TEXT HERE
    
๐Ÿ“ File & Execution Functions
  • COPYFILE(from,to) โ€” copy file
  • MOVEFILE(from,to) โ€” move file
  • DELWINDOW 'f', (path) โ€” delete file
  • EXECUTE(cmd) โ€” run OS command
  • LINK table TO file
  • UNLINK table
EXECUTE COPYFILE :TmpFile , '../../system/load/MyTmpFile.txt';

    
๐Ÿงฒ Form Triggers

Triggers run automatically when users interact with forms.

  • PRE-FORM
  • POST-FORM
  • PRE-INSERT
  • POST-INSERT
  • PRE-UPDATE
  • POST-UPDATE
  • PRE-DELETE
  • POST-DELETE
  • PRE-INS-UPD-DEL
  • POST-INS-UPD-DEL
๐Ÿงช Procedures & Step Logic
  • SQLI โ€” SQL query
  • FORM โ€” open form
  • REPORT โ€” run report
  • MESSAGE โ€” show message
  • INPUT โ€” ask user
  • GOTO โ€” jump
SELECT PARTNAME, PRICE
FROM PART
WHERE PRICE > :minprice
FORMAT;
/*- no price higher then :minprice found -*/
GOTO 555 WHERE :RETVAL <= 0 ; 
    
๐Ÿงฉ Priority Snippets
Cursor

/* -- Start Cursor -- */
DECLARE MyCursor CURSOR FOR
SELECT ....
OPEN MyCursor;
GOTO 10101 WHERE :RETVAL <= 0 ;
LABEL 10102 ;
FETCH MyCursor INTO .... ;
GOTO 10103 WHERE :RETVAL <= 0;
SELECT ...
LOOP 10102;
LABEL 10103 ;
CLOSE MyCursor ;
LABEL 10101 ;
/* -- End Cursor -- */
        
Get File Size
/* Example: Get file size using Priority tools */
:FILENAME = 'path/myfile.txt';

/* Create a temporary file to store the result */
SELECT SQL.TMPFILE INTO :tmp FROM DUMMY;
LINK STACK TO :tmp;

/* Run OS command that writes the size into the linked file */
EXECUTE GETSIZE :FILENAME, :tmp;

/* Read the result */
:FILESIZE = 0;
SELECT ELEMENT INTO :FILESIZE FROM STACK WHERE ELEMENT > 0;
UNLINK STACK;
Get File Date
/* Example: Retrieve file date using Priority tools */
:FILENAME = 'path/myfile.txt';

/* Prepare a temporary file to capture the output */
SELECT SQL.TMPFILE INTO :tmp FROM DUMMY;
LINK STACK TO :tmp;

/* Run OS command that writes the file date into the linked file */
EXECUTE GETDATE :FILENAME, :tmp;

/* Extract the result */
:FILEDATE = 0;
SELECT ELEMENT INTO :FILEDATE 
FROM STACK WHERE ELEMENT > 0;

UNLINK STACK;
    
โš ๏ธ Adding Table & Column Rules
  • Table names: max 20 chars
  • Custom tables: 4โ€‘letter prefix
  • Custom columns: same prefix
  • Column types: CHAR, INT, REAL, DATE, TIME, DAY
  • Use autounique keys for joins
๐Ÿ“˜ Best Practices
  • Use autounique keys for relationships
  • Never update tables directly โ€” use Form Interface or Linked Table (LINK)
  • Use SQL.LINE for numbering
  • Use SQL.TMPFILE for exports
  • Prefix all custom entities consistently