├── README.md ├── Custom Functions ├── #nvp.replace.xmfn ├── #nvp.encode.xmfn ├── NULL.xmfn ├── OffScreen.xmfn ├── IsRunningOnServer.xmfn ├── DebuggingOn.xmfn ├── #fd.encode.xmfn ├── #ds.encode.xmfn ├── #fd.decode.xmfn ├── #ds.decode.xmfn ├── #p.encode.xmfn ├── #nvp.remove.xmfn ├── #nvp.decode.xmfn ├── SQLDebugResult.xmfn ├── SQLFieldName.xmfn ├── PhoneMask.xmfn ├── SQLTableName.xmfn ├── #r.decode.xmfn ├── #.xmfn ├── #p.decode.xmfn ├── TriggersAreActive.xmfn ├── TriggersReset.xmfn ├── SuperTrim.xmfn ├── Developer.xmfn ├── TriggersDisable.xmfn ├── #AssignScriptResults.xmfn ├── TriggersEnable.xmfn ├── IsValidEmailAddress.xmfn ├── #Assign.xmfn └── #AssignScriptParameters.xmfn ├── Scripts ├── has-dependancies │ ├── MasterAbort.xmsc │ ├── util . looped find.xmsc │ ├── Go To Last Portal Row ( portalName ).xmsc │ ├── Trigger - QuickFind.xmsc │ ├── Toggle Sort Columns.xmsc │ ├── ExportAllTables.xmsc │ ├── Looped Find ( field ; values ).xmsc │ ├── ImportAllTables.xmsc │ └── Print Preview.xmsc └── dependancy-free │ ├── UnlockToolbar.xmsc │ ├── IsolateRecord.xmsc │ ├── LockWindowsOnMobile.xmsc │ ├── Perform Constrain.xmsc │ ├── Perform Find.xmsc │ ├── Delete All Records.xmsc │ └── CreateRecord.xmsc ├── Modules └── Update Schema Table │ ├── util . looped find.xmsc │ ├── update schema table.xmsc │ └── util . create record and set fields.xmsc └── Tables └── zBaseTable.xmtb /README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Custom Functions/#nvp.replace.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.516885e+9#nvp.remove ( dict ; name ) & #nvp.encode ( name ; value ) -------------------------------------------------------------------------------- /Custom Functions/#nvp.encode.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.516884e+9"<?name:" & name & ":?><?value:" & Substitute ( value ; "¶" ; "!!!" ) & ":?>" -------------------------------------------------------------------------------- /Custom Functions/NULL.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.491901e+9// This function is intentionally blank. Please do not return a result -------------------------------------------------------------------------------- /Custom Functions/OffScreen.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.491901e+9Case ( 2 | 3 | DebuggingOn ; 0 ; 4 | -3000 5 | 6 | ) -------------------------------------------------------------------------------- /Custom Functions/IsRunningOnServer.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.497852e+9Case ( PatternCount ( Get ( ApplicationVersion ) ; "Server" ) = 1 ; 1 ; "") -------------------------------------------------------------------------------- /Custom Functions/DebuggingOn.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.491901e+9True 2 | 3 | // set to True to turn on various debugging tools, such as on-screen utility windows -------------------------------------------------------------------------------- /Custom Functions/#fd.encode.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.516884e+9"<?field:" & field & ":?><?data:" & Substitute ( data ; "¶" ; "!!!" ) & ":?><?multi:" & multi & ":?>" 2 | 3 | // multi = append if true -------------------------------------------------------------------------------- /Custom Functions/#ds.encode.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.516884e+9"<data_" & start & "?" & GetValue ( data_series ; start ) & "/>" 2 | & 3 | Case ( 4 | ValueCount ( data_series ) > start 5 | ; #ds.encode ( data_series ; start + 1 ) 6 | ) -------------------------------------------------------------------------------- /Custom Functions/#fd.decode.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.516884e+9Let ( [ 2 | 3 | stCode = "<?" & key & ":" 4 | ; endCode = ":?>" 5 | ; stPos = Position ( input ; stCode ; 1 ; 1 ) + Length ( stCode ) 6 | ; endPos = Position ( input ; endCode ; stPos ; 1 ) 7 | ; length = endPos - stPos 8 | ] ; 9 | Substitute ( Middle ( input ; stPos ; length ) ; "!!!" ; "¶" ) 10 | ) -------------------------------------------------------------------------------- /Custom Functions/#ds.decode.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.516884e+9/*List ( 2 | Extract ( data_series ; "<data_" & Case ( data_value = "all" ; start ; data_value ) & "?" ; "/>" ; 1 ; "" ) 3 | 4 | ; Case ( data_value = "all" 5 | ; Case ( 6 | PatternCount ( data_series ; "<data_" ) > start 7 | ; #ds.decode ( data_series ; "all" ; start + 1 ) 8 | ) 9 | ) 10 | )*/ -------------------------------------------------------------------------------- /Custom Functions/#p.encode.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.516885e+9//"<:" & name & ":=" & value & ":>" 2 | 3 | //Name: #P_encode 4 | //Parameters: name, value 5 | //Formula: 6 | 7 | "<:" 8 | & 9 | Substitute ( 10 | name 11 | ; ["="; "/="] 12 | ; [":"; "/:"] 13 | ; [">"; "/>"] 14 | ; ["<" ; "/<"] 15 | ) 16 | & 17 | ":=" 18 | & 19 | Substitute ( 20 | value 21 | ; ["="; "/="] 22 | ; [":"; "/:"] 23 | ; [">"; "/>"] 24 | ; ["<" ; "/<"] 25 | ) 26 | & 27 | ":>" -------------------------------------------------------------------------------- /Custom Functions/#nvp.remove.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.516884e+9Let( 2 | [ 3 | 4 | ~patternName = "<?name:" & name & ":?>" 5 | ; ~nameExists = PatternCount ( dict ; ~patternName ) 6 | ; ~positionStart = Position ( dict ; ~patternName ; 0 ; 1 ) 7 | ; ~positionValueEnd = Position ( dict ; ":?>" ; ~positionStart ; 2 ) + 3 8 | ; ~numberOfChars = ~positionValueEnd - ~positionStart 9 | ; ~patternPair = Middle ( dict ; ~positionStart ; ~numberOfChars ) 10 | ; ~result = Case ( ~nameExists ; Substitute ( dict ; ~patternPair ; "" ) ; dict ) 11 | 12 | ] 13 | 14 | ; ~result 15 | 16 | ) -------------------------------------------------------------------------------- /Custom Functions/#nvp.decode.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.516884e+9Let ( [ 2 | 3 | stCode = "<?name:" & key & ":" 4 | ; endCode = ":?>" 5 | ; stPos = Position ( input ; stCode ; 1 ; 1 ) + Length ( stCode ) + 10 6 | ; endPos = Position ( input ; endCode ; stPos ; 1 ) 7 | ; length = endPos - stPos 8 | ] ; 9 | 10 | 11 | Substitute ( Middle ( input ; stPos ; length ) ; "!!!" ; "¶" ) 12 | 13 | ) 14 | /* 15 | Let ( [ 16 | 17 | stCode = "<?" & key & ":" 18 | ; endCode = ":?>" 19 | ; stPos = Position ( input ; stCode ; 1 ; 1 ) + Length ( stCode ) 20 | ; endPos = Position ( input ; endCode ; stPos ; 1 ) 21 | ; length = endPos - stPos 22 | ] ; 23 | Substitute ( Middle ( input ; stPos ; length ) ; "!!!" ; "¶" ) 24 | ) 25 | */ -------------------------------------------------------------------------------- /Scripts/has-dependancies/MasterAbort.xmsc: -------------------------------------------------------------------------------- 1 | XMSC13.498633e+9 -------------------------------------------------------------------------------- /Custom Functions/SQLDebugResult.xmfn: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | XMFN 8 | 1 9 | 3.462515e+9 10 | 11 | 12 | 13 | 14 | 15 | 16 | If ( 17 | //the sql call results in an error, return empty so the error will be returned 18 | _executeSQL = "?" ; "" ; 19 | //the sql call is executed correctly, just return the result 20 | _executeSQL 21 | ) 22 | // =================================== 23 | /* 24 |     This function is published on FileMaker Custom Functions 25 |     to check for updates and provide feedback and bug reports 26 |     please visit http://www.fmfunctions.com/fid/335 27 |     Prototype: sql.debug( _executeSQL ) 28 |     Function Author: Andries Heylen (http://www.fmfunctions.com/mid/57) 29 |     Last updated: 28 July 2012 30 |     Version: 2.2 31 | */ 32 | // =================================== 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Custom Functions/SQLFieldName.xmfn: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | XMFN 8 | 1 9 | 3.462515e+9 10 | 11 | 12 | 13 | 14 | 15 | 16 | /** 17 | * ===================================== 18 | * SQLFieldName ( field ) 19 | * 20 | * RETURNS: 21 | * The field name formatted as a fully qualified SQL column name. 22 | * 23 | * PARAMETERS: 24 | * field: A reference to a field (not the text of the field name) 25 | * 26 | * DEPENDENCIES: none 27 | * 28 | * HISTORY: 29 | * MODIFIED on 2013-05-08 by Jeremy Bante <http://scr.im/jbante> to not 30 | * accept *Alias parameters and not include table name in result. 31 | * MODIFIED on 2013-01-26 by Jeremy Bante <http://scr.im/jbante> to accept 32 | * the tableAlias and fieldAlias parameters. 33 | * CREATED on 2012-12-18 by Jeremy Bante <http://scr.im/jbante>. 34 | * Based on functions by Todd Geist and Dan Smith. 35 | * ===================================== 36 | */ 37 | Quote ( 38 | GetValue ( 39 | Substitute ( 40 | GetFieldName ( field ) ; 41 | "::" ; 42 | ¶ 43 | ) ; 44 | 2 45 | ) 46 | ) 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /Custom Functions/PhoneMask.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.491901e+9Let( [ 2 | 3 | TempNum= Filter(number; "0123456789"); 4 | 5 | Num = If( Left( tempnum ; 1 ) = 1 ; Middle( tempnum ; 2 ; 99) ; tempnum); 6 | 7 | NumLength = Length ( Num ) ; 8 | 9 | Phone10 = "("& Left(num;3) & // if it exceeds a length assume it is an extension 10 | ") "& Middle(num ; 4 ; 3) & 11 | "-"& Middle(num ; 7 ; 4) & 12 | If(Length(num)> 10 ; " x" & Middle(num ; 11 ; 99) ; NULL) ; 13 | 14 | Phone7 = Left(num;3) & // if it exceeds a length assume it is an extension 15 | "-" & Middle(num ; 4 ; 4) & 16 | If(Length(num)> 7 ; " x" & Middle(num ;8 ; 99);"") 17 | ]; 18 | 19 | Case ( 20 | label = "International" ; number ; // international numbers get formatted as entered 21 | Length ( Num ) < 7; TextColor ( Num ; RGB ( 255 ; 0 ; 0 ) ); // if number is to short less than 7 digits display it in red as error 22 | Length ( Num ) < 10; Phone7 ; 23 | Phone10 24 | 25 | ) // end Case 26 | 27 | 28 | ) // end Let -------------------------------------------------------------------------------- /Custom Functions/SQLTableName.xmfn: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | XMFN 8 | 1 9 | 3.462515e+9 10 | 11 | 12 | 13 | 14 | 15 | 16 | /** 17 | * ===================================== 18 | * SQLTableName ( field ) 19 | * 20 | * RETURNS: 21 | * The table name of a field formatted as a fully qualified SQL table name. 22 | * 23 | * PARAMETERS: 24 | * field: A reference to a field (not the text of the field name) 25 | * tableAlias: Any alias to use for the table in a SQL statement 26 | * 27 | * DEPENDENCIES: none 28 | * 29 | * HISTORY: 30 | * MODIFIED on 2013-05-08 by Jeremy Bante <http://scr.im/jbante> to not 31 | * accept the tableAlias parameter. 32 | * MODIFIED on 2013-01-26 by Jeremy Bante <http://scr.im/jbante> to accept 33 | * the tableAlias parameter. 34 | * CREATED on 2012-12-18 by Jeremy Bante <http://scr.im/jbante>. 35 | * Based on a function by Todd Geist. 36 | * ===================================== 37 | */ 38 | Quote ( 39 | GetValue ( 40 | Substitute ( 41 | GetFieldName ( field ) ; 42 | "::" ; 43 | ¶ 44 | ) ; 45 | 1 46 | ) 47 | ) 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /Custom Functions/#r.decode.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.516885e+9// get scriptresult based on name/value pairing 2 | /* 3 | Let ( [ 4 | param = Get ( ScriptResult ) 5 | ; stCode = "<:" & name & ":=" 6 | ; endCode = ":>" 7 | ; stPos = Position ( param ; stCode ; 1 ; 1 ) + Length ( stCode ) 8 | ; endPos = Position ( param ; endCode ; stPos ; 1 ) 9 | ; length = endPos - stPos 10 | ] ; 11 | Case ( 12 | not PatternCount ( param ; ":" & name & ":" ) 13 | ; "" 14 | ; Middle ( param ; stPos ; length ) 15 | ) 16 | ) 17 | */ 18 | 19 | //Name: DictGet 20 | //Parameters: name 21 | //Formula: 22 | 23 | Let ( [ 24 | dict = Get ( ScriptResult ) 25 | ; match = "<:" & Substitute ( name ; ["="; "/="] ; [":"; "/:"] ; [">"; "/>"] ; ["<" ; "/<"] ) & ":=" 26 | ; pstart = Position ( dict ; match ; 1 ; 1 ) 27 | ; start = pstart + Length ( match ) 28 | ; end = Position ( dict ; ":>" ; start ; 1 ) 29 | ; len = If ( end = 0 ; 999999999 ; end - start ) 30 | ]; 31 | Case ( 32 | pstart 33 | ; Substitute ( 34 | Middle ( 35 | dict 36 | ; start 37 | ; len 38 | ) 39 | ; ["/:"; ":"] 40 | ; ["/="; "="] 41 | ; ["/>"; ">"] 42 | ; ["/<" ; "<" ] 43 | ) 44 | ) 45 | ) -------------------------------------------------------------------------------- /Custom Functions/#.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.491901e+9// This is a reserved function name. You can use this custom function as provided or change to your own. The following is the suggested function 2 | 3 | 4 | /** 5 | * ===================================================== 6 | * # ( key ; value ) 7 | * 8 | * PURPOSE: 9 | * Creates a string designed to be sent as a script parameter 10 | * to a script using the DeclareVariables function to receive 11 | * named parameters. You can create a string for multiple named 12 | * parameters by concatenating multiple calls to this function. 13 | * 14 | * RETURNS: 15 | * (string) Formatted variable declaration 16 | * such as "$variable=" 17 | * DEPENDENCIES: 18 | * none 19 | * NOTES: 20 | * This is a wrapper function according to 21 | * http://filemakerstandards.org/pages/viewpage.action?pageId=557462 22 | * RELEASE: 2010-11-23 23 | * ===================================================== 24 | * 25 | */ 26 | 27 | "$" & Substitute ( name ; "$" ; "" ) & " = " & Quote ( value ) & ";¶" -------------------------------------------------------------------------------- /Custom Functions/#p.decode.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.516885e+9// get scriptparameter based on name/value pairing 2 | 3 | /* 4 | Let ( [ 5 | 6 | param = Get ( ScriptParameter ) 7 | ; stCode = "<:" & name & ":=" 8 | ; endCode = ":>" 9 | ; stPos = Position ( param ; stCode ; 1 ; 1 ) + Length ( stCode ) 10 | ; endPos = Position ( param ; endCode ; stPos ; 1 ) 11 | ; length = endPos - stPos 12 | ] ; 13 | Case ( 14 | not PatternCount ( param ; ":" & name & ":" ) 15 | ; "" 16 | ; Middle ( param ; stPos ; length ) 17 | ) 18 | ) 19 | */ 20 | 21 | //Name: DictGet 22 | //Parameters: name 23 | //Formula: 24 | 25 | Let ( [ 26 | dict = Get ( ScriptParameter ) 27 | ; match = "<:" & Substitute ( name ; ["="; "/="] ; [":"; "/:"] ; [">"; "/>"] ; ["<" ; "/<"] ) & ":=" 28 | ; pstart = Position ( dict ; match ; 1 ; 1 ) 29 | ; start = pstart + Length ( match ) 30 | ; end = Position ( dict ; ":>" ; start ; 1 ) 31 | ; len = If ( end = 0 ; 999999999 ; end - start ) 32 | ]; 33 | Case ( 34 | pstart 35 | ; Substitute ( 36 | Middle ( 37 | dict 38 | ; start 39 | ; len 40 | ) 41 | ; ["/:"; ":"] 42 | ; ["/="; "="] 43 | ; ["/>"; ">"] 44 | ; ["/<" ; "<" ] 45 | ) 46 | ) 47 | ) -------------------------------------------------------------------------------- /Scripts/dependancy-free/UnlockToolbar.xmsc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | XMSC 7 | 1 8 | 3.491981e+9 9 | 10 | 11 | 12 | 13 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Custom Functions/TriggersAreActive.xmfn: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | XMFN 8 | 1 9 | 3.462453e+9 10 | 11 | 12 | 13 | 14 | 15 | 16 | /** 17 | * ===================================== 18 | * TriggersAreActive 19 | * 20 | * PURPOSE: 21 | * TriggersAreActive checks a global variable to identify whether or not script 22 | * triggers should be allowed to run. This function is best used in concert with 23 | * the TriggersDisable, TriggersEnable, and TriggersReset 24 | * functions. 25 | * 26 | * RETURNS: 27 | * False (0) if triggers should be suppressed; True (1) otherwise. 28 | * 29 | * PARAMETERS: none 30 | * 31 | * REFERENCED VARIABLES: 32 | * $$~DISABLETRIGGERS 33 | * 34 | * DEPENDENCIES: none 35 | * 36 | * EXAMPLE (triggered script): 37 | * If [ TriggersAreActive ] 38 | * # Do something 39 | * End If 40 | * 41 | * HISTORY: 42 | * MODIFIED on 2010-12-13 by jbante@supportgroup.com to use names suggested at 43 | * filemakerstandards.org. 44 | * CREATED on 2010-12-12 by Jeremy Bante of The Support Group (jbante@supportgroup.com). 45 | * 46 | * REFERENCES: 47 | * Supressible Triggered Scripts Best Practice: http://filemakerstandards.org/display/bp/Suppressible+Triggered+Scripts 48 | * ===================================== 49 | */ 50 | not $$~DISABLETRIGGERS 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /Custom Functions/TriggersReset.xmfn: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | XMFN 8 | 1 9 | -2.147484e+9 10 | 11 | 12 | 13 | 14 | 15 | 16 | /** 17 | * ===================================== 18 | * TriggersReset 19 | * 20 | * PURPOSE: 21 | * TriggersReset sets global variables to indicate that script triggers should 22 | * be allowed to run, regardless of any persisting instructions to the contrary 23 | * from any script. This may be useful to recover from a situation where a 24 | * script forgot to call TriggersEnable at the end of operation. In order to be 25 | * suppressed, a script called via trigger should use the TriggersAreActive 26 | * function to decide whether or not to run. 27 | * 28 | * RETURNS: "" (null) 29 | * 30 | * PARAMETERS: none 31 | * 32 | * REFERENCED VARIABLES: 33 | * $$~DISABLETRIGGERS 34 | * $$~DISABLETRIGGERS.SCRIPTS 35 | * 36 | * DEPENDENCIES: none 37 | * 38 | * HISTORY: 39 | * MODIFIED on 2010-12-13 by jbante@supportgroup.com to use names suggested at 40 | * filemakerstandards.org. 41 | * CREATED on 2010-12-12 by Jeremy Bante of The Support Group (jbante@supportgroup.com). 42 | * 43 | * REFERENCES: 44 | * Supressible Triggered Scripts Best Practice: http://filemakerstandards.org/display/bp/Suppressible+Triggered+Scripts 45 | * ===================================== 46 | */ 47 | Let ( [ 48 | $$~DISABLETRIGGERS.SCRIPTS = ""; 49 | $$~DISABLETRIGGERS = "" 50 | ]; 51 | "" 52 | ) 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /Custom Functions/SuperTrim.xmfn: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | XMFN 9 | 1 10 | 3.484305e+9 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | /* 19 | CUSTOM FUNCTION: Supertrim ( text ) 20 | © 2004 Debi Fuchs of Aptworks Consulting, debi@aptworks.com 21 | Speedily (and with no recursion) remove leading and trailing white space (including spacing, tabs and returns) from a text string. 22 | NOTE: Similar to TrimAll, except that it also removes tabs and returns (in addition to spaces), and it does not touch any spacing WITHIN the string. 23 | EXAMPLE: 24 | Supertrim(" John Smith¶") // --> "John Smith¶" 25 | LAST MODIFIED: 20-AUG-2008 by Debi Fuchs of Aptworks Consulting 26 | */ 27 | Let( 28 | [ 29 | // Determine value of original string with ALL whitespace removed. 30 | t2 = Substitute( text; [ " "; "" ]; [ " "; "" ]; [ " "; "" ]; [ "¶"; "" ] ); 31 | // Determine position of first non-ws character in original string. 32 | first_char = Position( text; Left( t2; 1 ); 0; 1 ); 33 | // Determine position of last non-ww character in original string. 34 | last_char = Position( text; Right( t2; 1 ); Length( text ); -1 ) 35 | ]; 36 | // If any non-whitespace characters exist return appropriate 37 | // middle portion of original text. 38 | Case( first_char; Middle( text; first_char; last_char - first_char + 1 ) ) 39 | ) 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Scripts/dependancy-free/IsolateRecord.xmsc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | XMSC 7 | 1 8 | -2.147484e+9 9 | 10 | 11 | 12 | 13 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Custom Functions/Developer.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.491901e+9/** 2 | * ===================================================== 3 | * Developer ( ) 4 | * https://github.com/petrowsky/fmpstandards/blob/master/Functions/Developer.fmfn 5 | * 6 | * PARAMETERS: 7 | * none 8 | * 9 | * RETURNS: 10 | * (bool) True or False based on proper 11 | * evaluation 12 | * 13 | * DEPENDENCIES: 14 | * none 15 | * 16 | * NOTES: 17 | * Because Filemaker Changed Get ( PrivilegeSetName ) 18 | * Evaluate () must be used 19 | * 20 | * RELEASE: 21 | * 2011-02-23 22 | * ===================================================== 23 | * 24 | */ 25 | 26 | Let ( [ 27 | 28 | ~developers = List ( "developer" ; "developer" ); // Add names of the accounts which are valid developer accounts 29 | ~version = Get ( ApplicationVersion ); 30 | ~isGo = PatternCount ( ~version; "Go" ) = True; 31 | ~versionNumber = GetAsNumber ( Substitute ( ~version ; "," ; "." ) ); // account for foreign versions using comma 32 | ~extendedPrivileges = // Add "developer" extended privilege to groups which are valid developer groups 33 | If ( ~isGo or ~versionNumber ≥ 11; 34 | Evaluate ( "Get ( AccountExtendedPrivileges )" ); 35 | /*else*/ Evaluate ( "Get ( ExtendedPrivileges )" ) 36 | ) 37 | 38 | ]; 39 | 40 | PatternCount ( ¶& ~developers &¶ ; ¶& Get ( AccountName ) &¶ ) ≥ 1 41 | or PatternCount ( ¶& ~extendedPrivileges &¶ ; ¶& "developer" &¶ ) ≥ 1 42 | or 43 | If ( ~isGo or ~versionNumber ≥ 11; 44 | Evaluate ( "Get ( AccountPrivilegeSetName )" ) = "[Full Access]"; 45 | /*else*/ Evaluate ( "Get ( PrivilegeSetName )" ) = "[Full Access]" 46 | ) 47 | 48 | ) -------------------------------------------------------------------------------- /Scripts/dependancy-free/LockWindowsOnMobile.xmsc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | XMSC 7 | 1 8 | -2.147484e+9 9 | 10 | 11 | 12 | 13 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /Scripts/dependancy-free/Perform Constrain.xmsc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | XMSC 7 | 1 8 | -2.147484e+9 9 | 10 | 11 | 12 | 13 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /Custom Functions/TriggersDisable.xmfn: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | XMFN 8 | 1 9 | 3.462514e+9 10 | 11 | 12 | 13 | 14 | 15 | 16 | /** 17 | * ===================================== 18 | * TriggersDisable 19 | * 20 | * PURPOSE: 21 | * TriggersDisable sets global variables to indicate that the current script is 22 | * suppressing triggers. This script must be called from the context of a 23 | * script; otherwise, it will not suppress triggers, and it will return False. 24 | * In order to be suppressed, a script called via trigger should use the 25 | * TriggersAreActive function to decide whether or not to run. 26 | * 27 | * RETURNS: 28 | * True (1) if called from the context of a script, and therefore triggers have 29 | * been suppressed; False (0) otherwise. 30 | * 31 | * PARAMETERS: none 32 | * 33 | * REFERENCED VARIABLES: 34 | * $$~DISABLETRIGGERS 35 | * $$~DISABLETRIGGERS.SCRIPTS 36 | * 37 | * DEPENDENCIES: none 38 | * 39 | * EXAMPLE (script): 40 | * Set Variable [ $ignoreMe ; TriggersDisable ] 41 | * # Do something 42 | * Set Variable [ $ignoreMe ; TriggersEnable ] 43 | * 44 | * NOTES: 45 | * This function should *always* be used in pairs with the TriggersEnable 46 | * function. 47 | * 48 | * HISTORY: 49 | * MODIFIED on 2010-12-13 by jbante@supportgroup.com to use names suggested at 50 | * filemakerstandards.org. 51 | * CREATED on 2010-12-12 by Jeremy Bante of The Support Group (jbante@supportgroup.com). 52 | * 53 | * REFERENCES: 54 | * Supressible Triggered Scripts Best Practice: http://filemakerstandards.org/display/bp/Suppressible+Triggered+Scripts 55 | * ===================================== 56 | */ 57 | Let ( [ 58 | ~scriptName = Get ( ScriptName ); 59 | ~scriptIsRunning = not IsEmpty ( ~scriptName ); 60 | $$~DISABLETRIGGERS.SCRIPTS = 61 | If ( ~scriptIsRunning; 62 | ~scriptName & "¶" & $$~DISABLETRIGGERS.SCRIPTS; 63 | /*else*/ $$~DISABLETRIGGERS.SCRIPTS 64 | ); 65 | $$~DISABLETRIGGERS = 66 | If ( ~scriptIsRunning; 67 | True; 68 | /*else*/ $$~DISABLETRIGGERS 69 | ) 70 | ]; 71 | ~scriptIsRunning 72 | ) 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /Custom Functions/#AssignScriptResults.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.491901e+9// This is a reserved function name. You can use this custom function as provided or change to your own. The following is the suggested function 2 | 3 | 4 | /** 5 | * ===================================== 6 | * #AssignScriptResults 7 | * 8 | * PURPOSE: 9 | * #AssignScriptResults uses the current script result (treated as if generated 10 | * by the # function) to declare and populate a series of locally-scoped script 11 | * variables. This function is equivalent to #Assign ( Get ( ScriptResult ) ). 12 | * 13 | * RETURNS: 14 | * True (1) when the script result is a valid set of name-value pairs (which 15 | * includes the empty string); False (0) otherwise. 16 | * 17 | * PARAMETERS: none 18 | * 19 | * DEPENDENCIES: none 20 | * 21 | * NOTE: 22 | * To be accessible outside this function, variable declarations in the script 23 | * result must use the $- or $$-prefixed notation for FileMaker variables. 24 | * This function does not handle that for you. 25 | * 26 | * HISTORY: 27 | * MODIFIED on 2010-10-04 by jeremy@kyologic.com to return explicit True or 28 | * False values indicating successful evaluation of the script result, and to 29 | * fit syntax inspired by a comment on standards.filemakermagazine.com by 30 | * Richard Dyce. 31 | * CREATED on 2010-08-25 by Jeremy Bante of Kyo Logic (jeremy@kyologic.com). 32 | * INSPIRED by an example in the FileMaker help documentation. 33 | * 34 | * REFERENCES: 35 | * Script Parameter Interface Best Practice: http://filemakerstandards.org/pages/viewpage.action?pageId=557462 36 | * ===================================== 37 | */ 38 | 39 | Let ( 40 | ~evaluateString = //string to evaluate to declare variables 41 | "Let ( [¶" 42 | & Get ( ScriptResult ) 43 | & "$void = $void" //terminating variable to keep semicolon-delimited sytax in variableString consistent 44 | & "¶];¶" 45 | & "True¶)"; 46 | 47 | //end variable definitions 48 | 49 | Case ( 50 | IsValidExpression ( ~evaluateString ); 51 | Evaluate ( ~evaluateString ); 52 | 53 | //else, ~evaluateString is not a valid expression... 54 | False //return error 55 | ) 56 | ) -------------------------------------------------------------------------------- /Custom Functions/TriggersEnable.xmfn: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | XMFN 8 | 1 9 | 3.462514e+9 10 | 11 | 12 | 13 | 14 | 15 | 16 | /** 17 | * ===================================== 18 | * TriggersEnable 19 | * 20 | * PURPOSE: 21 | * TriggersEnable sets global variables to indicate that the current script is 22 | * no longer suppressing triggers. This function will also turn off trigger 23 | * suppression altogether if there are no other scripts suppressing triggers. In 24 | * order to be suppressed, a script called via trigger should use the 25 | * TriggersAreActive function to decide whether or not to run. 26 | * 27 | * RETURNS: 28 | * True (1) if TriggersEnable successfully removed the current script from 29 | * the list of scripts suppressing triggers; False (0) otherwise. 30 | * 31 | * PARAMETERS: none 32 | * 33 | * REFERENCED VARIABLES: 34 | * $$~DISABLETRIGGERS 35 | * $$~DISABLETRIGGERS.SCRIPTS 36 | * 37 | * DEPENDENCIES: none 38 | * 39 | * EXAMPLE (script): 40 | * Set Variable [ $ignoreMe ; TriggersDisable ] 41 | * # Do something 42 | * Set Variable [ $ignoreMe ; TriggersEnable ] 43 | * 44 | * NOTES: 45 | * This function should *always* be used in pairs with the TriggersDisable 46 | * function. 47 | * 48 | * HISTORY: 49 | * MODIFIED on 2010-12-13 by jbante@supportgroup.com to use names suggested at 50 | * filemakerstandards.org. 51 | * CREATED on 2010-12-12 by Jeremy Bante of The Support Group (jbante@supportgroup.com). 52 | * 53 | * REFERENCES: 54 | * Supressible Triggered Scripts Best Practice: http://filemakerstandards.org/display/bp/Suppressible+Triggered+Scripts 55 | * ===================================== 56 | */ 57 | Let ( [ 58 | ~lastScript = GetValue ( $$~DISABLETRIGGERS.SCRIPTS ; 1 ); 59 | ~enableTriggers = Get ( ScriptName ) = ~lastScript; //boolean indicating script name match 60 | $$~DISABLETRIGGERS.SCRIPTS = 61 | If ( ~enableTriggers; 62 | RightValues ( 63 | $$~DISABLETRIGGERS.SCRIPTS; 64 | ValueCount ( $$~DISABLETRIGGERS.SCRIPTS ) - 1 65 | ); 66 | /*else*/ $$~DISABLETRIGGERS.SCRIPTS 67 | ); 68 | ~scriptCount = ValueCount ( $$~DISABLETRIGGERS.SCRIPTS ); 69 | $$~DISABLETRIGGERS = If ( ~scriptCount ; True ; /*else*/ "" ) 70 | ]; 71 | ~enableTriggers or not ~scriptCount //ScriptName was found and removed, or there are no suppressing scripts 72 | ) 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /Scripts/dependancy-free/Perform Find.xmsc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | XMSC 8 | 1 9 | -2.147484e+9 10 | 11 | 12 | 13 | 14 | 15 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /Scripts/has-dependancies/util . looped find.xmsc: -------------------------------------------------------------------------------- 1 | XMSC13.517376e+9 -------------------------------------------------------------------------------- /Modules/Update Schema Table/util . looped find.xmsc: -------------------------------------------------------------------------------- 1 | XMSC13.517379e+9 -------------------------------------------------------------------------------- /Scripts/has-dependancies/Go To Last Portal Row ( portalName ).xmsc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | XMSC 8 | 1 9 | 3.484214e+9 10 | 11 | 12 | 13 | 14 | 15 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /Scripts/has-dependancies/Trigger - QuickFind.xmsc: -------------------------------------------------------------------------------- 1 | XMSC13.491292e+9 -------------------------------------------------------------------------------- /Custom Functions/IsValidEmailAddress.xmfn: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | XMFN 9 | 1 10 | 3.484305e+9 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | Let ( 19 | [ 20 | _validDomainCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-." ; 21 | _invalidLocalCharacters = "!\"#$%&'*,/:;<>?@[\]^`{}|~" ; // from http://www.remote.org/jochen/mail/info/chars.html 22 | _theLocalPart = Left ( theEmail ; Position ( theEmail ; "@" ; 1; 1 ) - 1 ) ; 23 | _theDomainPart = Right ( theEmail ; Length ( theEmail ) - Position ( theEmail ; "@" ; 1; 1 ) ) ; 24 | _theTopLevelDomain = RightWords ( Substitute ( _theDomainPart ; "." ; " " ) ; 1 ) ; 25 | _ValidTopLevelDomains = "AC¶AD¶AE¶AERO¶AF¶AG¶AI¶AL¶AM¶AN¶AO¶AQ¶AR¶ARPA¶AS¶AT¶AU¶AW¶AZ¶BA¶BB¶BD¶BE¶BF¶BG¶BH¶BI¶BIZ¶BJ¶BM¶BN¶BO¶BR¶BS¶BT¶BV¶BW¶BY¶BZ¶CA¶CC¶CD¶CF¶CG¶CH¶CI¶CK¶CL¶CM¶CN¶CO¶COM¶COOP¶CR¶CU¶CV¶CX¶CY¶CZ¶DE¶DJ¶DK¶DM¶DO¶DZ¶EC¶EDU¶EE¶EG¶ER¶ES¶ET¶EU¶FI¶FJ¶FK¶FM¶FO¶FR¶GA¶GB¶GD¶GE¶GF¶GG¶GH¶GI¶GL¶GM¶GN¶GOV¶GP¶GQ¶GR¶GS¶GT¶GU¶GW¶GY¶HK¶HM¶HN¶HR¶HT¶HU¶ID¶IE¶IL¶IM¶IN¶INFO¶INT¶IO¶IQ¶IR¶IS¶IT¶JE¶JM¶JO¶JOBS¶JP¶KE¶KG¶KH¶KI¶KM¶KN¶KR¶KW¶KY¶KZ¶LA¶LB¶LC¶LI¶LK¶LR¶LS¶LT¶LU¶LV¶LY¶MA¶MC¶MD¶MG¶MH¶MIL¶MK¶ML¶MM¶MN¶MO¶MP¶MQ¶MR¶MS¶MT¶MU¶MUSEUM¶MV¶MW¶MX¶MY¶MZ¶NA¶NAME¶NC¶NE¶NET¶NF¶NG¶NI¶NL¶NO¶NP¶NR¶NU¶NZ¶OM¶ORG¶PA¶PE¶PF¶PG¶PH¶PK¶PL¶PM¶PN¶PR¶PRO¶PS¶PT¶PW¶PY¶QA¶RE¶RO¶RU¶RW¶SA¶SB¶SC¶SD¶SE¶SG¶SH¶SI¶SJ¶SK¶SL¶SM¶SN¶SO¶SR¶ST¶SU¶SV¶SY¶SZ¶TC¶TD¶TF¶TG¶TH¶TJ¶TK¶TL¶TM¶TN¶TO¶TP¶TR¶TRAVEL¶TT¶TV¶TW¶TZ¶UA¶UG¶UK¶UM¶US¶UY¶UZ¶VA¶VC¶VE¶VG¶VI¶VN¶VU¶WF¶WS¶YE¶YT¶YU¶ZA¶ZM¶ZW" 26 | ] ; 27 | Case ( 28 | IsEmpty ( theEmail ) ; "no value supplied" ; 29 | PatternCount ( theEmail ; "@" ) <> 1 ; "invalid address" ; 30 | PatternCount ( _theDomainPart ; "." ) = 0 ; "invalid formatting" ; 31 | Length ( Filter ( _theLocalPart ; _invalidLocalCharacters ) ) ; 32 | "invalid characters in the local part" ; 33 | Length ( Filter ( _theDomainPart ; _validDomainCharacters ) ) <> Length ( _theDomainPart ) ; 34 | "invalid characters in the domain part" ; 35 | Left ( _theLocalPart ; 1) = "." or 36 | Right ( _theLocalPart ; 1 ) = "." or 37 | Left ( _theDomainPart ; 1 ) = "." or 38 | Right ( _theDomainPart ; 1 ) = "." ; 39 | "invalid formatting" ; 40 | IsEmpty ( FilterValues ( _theTopLevelDomain ; _ValidTopLevelDomains ) ) ; "invalid top level domain" ; 41 | 1 42 | ) 43 | ) 44 | /* 45 | Name: 46 | EmailIsValid 47 | History: 48 | Created by Paul Turnbull 49 | Creation Date: 13-10-2005 50 | Modified Date: 13-11-2005 paul@fourofus.ca - fixed numerous bugs. 51 | Purpose: Returns True if the email supplied is valid an error message if it is not. 52 | Parameters: 53 | theEmail 54 | Important Notes: 55 | List of TLDs from http://data.iana.org/TLD/tlds-alpha-by-domain.txt 56 | Will not handle urls in the form contact@domain.com/some.name although you could edit to handle this if you like. 57 | */ 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /Custom Functions/#Assign.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.491901e+9// This is a reserved function name. You can use this custom function as provided or change to your own. The following is the suggested function 2 | 3 | 4 | /** 5 | * ===================================== 6 | * #Assign ( parameters ) 7 | * 8 | * PURPOSE: 9 | * #Assign ( parameters ) uses the output of the # ( name ; value ) function (or 10 | * the concatenated results from several #() calls) to declare and populate a 11 | * series of locally-scoped script variables. #Assign also handles native 12 | * Let() function formatting which limits dependancies on #() by other custom fuctions. 13 | * 14 | * RETURNS: 15 | * True (1) when parameters is a valid set of name-value pairs (which includes 16 | * the empty string); False (0) otherwise. 17 | * 18 | * PARAMETERS: 19 | * parameters: The (potentially Null) string of name-value pairs to parse into 20 | * variables. 21 | * 22 | * EXAMPLES: 23 | * #Assign ( # ( "name1"; "value1" ) ) //= True, and sets the variable $name1 with value "value1" 24 | * #Assign ( Null ) //= True, and sets no variables 25 | * #Assign ( "This is not a valid name-value pair string" ) //= False 26 | * 27 | * DEPENDENCIES: none 28 | * 29 | * NOTE: 30 | * To be accessible outside this function, variable declarations in parameters 31 | * must use the $- or $$-prefixed notation for FileMaker variables. This 32 | * function does not handle that for you. 33 | * 34 | * HISTORY: 35 | * MODIFIED on 2011-03-03 by matt@filemakermagazine.com to not use $void and 36 | * only include trailing $~ if parameters is non conforming to Let() 37 | * MODIFIED on 2010-10-04 by jeremy@kyologic.com to return explicit True or 38 | * False values indicating successful evaluation of the script result, and to 39 | * fit syntax inspired by a comment on standards.filemakermagazine.com by 40 | * Richard Dyce. 41 | * CREATED on 2010-03-13 by Jeremy Bante of Kyo Logic (jeremy@kyologic.com). 42 | * INSPIRED by an example in the FileMaker help documentation. 43 | * 44 | * REFERENCES: 45 | * Script Parameter Interface Best Practice: http://filemakerstandards.org/pages/viewpage.action?pageId=557462 46 | * ===================================== 47 | */ 48 | 49 | Let ( 50 | ~evaluateString = 51 | "Let( [¶" 52 | & parameters 53 | & If ( Right ( parameters ; 1 ) = ";" 54 | or Right ( parameters ; 1 ) = ¶; 55 | "$~ = $~") //terminating variable to keep semicolon-delimited sytax in parameters consistent 56 | & "¶];¶" 57 | & "True¶)"; 58 | 59 | //end variable definitions 60 | 61 | If ( IsValidExpression ( ~evaluateString ); 62 | Evaluate ( ~evaluateString ); 63 | //else, ~evaluateString is not a valid expression... 64 | False 65 | ) 66 | ) 67 | 68 | /* 69 | Unit tests 70 | Accounting for both a native Let() format and the more 71 | explicit formatting from #() 72 | 73 | List( 74 | #Assign ( # ( "foo" ; "bar" ) ); // using # without $ 75 | #Assign ( # ( "$foo" ; "bar" ) ); // using # with $ 76 | #Assign ( # ( "$foo" ; "bar" ) & # ( "bar" ; "baz" ) ); // concatenated #() 77 | #Assign ( List ( # ( "foo" ; "bar" ); # ( "$bar" ; "baz" ) ) ); // List with & without $ 78 | #Assign ( "$foo = \"bar\"" ); // single line raw Let declaration 79 | #Assign ( "$foo = \"bar\";¶$bar = \"baz\""); // multi-line raw Let 80 | ) 81 | */ -------------------------------------------------------------------------------- /Tables/zBaseTable.xmtb: -------------------------------------------------------------------------------- 1 | XMTB1-2.147484e+9Get( UUID ) -------------------------------------------------------------------------------- /Scripts/dependancy-free/Delete All Records.xmsc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | XMSC 7 | 1 8 | 3.489292e+9 9 | 10 | 11 | 12 | 13 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /Scripts/has-dependancies/Toggle Sort Columns.xmsc: -------------------------------------------------------------------------------- 1 | XMSC13.516885e+9 -------------------------------------------------------------------------------- /Scripts/has-dependancies/ExportAllTables.xmsc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | XMSC 7 | 1 8 | 3.489293e+9 9 | 10 | 11 | 12 | 13 | 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /Scripts/has-dependancies/Looped Find ( field ; values ).xmsc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | XMSC 8 | 1 9 | 3.462515e+9 10 | 11 | 12 | 13 | 14 | 15 | 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /Custom Functions/#AssignScriptParameters.xmfn: -------------------------------------------------------------------------------- 1 | XMFN13.491901e+9// This is a reserved function name. You can use this custom function as provided or change to your own. The following is the suggested function 2 | 3 | 4 | /** 5 | * ===================================== 6 | * #AssignScriptParameters 7 | * 8 | * PURPOSE: 9 | * #AssignScriptParameters uses the current script parameter (treated as if 10 | * generated by the # function) to declare and populate a series of 11 | * locally-scoped script variables. #AssignScriptParameters also uses the 12 | * current script name to determine whether or not all required named parameters 13 | * are populated (≠ Null). This function is NOT equivalent to 14 | * #Assign ( Get ( ScriptParameter ) ). 15 | * 16 | * PARAMETER SYNTAX: 17 | 18 | * # ( "parameter1" ; $variableValue ) & 19 | * # ( "parameter2" ; "Literal string value" ) 20 | * 21 | * RETURNS: 22 | * True (1) when the script parameter is a valid set of name-value pairs (which 23 | * includes the empty string) and all parameters defined as required according to 24 | * the script name are non-null; False (0) otherwise. 25 | * 26 | * PARAMETERS: none 27 | * 28 | * DEPENDENCIES: none 29 | * 30 | * NOTE: 31 | * To be accessible outside this function, variable declarations in the script 32 | * parameter must use the $- or $$-prefixed notation for FileMaker variables. 33 | * This function does not handle that for you. 34 | * 35 | * HISTORY: 36 | * MODIFIED on 2010-10-04 by jeremy@kyologic.com to return explicit True or 37 | * False values indicating successful evaluation of the script parameter, and to 38 | * fit syntax inspired by a comment on standards.filemakermagazine.com by 39 | * Richard Dyce. 40 | * CREATED on 2010-03-13 by Jeremy Bante of Kyo Logic (jeremy@kyologic.com). 41 | * INSPIRED by an example in the FileMaker help documentation. 42 | * 43 | * REFERENCES: 44 | * Script Parameter Interface Best Practice: http://filemakerstandards.org/pages/viewpage.action?pageId=557462 45 | * ===================================== 46 | */ 47 | 48 | Let ( [ 49 | ~evaluateString = 50 | "Let ( [¶" 51 | & Get ( ScriptParameter ) 52 | & "$void = $void" //terminating variable to keep semicolon-delimited sytax in ScriptParameter consistent 53 | & "¶];¶" 54 | & "True¶)" 55 | ]; 56 | 57 | Case( 58 | not IsValidExpression ( ~evaluateString ); 59 | False; 60 | 61 | //else, ~evaluateString is a valid expression, so check that required parameters are populated 62 | Evaluate ( ~evaluateString ) 63 | and 64 | Let ( [ 65 | //parse required parameters from script name 66 | ~BEGIN = "("; //character marking beginning of named parameters 67 | //~END = ")"; //character defining end of named parameters 68 | ~DELIMITER = ","; //character delimiting between named parameters 69 | ~OPTIONAL = "{"; //character marking beginning of optional parameters 70 | 71 | ~parameters = Substitute ( Get ( ScriptName ) ; ["¶"; ""]; [" "; ""] ); 72 | ~beginParameters = Position ( ~parameters ; ~BEGIN ; 1 ; 1 ); 73 | ~endParameters = Position ( ~parameters ; ~OPTIONAL ; 1 ; 1 ); 74 | ~endParameters = Case ( not ~endParameters ; Length ( ~parameters ) ; ~endParameters ); 75 | ~parameters = Middle ( ~parameters ; ~beginParameters + 1 ; ~endParameters - ~beginParameters - 1 ); 76 | ~parameters = 77 | Substitute ( 78 | Trim ( ~parameters ) & "☠"; 79 | [ ~DELIMITER & "☠" ; "" ]; //remove possible erroneous trailing delimiter 80 | [ "☠" ; "" ]; 81 | [ ~DELIMITER ; "¶" ] 82 | ) 83 | ]; 84 | //check that required parameters are non-null 85 | Case ( 86 | ~beginParameters and Length ( ~parameters ); //script name specifies parameters 87 | Evaluate ( //string returns true when all required parameters are populated 88 | "Length ( $" 89 | & Substitute ( ~parameters ; "¶" ; " ) and Length ( $" ) 90 | & " )" 91 | ); 92 | 93 | //else, parameters are adequate by default 94 | True 95 | ) 96 | ) 97 | ) 98 | ) -------------------------------------------------------------------------------- /Scripts/has-dependancies/ImportAllTables.xmsc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | XMSC 7 | 1 8 | 3.489293e+9 9 | 10 | 11 | 12 | 13 | 136 | 137 | 138 | 139 | -------------------------------------------------------------------------------- /Modules/Update Schema Table/update schema table.xmsc: -------------------------------------------------------------------------------- 1 | XMSC13.517376e+9 -------------------------------------------------------------------------------- /Modules/Update Schema Table/util . create record and set fields.xmsc: -------------------------------------------------------------------------------- 1 | XMSC13.517376e+9 -------------------------------------------------------------------------------- /Scripts/dependancy-free/CreateRecord.xmsc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | XMSC 8 | 1 9 | 3.462515e+9 10 | 11 | 12 | 13 | 14 | 15 | 446 | 447 | 448 | 449 | -------------------------------------------------------------------------------- /Scripts/has-dependancies/Print Preview.xmsc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | XMSC 7 | 1 8 | 3.495113e+9 9 | 10 | 11 | 12 | 13 | 237 | 238 | 239 | 240 | --------------------------------------------------------------------------------