KIDS Distribution saved on Jul 14, 2006@15:00 FM To Cache SQL Mapping Tool - Version 1.0 Build 8 **KIDS**:FM TO CACHE SQL 1.0^ **INSTALL NAME** FM TO CACHE SQL 1.0 "BLD",3512,0) FM TO CACHE SQL 1.0^FM TO CACHE SQL^0^3060714^y "BLD",3512,1,0) ^^1^1^3060513^ "BLD",3512,1,1,0) FileMan To Cache SQL Mapping Tool - Version 1.0 Build 8 "BLD",3512,4,0) ^9.64PA^15050.14^5 "BLD",3512,4,15050.11,0) 15050.11 "BLD",3512,4,15050.11,222) y^y^f^^^^n "BLD",3512,4,15050.12,0) 15050.12 "BLD",3512,4,15050.12,222) y^y^f^^^^n "BLD",3512,4,15050.13,0) 15050.13 "BLD",3512,4,15050.13,222) y^y^f^^^^n "BLD",3512,4,15050.14,0) 15050.14 "BLD",3512,4,15050.14,222) y^y^f^^n^^y^a^n "BLD",3512,4,15050.19,0) 15050.19 "BLD",3512,4,15050.19,222) y^y^f^^^^n "BLD",3512,4,"B",15050.11,15050.11) "BLD",3512,4,"B",15050.12,15050.12) "BLD",3512,4,"B",15050.13,15050.13) "BLD",3512,4,"B",15050.14,15050.14) "BLD",3512,4,"B",15050.19,15050.19) "BLD",3512,"ABPKG") n "BLD",3512,"INI") CLEAN^CASHI "BLD",3512,"INID") n^n^n "BLD",3512,"INIT") POST^CASHI "BLD",3512,"KRN",0) ^9.67PA^8989.52^19 "BLD",3512,"KRN",.4,0) .4 "BLD",3512,"KRN",.401,0) .401 "BLD",3512,"KRN",.402,0) .402 "BLD",3512,"KRN",.403,0) .403 "BLD",3512,"KRN",.5,0) .5 "BLD",3512,"KRN",.84,0) .84 "BLD",3512,"KRN",3.6,0) 3.6 "BLD",3512,"KRN",3.8,0) 3.8 "BLD",3512,"KRN",9.2,0) 9.2 "BLD",3512,"KRN",9.8,0) 9.8 "BLD",3512,"KRN",9.8,"NM",0) ^9.68A^46^45 "BLD",3512,"KRN",9.8,"NM",1,0) CASH^^0^B23854241 "BLD",3512,"KRN",9.8,"NM",2,0) CASH0^^0^B5250002 "BLD",3512,"KRN",9.8,"NM",3,0) CASH1^^0^B36770570 "BLD",3512,"KRN",9.8,"NM",4,0) CASH2^^0^B69666901 "BLD",3512,"KRN",9.8,"NM",5,0) CASH3^^0^B74243014 "BLD",3512,"KRN",9.8,"NM",6,0) CASHC^^0^B62590378 "BLD",3512,"KRN",9.8,"NM",7,0) CASHC0^^0^B29275632 "BLD",3512,"KRN",9.8,"NM",8,0) CASHC1^^0^B78110022 "BLD",3512,"KRN",9.8,"NM",9,0) CASHC2^^0^B60203658 "BLD",3512,"KRN",9.8,"NM",10,0) CASHC3^^0^B80053616 "BLD",3512,"KRN",9.8,"NM",11,0) CASHC4^^0^B59935224 "BLD",3512,"KRN",9.8,"NM",12,0) CASHC5^^0^B30316225 "BLD",3512,"KRN",9.8,"NM",13,0) CASHCU^^0^B35588272 "BLD",3512,"KRN",9.8,"NM",14,0) CASHD^^0^B63871937 "BLD",3512,"KRN",9.8,"NM",15,0) CASHDT01^^0^B23175140 "BLD",3512,"KRN",9.8,"NM",16,0) CASHDT02^^0^B25155181 "BLD",3512,"KRN",9.8,"NM",17,0) CASHDT03^^0^B50096997 "BLD",3512,"KRN",9.8,"NM",18,0) CASHDT04^^0^B19238130 "BLD",3512,"KRN",9.8,"NM",19,0) CASHDT05^^0^B34572561 "BLD",3512,"KRN",9.8,"NM",20,0) CASHDT06^^0^B65854905 "BLD",3512,"KRN",9.8,"NM",21,0) CASHDT07^^0^B25629428 "BLD",3512,"KRN",9.8,"NM",22,0) CASHDT08^^0^B20627139 "BLD",3512,"KRN",9.8,"NM",23,0) CASHFN11^^0^B38734702 "BLD",3512,"KRN",9.8,"NM",24,0) CASHFN12^^0^B10663721 "BLD",3512,"KRN",9.8,"NM",25,0) CASHFN13^^0^B3395043 "BLD",3512,"KRN",9.8,"NM",26,0) CASHFN19^^0^B16611231 "BLD",3512,"KRN",9.8,"NM",27,0) CASHI^^0^B9673499 "BLD",3512,"KRN",9.8,"NM",28,0) CASHR^^0^B32370795 "BLD",3512,"KRN",9.8,"NM",29,0) CASHU^^0^B4005707 "BLD",3512,"KRN",9.8,"NM",30,0) CASHV4C^^0^B59211480 "BLD",3512,"KRN",9.8,"NM",31,0) CASHV4C0^^0^B10300922 "BLD",3512,"KRN",9.8,"NM",32,0) CASHV4C1^^0^B78948097 "BLD",3512,"KRN",9.8,"NM",33,0) CASHV4C2^^0^B12681943 "BLD",3512,"KRN",9.8,"NM",34,0) CASHV4C3^^0^B9394300 "BLD",3512,"KRN",9.8,"NM",35,0) CASHV4C4^^0^B50425881 "BLD",3512,"KRN",9.8,"NM",36,0) CASHV4D^^0^B75367826 "BLD",3512,"KRN",9.8,"NM",38,0) CASHN^^0^B6286040 "BLD",3512,"KRN",9.8,"NM",39,0) CASHR0^^0^B19713130 "BLD",3512,"KRN",9.8,"NM",40,0) CASHUT^^0^B23058184 "BLD",3512,"KRN",9.8,"NM",41,0) CASHUT01^^0^B16006893 "BLD",3512,"KRN",9.8,"NM",42,0) CASHUT02^^0^B86309925 "BLD",3512,"KRN",9.8,"NM",43,0) CASHV4UT^^0^B18435414 "BLD",3512,"KRN",9.8,"NM",44,0) CASHF^^0^B7955740 "BLD",3512,"KRN",9.8,"NM",45,0) CASHCN^^0^B13052905 "BLD",3512,"KRN",9.8,"NM",46,0) CASHFN14^^0^B5900231 "BLD",3512,"KRN",9.8,"NM","B","CASH",1) "BLD",3512,"KRN",9.8,"NM","B","CASH0",2) "BLD",3512,"KRN",9.8,"NM","B","CASH1",3) "BLD",3512,"KRN",9.8,"NM","B","CASH2",4) "BLD",3512,"KRN",9.8,"NM","B","CASH3",5) "BLD",3512,"KRN",9.8,"NM","B","CASHC",6) "BLD",3512,"KRN",9.8,"NM","B","CASHC0",7) "BLD",3512,"KRN",9.8,"NM","B","CASHC1",8) "BLD",3512,"KRN",9.8,"NM","B","CASHC2",9) "BLD",3512,"KRN",9.8,"NM","B","CASHC3",10) "BLD",3512,"KRN",9.8,"NM","B","CASHC4",11) "BLD",3512,"KRN",9.8,"NM","B","CASHC5",12) "BLD",3512,"KRN",9.8,"NM","B","CASHCN",45) "BLD",3512,"KRN",9.8,"NM","B","CASHCU",13) "BLD",3512,"KRN",9.8,"NM","B","CASHD",14) "BLD",3512,"KRN",9.8,"NM","B","CASHDT01",15) "BLD",3512,"KRN",9.8,"NM","B","CASHDT02",16) "BLD",3512,"KRN",9.8,"NM","B","CASHDT03",17) "BLD",3512,"KRN",9.8,"NM","B","CASHDT04",18) "BLD",3512,"KRN",9.8,"NM","B","CASHDT05",19) "BLD",3512,"KRN",9.8,"NM","B","CASHDT06",20) "BLD",3512,"KRN",9.8,"NM","B","CASHDT07",21) "BLD",3512,"KRN",9.8,"NM","B","CASHDT08",22) "BLD",3512,"KRN",9.8,"NM","B","CASHF",44) "BLD",3512,"KRN",9.8,"NM","B","CASHFN11",23) "BLD",3512,"KRN",9.8,"NM","B","CASHFN12",24) "BLD",3512,"KRN",9.8,"NM","B","CASHFN13",25) "BLD",3512,"KRN",9.8,"NM","B","CASHFN14",46) "BLD",3512,"KRN",9.8,"NM","B","CASHFN19",26) "BLD",3512,"KRN",9.8,"NM","B","CASHI",27) "BLD",3512,"KRN",9.8,"NM","B","CASHN",38) "BLD",3512,"KRN",9.8,"NM","B","CASHR",28) "BLD",3512,"KRN",9.8,"NM","B","CASHR0",39) "BLD",3512,"KRN",9.8,"NM","B","CASHU",29) "BLD",3512,"KRN",9.8,"NM","B","CASHUT",40) "BLD",3512,"KRN",9.8,"NM","B","CASHUT01",41) "BLD",3512,"KRN",9.8,"NM","B","CASHUT02",42) "BLD",3512,"KRN",9.8,"NM","B","CASHV4C",30) "BLD",3512,"KRN",9.8,"NM","B","CASHV4C0",31) "BLD",3512,"KRN",9.8,"NM","B","CASHV4C1",32) "BLD",3512,"KRN",9.8,"NM","B","CASHV4C2",33) "BLD",3512,"KRN",9.8,"NM","B","CASHV4C3",34) "BLD",3512,"KRN",9.8,"NM","B","CASHV4C4",35) "BLD",3512,"KRN",9.8,"NM","B","CASHV4D",36) "BLD",3512,"KRN",9.8,"NM","B","CASHV4UT",43) "BLD",3512,"KRN",19,0) 19 "BLD",3512,"KRN",19.1,0) 19.1 "BLD",3512,"KRN",101,0) 101 "BLD",3512,"KRN",409.61,0) 409.61 "BLD",3512,"KRN",771,0) 771 "BLD",3512,"KRN",870,0) 870 "BLD",3512,"KRN",8989.51,0) 8989.51 "BLD",3512,"KRN",8989.52,0) 8989.52 "BLD",3512,"KRN",8994,0) 8994 "BLD",3512,"KRN","B",.4,.4) "BLD",3512,"KRN","B",.401,.401) "BLD",3512,"KRN","B",.402,.402) "BLD",3512,"KRN","B",.403,.403) "BLD",3512,"KRN","B",.5,.5) "BLD",3512,"KRN","B",.84,.84) "BLD",3512,"KRN","B",3.6,3.6) "BLD",3512,"KRN","B",3.8,3.8) "BLD",3512,"KRN","B",9.2,9.2) "BLD",3512,"KRN","B",9.8,9.8) "BLD",3512,"KRN","B",19,19) "BLD",3512,"KRN","B",19.1,19.1) "BLD",3512,"KRN","B",101,101) "BLD",3512,"KRN","B",409.61,409.61) "BLD",3512,"KRN","B",771,771) "BLD",3512,"KRN","B",870,870) "BLD",3512,"KRN","B",8989.51,8989.51) "BLD",3512,"KRN","B",8989.52,8989.52) "BLD",3512,"KRN","B",8994,8994) "BLD",3512,"QUES",0) ^9.62^^ "BLD",3512,"REQB",0) ^9.611^^ "DATA",15050.14,1,0) MAXIMUM FIELDS PER CLASS^250 "DATA",15050.14,2,0) MAXIMUM MULTIPLES PER CLASS^75 "FIA",15050.11) CASH FM CLASS MAP "FIA",15050.11,0) ^CASH(15050.11, "FIA",15050.11,0,0) 15050.11A "FIA",15050.11,0,1) y^y^f^^^^n "FIA",15050.11,0,10) "FIA",15050.11,0,11) "FIA",15050.11,0,"RLRO") "FIA",15050.11,0,"VR") 1.0^FM TO CACHE SQL "FIA",15050.11,15050.11) 0 "FIA",15050.11,15050.111) 0 "FIA",15050.11,15050.1111) 0 "FIA",15050.11,15050.112) 0 "FIA",15050.11,15050.1121) 0 "FIA",15050.11,15050.113) 0 "FIA",15050.11,15050.1131) 0 "FIA",15050.11,15050.1132) 0 "FIA",15050.11,15050.114) 0 "FIA",15050.12) CASH CUSTOM DATATYPES "FIA",15050.12,0) ^CASH(15050.12, "FIA",15050.12,0,0) 15050.12A "FIA",15050.12,0,1) y^y^f^^^^n "FIA",15050.12,0,10) "FIA",15050.12,0,11) "FIA",15050.12,0,"RLRO") "FIA",15050.12,0,"VR") 1.0^FM TO CACHE SQL "FIA",15050.12,15050.12) 0 "FIA",15050.12,15050.121) 0 "FIA",15050.12,15050.122) 0 "FIA",15050.12,15050.1221) 0 "FIA",15050.12,15050.1222) 0 "FIA",15050.12,15050.123) 0 "FIA",15050.12,15050.1231) 0 "FIA",15050.13) CASH ERRORS "FIA",15050.13,0) ^CASH(15050.13, "FIA",15050.13,0,0) 15050.13DA "FIA",15050.13,0,1) y^y^f^^^^n "FIA",15050.13,0,10) "FIA",15050.13,0,11) "FIA",15050.13,0,"RLRO") "FIA",15050.13,0,"VR") 1.0^FM TO CACHE SQL "FIA",15050.13,15050.13) 0 "FIA",15050.13,15050.131) 0 "FIA",15050.14) CASH PARAMETER FILE "FIA",15050.14,0) ^CASH(15050.14, "FIA",15050.14,0,0) 15050.14A "FIA",15050.14,0,1) y^y^f^^n^^y^a^n "FIA",15050.14,0,10) "FIA",15050.14,0,11) "FIA",15050.14,0,"RLRO") "FIA",15050.14,0,"VR") 1.0^FM TO CACHE SQL "FIA",15050.14,15050.14) 0 "FIA",15050.14,15050.141) 0 "FIA",15050.19) CASH SQL RESERVED WORDS "FIA",15050.19,0) ^CASH(15050.19, "FIA",15050.19,0,0) 15050.19 "FIA",15050.19,0,1) y^y^f^^^^n "FIA",15050.19,0,10) "FIA",15050.19,0,11) "FIA",15050.19,0,"RLRO") "FIA",15050.19,0,"VR") 1.0^FM TO CACHE SQL "FIA",15050.19,15050.19) 0 "INI") CLEAN^CASHI "INIT") POST^CASHI "MBREQ") 0 "PKG",190,-1) 1^1 "PKG",190,0) FM TO CACHE SQL^CASH^FileMan To Cache SQL "PKG",190,1,0) ^^1^1^3050718^ "PKG",190,1,1,0) FileMan To Cache SQL Mapping Tool "PKG",190,5) ALBANY "PKG",190,7) ^^I "PKG",190,20,0) ^9.402P^^ "PKG",190,22,0) ^9.49I^1^1 "PKG",190,22,1,0) 1.0^3060714^3051205^1 "PKG",190,22,1,1,0) ^^1^1^3060714 "PKG",190,22,1,1,1,0) FileMan To Cache SQL Mapping Tool - Version 1.0 Build 8 "PKG",190,"DEV") MGC/ALB "PKG",190,"VERSION") 1.0 "QUES","XPF1",0) Y "QUES","XPF1","??") ^D REP^XPDH "QUES","XPF1","A") Shall I write over your |FLAG| File "QUES","XPF1","B") YES "QUES","XPF1","M") D XPF1^XPDIQ "QUES","XPF2",0) Y "QUES","XPF2","??") ^D DTA^XPDH "QUES","XPF2","A") Want my data |FLAG| yours "QUES","XPF2","B") YES "QUES","XPF2","M") D XPF2^XPDIQ "QUES","XPI1",0) YO "QUES","XPI1","??") ^D INHIBIT^XPDH "QUES","XPI1","A") Want KIDS to INHIBIT LOGONs during the install "QUES","XPI1","B") YES "QUES","XPI1","M") D XPI1^XPDIQ "QUES","XPM1",0) PO^VA(200,:EM "QUES","XPM1","??") ^D MG^XPDH "QUES","XPM1","A") Enter the Coordinator for Mail Group '|FLAG|' "QUES","XPM1","B") "QUES","XPM1","M") D XPM1^XPDIQ "QUES","XPO1",0) Y "QUES","XPO1","??") ^D MENU^XPDH "QUES","XPO1","A") Want KIDS to Rebuild Menu Trees Upon Completion of Install "QUES","XPO1","B") YES "QUES","XPO1","M") D XPO1^XPDIQ "QUES","XPZ1",0) Y "QUES","XPZ1","??") ^D OPT^XPDH "QUES","XPZ1","A") Want to DISABLE Scheduled Options, Menu Options, and Protocols "QUES","XPZ1","B") YES "QUES","XPZ1","M") D XPZ1^XPDIQ "QUES","XPZ2",0) Y "QUES","XPZ2","??") ^D RTN^XPDH "QUES","XPZ2","A") Want to MOVE routines to other CPUs "QUES","XPZ2","B") NO "QUES","XPZ2","M") D XPZ2^XPDIQ "RTN") 45 "RTN","CASH") 0^1^B23854241 "RTN","CASH",1,0) CASH ;;ALB/MGC - FileMan Class Map Utility ; 11/15/04@3:00:00 "RTN","CASH",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASH",3,0) ; "RTN","CASH",4,0) Q ; Specific Entry Point must be used "RTN","CASH",5,0) ; "RTN","CASH",6,0) ; PUBLIC CALLS "RTN","CASH",7,0) ; "RTN","CASH",8,0) START(FILE,FLAGS,PACKAGE,ID,OWNER,LIST) ; Class Map Utility - Entry Point "RTN","CASH",9,0) ; This call will "Discover" the structure of a FileMan File, and "RTN","CASH",10,0) ; optionally Create and Compile the corresponding Cache Class. "RTN","CASH",11,0) ; Related Classes and Sub-Classes can also be "Discovered", Created "RTN","CASH",12,0) ; and Compiled by using the appropriate input FLAGS. "RTN","CASH",13,0) ; "RTN","CASH",14,0) ; Parameters: "RTN","CASH",15,0) ; "RTN","CASH",16,0) ; FILE - (Required) The FileMan File # to be Discovered "RTN","CASH",17,0) ; FLAGS - (Optional) Optional Flags, listed below "RTN","CASH",18,0) ; PACKAGE - (Optional) Optional Cache Package for generated Classes "RTN","CASH",19,0) ; ID - (Optional) Optional ID string if Simple IDs requested "RTN","CASH",20,0) ; OWNER - (Optional) Optional SQL Username to own generated Classes "RTN","CASH",21,0) ; LIST - (Optional) Optional Array of fields to include, see below "RTN","CASH",22,0) ; "RTN","CASH",23,0) ; Return Value: "RTN","CASH",24,0) ; "RTN","CASH",25,0) ; 1 - Success "RTN","CASH",26,0) ; 0 - Failure "RTN","CASH",27,0) ; "RTN","CASH",28,0) ; FLAGS: "RTN","CASH",29,0) ; "RTN","CASH",30,0) ; C - Compile Create & Compile the Cache classes. "RTN","CASH",31,0) ; [NOTE: The call CREATE^CASH will be executed with "RTN","CASH",32,0) ; all other parameters passed straight through if "RTN","CASH",33,0) ; FLAGS contains "C"] "RTN","CASH",34,0) ; D - Descriptions Add full field descriptions from ^DD. These do "RTN","CASH",35,0) ; not need to be stored in file #15050.11, so this "RTN","CASH",36,0) ; is a compiler only option. Adding the full "RTN","CASH",37,0) ; descriptions mean they will be viewable in the "RTN","CASH",38,0) ; HTML documentation. "RTN","CASH",39,0) ; E - Expand Pointers will generate a Computed Property "RTN","CASH",40,0) ; expanding the .01 field in the pointed to file. "RTN","CASH",41,0) ; [NOTES: "RTN","CASH",42,0) ; 1. Can be used in conjunction with Flag "P". "RTN","CASH",43,0) ; 2. If you want to expand a field other than the "RTN","CASH",44,0) ; .01 default, generate the class and amend the "RTN","CASH",45,0) ; FIELD parameter of the Computed Property] "RTN","CASH",46,0) ; F - Force Force creation and compilation if class already "RTN","CASH",47,0) ; exists. The old version of the class will be "RTN","CASH",48,0) ; deleted!!! "RTN","CASH",49,0) ; H - HDR HDR Compatibility Options. "RTN","CASH",50,0) ; I - Simple IDs Use Simple IDs. "IEN" is the default, unless an "RTN","CASH",51,0) ; alternative ID is passed in ID (e.g "RowID"). "RTN","CASH",52,0) ; L - Loose Loose Validation relaxes the constraints placed "RTN","CASH",53,0) ; on Properties, so exporting data to 3rd party SQL "RTN","CASH",54,0) ; databases becomes easier. You are less likely to "RTN","CASH",55,0) ; get import errors when the FileMan data does not "RTN","CASH",56,0) ; meet constraints (e.g. nulls in required fields). "RTN","CASH",57,0) ; M - Multiples Create sub-classes for Multiples and the "RTN","CASH",58,0) ; appropriate Parent-Child Relationships. "RTN","CASH",59,0) ; N - Simple Names Use simple names (i.e file name concatenated with "RTN","CASH",60,0) ; file #). "RTN","CASH",61,0) ; O - Extended ODBC Changes EXTENDEDODBC=0 param to 1 for SetOfCodes "RTN","CASH",62,0) ; fields. The ODBC output becomes "Int:Ext" format, "RTN","CASH",63,0) ; e.g. "Y:Yes", not just "Yes". "RTN","CASH",64,0) ; P - Pointers Create classes for pointed to files and the "RTN","CASH",65,0) ; appropriate foreign key. "RTN","CASH",66,0) ; [NOTE: Can be used with Flag "E"] "RTN","CASH",67,0) ; Q - SQL only Only tables are compiled, no classes. "RTN","CASH",68,0) ; R - Recursive Recursively expand Multiples and Pointers "RTN","CASH",69,0) ; [NOTE: If this isn't passed, "M" & "P" will be "RTN","CASH",70,0) ; stripped from FLAGS when creating sub-classes "RTN","CASH",71,0) ; and pointed to classes] "RTN","CASH",72,0) ; r - Partially Multiples will generate Classes for any Pointer "RTN","CASH",73,0) ; Recursive Fields, but those Pointers will not create "RTN","CASH",74,0) ; Sub-Classes or Classes for Multiples or Pointers "RTN","CASH",75,0) ; that they contain. "RTN","CASH",76,0) ; S - SOAP WS Create a new Class inherited from "RTN","CASH",77,0) ; %SOAP.WebService. This contains SQL Stored "RTN","CASH",78,0) ; Procedures generated for each index in the main "RTN","CASH",79,0) ; Class (plus the default ByID Procedure). "RTN","CASH",80,0) ; These Queries are also exposed as Web Methods. "RTN","CASH",81,0) ; U - Updateable Changes the READONLY=1 flag to 0, so data can be "RTN","CASH",82,0) ; inserted/updated/deleted via the Class (and SQL). "RTN","CASH",83,0) ; [WARNING: Use with extreme caution!] "RTN","CASH",84,0) ; V - Verbose The default is Silent Mode (though the Cache "RTN","CASH",85,0) ; compile messages will print to screen either "RTN","CASH",86,0) ; way). "RTN","CASH",87,0) ; W - Web Page Add the %CSP.Page SuperClass to the generated "RTN","CASH",88,0) ; Classes ("X" must also be specified). "RTN","CASH",89,0) ; An OnPage() method will be added to the Class "RTN","CASH",90,0) ; to display the output of the XMLDump() method. "RTN","CASH",91,0) ; X - XML Add the %XML.Adaptor SuperClass to the generated "RTN","CASH",92,0) ; Classes. An XMLDump() method will be added to "RTN","CASH",93,0) ; each Class to export the entire file in XML "RTN","CASH",94,0) ; format. This will use the inherited XMLExport() "RTN","CASH",95,0) ; instance method. "RTN","CASH",96,0) ; "RTN","CASH",97,0) ; LIST: "RTN","CASH",98,0) ; "RTN","CASH",99,0) ; [NOTE: If LIST is not passed, all fields will be mapped!!!] "RTN","CASH",100,0) ; "RTN","CASH",101,0) ; The LIST should be in the format: "RTN","CASH",102,0) ; "RTN","CASH",103,0) ; LIST(file#,field#1)="" "RTN","CASH",104,0) ; .. "RTN","CASH",105,0) ; LIST(file#,field#n)="" "RTN","CASH",106,0) ; "RTN","CASH",107,0) ; Only the specified fields will be added to the Class (plus "RTN","CASH",108,0) ; any required keys). "RTN","CASH",109,0) ; "RTN","CASH",110,0) ; To specify fields in Multiples or Pointers, use the relevant "RTN","CASH",111,0) ; Flags ("M" or "P") and add array nodes as follows: "RTN","CASH",112,0) ; "RTN","CASH",113,0) ; LIST(multiple_file#,field#1)="" "RTN","CASH",114,0) ; ... "RTN","CASH",115,0) ; LIST(multiple_file#,field#n)="" "RTN","CASH",116,0) ; "RTN","CASH",117,0) ; LIST(pointer_file#,field#1)="" "RTN","CASH",118,0) ; ... "RTN","CASH",119,0) ; LIST(pointer_file#,field#n)="" "RTN","CASH",120,0) ; "RTN","CASH",121,0) ; Example: "RTN","CASH",122,0) ; "RTN","CASH",123,0) ; LIST(4,.01)="" - .01 field (Name) for file# 4 (Institution) "RTN","CASH",124,0) ; LIST(4,.02)="" - .02 field (State) pointer to file #5 "RTN","CASH",125,0) ; LIST(5,.01)="" - .01 field (Name) for file# 5 (State) "RTN","CASH",126,0) ; LIST(5,3)="" - 3 field (County) multiple file# 5.01 "RTN","CASH",127,0) ; LIST(5.01,.01)="" - .01 field (County) for file #5.01 "RTN","CASH",128,0) ; "RTN","CASH",129,0) ; This produces 3 classes (assuming Flags "M" and "P" are passed) "RTN","CASH",130,0) ; each with one data Property, plus the relevant Relationships and "RTN","CASH",131,0) ; Foreign keys. If Flag "E" is passed aswell a computed field will "RTN","CASH",132,0) ; also be generated for the Pointer. "RTN","CASH",133,0) ; "RTN","CASH",134,0) ; Lock ^XTMP("CASH") "RTN","CASH",135,0) I '$$LOCK^CASHU($J,"START^CASH") Q 0 "RTN","CASH",136,0) ; "RTN","CASH",137,0) ; Initialize optional Parameters "RTN","CASH",138,0) S FLAGS=$G(FLAGS) "RTN","CASH",139,0) S PACKAGE=$G(PACKAGE) "RTN","CASH",140,0) S ID=$G(ID) "RTN","CASH",141,0) S OWNER=$G(OWNER) "RTN","CASH",142,0) I PACKAGE'="",$$SQLRW^CASHU(PACKAGE) W !,"Invalid Package Name (SQL Reserved Word)" Q 0 "RTN","CASH",143,0) I ID'="",$$SQLRW^CASHU(ID) W !,"Invalid ID Name (SQL Reserved Word)" Q 0 "RTN","CASH",144,0) ; "RTN","CASH",145,0) ; Initialize Temporary Globals "RTN","CASH",146,0) K ^TMP("CASH",$J),^TMP("CASHC",$J),^TMP("CASHCW",$J) "RTN","CASH",147,0) ; "RTN","CASH",148,0) N OK "RTN","CASH",149,0) S OK=+$$DISCVR^CASH0(FILE,FLAGS) "RTN","CASH",150,0) ; "RTN","CASH",151,0) ; Create and Compile top level classes if FLAGS["C" "RTN","CASH",152,0) ; (Sub-files must be compiled with their master class) "RTN","CASH",153,0) I OK,FLAGS["C",$$ISFILE^CASHU(FILE) S OK=$$CREATE^CASH0(FILE,FLAGS,PACKAGE,ID,OWNER,.LIST) "RTN","CASH",154,0) ; "RTN","CASH",155,0) ; Delete Temporary Globals and unlock ^XTMP("CASH") "RTN","CASH",156,0) K ^TMP("CASH",$J),^TMP("CASHC",$J),^TMP("CASHCW",$J) "RTN","CASH",157,0) D UNLOCK^CASHU($J) "RTN","CASH",158,0) ; "RTN","CASH",159,0) ; Quit with OK "RTN","CASH",160,0) Q OK "RTN","CASH",161,0) ; "RTN","CASH",162,0) CREATE(FILE,FLAGS,PACKAGE,ID,OWNER,LIST) ; Create and Compile Utility "RTN","CASH",163,0) ; This call Creates and Compiles the Cache Classes for a given file. "RTN","CASH",164,0) ; Related classes will automatically be compiled by the Cache "RTN","CASH",165,0) ; compiler. "RTN","CASH",166,0) ; "RTN","CASH",167,0) ; Parameters: See documentation for START^CASH above! "RTN","CASH",168,0) ; "RTN","CASH",169,0) ; [NOTE: An entry in file #15050.11 - CASH FM CLASS MAP is required, "RTN","CASH",170,0) ; so all files must have been "Discovered" by calling "RTN","CASH",171,0) ; D START^CASH(FILE,FLAGS) beforehand. "RTN","CASH",172,0) ; If FLAGS contains "C" this CREATE function will be called "RTN","CASH",173,0) ; automatically! "RTN","CASH",174,0) ; "RTN","CASH",175,0) ; Lock ^XTMP("CASH") "RTN","CASH",176,0) I '$$LOCK^CASHU($J,"CREATE^CASH") Q 0 "RTN","CASH",177,0) ; "RTN","CASH",178,0) ; Initilize optional Parameters "RTN","CASH",179,0) S FLAGS=$G(FLAGS) "RTN","CASH",180,0) S PACKAGE=$G(PACKAGE) "RTN","CASH",181,0) S ID=$G(ID) "RTN","CASH",182,0) S OWNER=$G(OWNER) "RTN","CASH",183,0) I PACKAGE'="",$$SQLRW^CASHU(PACKAGE) W !,"Invalid Package Name (SQL Reserved Word)" Q 0 "RTN","CASH",184,0) I ID'="",$$SQLRW^CASHU(ID) W !,"Invalid ID Name (SQL Reserved Word)" Q 0 "RTN","CASH",185,0) ; "RTN","CASH",186,0) ; Initialize Temporary Globals "RTN","CASH",187,0) K ^TMP("CASHC",$J),^TMP("CASHCW",$J) "RTN","CASH",188,0) ; "RTN","CASH",189,0) N OK "RTN","CASH",190,0) S OK=$$CREATE^CASH0(FILE,FLAGS,PACKAGE,ID,OWNER,.LIST) "RTN","CASH",191,0) ; "RTN","CASH",192,0) ; Delete Temporary Globals and unlock ^XTMP("CASH") "RTN","CASH",193,0) K ^TMP("CASHC",$J),^TMP("CASHCW",$J) "RTN","CASH",194,0) D UNLOCK^CASHU($J) "RTN","CASH",195,0) ; "RTN","CASH",196,0) ; Quit with OK "RTN","CASH",197,0) Q OK "RTN","CASH",198,0) ; "RTN","CASH",199,0) ALL(FLAGS,PACKAGE,ID,OWNER) ; Compile all FileMan Files "RTN","CASH",200,0) ; This call "Discovers" all FileMan files in a Namespace, then Creates and Compiles them. "RTN","CASH",201,0) ; "RTN","CASH",202,0) N VER "RTN","CASH",203,0) S VER=$$OBJVER^CASHU() "RTN","CASH",204,0) ; "RTN","CASH",205,0) S FLAGS=$G(FLAGS) "RTN","CASH",206,0) S PACKAGE=$G(PACKAGE) "RTN","CASH",207,0) S ID=$G(ID) "RTN","CASH",208,0) S OWNER=$G(OWNER) "RTN","CASH",209,0) I PACKAGE'="",$$SQLRW^CASHU(PACKAGE) W !,"Invalid Package Name (SQL Reserved Word)" Q "RTN","CASH",210,0) I ID'="",$$SQLRW^CASHU(ID) W !,"Invalid ID Name (SQL Reserved Word)" Q "RTN","CASH",211,0) I PACKAGE="" S PACKAGE="User" "RTN","CASH",212,0) ; "RTN","CASH",213,0) ; Call appropriate Compiler "RTN","CASH",214,0) ; Cache Version 5 and greater "RTN","CASH",215,0) I VER>4.1 D ALL^CASHC(FLAGS,PACKAGE,ID,OWNER) Q "RTN","CASH",216,0) ; Cache Version 4.1 "RTN","CASH",217,0) I VER=4.1 D ALL^CASHV4C(FLAGS,PACKAGE,ID,OWNER) Q "RTN","CASH",218,0) ; "RTN","CASH",219,0) ; Non-Cache, or less than Version 4.1 "RTN","CASH",220,0) ; Discover all files "RTN","CASH",221,0) N CNT,FILE,TIME "RTN","CASH",222,0) S TIME(1)=$H "RTN","CASH",223,0) D DELALL^CASHFN11 "RTN","CASH",224,0) S FILE=0 "RTN","CASH",225,0) F S FILE=$O(^DIC(FILE)) Q:'+FILE I $$ISFILE^CASHU(FILE) D DISCVR^CASH0(FILE,"MPRV") "RTN","CASH",226,0) S TIME(2)=$H "RTN","CASH",227,0) S CNT=+$P($G(^CASH(15050.11,0)),"^",4) "RTN","CASH",228,0) W !!,"Total Files Discovered: ",CNT," in ",$$TPLEN^CASHCU(TIME(1),TIME(2)) "RTN","CASH",229,0) Q "RTN","CASH0") 0^2^B5250002 "RTN","CASH0",1,0) CASH0 ;;ALB/MGC - FileMan Class Map Utility - Internal Calls ; 11/15/04@3:00:00 "RTN","CASH0",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASH0",3,0) ; "RTN","CASH0",4,0) CREATE(FILE,FLAGS,PACKAGE,ID,OWNER,LIST) ; Create and Compile Utility "RTN","CASH0",5,0) ; "RTN","CASH0",6,0) ; IMPORTANT: THIS IS AN INTERNAL CALL ONLY! "RTN","CASH0",7,0) ; "RTN","CASH0",8,0) ; NOTE: Called recursively. "RTN","CASH0",9,0) ; "RTN","CASH0",10,0) ; Quit if FILE not passed in "RTN","CASH0",11,0) I $G(FILE)="" W:$G(FLAGS)["V" !,"File# must be passed in",! Q 0 "RTN","CASH0",12,0) ; "RTN","CASH0",13,0) ; Check "Discover" File Exists "RTN","CASH0",14,0) I '$D(^CASH(15050.11,FILE)) W:$G(FLAGS)["V" !,"File#: ",FILE," has not been discovered (use START^CASH)",! Q 0 "RTN","CASH0",15,0) ; "RTN","CASH0",16,0) ; Call appropriate Compiler "RTN","CASH0",17,0) N VER "RTN","CASH0",18,0) S VER=$$OBJVER^CASHU() "RTN","CASH0",19,0) ; Version 5 and greater "RTN","CASH0",20,0) I VER>4.1 Q +$$CREATE^CASHC(FILE,FLAGS,PACKAGE,ID,OWNER,.LIST) "RTN","CASH0",21,0) ; Version 4.1 "RTN","CASH0",22,0) I VER=4.1 Q +$$CREATE^CASHV4C(FILE,FLAGS,PACKAGE,ID,OWNER,.LIST) "RTN","CASH0",23,0) ; Unable to compile "RTN","CASH0",24,0) W !,"You must be running Cache 4.1+ to create and compile Classes" "RTN","CASH0",25,0) Q 0 "RTN","CASH0",26,0) ; "RTN","CASH0",27,0) DISCVR(FILE,FLAGS) ; Discover and Generate Utility "RTN","CASH0",28,0) ; This call Discovers the Classes, Sub-Classes, Referenced Classes, "RTN","CASH0",29,0) ; Properties, Methods and Maps for a given file. "RTN","CASH0",30,0) ; If requested the Cache Classes will be generated. "RTN","CASH0",31,0) ; "RTN","CASH0",32,0) ; Parameters: See documentation for START^CASH above! "RTN","CASH0",33,0) ; "RTN","CASH0",34,0) ; IMPORTANT: THIS IS AN INTERNAL CALL ONLY! "RTN","CASH0",35,0) ; "RTN","CASH0",36,0) ; NOTE: Called recursively. "RTN","CASH0",37,0) ; "RTN","CASH0",38,0) ; Quit if FILE not passed in "RTN","CASH0",39,0) I $G(FILE)="" Q 0 "RTN","CASH0",40,0) ; "RTN","CASH0",41,0) ; Quit if ^DD entry not present (zero node must be non-null) "RTN","CASH0",42,0) I $G(^DD(FILE,0))="" Q 0 "RTN","CASH0",43,0) ; "RTN","CASH0",44,0) ; Quit if this file has already been "Discovered" for this session "RTN","CASH0",45,0) I $D(^TMP("CASH",$J,FILE)) Q 1_"^"_FILE "RTN","CASH0",46,0) S ^TMP("CASH",$J,FILE)="" "RTN","CASH0",47,0) ; "RTN","CASH0",48,0) ; Always re-Discover Files to get any updates (delete previous copy) "RTN","CASH0",49,0) I $D(^CASH(15050.11,FILE)) D DELFILE^CASHFN11(FILE) "RTN","CASH0",50,0) ; "RTN","CASH0",51,0) N FIELD,GLOBAL,ISFILE,MAP,NAME,NIX,NIXF,SQLNM,SUBNM,SUBS,UID "RTN","CASH0",52,0) ; "RTN","CASH0",53,0) ; Determine if the FILE is a top level file, or a sub-file. "RTN","CASH0",54,0) ; Note: If ^DIC exists, but there is also an UP pointer, the file must be treated as "RTN","CASH0",55,0) ; a sub-file as the parent will rely on the relationship being present. "RTN","CASH0",56,0) S ISFILE=$$ISFILE^CASHU(FILE) "RTN","CASH0",57,0) ; "RTN","CASH0",58,0) ; Get File details "RTN","CASH0",59,0) I ISFILE D FILE^CASH1(FILE,.NAME,.SUBNM,.GLOBAL,.SUBS) "RTN","CASH0",60,0) I 'ISFILE D SUBFILE^CASH1(FILE,.NAME,.SUBNM,.GLOBAL,.SUBS) "RTN","CASH0",61,0) ; "RTN","CASH0",62,0) I FLAGS["V" W FILE,": ",NAME,! "RTN","CASH0",63,0) ; "RTN","CASH0",64,0) ; Create Master Map "RTN","CASH0",65,0) S MAP=1 "RTN","CASH0",66,0) S UID="#"_FILE "RTN","CASH0",67,0) D MMAP^CASH1(FILE,UID,GLOBAL,.SUBS) "RTN","CASH0",68,0) ; "RTN","CASH0",69,0) ; Loop through and prepare any New type Regular indexes for this File "RTN","CASH0",70,0) ; Note: The maps need to be added after Field processing to capture Field Labels "RTN","CASH0",71,0) D NEWINX^CASH1(FILE,.NIX,.NIXF) "RTN","CASH0",72,0) ; "RTN","CASH0",73,0) ; Loop through Fields "RTN","CASH0",74,0) D FIELDS^CASH2(FILE,FLAGS,NAME,SUBNM,UID,GLOBAL,.MAP,.SUBS,.NIXF) "RTN","CASH0",75,0) ; "RTN","CASH0",76,0) ; Now add any New type indexes "RTN","CASH0",77,0) D NEWINXU^CASH1(FILE,UID,GLOBAL,MAP,.SUBS,.NIX,.NIXF) "RTN","CASH0",78,0) ; "RTN","CASH0",79,0) Q 1_"^"_FILE "RTN","CASH1") 0^3^B36770570 "RTN","CASH1",1,0) CASH1 ;;ALB/MGC - FileMan Class Map Utility - Internal Calls (File/Map Discovery) ; 11/15/04@3:00:00 "RTN","CASH1",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASH1",3,0) ; "RTN","CASH1",4,0) FILE(FILE,NAME,SUBNM,GLOBAL,SUBS) ; Discover File Details "RTN","CASH1",5,0) N DICNM,GL,I,SQLNM "RTN","CASH1",6,0) ; Unpack Data from ^DIC "RTN","CASH1",7,0) D FILE^CASHF(FILE,.DICNM,.GL) "RTN","CASH1",8,0) ; "RTN","CASH1",9,0) ; Get Global node and subscripts "RTN","CASH1",10,0) S GLOBAL=$P($P(GL,"(",1),"^",2) "RTN","CASH1",11,0) K SUBS "RTN","CASH1",12,0) S SUBS=$P(GL,"(",2) "RTN","CASH1",13,0) F I=1:1:($L(SUBS,",")-1) S SUBS(I)=$P(SUBS,",",I) "RTN","CASH1",14,0) ; "RTN","CASH1",15,0) ; Get Name "RTN","CASH1",16,0) S NAME=$$NAME^CASHN(DICNM) "RTN","CASH1",17,0) ; Make sure SUBNM is null "RTN","CASH1",18,0) S SUBNM="" "RTN","CASH1",19,0) ; Check for SQL Reserved words "RTN","CASH1",20,0) S SQLNM="" "RTN","CASH1",21,0) I $$SQLRW^CASHU(NAME) S SQLNM="_"_NAME "RTN","CASH1",22,0) ; Create new record for File "RTN","CASH1",23,0) D ADDFILE^CASHFN11(FILE,NAME,"",SQLNM,"F","") "RTN","CASH1",24,0) Q "RTN","CASH1",25,0) ; "RTN","CASH1",26,0) SUBFILE(FILE,NAME,SUBNM,GLOBAL,SUBS) ; Discover Sub-File Details "RTN","CASH1",27,0) N DICNM,FLD,FLNO,FTYPE,GL,I,J,K,NM,PFLD,SQLNM "RTN","CASH1",28,0) ; Get hierarchy of files "RTN","CASH1",29,0) ; FLNO(1),NM(1) = This file "RTN","CASH1",30,0) ; FLNO(2),NM(2) = Parent file "RTN","CASH1",31,0) ; FLNO(3),NM(3) = Grandparent file "RTN","CASH1",32,0) ; etc... "RTN","CASH1",33,0) S I=1,FLNO(1)=FILE "RTN","CASH1",34,0) D F I=2:1 S FLNO(I)=$G(^DD(FLNO(I-1),0,"UP")) Q:FLNO(I)="" Q:$$ISFILE^CASHU(FLNO(I)) D "RTN","CASH1",35,0) .; Get Property Name "RTN","CASH1",36,0) .S NM(I)=$O(^DD(FLNO(I),0,"NM","")) "RTN","CASH1",37,0) .I NM(1)="" S NM(1)=$P($P($G(^DD(FLNO(I),0)),"^",1)," SUB-FIELD",1) "RTN","CASH1",38,0) .Q "RTN","CASH1",39,0) Q:FLNO(I)="" "RTN","CASH1",40,0) ; Get File Type "RTN","CASH1",41,0) S FTYPE="S" "RTN","CASH1",42,0) S PFLD=$O(^DD(FLNO(2),"SB",FLNO(1),"")) "RTN","CASH1",43,0) I PFLD'="",$$FLDATTR^CASHR(FLNO(2),PFLD,"TYPE")="WORD-PROCESSING" S FTYPE="W" "RTN","CASH1",44,0) ; Create name from Root parent name and this sub-files name "RTN","CASH1",45,0) D FILE^CASHF(FLNO(I),.DICNM,.GL) "RTN","CASH1",46,0) F J=I-1:-1:1 S DICNM=DICNM_" "_NM(J) "RTN","CASH1",47,0) ; Get Name "RTN","CASH1",48,0) S NAME=$$NAME^CASHN(DICNM) "RTN","CASH1",49,0) ; Restrict Sub-Name to 20 characters. If used for Simple Names, allow 5 characters for numeric uniqueness "RTN","CASH1",50,0) S SUBNM=$$STDNAME^CASHN(NM(1),20) "RTN","CASH1",51,0) ; Check for rare Sub-name clashes, when the "N" FLAG is used "RTN","CASH1",52,0) ; e.g. File #6.01 - SYNONYM and File #60.1 - SYNONYM would both be called "Synonym601" "RTN","CASH1",53,0) ; This is not a perfect check, as it is not case sensitive. "RTN","CASH1",54,0) ; If necessary a new Uppercase index may need to be added "RTN","CASH1",55,0) I $$SUBEXIST^CASHFN11(SUBNM_$TR(FILE,".","")) F K=0:1 I '$$SUBEXIST^CASHFN11(SUBNM_K_$TR(FILE,".","")) S SUBNM=SUBNM_K Q "RTN","CASH1",56,0) ; Set SQLNM if required "RTN","CASH1",57,0) S SQLNM="" "RTN","CASH1",58,0) ; Check for SQL Reserved words "RTN","CASH1",59,0) I $$SQLRW^CASHU(NAME) S SQLNM="_"_NAME "RTN","CASH1",60,0) ; Create new record for File "RTN","CASH1",61,0) D ADDFILE^CASHFN11(FILE,NAME,SUBNM,SQLNM,FTYPE,PFLD) "RTN","CASH1",62,0) ; "RTN","CASH1",63,0) ; Get Global node and subscripts from top level parent "RTN","CASH1",64,0) S GLOBAL=$P($P(GL,"(",1),"^",2) "RTN","CASH1",65,0) K SUBS "RTN","CASH1",66,0) S SUBS=$P(GL,"(",2) "RTN","CASH1",67,0) S J=0 "RTN","CASH1",68,0) I SUBS'="" F J=1:1:($L(SUBS,",")-1) S SUBS(J)=$P(SUBS,",",J) "RTN","CASH1",69,0) S J=J+1 "RTN","CASH1",70,0) ; Add pointer to this file "RTN","CASH1",71,0) S SUBS(J)="#"_FLNO(I) "RTN","CASH1",72,0) S J=J+1 "RTN","CASH1",73,0) ; Loop through children for subsequent subscripts "RTN","CASH1",74,0) F I=(I-1):-1:1 D "RTN","CASH1",75,0) .S FLD=$O(^DD(FLNO(I+1),"SB",FLNO(I),"")) "RTN","CASH1",76,0) .; Try to allow for missing "SB" levels! "RTN","CASH1",77,0) .I FLD="" D "RTN","CASH1",78,0) ..S FLD=0 "RTN","CASH1",79,0) ..F S FLD=$O(^DD(FLNO(I+1),FLD)) Q:'+FLD I +$P($G(^DD(FLNO(I+1),FLD,0)),"^",2)=FLNO(I) Q "RTN","CASH1",80,0) ..Q "RTN","CASH1",81,0) .S SUBS(J)=$P($P(^DD(FLNO(I+1),FLD,0),"^",4),";",1) "RTN","CASH1",82,0) .S J=J+1 "RTN","CASH1",83,0) .; Don't add pointer for bottom level (this is added for each Map below) "RTN","CASH1",84,0) .I I=1 Q "RTN","CASH1",85,0) .; Add pointer to this file "RTN","CASH1",86,0) .S SUBS(J)="#"_FLNO(I) "RTN","CASH1",87,0) .S J=J+1 "RTN","CASH1",88,0) .Q "RTN","CASH1",89,0) Q "RTN","CASH1",90,0) ; "RTN","CASH1",91,0) MMAP(FILE,UID,GLOBAL,SUBS) ; Add Master Map "RTN","CASH1",92,0) N I "RTN","CASH1",93,0) ; Master Map must have ID=1 and TYPE="D" (data) "RTN","CASH1",94,0) D ADDMAP^CASHFN11(FILE,1,"Master","D",GLOBAL) "RTN","CASH1",95,0) ; Loop through and add Subscripts "RTN","CASH1",96,0) F I=1:1 Q:'$D(SUBS(I)) D "RTN","CASH1",97,0) .; Check if reference to parent file, and add Loop Init Value and Stop Expression "RTN","CASH1",98,0) .I SUBS(I)?1"#".N.(1"."1.N) D ADDSUBS^CASHFN11(FILE,1,I,SUBS(I),0,"'+{L"_I_"}","","") Q "RTN","CASH1",99,0) .D ADDSUBS^CASHFN11(FILE,1,I,SUBS(I),"","","","") "RTN","CASH1",100,0) .Q "RTN","CASH1",101,0) ; Add UID for this file as final Subscript "RTN","CASH1",102,0) D ADDSUBS^CASHFN11(FILE,1,I,UID,0,"'+{L"_I_"}","","") "RTN","CASH1",103,0) Q "RTN","CASH1",104,0) ; "RTN","CASH1",105,0) NEWINX(FILE,NIX,NIXF) ; Create array of New Type Indexes and Fields "RTN","CASH1",106,0) N MAPNM,NIXFLD,NIXNM,NIXREC,NIXSB,NIXSBREC,NIXTMP,OK "RTN","CASH1",107,0) K NIX,NIXF "RTN","CASH1",108,0) ; Loop through New-Style Index "B" cross reference for the specified FILE "RTN","CASH1",109,0) S NIX="" "RTN","CASH1",110,0) F S NIX=$O(^DD("IX","B",FILE,NIX)) Q:NIX="" D "RTN","CASH1",111,0) .; Get New-Style Index Details "RTN","CASH1",112,0) .S NIXREC=^DD("IX",NIX,0) "RTN","CASH1",113,0) .; Quit if not Regular Index "RTN","CASH1",114,0) .I $P(NIXREC,"^",4)'="R" Q "RTN","CASH1",115,0) .; Get Index identifier (e.g. "C") and Map Name "RTN","CASH1",116,0) .S NIXNM=$P(NIXREC,"^",2) "RTN","CASH1",117,0) .S MAPNM=$P(NIXREC,"^",3) "RTN","CASH1",118,0) .; Standardize Map Name "RTN","CASH1",119,0) .S MAPNM=$$STDNAME^CASHN(MAPNM) "RTN","CASH1",120,0) .; Create Temp array "RTN","CASH1",121,0) .K NIXTMP "RTN","CASH1",122,0) .S NIXTMP("NIX")=MAPNM_"^"""_NIXNM_"""" "RTN","CASH1",123,0) .; Loop through Fields "RTN","CASH1",124,0) .S NIXSB=0,OK=1 "RTN","CASH1",125,0) .F S NIXSB=$O(^DD("IX",NIX,11.1,NIXSB)) Q:'+NIXSB D Q:'OK "RTN","CASH1",126,0) ..S NIXSBREC=^DD("IX",NIX,11.1,NIXSB,0) "RTN","CASH1",127,0) ..; Only map Indexes that contain just Fields "RTN","CASH1",128,0) ..I $P(NIXSBREC,"^",2)'="F" S OK=0 Q "RTN","CASH1",129,0) ..I $P(NIXSBREC,"^",3)'=FILE S OK=0 Q "RTN","CASH1",130,0) ..S NIXFLD=$P(NIXSBREC,"^",4) "RTN","CASH1",131,0) ..; Check that the field is valid "RTN","CASH1",132,0) ..I NIXFLD="" S OK=0 Q "RTN","CASH1",133,0) ..I '$D(^DD(FILE,NIXFLD)) S OK=0 Q "RTN","CASH1",134,0) ..; Add field details to NIXTMP "RTN","CASH1",135,0) ..S NIXTMP("NIX",NIXSB)=NIXFLD "RTN","CASH1",136,0) ..S NIXTMP("FLD",NIXFLD)="" "RTN","CASH1",137,0) ..Q "RTN","CASH1",138,0) .; Quit if Index not OK "RTN","CASH1",139,0) .I 'OK Q "RTN","CASH1",140,0) .; Merge Temp array to NIX and NIXF (passed by reference) "RTN","CASH1",141,0) .M NIX(NIX)=NIXTMP("NIX") "RTN","CASH1",142,0) .M NIXF=NIXTMP("FLD") "RTN","CASH1",143,0) .Q "RTN","CASH1",144,0) Q "RTN","CASH1",145,0) ; "RTN","CASH1",146,0) NEWINXU(FILE,UID,GLOBAL,MAP,SUBS,NIX,NIXF) ; Create New Type Indexes "RTN","CASH1",147,0) N ALTEXP,DATALBL,I,MAPNM,NIXFLD,NIXNM "RTN","CASH1",148,0) ; Loop through and add any New-Style Indexes "RTN","CASH1",149,0) S NIX="" "RTN","CASH1",150,0) F S NIX=$O(NIX(NIX)) Q:NIX="" D "RTN","CASH1",151,0) .S MAPNM=$P(NIX(NIX),"^",1) "RTN","CASH1",152,0) .S NIXNM=$P(NIX(NIX),"^",2) "RTN","CASH1",153,0) .; Check MAPNM is unique! "RTN","CASH1",154,0) .I $D(^CASH(15050.11,FILE,3,"B",MAPNM)) F I=0:1 I '$D(^CASH(15050.11,FILE,3,"B",MAPNM_I)) S MAPNM=MAPNM_I Q "RTN","CASH1",155,0) .; Increment Map ID "RTN","CASH1",156,0) .S MAP=MAP+1 "RTN","CASH1",157,0) .; Create new Map, must be of TYPE="I" (index) "RTN","CASH1",158,0) .D ADDMAP^CASHFN11(FILE,MAP,MAPNM,"I",GLOBAL) "RTN","CASH1",159,0) .; Loop through and add initial Subscripts (from parent files) "RTN","CASH1",160,0) .F I=1:1 Q:'$D(SUBS(I)) D ADDSUBS^CASHFN11(FILE,MAP,I,SUBS(I),"","","","") "RTN","CASH1",161,0) .; Add Subscript for Index identifier (e.g. "C") "RTN","CASH1",162,0) .D ADDSUBS^CASHFN11(FILE,MAP,I,NIXNM,"","","","") "RTN","CASH1",163,0) .; Loop through and add New-Style Index Field Subscripts "RTN","CASH1",164,0) .S NIXF="" "RTN","CASH1",165,0) .F S NIXF=$O(NIX(NIX,NIXF)) Q:NIXF="" D "RTN","CASH1",166,0) ..S NIXFLD=NIX(NIX,NIXF) "RTN","CASH1",167,0) ..S DATALBL=$P(NIXF(NIXFLD),"^",1) "RTN","CASH1",168,0) ..S ALTEXP=$P(NIXF(NIXFLD),"^",2) "RTN","CASH1",169,0) ..S:ALTEXP'="" ALTEXP="{"_ALTEXP_"}" "RTN","CASH1",170,0) ..S I=I+1 "RTN","CASH1",171,0) ..D ADDSUBS^CASHFN11(FILE,MAP,I,"{"_DATALBL_"}","","",NIXFLD,ALTEXP) "RTN","CASH1",172,0) ..Q "RTN","CASH1",173,0) .; Add UID for this file as final Subscript "RTN","CASH1",174,0) .D ADDSUBS^CASHFN11(FILE,MAP,I+1,UID,"","","","") "RTN","CASH1",175,0) .Q "RTN","CASH1",176,0) Q "RTN","CASH2") 0^4^B69666901 "RTN","CASH2",1,0) CASH2 ;;ALB/MGC - FileMan Class Map Utility - Internal Calls (Field Discovery) ; 11/15/04@3:00:00 "RTN","CASH2",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASH2",3,0) ; "RTN","CASH2",4,0) FIELDS(FILE,FLAGS,NAME,SUBNM,UID,GLOBAL,MAP,SUBS,NIXF) ; Add Fields "RTN","CASH2",5,0) N MUL,FIELD "RTN","CASH2",6,0) ; Initialise FIELD array with potential UID name to prevent clashes "RTN","CASH2",7,0) S FIELD($$UP^XLFSTR(NAME_"ID"))=0 "RTN","CASH2",8,0) I SUBNM'="" S FIELD($$UP^XLFSTR(SUBNM_"ID"))=0 "RTN","CASH2",9,0) S FIELD("IEN")=0 ; IEN created as UID if FLAGS["I" "RTN","CASH2",10,0) S FIELD("IENS")=0 ; IENS field created by default "RTN","CASH2",11,0) ; "RTN","CASH2",12,0) ; Loop through Fields "RTN","CASH2",13,0) S FIELD=0 "RTN","CASH2",14,0) F S FIELD=$O(^DD(FILE,FIELD)) Q:'+FIELD I $D(^DD(FILE,FIELD,0)) D "RTN","CASH2",15,0) .N DATALBL,DDLBL,DECD,DESC,DUP,EXT1,EXT2,GSL,INDEXED,INP,LABEL,LBLUP,LEN,MULT,NODE,OUT "RTN","CASH2",16,0) .N PIECE,PNTR,REQ,RCODE,SPEC,SQLLBL,TRANS,TYPE "RTN","CASH2",17,0) .; Get Field details "RTN","CASH2",18,0) .D FIELD^CASHF(FILE,FIELD,.DDLBL,.SPEC,.DECD,.TYPE,.MULT,.PNTR,.GSL,.INP,.OUT,.LEN) "RTN","CASH2",19,0) .; Standardise the Name "RTN","CASH2",20,0) .S LABEL=$$STDNAME^CASHN(DDLBL) "RTN","CASH2",21,0) .Q:LABEL="" "RTN","CASH2",22,0) .; Create Description for Property "RTN","CASH2",23,0) .S DESC="Field #: "_FIELD_" Name: "_DDLBL "RTN","CASH2",24,0) .; Set Required flag "RTN","CASH2",25,0) .S REQ=$S(SPEC["R":1,1:0) "RTN","CASH2",26,0) .;Field .001 is a Special Case! "RTN","CASH2",27,0) .;It returns the IEN, which will already be mapped. "RTN","CASH2",28,0) .I FIELD=.001 D Q "RTN","CASH2",29,0) ..N LSUB "RTN","CASH2",30,0) ..; Check for duplicate LABEL "RTN","CASH2",31,0) ..S LBLUP=$$UP^XLFSTR(LABEL) "RTN","CASH2",32,0) ..I $D(FIELD(LBLUP)) N J F J=0:1 I '$D(FIELD(LBLUP_J)) S LABEL=LABEL_J,LBLUP=LBLUP_J Q "RTN","CASH2",33,0) ..S FIELD(LBLUP)=.001 "RTN","CASH2",34,0) ..; Get SQL and Data labels "RTN","CASH2",35,0) ..D LABELS(LABEL,.SQLLBL,.DATALBL) "RTN","CASH2",36,0) ..; Get the last Subscript level "RTN","CASH2",37,0) ..S LSUB=$O(SUBS(""),-1) "RTN","CASH2",38,0) ..; The IEN will be at the next level - create appropriate Retrieval Code "RTN","CASH2",39,0) ..S RCODE=" S {*}={L"_(LSUB+1)_"}" "RTN","CASH2",40,0) ..; Special Case for Date/Time fields "RTN","CASH2",41,0) ..I TYPE="DATE/TIME" D DT^CASH3(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,"","",RCODE,INP) Q "RTN","CASH2",42,0) ..; Add Field as %Float for all other cases "RTN","CASH2",43,0) ..D ADDFLD^CASHFN11(FILE,FIELD,LABEL,0,"","",DESC,"",0,REQ,"",0,"%Library.Float","T",SQLLBL) "RTN","CASH2",44,0) ..D ADDDATA^CASHFN11(FILE,1,FIELD,DATALBL,"","",0,RCODE) "RTN","CASH2",45,0) ..Q "RTN","CASH2",46,0) .; Remove characters from SPEC not to do with data extraction "RTN","CASH2",47,0) .S SPEC=$TR(SPEC,"aeAILMO'RX*","") "RTN","CASH2",48,0) .; Set Output Transform flag "RTN","CASH2",49,0) .S TRANS=$S(OUT'="":1,1:0) "RTN","CASH2",50,0) .; Check for Numeric values with Transforms (must be exposed as String/Varchar) "RTN","CASH2",51,0) .I TYPE="NUMERIC",TRANS S TYPE="FREE TEXT" "RTN","CASH2",52,0) .; Check that Pointer is Valid, and Discover pointed to File "RTN","CASH2",53,0) .; (Note: Discovery has been moved up to here to help prevent errors) "RTN","CASH2",54,0) .I TYPE="POINTER" D "RTN","CASH2",55,0) ..N PFILE,PFLAGS,SUCCESS "RTN","CASH2",56,0) ..S PFILE=+$P(SPEC,"P",2) "RTN","CASH2",57,0) ..; Check for Invalid Pointers "RTN","CASH2",58,0) ..I 'PFILE S TYPE="FREE TEXT" Q "RTN","CASH2",59,0) ..; Check for Pointers to non-existent files! "RTN","CASH2",60,0) ..I '$$ISFILE^CASHU(PFILE) S TYPE="FREE TEXT" Q "RTN","CASH2",61,0) ..; Discover Pointed to File if P passed in FLAGS "RTN","CASH2",62,0) ..I FLAGS'["P" Q "RTN","CASH2",63,0) ..; Prevent Pointed to Classes from being Compiled "RTN","CASH2",64,0) ..; If P passed in FLAGS they will be compiled by CASHC "RTN","CASH2",65,0) ..S PFLAGS=$TR(FLAGS,"C","") "RTN","CASH2",66,0) ..; If R not passed in FLAGS don't expand Multiples or Pointers in pointed to File "RTN","CASH2",67,0) ..I FLAGS'["R" S PFLAGS=$TR(PFLAGS,"MP","") "RTN","CASH2",68,0) ..I '$$DISCVR^CASH0(PFILE,PFLAGS) S TYPE="FREE TEXT" "RTN","CASH2",69,0) ..Q "RTN","CASH2",70,0) .; Check for Sets of Codes with Transforms (unless INPUT TRANSFORM defined set TRANS=0) "RTN","CASH2",71,0) .I TYPE="SET",TRANS,INP="Q" S TRANS=0 "RTN","CASH2",72,0) .; Check for Free Text with Transforms (if transform requires DA or D0 set TRANS=0) "RTN","CASH2",73,0) .I TYPE="FREE TEXT",TRANS,INP["DA"!(INP["D0")!(OUT["DA")!(OUT["D0") S TRANS=0 "RTN","CASH2",74,0) .; Check for Multiples that have already been specified - can't have two Relationships to the same file! "RTN","CASH2",75,0) .I MULT,$D(MUL(+SPEC)) Q "RTN","CASH2",76,0) .; Check for Multiples to non-existant Sub-Files "RTN","CASH2",77,0) .I MULT,'$D(^DD(+SPEC)) Q "RTN","CASH2",78,0) .; Get Global Data details "RTN","CASH2",79,0) .S NODE=$P(GSL,";",1) "RTN","CASH2",80,0) .I NODE'=+NODE S NODE=""""_NODE_"""" "RTN","CASH2",81,0) .S PIECE=$P(GSL,";",2) "RTN","CASH2",82,0) .; Check for invalid Piece # (cannot be greater than 123) - set to last good piece for node +1 "RTN","CASH2",83,0) .I PIECE>123 F S PIECE=$O(^DD(FILE,"GL",NODE,PIECE),-1) I PIECE<123 S PIECE=PIECE+1 Q "RTN","CASH2",84,0) .S (RCODE,EXT1,EXT2)="" "RTN","CASH2",85,0) .; If data is not $Piece "RTN","CASH2",86,0) .I $E(PIECE)="E" D "RTN","CASH2",87,0) ..N GLREF,I,SUBSNO "RTN","CASH2",88,0) ..S SUBSNO=$O(SUBS(""),-1)+1 "RTN","CASH2",89,0) ..S GLREF="^"_GLOBAL_"({L1}" "RTN","CASH2",90,0) ..; Add all the subscripts "RTN","CASH2",91,0) ..F I=2:1:SUBSNO S GLREF=GLREF_",{L"_I_"}" "RTN","CASH2",92,0) ..; Add the node "RTN","CASH2",93,0) ..S GLREF=GLREF_","_NODE_")" "RTN","CASH2",94,0) ..; Get Extract lengths "RTN","CASH2",95,0) ..S EXT1=$E($P(PIECE,",",1),2,255) "RTN","CASH2",96,0) ..S EXT2=$P(PIECE,",",2) S:EXT2="" EXT2=245 "RTN","CASH2",97,0) ..; Set the Retrieval Code string "RTN","CASH2",98,0) ..S RCODE=" S {*}=$E($G("_GLREF_"),"_EXT1_","_EXT2_")" "RTN","CASH2",99,0) ..S (NODE,PIECE)="" "RTN","CASH2",100,0) ..Q "RTN","CASH2",101,0) .; Check for Duplicate fields and/or Labels "RTN","CASH2",102,0) .S DUP=0,LBLUP=$$UP^XLFSTR(LABEL) "RTN","CASH2",103,0) .I $D(FIELD(LBLUP)) D Q:DUP "RTN","CASH2",104,0) ..N DUPDATA,DUPFLD,DUPRCD,J "RTN","CASH2",105,0) ..S DUPFLD=FIELD(LBLUP) "RTN","CASH2",106,0) ..; Get Data record (File #15050.1132 - Node 0) from Master map (Map #1) "RTN","CASH2",107,0) ..S DUPDATA=$G(^CASH(15050.11,FILE,3,1,2,DUPFLD,0)) "RTN","CASH2",108,0) ..; Get Retrieval Code if it exists (Node 1) "RTN","CASH2",109,0) ..S DUPRCD=$G(^CASH(15050.11,FILE,3,1,2,DUPFLD,1)) "RTN","CASH2",110,0) ..; If all these values are the same, the Field is a complete Duplicate - Skip "RTN","CASH2",111,0) ..I NODE=$P(DUPDATA,"^",2),PIECE=$P(DUPDATA,"^",3),RCODE=DUPRCD S DUP=1 Q "RTN","CASH2",112,0) ..; Append # to LABEL to prevent duplicate names "RTN","CASH2",113,0) ..F J=0:1 I '$D(FIELD(LBLUP_J)) S LABEL=LABEL_J,LBLUP=LBLUP_J Q "RTN","CASH2",114,0) ..Q "RTN","CASH2",115,0) .; Check for potential clash with UID field "RTN","CASH2",116,0) .I MULT!(TYPE="POINTER"),LBLUP=$$UP^XLFSTR(NAME)!($D(FIELD(LBLUP_"ID"))) N J F J=0:1 I '$D(FIELD(LBLUP_J)),'$D(FIELD(LBLUP_J_"ID")) S LABEL=LABEL_J,LBLUP=LBLUP_J Q "RTN","CASH2",117,0) .; Set FIELD array values (also set "ID" for Multiples and Pointers) "RTN","CASH2",118,0) .S FIELD(LBLUP)=FIELD "RTN","CASH2",119,0) .I MULT!(TYPE="POINTER") S FIELD(LBLUP_"ID")=FIELD "RTN","CASH2",120,0) .; Get SQL and Data labels "RTN","CASH2",121,0) .D LABELS(LABEL,.SQLLBL,.DATALBL) "RTN","CASH2",122,0) .; "RTN","CASH2",123,0) .; Initialize INDEXED flag "RTN","CASH2",124,0) .S INDEXED=0 "RTN","CASH2",125,0) .; If FIELD is in a New type index, update INDEXED flag and add DATALBL to NIXF array "RTN","CASH2",126,0) .I $D(NIXF(FIELD)) S INDEXED=1,NIXF(FIELD)=DATALBL_$S(TYPE="POINTER":"^"_LABEL_"ID",1:"") "RTN","CASH2",127,0) .; Add any Traditional Indexes "RTN","CASH2",128,0) .I $D(^DD(FILE,FIELD,1)),'MULT D "RTN","CASH2",129,0) ..N DUPCHK,INX "RTN","CASH2",130,0) ..S INX=0 "RTN","CASH2",131,0) ..F S INX=$O(^DD(FILE,FIELD,1,INX)) Q:'+INX I $D(^DD(FILE,FIELD,1,INX,0)) D "RTN","CASH2",132,0) ...N ALTEXP,I,INXFN,INXNM,INXTP,MAPNM "RTN","CASH2",133,0) ...S ALTEXP=$S(TYPE="POINTER":"{"_LABEL_"ID}",1:"") "RTN","CASH2",134,0) ...S INXFN=$P($G(^DD(FILE,FIELD,1,INX,0)),"^",1) "RTN","CASH2",135,0) ...S INXNM=$P($G(^DD(FILE,FIELD,1,INX,0)),"^",2) "RTN","CASH2",136,0) ...Q:INXNM="" "RTN","CASH2",137,0) ...; Check that Index is Regular (don't map KWIC, MNEMONIC, etc...) "RTN","CASH2",138,0) ...S INXTP=$P(^DD(FILE,FIELD,1,INX,0),"^",3) "RTN","CASH2",139,0) ...Q:INXTP'="" "RTN","CASH2",140,0) ...; Check that Index isn't a duplicate "RTN","CASH2",141,0) ...I $D(DUPCHK(INXNM)) Q "RTN","CASH2",142,0) ...S DUPCHK(INXNM)="" "RTN","CASH2",143,0) ...; Increment Map count and get Map Name "RTN","CASH2",144,0) ...S MAP=MAP+1 "RTN","CASH2",145,0) ...S MAPNM=LABEL_INXNM_"Index" "RTN","CASH2",146,0) ...S INDEXED=1 "RTN","CASH2",147,0) ...D ADDMAP^CASHFN11(FILE,MAP,MAPNM,"I",GLOBAL) "RTN","CASH2",148,0) ...I INXFN'=FILE D Q "RTN","CASH2",149,0) ....N J "RTN","CASH2",150,0) ....F I=1:1 Q:'$D(SUBS(I)) Q:SUBS(I)=("#"_INXFN) D ADDSUBS^CASHFN11(FILE,MAP,I,SUBS(I),"","","","") "RTN","CASH2",151,0) ....S J=I "RTN","CASH2",152,0) ....D ADDSUBS^CASHFN11(FILE,MAP,J,""""_INXNM_"""","","","","") S J=J+1 "RTN","CASH2",153,0) ....D ADDSUBS^CASHFN11(FILE,MAP,J,"{"_DATALBL_"}","","",FIELD,ALTEXP) S J=J+1 "RTN","CASH2",154,0) ....F I=I:1 Q:'$D(SUBS(I)) I $E(SUBS(I))="#" D ADDSUBS^CASHFN11(FILE,MAP,J,SUBS(I),"","","","") S J=J+1 "RTN","CASH2",155,0) ....D ADDSUBS^CASHFN11(FILE,MAP,J,UID,"","","","") "RTN","CASH2",156,0) ....Q "RTN","CASH2",157,0) ...F I=1:1 Q:'$D(SUBS(I)) D ADDSUBS^CASHFN11(FILE,MAP,I,SUBS(I),"","","","") "RTN","CASH2",158,0) ...D ADDSUBS^CASHFN11(FILE,MAP,I,""""_INXNM_"""","","","","") "RTN","CASH2",159,0) ...D ADDSUBS^CASHFN11(FILE,MAP,I+1,"{"_DATALBL_"}","","",FIELD,ALTEXP) "RTN","CASH2",160,0) ...D ADDSUBS^CASHFN11(FILE,MAP,I+2,UID,"","","","") "RTN","CASH2",161,0) ...Q "RTN","CASH2",162,0) ..Q "RTN","CASH2",163,0) .; "RTN","CASH2",164,0) .; Now Add Field definitions "RTN","CASH2",165,0) .I MULT D MULT^CASH3(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,SPEC,FLAGS,NAME,TYPE,.SUBS,.MUL) Q "RTN","CASH2",166,0) .I TYPE="DATE/TIME" D DT^CASH3(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,PIECE,RCODE,INP) Q "RTN","CASH2",167,0) .I TYPE="NUMERIC" D NUM^CASH3(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,PIECE,RCODE,INP,DECD) Q "RTN","CASH2",168,0) .I TYPE="SET" D SET^CASH3(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,PIECE,RCODE,TRANS) Q "RTN","CASH2",169,0) .I TYPE="FREE TEXT" D FREE^CASH3(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,PIECE,RCODE,INP,TRANS,INDEXED) Q "RTN","CASH2",170,0) .I TYPE="WORD-PROCESSING" D WP^CASH3(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,RCODE,GLOBAL,INDEXED,.SUBS) Q "RTN","CASH2",171,0) .I TYPE="COMPUTED" D COMP^CASH3(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,SPEC,DDLBL) Q "RTN","CASH2",172,0) .I TYPE="POINTER" D PNTR^CASH3(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,PIECE,RCODE,SPEC,FLAGS) Q "RTN","CASH2",173,0) .I TYPE="VARIABLE-POINTER" D VP^CASH3(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,PIECE,RCODE) Q "RTN","CASH2",174,0) .I TYPE="MUMPS" D MUMPS^CASH3(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,RCODE,EXT2,INDEXED) Q "RTN","CASH2",175,0) Q "RTN","CASH2",176,0) ; "RTN","CASH2",177,0) LABELS(LABEL,SQLLBL,DATALBL) ; Get SQL and Data labels "RTN","CASH2",178,0) S SQLLBL="" "RTN","CASH2",179,0) ; Check for SQL Reserved words "RTN","CASH2",180,0) I $$SQLRW^CASHU(LABEL) S SQLLBL=LABEL_"_" "RTN","CASH2",181,0) ; Set Label used for Data Nodes. Use SQLLBL if defined! "RTN","CASH2",182,0) ; Note: Classes use %CacheSQLStorage, so SQL Field Names are used in SQL Storage Maps "RTN","CASH2",183,0) S DATALBL=$S(SQLLBL="":LABEL,1:SQLLBL) "RTN","CASH2",184,0) Q "RTN","CASH3") 0^5^B74243014 "RTN","CASH3",1,0) CASH3 ;;ALB/MGC - FileMan Class Map Utility - Internal Calls (Fields contd...) ; 11/15/04@3:00:00 "RTN","CASH3",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASH3",3,0) ; "RTN","CASH3",4,0) ; Multiples "RTN","CASH3",5,0) ; Discover Sub-file "RTN","CASH3",6,0) ; "RTN","CASH3",7,0) MULT(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,SPEC,FLAGS,NAME,TYPE,SUBS,MUL) ; "RTN","CASH3",8,0) N CFLAGS,CHILD,CLBL,I,SUCCESS "RTN","CASH3",9,0) S CHILD=+SPEC "RTN","CASH3",10,0) ; Check "UP" pointer of sub-file matches the parent "RTN","CASH3",11,0) ; Do not map if corrupt! "RTN","CASH3",12,0) I $G(^DD(CHILD,0,"UP"))'=FILE W:FLAGS["V" !,"Invalid UP pointer for File #",CHILD," - Field #",FIELD," in File #",FILE," not mapped!",! Q "RTN","CASH3",13,0) ; Discover Sub-file "RTN","CASH3",14,0) ; Remove C from CFLAGS to stop any embedded classes being compiled at this stage "RTN","CASH3",15,0) ; Sub-classes themselves are only compiled through their Super-class "RTN","CASH3",16,0) S CFLAGS=$TR(FLAGS,"C","") "RTN","CASH3",17,0) ; If R or r not passed in FLAGS don't expand Pointers in Sub-file "RTN","CASH3",18,0) I FLAGS'["R",FLAGS'["r" S CFLAGS=$TR(FLAGS,"P","") "RTN","CASH3",19,0) ; Recursive Call "RTN","CASH3",20,0) S SUCCESS=$$DISCVR^CASH0(CHILD,CFLAGS) "RTN","CASH3",21,0) Q:'SUCCESS "RTN","CASH3",22,0) ; Set MULT array to prevent more than one Relationship to the same file "RTN","CASH3",23,0) S MUL(CHILD)="" "RTN","CASH3",24,0) ; Word Processing options "RTN","CASH3",25,0) I TYPE="WORD-PROCESSING" D "RTN","CASH3",26,0) .; Create a single serialized field for the Word Processing multiple "RTN","CASH3",27,0) .D WPSERIAL^CASH3(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,.SUBS) "RTN","CASH3",28,0) .; Increment the FIELD # so the Relationship Property doesn't clash "RTN","CASH3",29,0) .S FIELD=FIELD+0.0000001 "RTN","CASH3",30,0) .Q "RTN","CASH3",31,0) S LABEL=LABEL_"ID" "RTN","CASH3",32,0) S CLBL=NAME_"ID" "RTN","CASH3",33,0) I $$FNMEXIST^CASHFN11(CHILD,CLBL) F I=0:1 S CLBL=NAME_I_"ID" Q:'$$FNMEXIST^CASHFN11(CHILD,CLBL) "RTN","CASH3",34,0) ; Create Relationship field for this file (FILE) "RTN","CASH3",35,0) S DESC="Relationship To Child File #: "_CHILD_" ("_DESC_")" "RTN","CASH3",36,0) D ADDFLD^CASHFN11(FILE,FIELD,LABEL,0,"C","",DESC,CLBL,1,REQ,"",0,"#"_CHILD,"M","") "RTN","CASH3",37,0) ; Create Inverse Relationship field in the Multiple (CHILD) "RTN","CASH3",38,0) ; Use 15050.111 as the Field # as this should be unique! This Property does not exist in FileMan! "RTN","CASH3",39,0) S DESC="Relationship To Parent File #: "_FILE "RTN","CASH3",40,0) D ADDFLD^CASHFN11(CHILD,15050.111,CLBL,0,"P","",DESC,LABEL,1,1,"",0,"#"_FILE,"C","") "RTN","CASH3",41,0) ; Create Sub File relationship "RTN","CASH3",42,0) D ADDSUBF^CASHFN11(FILE,CHILD) "RTN","CASH3",43,0) Q "RTN","CASH3",44,0) ; "RTN","CASH3",45,0) ; 1. Date/Time "RTN","CASH3",46,0) ; "RTN","CASH3",47,0) DT(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,PIECE,RCODE,INP) ; "RTN","CASH3",48,0) N CAT,DT,PTYPE "RTN","CASH3",49,0) ; Make Transient if Special .001 field "RTN","CASH3",50,0) S CAT=$S(FIELD=.001:"T",1:"D") "RTN","CASH3",51,0) S DT=$P($P(INP,"S %DT=",2)," D ^%DT",1) "RTN","CASH3",52,0) ; Extract Flags from quotes (and remove any extraneous code) "RTN","CASH3",53,0) S DT=$P(DT,"""",2) "RTN","CASH3",54,0) ; Remove "E" from DT (E has a different meaning in ^%DT and DT^DILF) "RTN","CASH3",55,0) S DT=$TR(DT,"E") "RTN","CASH3",56,0) S PTYPE="CASH.FileMan.StringDateTime" "RTN","CASH3",57,0) I DT["X" D "RTN","CASH3",58,0) .I DT["T"!(DT["R") S PTYPE="CASH.FileMan.DateTime" Q "RTN","CASH3",59,0) .S PTYPE="CASH.FileMan.Date" "RTN","CASH3",60,0) .Q "RTN","CASH3",61,0) ; Add Field "RTN","CASH3",62,0) D ADDFLD^CASHFN11(FILE,FIELD,LABEL,0,"","",DESC,"",0,REQ,"",0,PTYPE,CAT,SQLLBL) "RTN","CASH3",63,0) ; Add Parameters "RTN","CASH3",64,0) D ADDPARAM^CASHFN11(FILE,FIELD,1,"FILE",FILE) "RTN","CASH3",65,0) D ADDPARAM^CASHFN11(FILE,FIELD,2,"FIELD",FIELD) "RTN","CASH3",66,0) D ADDPARAM^CASHFN11(FILE,FIELD,3,"FLAGS",DT) "RTN","CASH3",67,0) D ADDPARAM^CASHFN11(FILE,FIELD,4,"TRANSFORM",0) "RTN","CASH3",68,0) ; Add to Master Map Data "RTN","CASH3",69,0) D ADDDATA^CASHFN11(FILE,1,FIELD,DATALBL,NODE,PIECE,0,RCODE) "RTN","CASH3",70,0) Q "RTN","CASH3",71,0) ; "RTN","CASH3",72,0) ; 2. Numeric "RTN","CASH3",73,0) ; "RTN","CASH3",74,0) NUM(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,PIECE,RCODE,INP,DECD) ; "RTN","CASH3",75,0) N I,MAX,MIN,PTYPE "RTN","CASH3",76,0) S PTYPE="CASH.FileMan.Numeric" "RTN","CASH3",77,0) ; Add Field "RTN","CASH3",78,0) D ADDFLD^CASHFN11(FILE,FIELD,LABEL,0,"","",DESC,"",0,REQ,"",0,PTYPE,"D",SQLLBL) "RTN","CASH3",79,0) ; Add Parameters "RTN","CASH3",80,0) S MAX=+$P($P(INP,"K:+X'=X!(X>",2),")",1) "RTN","CASH3",81,0) S MIN=+$P($P(INP,"!(X<",2),")",1) "RTN","CASH3",82,0) D ADDPARAM^CASHFN11(FILE,FIELD,1,"FILE",FILE) "RTN","CASH3",83,0) D ADDPARAM^CASHFN11(FILE,FIELD,2,"FIELD",FIELD) "RTN","CASH3",84,0) S I=3 "RTN","CASH3",85,0) I MAX'=0 D ADDPARAM^CASHFN11(FILE,FIELD,I,"MAXVAL",MAX) S I=I+1 "RTN","CASH3",86,0) I MIN'=0 D ADDPARAM^CASHFN11(FILE,FIELD,I,"MINVAL",MIN) S I=I+1 "RTN","CASH3",87,0) D ADDPARAM^CASHFN11(FILE,FIELD,I,"SCALE",+DECD) "RTN","CASH3",88,0) ; Add to Master Map Data "RTN","CASH3",89,0) D ADDDATA^CASHFN11(FILE,1,FIELD,DATALBL,NODE,PIECE,0,RCODE) "RTN","CASH3",90,0) Q "RTN","CASH3",91,0) ; "RTN","CASH3",92,0) ; 3. Set Of Codes "RTN","CASH3",93,0) ; "RTN","CASH3",94,0) SET(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,PIECE,RCODE,TRANS) ; "RTN","CASH3",95,0) N PTYPE "RTN","CASH3",96,0) S PTYPE="CASH.FileMan.SetOfCodes" "RTN","CASH3",97,0) ; Add Field "RTN","CASH3",98,0) D ADDFLD^CASHFN11(FILE,FIELD,LABEL,0,"","",DESC,"",0,REQ,"",0,PTYPE,"D",SQLLBL) "RTN","CASH3",99,0) ; Add Parameters "RTN","CASH3",100,0) D ADDPARAM^CASHFN11(FILE,FIELD,1,"FILE",FILE) "RTN","CASH3",101,0) D ADDPARAM^CASHFN11(FILE,FIELD,2,"FIELD",FIELD) "RTN","CASH3",102,0) D ADDPARAM^CASHFN11(FILE,FIELD,3,"TRANSFORM",TRANS) "RTN","CASH3",103,0) ; Add to Master Map Data "RTN","CASH3",104,0) D ADDDATA^CASHFN11(FILE,1,FIELD,DATALBL,NODE,PIECE,0,RCODE) "RTN","CASH3",105,0) Q "RTN","CASH3",106,0) ; "RTN","CASH3",107,0) ; 4. Free Text "RTN","CASH3",108,0) ; "RTN","CASH3",109,0) FREE(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,PIECE,RCODE,INP,TRANS,INDEXED) ; "RTN","CASH3",110,0) N I,MAX,MIN,PTYPE "RTN","CASH3",111,0) S PTYPE="CASH.FileMan.String" "RTN","CASH3",112,0) D ADDFLD^CASHFN11(FILE,FIELD,LABEL,0,"","",DESC,"",0,REQ,"",0,PTYPE,"D",SQLLBL) "RTN","CASH3",113,0) ; Add Parameters "RTN","CASH3",114,0) S MAX=+$P($P(INP,"K:$L(X)>",2),"!",1) "RTN","CASH3",115,0) S MIN=+$P($P(INP,"!($L(X)<",2),")",1) "RTN","CASH3",116,0) D ADDPARAM^CASHFN11(FILE,FIELD,1,"FILE",FILE) "RTN","CASH3",117,0) D ADDPARAM^CASHFN11(FILE,FIELD,2,"FIELD",FIELD) "RTN","CASH3",118,0) D ADDPARAM^CASHFN11(FILE,FIELD,3,"TRANSFORM",TRANS) "RTN","CASH3",119,0) S I=4 "RTN","CASH3",120,0) I MAX'=0 D ADDPARAM^CASHFN11(FILE,FIELD,I,"MAXLEN",MAX) S I=I+1 "RTN","CASH3",121,0) I MIN'=0 D ADDPARAM^CASHFN11(FILE,FIELD,I,"MINLEN",MIN) S I=I+1 "RTN","CASH3",122,0) I INDEXED D ADDPARAM^CASHFN11(FILE,FIELD,I,"COLLATION","EXACT") "RTN","CASH3",123,0) ; Add to Master Map Data "RTN","CASH3",124,0) D ADDDATA^CASHFN11(FILE,1,FIELD,DATALBL,NODE,PIECE,0,RCODE) "RTN","CASH3",125,0) Q "RTN","CASH3",126,0) ; "RTN","CASH3",127,0) ; 5. Word Processing "RTN","CASH3",128,0) ; Add Word Processing field "RTN","CASH3",129,0) ; "RTN","CASH3",130,0) WP(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,RCODE,GLOBAL,INDEXED,SUBS) ; "RTN","CASH3",131,0) N GLREF,I,PTYPE,SUBSNO "RTN","CASH3",132,0) ; If RCODE hasn't been calculated (for fields with GSL=0;E1,250) get it now. "RTN","CASH3",133,0) I RCODE="",NODE'="" D "RTN","CASH3",134,0) .S SUBSNO=$O(SUBS(""),-1)+1 "RTN","CASH3",135,0) .S GLREF="^"_GLOBAL_"({L1}" "RTN","CASH3",136,0) .; Add all the subscripts "RTN","CASH3",137,0) .F I=2:1:SUBSNO S GLREF=GLREF_",{L"_I_"}" "RTN","CASH3",138,0) .; Add the node "RTN","CASH3",139,0) .S GLREF=GLREF_","_NODE_")" "RTN","CASH3",140,0) .; Set the Retrieval Code string "RTN","CASH3",141,0) .S RCODE=" S {*}=$G("_GLREF_")" "RTN","CASH3",142,0) .Q "RTN","CASH3",143,0) S PTYPE="%Library.String" "RTN","CASH3",144,0) ; Add Field "RTN","CASH3",145,0) D ADDFLD^CASHFN11(FILE,FIELD,LABEL,0,"","",DESC,"",0,REQ,"",0,PTYPE,"D",SQLLBL) "RTN","CASH3",146,0) ; Add Parameters "RTN","CASH3",147,0) D ADDPARAM^CASHFN11(FILE,FIELD,1,"MAXLEN",255) "RTN","CASH3",148,0) D ADDPARAM^CASHFN11(FILE,FIELD,2,"MINLEN",1) "RTN","CASH3",149,0) I INDEXED D ADDPARAM^CASHFN11(FILE,FIELD,3,"COLLATION","EXACT") "RTN","CASH3",150,0) ; Add to Master Map Data "RTN","CASH3",151,0) D ADDDATA^CASHFN11(FILE,1,FIELD,DATALBL,"","",0,RCODE) "RTN","CASH3",152,0) Q "RTN","CASH3",153,0) ; "RTN","CASH3",154,0) ; Add Serialized Word Processing field "RTN","CASH3",155,0) ; "RTN","CASH3",156,0) WPSERIAL(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,SUBS) ; "RTN","CASH3",157,0) N I,ID,NO,PTYPE,RCODE "RTN","CASH3",158,0) S PTYPE="CASH.FileMan.String" "RTN","CASH3",159,0) ; Add Field "RTN","CASH3",160,0) D ADDFLD^CASHFN11(FILE,FIELD,LABEL,0,"","",DESC,"",0,REQ,"",0,PTYPE,"W",SQLLBL) "RTN","CASH3",161,0) ; Add Parameters "RTN","CASH3",162,0) D ADDPARAM^CASHFN11(FILE,FIELD,1,"MAXLEN",32767) "RTN","CASH3",163,0) ; Add to Master Map Data "RTN","CASH3",164,0) S NO=$O(SUBS(""),-1) "RTN","CASH3",165,0) S ID="{L"_(NO+1)_"}" "RTN","CASH3",166,0) F I=NO:-1:1 I $E(SUBS(I))="#" S ID="{L"_I_"}"_"_""||""_"_ID "RTN","CASH3",167,0) S RCODE=" S {*}=$$GETWP^CASHR("_FILE_","_FIELD_","_ID_")" "RTN","CASH3",168,0) D ADDDATA^CASHFN11(FILE,1,FIELD,DATALBL,"","",0,RCODE) "RTN","CASH3",169,0) Q "RTN","CASH3",170,0) ; "RTN","CASH3",171,0) ; 6. Computed Field "RTN","CASH3",172,0) ; "RTN","CASH3",173,0) COMP(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,SPEC,DDLBL) ; "RTN","CASH3",174,0) N CODE,COMP,DESCM,PTYPE,SQLCODE "RTN","CASH3",175,0) D ; Get Computed Field Type "RTN","CASH3",176,0) .; If Boolean, use %Library.Boolean with no parameters "RTN","CASH3",177,0) .I SPEC["B" S PTYPE="%Library.Boolean" Q "RTN","CASH3",178,0) .; Add default Parameters "RTN","CASH3",179,0) .D ADDPARAM^CASHFN11(FILE,FIELD,1,"FILE",FILE) "RTN","CASH3",180,0) .D ADDPARAM^CASHFN11(FILE,FIELD,2,"FIELD",FIELD) "RTN","CASH3",181,0) .D ADDPARAM^CASHFN11(FILE,FIELD,3,"TRANSFORM",0) ;Transform done automatically "RTN","CASH3",182,0) .; If Date/Time, use StringDateTime (as we can't divine the exact type) "RTN","CASH3",183,0) .I SPEC["D" S PTYPE="CASH.FileMan.StringDateTime" Q "RTN","CASH3",184,0) .; Add extra parameters for String "RTN","CASH3",185,0) .N MAX "RTN","CASH3",186,0) .S MAX=+$P(SPEC,"J",2) S:MAX=0 MAX=50 "RTN","CASH3",187,0) .D ADDPARAM^CASHFN11(FILE,FIELD,4,"MAXLEN",MAX) "RTN","CASH3",188,0) .D ADDPARAM^CASHFN11(FILE,FIELD,5,"MINLEN",1) "RTN","CASH3",189,0) .S PTYPE="CASH.FileMan.String" "RTN","CASH3",190,0) .Q "RTN","CASH3",191,0) S COMP=$$FLDATTR^CASHR(FILE,FIELD,"COMPUTE ALGORITHM") "RTN","CASH3",192,0) ; Add Field "RTN","CASH3",193,0) S SQLCODE=" S {*}=$$GETDATA^CASHR("_FILE_","_FIELD_",{ID})" "RTN","CASH3",194,0) I COMP["PSET^%ZISP" S SQLCODE=" S {*}=$$GETDTIO^CASHR("_FILE_","_FIELD_",{ID})" "RTN","CASH3",195,0) D ADDFLD^CASHFN11(FILE,FIELD,LABEL,1,"","",DESC,"",0,REQ,SQLCODE,1,PTYPE,"T",SQLLBL) "RTN","CASH3",196,0) ; Add Get() method "RTN","CASH3",197,0) S DESCM="Get() Method for Computed Field #: "_FIELD_" Name: "_DDLBL "RTN","CASH3",198,0) D ADDMTD^CASHFN11(FILE,FIELD,LABEL_"Get",0,"E",DESCM,"",0,"",PTYPE) "RTN","CASH3",199,0) S CODE(1,0)="$$GETDATA^CASHR("_FILE_","_FIELD_",..%Id())" "RTN","CASH3",200,0) I COMP["PSET^%ZISP" S CODE(1,0)="$$GETDTIO^CASHR("_FILE_","_FIELD_",..%Id())" "RTN","CASH3",201,0) D ADDCODE^CASHFN11(FILE,FIELD,.CODE) "RTN","CASH3",202,0) Q "RTN","CASH3",203,0) ; "RTN","CASH3",204,0) ; 7. Pointer "RTN","CASH3",205,0) ; Add Reference to Pointed to Class/Table "RTN","CASH3",206,0) ; "RTN","CASH3",207,0) PNTR(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,PIECE,RCODE,SPEC,FLAGS) ; "RTN","CASH3",208,0) N PFILE "RTN","CASH3",209,0) S PFILE=+$P(SPEC,"P",2) "RTN","CASH3",210,0) Q:'PFILE "RTN","CASH3",211,0) ; Add Field "RTN","CASH3",212,0) D ADDFLD^CASHFN11(FILE,FIELD,LABEL,0,"","",DESC,"",0,REQ,"",0,"CASH.FileMan.Pointer","P",SQLLBL) "RTN","CASH3",213,0) ; Add Parameters "RTN","CASH3",214,0) D ADDPARAM^CASHFN11(FILE,FIELD,1,"PFILE",PFILE) "RTN","CASH3",215,0) D ADDPARAM^CASHFN11(FILE,FIELD,2,"PFIELD",".01") "RTN","CASH3",216,0) ; Add to Master Map Data "RTN","CASH3",217,0) D ADDDATA^CASHFN11(FILE,1,FIELD,DATALBL,NODE,PIECE,1,RCODE) "RTN","CASH3",218,0) Q "RTN","CASH3",219,0) ; "RTN","CASH3",220,0) ; 8. Variable Pointer "RTN","CASH3",221,0) ; "RTN","CASH3",222,0) VP(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,NODE,PIECE,RCODE) ; "RTN","CASH3",223,0) N PTYPE "RTN","CASH3",224,0) S PTYPE="CASH.FileMan.VariablePointer" "RTN","CASH3",225,0) ; Add Field "RTN","CASH3",226,0) D ADDFLD^CASHFN11(FILE,FIELD,LABEL,0,"","",DESC,"",0,REQ,"",0,PTYPE,"D",SQLLBL) "RTN","CASH3",227,0) ; Add Parameters "RTN","CASH3",228,0) D ADDPARAM^CASHFN11(FILE,FIELD,1,"FILE",FILE) "RTN","CASH3",229,0) D ADDPARAM^CASHFN11(FILE,FIELD,2,"FIELD",FIELD) "RTN","CASH3",230,0) ; Add to Master Map Data "RTN","CASH3",231,0) D ADDDATA^CASHFN11(FILE,1,FIELD,DATALBL,NODE,PIECE,0,RCODE) "RTN","CASH3",232,0) Q "RTN","CASH3",233,0) ; "RTN","CASH3",234,0) ; "RTN","CASH3",235,0) ; 9. MUMPS "RTN","CASH3",236,0) ; "RTN","CASH3",237,0) MUMPS(FILE,FIELD,LABEL,DESC,REQ,SQLLBL,DATALBL,RCODE,EXT2,INDEXED) ; "RTN","CASH3",238,0) N PTYPE "RTN","CASH3",239,0) S PTYPE="%Library.String" "RTN","CASH3",240,0) ; Add Field "RTN","CASH3",241,0) D ADDFLD^CASHFN11(FILE,FIELD,LABEL,0,"","",DESC,"",0,REQ,"",0,PTYPE,"D",SQLLBL) "RTN","CASH3",242,0) ; Add Parameters "RTN","CASH3",243,0) D ADDPARAM^CASHFN11(FILE,FIELD,1,"MAXLEN",EXT2) "RTN","CASH3",244,0) D ADDPARAM^CASHFN11(FILE,FIELD,2,"MINLEN",1) "RTN","CASH3",245,0) I INDEXED D ADDPARAM^CASHFN11(FILE,FIELD,3,"COLLATION","EXACT") "RTN","CASH3",246,0) ; Add to Master Map Data "RTN","CASH3",247,0) D ADDDATA^CASHFN11(FILE,1,FIELD,DATALBL,"","",0,RCODE) "RTN","CASH3",248,0) Q "RTN","CASHC") 0^6^B62590378 "RTN","CASHC",1,0) CASHC ;ALB/MGC - Compiler for Cache version 5.0.x+ ; 10/20/04@3:00:00 "RTN","CASHC",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHC",3,0) ; "RTN","CASHC",4,0) Q ; Specific Entry Point must be used "RTN","CASHC",5,0) ; "RTN","CASHC",6,0) CREATE(FILE,FLAGS,PACKAGE,ID,OWNER,LIST,TMPLIST) ; Create and Compile (Cache 5+) "RTN","CASHC",7,0) ; "RTN","CASHC",8,0) ; IMPORTANT: Do Not call directly! "RTN","CASHC",9,0) ; This entry point should only be accessed by CREATE^CASH or ALL^CASHC "RTN","CASHC",10,0) ; "RTN","CASHC",11,0) ; See CREATE^CASH for documentation. "RTN","CASHC",12,0) ; "RTN","CASHC",13,0) N X S X="ERROR^CASHCU" S @^%ZOSF("TRAP") "RTN","CASHC",14,0) N CLNAME,ERROR,EXISTS,MAXM,MAXT,NAME,NODE0,OK,PLIST,ROWID,SQLNM,UIDNM "RTN","CASHC",15,0) N %ROWCOUNT,%objcn,%objlasterror "RTN","CASHC",16,0) ; "RTN","CASHC",17,0) ; Check File has been Discovered by CASH "RTN","CASHC",18,0) I $G(FILE)="" W:$G(FLAGS)["V" !,"File# must be passed in",! Q 0 "RTN","CASHC",19,0) I '$D(^CASH(15050.11,FILE)) W:$G(FLAGS)["V" !,"File#: ",FILE," has not been discovered (use START^CASH)",! Q 0 "RTN","CASHC",20,0) ; "RTN","CASHC",21,0) ; Quit if this file has already been Compiled for this session "RTN","CASHC",22,0) I $D(^TMP("CASHC",$J,FILE)) Q 1 "RTN","CASHC",23,0) S ^TMP("CASHC",$J,FILE)="" "RTN","CASHC",24,0) ; "RTN","CASHC",25,0) ; Initilize optional Parameters "RTN","CASHC",26,0) S FLAGS=$G(FLAGS) "RTN","CASHC",27,0) S PACKAGE=$G(PACKAGE) "RTN","CASHC",28,0) I PACKAGE="" S PACKAGE="User" ;Default to User package if none passed "RTN","CASHC",29,0) S ID=$G(ID) "RTN","CASHC",30,0) S OWNER=$G(OWNER) "RTN","CASHC",31,0) I $D(LIST),'($D(LIST)\10) K LIST "RTN","CASHC",32,0) I $D(TMPLIST),'($D(TMPLIST)\10) K TMPLIST "RTN","CASHC",33,0) ; "RTN","CASHC",34,0) ; Unpack Names from File #15050.11, using passed in FLAGS, PACKAGE and ID "RTN","CASHC",35,0) D GETNAMES^CASHCN(FILE,FLAGS,PACKAGE,ID,.NAME,.SQLNM,.UIDNM,.ROWID) "RTN","CASHC",36,0) S CLNAME=PACKAGE_"."_NAME "RTN","CASHC",37,0) ; "RTN","CASHC",38,0) ; Check if Class exists and Delete if necessary (FORCE=1) "RTN","CASHC",39,0) S EXISTS=##CLASS(%Dictionary.ClassDefinition).%ExistsId(CLNAME) "RTN","CASHC",40,0) I EXISTS,FLAGS'["F" W:FLAGS["V" !,CLNAME," already exists (use ""F"" to overwrite)",! Q 1 "RTN","CASHC",41,0) ; "RTN","CASHC",42,0) ; Attempt to Lock the class "RTN","CASHC",43,0) L +^oddDEF(CLNAME):1 "RTN","CASHC",44,0) I '$T W:FLAGS["V" !,CLNAME," is locked",! Q 0 "RTN","CASHC",45,0) ; "RTN","CASHC",46,0) ; Delete current version of class if it exists "RTN","CASHC",47,0) I EXISTS D CLDEL^CASHCU(CLNAME) "RTN","CASHC",48,0) ; "RTN","CASHC",49,0) ; Check required field mapped if LIST array is passed in! "RTN","CASHC",50,0) I $D(LIST) D "RTN","CASHC",51,0) .; The .01 field is always mapped "RTN","CASHC",52,0) .I '$D(LIST(FILE,.01)) S LIST(FILE,.01)="" "RTN","CASHC",53,0) .; Make sure Relationship field (#15050.111) is mapped for Multiple sub-files! "RTN","CASHC",54,0) .I '$$ISFILE^CASHU(FILE),'$D(LIST(FILE,15050.111)) S LIST(FILE,15050.111)="" "RTN","CASHC",55,0) .Q "RTN","CASHC",56,0) ; "RTN","CASHC",57,0) ; Large File Fixes (see TMPLIST^CASHC0 for more information) "RTN","CASHC",58,0) ; Create a TMPLIST array, that isn't passed to sub-files "RTN","CASHC",59,0) ; Initialize Maximum values "RTN","CASHC",60,0) D MAXVALS^CASHCU(FILE,FLAGS,.MAXT,.MAXM) "RTN","CASHC",61,0) ; Large Number of Properties fix (>250 by default) "RTN","CASHC",62,0) I '$D(LIST),'$D(TMPLIST),$$FLDCNT^CASHFN11(FILE)>MAXT D TMPLIST^CASHC0(FILE,FLAGS,MAXT,MAXM,.TMPLIST) "RTN","CASHC",63,0) ; Large number of Multiples fix (>75 by default) "RTN","CASHC",64,0) I '$D(LIST),'$D(TMPLIST),$P($G(^CASH(15050.11,FILE,4,0)),"^",4)>MAXM D "RTN","CASHC",65,0) .N FIELD,FLDCAT,SUBS "RTN","CASHC",66,0) .S (FIELD,SUBS)=0 "RTN","CASHC",67,0) .K ^TMP("CASHC",$J,"LIST",FILE) "RTN","CASHC",68,0) .F S FIELD=$O(^CASH(15050.11,FILE,1,FIELD)) Q:'+FIELD D "RTN","CASHC",69,0) ..S FLDCAT=$P($G(^CASH(15050.11,FILE,1,FIELD,3)),"^",1) "RTN","CASHC",70,0) ..; Count Multiples and add excess to ^TMP("CASHC",$J,"LIST") for continuation classes "RTN","CASHC",71,0) ..I FLDCAT="M" S SUBS=SUBS+1 I SUBS>MAXM S ^TMP("CASHC",$J,"LIST",FILE,(SUBS-1\MAXM),FIELD)="" Q "RTN","CASHC",72,0) ..; Try to ensure that WP Field ends up in the same Class as its Multiple "RTN","CASHC",73,0) ..I FLDCAT="W",SUBS' errors. Many sites have Low "Maximum Memory Per Process" settings! "RTN","CASHC",89,0) ; "RTN","CASHC",90,0) ; Create any Required Sub-Classes if FLAGS["M" "RTN","CASHC",91,0) I FLAGS["M" D I 'OK Q 0 "RTN","CASHC",92,0) .N CFLAGS,FIELD "RTN","CASHC",93,0) .S CFLAGS=FLAGS,OK=1 "RTN","CASHC",94,0) .; If R not passed, strip P from CFLAGS "RTN","CASHC",95,0) .I FLAGS'["R",FLAGS'["r" S CFLAGS=$TR(CFLAGS,"P","") "RTN","CASHC",96,0) .S FIELD="" "RTN","CASHC",97,0) .F S FIELD=$O(^CASH(15050.11,FILE,1,"C","M",FIELD)) Q:FIELD="" D Q:'OK "RTN","CASHC",98,0) ..; If LIST array passed in check if Field should be mapped "RTN","CASHC",99,0) ..; Also check for WP multiple which has 0.0000001 added "RTN","CASHC",100,0) ..I $D(LIST),'$D(LIST(FILE,FIELD)),'$D(LIST(FILE,FIELD-0.0000001)) Q "RTN","CASHC",101,0) ..; If TMPLIST array created check if Field should be mapped "RTN","CASHC",102,0) ..I $D(TMPLIST),'$D(TMPLIST(FIELD)) Q "RTN","CASHC",103,0) ..N PNODE0,SUBFILE,TYPE "RTN","CASHC",104,0) ..S PNODE0=^CASH(15050.11,FILE,1,FIELD,0) "RTN","CASHC",105,0) ..S TYPE=$P(PNODE0,"^",9) "RTN","CASHC",106,0) ..S SUBFILE=+$TR(TYPE,"#","") "RTN","CASHC",107,0) ..I $D(^TMP("CASHC",$J,SUBFILE)) Q "RTN","CASHC",108,0) ..S OK=$$CREATE(SUBFILE,CFLAGS,PACKAGE,ID,OWNER,.LIST) "RTN","CASHC",109,0) ..I OK,FLAGS["S" S ^TMP("CASHCW",$J,"SUB",FILE,SUBFILE)="" "RTN","CASHC",110,0) ..Q "RTN","CASHC",111,0) .Q "RTN","CASHC",112,0) ; "RTN","CASHC",113,0) ; Create Classes for Pointed to FILES "RTN","CASHC",114,0) I FLAGS["P" D I 'OK Q 0 "RTN","CASHC",115,0) .N PFLAGS,FIELD "RTN","CASHC",116,0) .S PFLAGS=FLAGS,OK=1 "RTN","CASHC",117,0) .; If R not passed, strip M & P from PFLAGS "RTN","CASHC",118,0) .I FLAGS'["R" S PFLAGS=$TR(PFLAGS,"MP","") "RTN","CASHC",119,0) .S FIELD="" "RTN","CASHC",120,0) .F S FIELD=$O(^CASH(15050.11,FILE,1,"C","P",FIELD)) Q:FIELD="" D Q:'OK "RTN","CASHC",121,0) ..; If LIST array passed in check if Field should be mapped "RTN","CASHC",122,0) ..I $D(LIST),'$D(LIST(FILE,FIELD)) Q "RTN","CASHC",123,0) ..; If TMPLIST array created check if Field should be mapped "RTN","CASHC",124,0) ..I $D(TMPLIST),'$D(TMPLIST(FIELD)) Q "RTN","CASHC",125,0) ..N PFILE "RTN","CASHC",126,0) ..S PFILE=$P($G(^CASH(15050.11,FILE,1,FIELD,1,1,0)),"^",2) "RTN","CASHC",127,0) ..I FILE=PFILE Q "RTN","CASHC",128,0) ..I $D(^TMP("CASHC",$J,PFILE)) Q "RTN","CASHC",129,0) ..N FIELD "RTN","CASHC",130,0) ..S OK=$$CREATE(PFILE,PFLAGS,PACKAGE,ID,OWNER,.LIST) "RTN","CASHC",131,0) ..Q "RTN","CASHC",132,0) .Q "RTN","CASHC",133,0) ; "RTN","CASHC",134,0) ; Loop through and add Properties "RTN","CASHC",135,0) I '$$PROPS^CASHC1(FILE,FLAGS,PACKAGE,CLNAME,UIDNM,ROWID,.LIST,.TMPLIST,.PLIST) Q 0 "RTN","CASHC",136,0) ; "RTN","CASHC",137,0) ; Loop through and add any Methods "RTN","CASHC",138,0) I '$$METHODS^CASHC2(FILE,FLAGS,PACKAGE,CLNAME,.LIST,.TMPLIST) Q 0 "RTN","CASHC",139,0) ; "RTN","CASHC",140,0) ; Add Triggers "RTN","CASHC",141,0) I '$$TRIGGERS^CASHC3(FILE,FLAGS,CLNAME,UIDNM,.LIST,.TMPLIST) Q 0 "RTN","CASHC",142,0) ; "RTN","CASHC",143,0) ; Create the Storage "RTN","CASHC",144,0) I '$$STORAGE^CASHC4(FILE,FLAGS,PACKAGE,ID,CLNAME,UIDNM,.LIST,.TMPLIST) Q 0 "RTN","CASHC",145,0) K TMPLIST "RTN","CASHC",146,0) ; "RTN","CASHC",147,0) ; Compile the Class "RTN","CASHC",148,0) ; (Sub-files must be compiled with their master class) "RTN","CASHC",149,0) I $$ISFILE^CASHU(FILE) D CLCOMP^CASHCU(CLNAME,OWNER,FLAGS) "RTN","CASHC",150,0) ; "RTN","CASHC",151,0) ; Create Continuation Classes if ^TMP("CASHC",$J,"LIST") is defined "RTN","CASHC",152,0) I $D(^TMP("CASHC",$J,"LIST",FILE)),'$D(^TMP("CASHC",$J,"NAME-EXT",FILE)) D I 'OK Q 0 "RTN","CASHC",153,0) .N I "RTN","CASHC",154,0) .F I=1:1:26 Q:'$D(^TMP("CASHC",$J,"LIST",FILE,I)) D Q:'OK "RTN","CASHC",155,0) ..N LIST,TMPLIST "RTN","CASHC",156,0) ..M TMPLIST=^TMP("CASHC",$J,"LIST",FILE,I) "RTN","CASHC",157,0) ..S ^TMP("CASHC",$J,"NAME-EXT",FILE)=$C(64+I) "RTN","CASHC",158,0) ..K ^TMP("CASHC",$J,FILE) ; Remove completed flag for this file "RTN","CASHC",159,0) ..S OK=$$CREATE(FILE,FLAGS,PACKAGE,ID,OWNER,.LIST,.TMPLIST) "RTN","CASHC",160,0) ..I OK,'$$ISFILE^CASHU(FILE) S OK=$$REL^CASHC1(FILE,FLAGS,PACKAGE,ID) "RTN","CASHC",161,0) ..Q "RTN","CASHC",162,0) .K ^TMP("CASHC",$J,"LIST",FILE) "RTN","CASHC",163,0) .K ^TMP("CASHC",$J,"NAME-EXT",FILE) "RTN","CASHC",164,0) .Q "RTN","CASHC",165,0) ; "RTN","CASHC",166,0) ; Create SOAP Web Service Class if "S" passed in "RTN","CASHC",167,0) I FLAGS["S",'$$WEBSVC^CASHC5(FILE,FLAGS,PACKAGE,OWNER,NAME,PLIST) Q 0 "RTN","CASHC",168,0) ; "RTN","CASHC",169,0) Q 1 "RTN","CASHC",170,0) ; "RTN","CASHC",171,0) ALL(FLAGS,PACKAGE,ID,OWNER) ;Compile all FileMan Files "RTN","CASHC",172,0) ; "RTN","CASHC",173,0) ; IMPORTANT: Do Not call directly! "RTN","CASHC",174,0) ; This entry point should only be accessed by ALL^CASH "RTN","CASHC",175,0) ; "RTN","CASHC",176,0) N CNT,CNTOK,DEL,FILE,I,TIME,TOT "RTN","CASHC",177,0) ; "RTN","CASHC",178,0) ; Lock ^XTMP("CASH") "RTN","CASHC",179,0) I '$$LOCK^CASHU($J,"ALL^CASH") Q "RTN","CASHC",180,0) ; Initialize Temporary Globals "RTN","CASHC",181,0) K ^TMP("CASH",$J),^TMP("CASHC",$J) "RTN","CASHC",182,0) S TIME(1)=$H "RTN","CASHC",183,0) ; "RTN","CASHC",184,0) ; Discover all files "RTN","CASHC",185,0) ; Ensure ^DIC(FILE,0) node is defined, and that FILE is not defined as a Sub-file "RTN","CASHC",186,0) S FILE=0,TOT=$P($G(^DIC(0)),"^",4) "RTN","CASHC",187,0) F I=1:1 S FILE=$O(^DIC(FILE)) Q:'+FILE D "RTN","CASHC",188,0) .I $$ISFILE^CASHU(FILE) D DISCVR^CASH0(FILE,"MPRV") "RTN","CASHC",189,0) .I TOT S ^XTMP("CASH","STATUS")="Discovery (1/4) - "_$FN(I/TOT*100,"",2)_"%" "RTN","CASHC",190,0) .Q "RTN","CASHC",191,0) S TIME(2)=$H "RTN","CASHC",192,0) ; "RTN","CASHC",193,0) ; Delete any Classes that already exist for this Package "RTN","CASHC",194,0) S FILE=0,DEL=0,TOT=$P($G(^CASH(15050.11,0)),"^",4) "RTN","CASHC",195,0) F I=1:1 S FILE=$O(^CASH(15050.11,FILE)) Q:'+FILE D "RTN","CASHC",196,0) .N CLNAME,EXISTS "RTN","CASHC",197,0) .S CLNAME=$$GETCLNM^CASHCN(FILE,FLAGS,PACKAGE) "RTN","CASHC",198,0) .S EXISTS=##CLASS(%Dictionary.ClassDefinition).%ExistsId(CLNAME) "RTN","CASHC",199,0) .I EXISTS D CLDEL^CASHCU(CLNAME) S DEL=DEL+1 "RTN","CASHC",200,0) .I TOT S ^XTMP("CASH","STATUS")="Clean Up (2/4) - "_$FN(I/TOT*100,"",2)_"%" "RTN","CASHC",201,0) .Q "RTN","CASHC",202,0) S TIME(3)=$H "RTN","CASHC",203,0) ; "RTN","CASHC",204,0) ; Compile Classes "RTN","CASHC",205,0) ; Note: This is done in numeric order, except where classes have dependancies "RTN","CASHC",206,0) S FILE=0 "RTN","CASHC",207,0) F I=1:1 S FILE=$O(^CASH(15050.11,FILE)) Q:'+FILE I $$ISFILE^CASHU(FILE) D "RTN","CASHC",208,0) .N CLNAME,COMP,DEL,OK,TIME "RTN","CASHC",209,0) .S CLNAME=$$GETCLNM^CASHCN(FILE,FLAGS,PACKAGE) "RTN","CASHC",210,0) .W !,FILE "RTN","CASHC",211,0) .S COMP=##CLASS(%Dictionary.CompiledClass).%ExistsId($LB(CLNAME)) "RTN","CASHC",212,0) .I COMP W !,"1^Already Compiled" Q "RTN","CASHC",213,0) .S OK=$$CREATE(FILE,"EFMPRV"_FLAGS,PACKAGE,ID,OWNER) "RTN","CASHC",214,0) .W !,$S(OK:OK,1:OK_"^Failed") "RTN","CASHC",215,0) .I TOT S ^XTMP("CASH","STATUS")="Compile (3/4) - "_$FN(I/TOT*100,"",2)_"%" "RTN","CASHC",216,0) .Q "RTN","CASHC",217,0) S TIME(4)=$H "RTN","CASHC",218,0) ; "RTN","CASHC",219,0) ; Count the number of successfully compiled Classes "RTN","CASHC",220,0) S (CNT,CNTOK,FILE)=0 "RTN","CASHC",221,0) F I=1:1 S FILE=$O(^CASH(15050.11,FILE)) Q:'+FILE D "RTN","CASHC",222,0) .N CLNAME "RTN","CASHC",223,0) .S CLNAME=$$GETCLNM^CASHCN(FILE,FLAGS,PACKAGE) "RTN","CASHC",224,0) .S CNT=CNT+1 "RTN","CASHC",225,0) .I $$CLASSOK^CASHCU(CLNAME) S CNTOK=CNTOK+1 "RTN","CASHC",226,0) .I TOT S ^XTMP("CASH","STATUS")="Checking (4/4) - "_$FN(I/TOT*100,"",2)_"%" "RTN","CASHC",227,0) .Q "RTN","CASHC",228,0) W !!,"Total Classes Discovered: ",CNT," in ",$$TPLEN^CASHCU(TIME(1),TIME(2)) "RTN","CASHC",229,0) W !,"Total Old Classes Removed: ",DEL," in ",$$TPLEN^CASHCU(TIME(2),TIME(3)) "RTN","CASHC",230,0) W !,"Total New Classes Compiled: ",CNTOK," (",$FN(CNTOK/CNT*100,"",2),"%)"," in ",$$TPLEN^CASHCU(TIME(3),TIME(4)) "RTN","CASHC",231,0) ; "RTN","CASHC",232,0) ; Delete Temporary Globals and unlock ^XTMP("CASH") "RTN","CASHC",233,0) K ^TMP("CASH",$J),^TMP("CASHC",$J) "RTN","CASHC",234,0) D UNLOCK^CASHU($J) "RTN","CASHC",235,0) ; "RTN","CASHC",236,0) Q "RTN","CASHC0") 0^7^B29275632 "RTN","CASHC0",1,0) CASHC0 ;ALB/MGC - Compiler for Cache version 5.0.x+ - Continued (Classes); 10/20/04@3:00:00 "RTN","CASHC0",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHC0",3,0) ; "RTN","CASHC0",4,0) ; IMPORTANT: These calls are for INTERNAL use only "RTN","CASHC0",5,0) ; "RTN","CASHC0",6,0) CLASS(FILE,FLAGS,OWNER,CLNAME,SQLNM,UIDNM,ROWID) ; Create the new Class "RTN","CASHC0",7,0) N CLASS,DESC,INDEX,OK,PARAM,SUPER,UID "RTN","CASHC0",8,0) S CLASS=##CLASS(%Dictionary.ClassDefinition).%New() "RTN","CASHC0",9,0) S CLASS.Name=CLNAME "RTN","CASHC0",10,0) S SUPER="%Persistent" "RTN","CASHC0",11,0) I FLAGS["X" S SUPER=SUPER_",%XML.Adaptor" I FLAGS["W" S SUPER=SUPER_",%CSP.Page" "RTN","CASHC0",12,0) S CLASS.Super=SUPER "RTN","CASHC0",13,0) S CLASS.ClassType="persistent" "RTN","CASHC0",14,0) S CLASS.ProcedureBlock=1 "RTN","CASHC0",15,0) I $D(^DD(FILE)) S DESC="DO NOT EDIT: FileMan File #: "_FILE_" Name: "_$P($G(^DIC(FILE,0)),"^",1)_" - mapped by CASH" "RTN","CASHC0",16,0) E S DESC="DO NOT EDIT: FileMan Utility Class: "_CLNAME_" - mapped by CASH" "RTN","CASHC0",17,0) S CLASS.Description=DESC "RTN","CASHC0",18,0) I ROWID'="" S CLASS.SqlRowIdName=ROWID "RTN","CASHC0",19,0) S CLASS.SqlRowIdPrivate=$S(ROWID'="":0,FLAGS["H":0,1:1) "RTN","CASHC0",20,0) I SQLNM'="" S CLASS.SqlTableName=SQLNM "RTN","CASHC0",21,0) I $G(OWNER)'="" S CLASS.Owner=OWNER "RTN","CASHC0",22,0) ; "RTN","CASHC0",23,0) ; Add the READONLY parameter "RTN","CASHC0",24,0) S PARAM=##CLASS(%Dictionary.ParameterDefinition).%New() "RTN","CASHC0",25,0) S PARAM.Name="READONLY" "RTN","CASHC0",26,0) S PARAM.Default=$S(FLAGS["U":0,1:1) "RTN","CASHC0",27,0) I $D(^DD(FILE)) S DESC="Updates should NOT be allowed through default SQL!" "RTN","CASHC0",28,0) E S DESC="Updates CANNOT be made via SQL!" "RTN","CASHC0",29,0) S PARAM.Description=DESC "RTN","CASHC0",30,0) D CLASS.Parameters.SetAt(PARAM,1) "RTN","CASHC0",31,0) D CLASS.Parameters.%UnSwizzleAt(1) "RTN","CASHC0",32,0) K PARAM "RTN","CASHC0",33,0) ; "RTN","CASHC0",34,0) ; Add the Unique Identity Property "RTN","CASHC0",35,0) S UID=##CLASS(%Dictionary.PropertyDefinition).%New() "RTN","CASHC0",36,0) S UID.Name=UIDNM "RTN","CASHC0",37,0) S UID.Type="%Library.Float" "RTN","CASHC0",38,0) S UID.Description="Unique Object Identity/Primary Key - equivalent to IEN" "RTN","CASHC0",39,0) S UID.Required=1 "RTN","CASHC0",40,0) S UID.SqlColumnNumber=2 "RTN","CASHC0",41,0) D CLASS.Properties.SetAt(UID,1) "RTN","CASHC0",42,0) D CLASS.Properties.%UnSwizzleAt(1) "RTN","CASHC0",43,0) K UID "RTN","CASHC0",44,0) ; "RTN","CASHC0",45,0) ; Add the Unique Identity Property Index "RTN","CASHC0",46,0) S INDEX=##CLASS(%Dictionary.IndexDefinition).%New() "RTN","CASHC0",47,0) S INDEX.Name=UIDNM_$S($L(UIDNM)>28:"",$L(UIDNM)>26:"Inx",1:"Index") "RTN","CASHC0",48,0) S INDEX.Description="Unique Identity Index on "_UIDNM "RTN","CASHC0",49,0) S INDEX.IdKey=1 "RTN","CASHC0",50,0) S INDEX.PrimaryKey=1 "RTN","CASHC0",51,0) S INDEX.Unique=1 "RTN","CASHC0",52,0) S INDEX.Properties=UIDNM "RTN","CASHC0",53,0) D CLASS.Indices.SetAt(INDEX,1) "RTN","CASHC0",54,0) D CLASS.Indices.%UnSwizzleAt(1) "RTN","CASHC0",55,0) K INDEX "RTN","CASHC0",56,0) ; "RTN","CASHC0",57,0) ; Save Class definition so far "RTN","CASHC0",58,0) S OK=CLASS.%Save() "RTN","CASHC0",59,0) I 'OK D ERRSAV^CASHCU("Class: "_CLASS.Name,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHC0",60,0) Q OK "RTN","CASHC0",61,0) ; "RTN","CASHC0",62,0) TMPLIST(FILE,FLAGS,MAXT,MAXM,TMPLIST) ; Create TMPLIST for very large files. "RTN","CASHC0",63,0) ; Cache SQL has a limitation that doesn't allow it to map very large files! "RTN","CASHC0",64,0) ; The Class Descriptor seems to be of type %String and therefor limited to 32K. "RTN","CASHC0",65,0) ; When too many Properties are added this figure is exceeded and the compile fails. "RTN","CASHC0",66,0) ; This section of code attempts to prioritise and limit the number of fields mapped "RTN","CASHC0",67,0) ; to 240. There's no guarantee that 240 will always work, and it's very likely that "RTN","CASHC0",68,0) ; more would be fine, but I had to pick a number! "RTN","CASHC0",69,0) ; Fields are prioritised as follows: Relationships, Indexed Fields, Pointers, "RTN","CASHC0",70,0) ; then all others. "RTN","CASHC0",71,0) ; You can use the LIST array to create your own subset classes. "RTN","CASHC0",72,0) N CAT,FIELD,FLD,MAP,SUBS,TOT "RTN","CASHC0",73,0) K TMPLIST "RTN","CASHC0",74,0) K ^TMP("CASHC",$J,"LIST",FILE) "RTN","CASHC0",75,0) ; Add the .01 field and special 15050.111 field (this is vital for sub-files) "RTN","CASHC0",76,0) S TMPLIST(.01)="",TMPLIST=1 "RTN","CASHC0",77,0) I '$$ISFILE^CASHU(FILE) S TMPLIST(15050.111)="",TMPLIST=TMPLIST+1 "RTN","CASHC0",78,0) ; Add Relationships (these are required if the M flag is passed) "RTN","CASHC0",79,0) S FIELD="",SUBS=0 "RTN","CASHC0",80,0) I FLAGS["M" F S FIELD=$O(^CASH(15050.11,FILE,1,"C","M",FIELD)) Q:FIELD="" D "RTN","CASHC0",81,0) .Q:$D(TMPLIST(FIELD)) "RTN","CASHC0",82,0) .; Keep a count of the number of Sub-files "RTN","CASHC0",83,0) .S SUBS=SUBS+1 "RTN","CASHC0",84,0) .; Check if this Multiple has a matching WP Field "RTN","CASHC0",85,0) .N FIELDW,WP "RTN","CASHC0",86,0) .S FIELDW=FIELD-.0000001,WP=0 "RTN","CASHC0",87,0) .I $D(^CASH(15050.11,FILE,1,"C","W",FIELDW)) S WP=1 "RTN","CASHC0",88,0) .; If 75 Sub-files have already been added, add subsequent fields to a continuation Class "RTN","CASHC0",89,0) .I SUBS>MAXM D Q "RTN","CASHC0",90,0) ..N CONT "RTN","CASHC0",91,0) ..S CONT=SUBS-1\MAXM "RTN","CASHC0",92,0) ..S ^TMP("CASHC",$J,"LIST",FILE,CONT,FIELD)="" "RTN","CASHC0",93,0) ..S TOT(CONT)=$G(TOT(CONT))+1 "RTN","CASHC0",94,0) ..; If matching WP Field exists, add it to the same continuation Class "RTN","CASHC0",95,0) ..I WP S ^TMP("CASHC",$J,"LIST",FILE,CONT,FIELDW)="",TOT(CONT)=$G(TOT(CONT))+1 "RTN","CASHC0",96,0) ..Q "RTN","CASHC0",97,0) .; Add Field to the TMPLIST array "RTN","CASHC0",98,0) .S TMPLIST(FIELD)="" "RTN","CASHC0",99,0) .S TMPLIST=$G(TMPLIST)+1 "RTN","CASHC0",100,0) .; If matching WP Field exists, add it to the TMPLIST array "RTN","CASHC0",101,0) .I WP S TMPLIST(FIELDW)="",TMPLIST=$G(TMPLIST)+1 "RTN","CASHC0",102,0) .Q "RTN","CASHC0",103,0) ; Add Indexed Fields (Check Map Data sub-field #15050.1131) "RTN","CASHC0",104,0) S FIELD="" "RTN","CASHC0",105,0) F S FIELD=$O(^CASH(15050.11,FILE,3,"F",FIELD)) Q:FIELD="" D "RTN","CASHC0",106,0) .Q:$D(TMPLIST(FIELD)) "RTN","CASHC0",107,0) .I TMPLIST'",$G(%objlasterror),.LIST) Q OK "RTN","CASHC1",26,0) K PROP(I) "RTN","CASHC1",27,0) ; "RTN","CASHC1",28,0) S FIELD=0,I=I+1 "RTN","CASHC1",29,0) I FLAGS["S" S PLIST="%ID,"_UIDNM "RTN","CASHC1",30,0) F S FIELD=$O(^CASH(15050.11,FILE,1,FIELD)) Q:'+FIELD D Q:'OK "RTN","CASHC1",31,0) .N ALTLBL,ALTSQL,CARD,CAT,COLL,DESC,INV,LABEL,PNODE0,PNODE3,REL,REQ,SQLCODE,SQLNM,TYPE "RTN","CASHC1",32,0) .; If LIST array passed in check if Field should be mapped "RTN","CASHC1",33,0) ..; Also check for WP multiple which has 0.0000001 added "RTN","CASHC1",34,0) .I $D(LIST),'$D(LIST(FILE,FIELD)),'$D(LIST(FILE,FIELD-0.0000001)) Q "RTN","CASHC1",35,0) .; If TMPLIST array created check if Field should be mapped "RTN","CASHC1",36,0) .I $D(TMPLIST),'$D(TMPLIST(FIELD)) Q "RTN","CASHC1",37,0) .; Get the 0 node "RTN","CASHC1",38,0) .S PNODE0=^CASH(15050.11,FILE,1,FIELD,0) "RTN","CASHC1",39,0) .S LABEL=$P(PNODE0,"^",1) "RTN","CASHC1",40,0) .S CARD=$P(PNODE0,"^",3) I CARD'="" S CARD=$$SOCOUT^CASHR0(15050.111,.03,CARD) "RTN","CASHC1",41,0) .S COLL=$P(PNODE0,"^",4) I COLL'="" S COLL=$$SOCOUT^CASHR0(15050.111,.04,COLL) "RTN","CASHC1",42,0) .S INV=$P(PNODE0,"^",5) "RTN","CASHC1",43,0) .S REL=$P(PNODE0,"^",6) "RTN","CASHC1",44,0) .S REQ=$P(PNODE0,"^",7) "RTN","CASHC1",45,0) .S TYPE=$P(PNODE0,"^",9) "RTN","CASHC1",46,0) .S DESC=$G(^CASH(15050.11,FILE,1,FIELD,1)) "RTN","CASHC1",47,0) .S SQLCODE=$G(^CASH(15050.11,FILE,1,FIELD,2)) "RTN","CASHC1",48,0) .S PNODE3=$G(^CASH(15050.11,FILE,1,FIELD,3)) "RTN","CASHC1",49,0) .S CAT=$P(PNODE3,"^",1) "RTN","CASHC1",50,0) .S SQLNM=$P(PNODE3,"^",2) "RTN","CASHC1",51,0) .; Alternate Labels for Pointers "RTN","CASHC1",52,0) .S ALTLBL=LABEL_"ID",ALTSQL="" "RTN","CASHC1",53,0) .; "RTN","CASHC1",54,0) .; If Multiple, quit if M not passed in FLAGS "RTN","CASHC1",55,0) .I CAT="M",FLAGS'["M" Q "RTN","CASHC1",56,0) .; If Pointer, quit if P or E not passed in FLAGS, otherwise Get alternate labels "RTN","CASHC1",57,0) .I CAT="P",FLAGS'["P"&(FLAGS'["E") Q "RTN","CASHC1",58,0) .; "RTN","CASHC1",59,0) .; If SqlRowIdName has been overriden (Sub-Files), "ID" must be changed to ROWID "RTN","CASHC1",60,0) .I SQLCODE["{ID}",ROWID'="" S SQLCODE=$P(SQLCODE,"{ID}",1)_"{"_ROWID_"}"_$P(SQLCODE,"{ID}",2) "RTN","CASHC1",61,0) .; If Loose Validation ("L" flag), relax the Required and Date constraints "RTN","CASHC1",62,0) .I FLAGS["L" S REQ=0 I TYPE["CASH.FileMan.Date" S TYPE="CASH.FileMan.StringDateTime" "RTN","CASHC1",63,0) .; Check if Relationship and change names if FLAGS["N" "RTN","CASHC1",64,0) .I REL,FLAGS["N" D "RTN","CASHC1",65,0) ..N UIDNM,ROWID "RTN","CASHC1",66,0) ..I CARD="children" D GETNAMES^CASHCN(FILE,"N","","","","",.UIDNM,.ROWID) S INV=$S(ROWID'="":ROWID,1:UIDNM) Q "RTN","CASHC1",67,0) ..I CARD="parent" D GETNAMES^CASHCN($E(TYPE,2,255),"N","","","","",.UIDNM,.ROWID) S LABEL=$S(ROWID'="":ROWID,1:UIDNM) Q "RTN","CASHC1",68,0) ..Q "RTN","CASHC1",69,0) .; "RTN","CASHC1",70,0) .; HDR Compatibility - If FLAGS["H" change to HDR Datatypes (if installed) "RTN","CASHC1",71,0) .I FLAGS["H" D "RTN","CASHC1",72,0) ..I TYPE="CASH.FileMan.SetOfCodes",$D(^oddDEF("CASH.HDR.SetOfCodes")) S TYPE="CASH.HDR.SetOfCodes" Q "RTN","CASHC1",73,0) ..I TYPE="CASH.FileMan.StringDateTime"!(TYPE["CASH.FileMan.Date"),$D(^oddDEF("CASH.HDR.DateTime")) S TYPE="CASH.HDR.DateTime" Q "RTN","CASHC1",74,0) ..Q "RTN","CASHC1",75,0) .; "RTN","CASHC1",76,0) .; Check if TYPE points to a file #, if so get Class Name "RTN","CASHC1",77,0) .I TYPE?1"#".N.(1"."1.N) S TYPE=$$GETCLNM^CASHCN(TYPE,FLAGS,PACKAGE) "RTN","CASHC1",78,0) .; "RTN","CASHC1",79,0) .; If Pointer, create Reference if P passed in FLAGS, then quit if E not passed "RTN","CASHC1",80,0) .I CAT="P" D:FLAGS["P" Q:FLAGS'["E" Q:'OK "RTN","CASHC1",81,0) ..; Pointer Field "RTN","CASHC1",82,0) ..N PFILE,TYPE "RTN","CASHC1",83,0) ..S PFILE=$P($G(^CASH(15050.11,FILE,1,FIELD,1,1,0)),"^",2) "RTN","CASHC1",84,0) ..S TYPE=$$GETCLNM^CASHCN(PFILE,FLAGS,PACKAGE) "RTN","CASHC1",85,0) ..; Create new Property "RTN","CASHC1",86,0) ..S PROP(I)=##CLASS(%Dictionary.PropertyDefinition).%New() "RTN","CASHC1",87,0) ..S PROP(I).Name=ALTLBL "RTN","CASHC1",88,0) ..S PROP(I).Calculated=0 "RTN","CASHC1",89,0) ..S PROP(I).Cardinality="" "RTN","CASHC1",90,0) ..S PROP(I).Collection="" "RTN","CASHC1",91,0) ..S PROP(I).Description=DESC_$C(13,10)_"Pointer to File #: "_PFILE "RTN","CASHC1",92,0) ..S PROP(I).Inverse="" "RTN","CASHC1",93,0) ..S PROP(I).Relationship=0 "RTN","CASHC1",94,0) ..S PROP(I).Required=REQ "RTN","CASHC1",95,0) ..S PROP(I).SqlColumnNumber=I+1 "RTN","CASHC1",96,0) ..S PROP(I).SqlComputeCode="" "RTN","CASHC1",97,0) ..S PROP(I).SqlComputed=0 "RTN","CASHC1",98,0) ..S PROP(I).Type=TYPE "RTN","CASHC1",99,0) ..; Set SQL Field Name if appropriate "RTN","CASHC1",100,0) ..I ALTSQL'="" S PROP(I).SqlFieldName=ALTSQL "RTN","CASHC1",101,0) ..D CLASS.Properties.SetAt(PROP(I),I) "RTN","CASHC1",102,0) ..; Save Class definition so far "RTN","CASHC1",103,0) ..S OK=CLASS.%Save() "RTN","CASHC1",104,0) ..D CLASS.Properties.%UnSwizzleAt(I) "RTN","CASHC1",105,0) ..I 'OK D ERRSAV^CASHCU("Property: "_I_" - "_PROP(I).Name,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHC1",106,0) ..I FLAGS["S" S PLIST=PLIST_","_LBL "RTN","CASHC1",107,0) ..K PROP(I) "RTN","CASHC1",108,0) ..S I=I+1 "RTN","CASHC1",109,0) ..Q "RTN","CASHC1",110,0) .; "RTN","CASHC1",111,0) .; Get Full Description from ^DD. There's no need to store this in #15050.11. "RTN","CASHC1",112,0) .I FLAGS["D",$D(^DD(FILE,FIELD,21)) D "RTN","CASHC1",113,0) ..F J=1:1 Q:'$D(^DD(FILE,FIELD,21,J)) S DESC=DESC_$C(13,10)_$G(^DD(FILE,FIELD,21,J,0)) "RTN","CASHC1",114,0) ..Q "RTN","CASHC1",115,0) .; Create new Property "RTN","CASHC1",116,0) .S PROP(I)=##CLASS(%Dictionary.PropertyDefinition).%New() "RTN","CASHC1",117,0) .S PROP(I).Name=LABEL "RTN","CASHC1",118,0) .S PROP(I).Calculated=$P(PNODE0,"^",2) "RTN","CASHC1",119,0) .S PROP(I).Cardinality=CARD "RTN","CASHC1",120,0) .S PROP(I).Collection=COLL "RTN","CASHC1",121,0) .S PROP(I).Description=DESC "RTN","CASHC1",122,0) .S PROP(I).Inverse=INV "RTN","CASHC1",123,0) .S PROP(I).Relationship=REL "RTN","CASHC1",124,0) .S PROP(I).Required=REQ "RTN","CASHC1",125,0) .S PROP(I).SqlComputed=$P(PNODE0,"^",8) "RTN","CASHC1",126,0) .S PROP(I).SqlComputeCode=SQLCODE "RTN","CASHC1",127,0) .S PROP(I).Type=TYPE "RTN","CASHC1",128,0) .; Add SQL Column Number (if Field is not a Relationship) "RTN","CASHC1",129,0) .I 'REL S PROP(I).SqlColumnNumber=I+1 "RTN","CASHC1",130,0) .; Set SQL Field Name if appropriate "RTN","CASHC1",131,0) .I SQLNM'="" S PROP(I).SqlFieldName=SQLNM "RTN","CASHC1",132,0) .; Loop through and add Parameters "RTN","CASHC1",133,0) .F J=1:1 Q:'$D(^CASH(15050.11,FILE,1,FIELD,1,J)) D "RTN","CASHC1",134,0) ..N PARAM,PARNODE0,VALUE "RTN","CASHC1",135,0) ..S PARNODE0=^CASH(15050.11,FILE,1,FIELD,1,J,0) "RTN","CASHC1",136,0) ..S PARAM=$P(PARNODE0,"^",1) "RTN","CASHC1",137,0) ..S VALUE=$P(PARNODE0,"^",2) "RTN","CASHC1",138,0) ..Q:PARAM="" "RTN","CASHC1",139,0) ..S OK=PROP(I).Parameters.SetAt(VALUE,PARAM) "RTN","CASHC1",140,0) ..Q "RTN","CASHC1",141,0) .; If FLAGS["O" set ODBCEXTENDED=1 for SetOfCode fields "RTN","CASHC1",142,0) .I FLAGS["O",TYPE="CASH.FileMan.SetOfCodes" S OK=PROP(I).Parameters.SetAt(1,"EXTENDEDODBC") "RTN","CASHC1",143,0) .D CLASS.Properties.SetAt(PROP(I),I) "RTN","CASHC1",144,0) .; Save Class definition so far "RTN","CASHC1",145,0) .S OK=CLASS.%Save() "RTN","CASHC1",146,0) .D CLASS.Properties.%UnSwizzleAt(I) "RTN","CASHC1",147,0) .I 'OK D ERRSAV^CASHCU("Property: "_I_" - "_PROP(I).Name,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHC1",148,0) .I 'REL,FLAGS["S" S PLIST=PLIST_","_$S(SQLNM'="":SQLNM,1:LABEL) "RTN","CASHC1",149,0) .K PROP(I) "RTN","CASHC1",150,0) .S I=I+1 "RTN","CASHC1",151,0) .Q "RTN","CASHC1",152,0) Q OK "RTN","CASHC1",153,0) ; "RTN","CASHC1",154,0) REL(FILE,FLAGS,PACKAGE,ID) ; Add the Parent-Child Relationship for a continuation Sub-class "RTN","CASHC1",155,0) N CLASS,CLNAME,DESC,EXT,INV,LABEL,NAME,NO,PARENT,PNODE0,PROP,ROWID,SQLNM,TYPE,UIDNM "RTN","CASHC1",156,0) ; "RTN","CASHC1",157,0) ; Get the Class Name "RTN","CASHC1",158,0) S CLNAME=$$GETCLNM^CASHCN(FILE,FLAGS,PACKAGE) "RTN","CASHC1",159,0) I '$D(^oddDEF(CLNAME)) Q 0 "RTN","CASHC1",160,0) ; Get Extension Character "RTN","CASHC1",161,0) S EXT=$G(^TMP("CASHC",$J,"NAME-EXT",FILE)) "RTN","CASHC1",162,0) ; Unpack the data for Field #15050.111 "RTN","CASHC1",163,0) S PNODE0=$G(^CASH(15050.11,FILE,1,15050.111,0)) "RTN","CASHC1",164,0) I PNODE0="" Q 0 "RTN","CASHC1",165,0) S LABEL=$P(PNODE0,"^",1) "RTN","CASHC1",166,0) S INV=$P(PNODE0,"^",5) "RTN","CASHC1",167,0) S INV=$E(INV,1,$L(INV)-2)_EXT_"ID" "RTN","CASHC1",168,0) S TYPE=$P(PNODE0,"^",9),PARENT=$E(TYPE,2,255) "RTN","CASHC1",169,0) S TYPE=$$GETCLNM^CASHCN(TYPE,FLAGS,PACKAGE) "RTN","CASHC1",170,0) I TYPE="" Q 0 "RTN","CASHC1",171,0) I '$D(^oddDEF(TYPE)) Q 0 "RTN","CASHC1",172,0) S DESC=$G(^CASH(15050.11,FILE,1,15050.111,1)) "RTN","CASHC1",173,0) ; Change names if FLAGS["N" "RTN","CASHC1",174,0) I FLAGS["N" D "RTN","CASHC1",175,0) .N UIDNM,ROWID "RTN","CASHC1",176,0) .D GETNAMES^CASHCN(PARENT,"N","","","","",.UIDNM,.ROWID) "RTN","CASHC1",177,0) .S LABEL=$S(ROWID'="":ROWID,1:UIDNM) "RTN","CASHC1",178,0) .Q "RTN","CASHC1",179,0) ; "RTN","CASHC1",180,0) ; Restore CLASS "RTN","CASHC1",181,0) S CLASS=##CLASS(%Dictionary.ClassDefinition).%OpenId(CLNAME) "RTN","CASHC1",182,0) S NO=CLASS.Properties.Count() "RTN","CASHC1",183,0) S NO=NO+1 "RTN","CASHC1",184,0) ; "RTN","CASHC1",185,0) ; Create the Parent Relationship Property "RTN","CASHC1",186,0) S PROP=##CLASS(%Dictionary.PropertyDefinition).%New() "RTN","CASHC1",187,0) S PROP.Name=LABEL "RTN","CASHC1",188,0) S PROP.Calculated=0 "RTN","CASHC1",189,0) S PROP.Cardinality=$$SOCOUT^CASHR0(15050.111,.03,"P") "RTN","CASHC1",190,0) S PROP.Collection="" "RTN","CASHC1",191,0) S PROP.Description=DESC "RTN","CASHC1",192,0) S PROP.Inverse=INV "RTN","CASHC1",193,0) S PROP.Relationship=1 "RTN","CASHC1",194,0) S PROP.Required=0 "RTN","CASHC1",195,0) S PROP.SqlComputed=0 "RTN","CASHC1",196,0) S PROP.SqlComputeCode="" "RTN","CASHC1",197,0) S PROP.Type=TYPE "RTN","CASHC1",198,0) D CLASS.Properties.SetAt(PROP,NO) "RTN","CASHC1",199,0) ; Save Class definition so far "RTN","CASHC1",200,0) S OK=CLASS.%Save() "RTN","CASHC1",201,0) D CLASS.Properties.%UnSwizzleAt(NO) "RTN","CASHC1",202,0) I 'OK D ERRSAV^CASHCU("Property: "_NO_" - "_PROP.Name,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHC1",203,0) K PROP "RTN","CASHC1",204,0) K CLASS "RTN","CASHC1",205,0) ; "RTN","CASHC1",206,0) ; Restore Parent Class "RTN","CASHC1",207,0) S CLASS=##CLASS(%Dictionary.ClassDefinition).%OpenId(TYPE) "RTN","CASHC1",208,0) S NO=CLASS.Properties.Count() "RTN","CASHC1",209,0) S NO=NO+1000 "RTN","CASHC1",210,0) ; "RTN","CASHC1",211,0) ; Create the Child Relationship Property "RTN","CASHC1",212,0) S PROP=##CLASS(%Dictionary.PropertyDefinition).%New() "RTN","CASHC1",213,0) S PROP.Name=INV "RTN","CASHC1",214,0) S PROP.Calculated=0 "RTN","CASHC1",215,0) S PROP.Cardinality=$$SOCOUT^CASHR0(15050.111,.03,"C") "RTN","CASHC1",216,0) S PROP.Collection="" "RTN","CASHC1",217,0) S PROP.Description="Relationship To Child File #: "_FILE_" (continuation "_EXT_")" "RTN","CASHC1",218,0) S PROP.Inverse=LABEL "RTN","CASHC1",219,0) S PROP.Relationship=1 "RTN","CASHC1",220,0) S PROP.Required=0 "RTN","CASHC1",221,0) S PROP.SqlComputed=0 "RTN","CASHC1",222,0) S PROP.SqlComputeCode="" "RTN","CASHC1",223,0) S PROP.Type=CLNAME "RTN","CASHC1",224,0) D CLASS.Properties.SetAt(PROP,NO) "RTN","CASHC1",225,0) ; Save Class definition so far "RTN","CASHC1",226,0) S OK=CLASS.%Save() "RTN","CASHC1",227,0) D CLASS.Properties.%UnSwizzleAt(NO) "RTN","CASHC1",228,0) I 'OK D ERRSAV^CASHCU("Property: "_NO_" - "_PROP.Name,$G(PARENT),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHC1",229,0) K PROP "RTN","CASHC1",230,0) K CLASS "RTN","CASHC1",231,0) ; "RTN","CASHC1",232,0) Q 1 "RTN","CASHC2") 0^9^B60203658 "RTN","CASHC2",1,0) CASHC2 ;ALB/MGC - Compiler for Cache version 5.0.x+ - Continued (Methods); 10/20/04@3:00:00 "RTN","CASHC2",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHC2",3,0) ; "RTN","CASHC2",4,0) ; IMPORTANT: These calls are for INTERNAL use only "RTN","CASHC2",5,0) ; "RTN","CASHC2",6,0) METHODS(FILE,FLAGS,PACKAGE,CLNAME,LIST,TMPLIST) ; Loop through and add any Methods "RTN","CASHC2",7,0) N CLASS,I,J,LASTMTD,METH,MTHD,OK "RTN","CASHC2",8,0) ; "RTN","CASHC2",9,0) ; Restore CLASS "RTN","CASHC2",10,0) S CLASS=##CLASS(%Dictionary.ClassDefinition).%OpenId(CLNAME) "RTN","CASHC2",11,0) S OK=1 "RTN","CASHC2",12,0) ; "RTN","CASHC2",13,0) S MTHD=0 "RTN","CASHC2",14,0) F I=1:1 S MTHD=$O(^CASH(15050.11,FILE,2,MTHD)) Q:'+MTHD D Q:'OK "RTN","CASHC2",15,0) .; The Get() methods are keyed by their associated Field # "RTN","CASHC2",16,0) .; If LIST array passed in check if the Field's Get() should be mapped "RTN","CASHC2",17,0) .I $D(LIST),'$D(LIST(FILE,MTHD)) Q "RTN","CASHC2",18,0) .; If TMPLIST array created check if the Field's Get() should be mapped "RTN","CASHC2",19,0) .I $D(TMPLIST),'$D(TMPLIST(MTHD)) Q "RTN","CASHC2",20,0) .N MNODE0,MODE,MTHNM "RTN","CASHC2",21,0) .S MNODE0=^CASH(15050.11,FILE,2,MTHD,0) "RTN","CASHC2",22,0) .S MTHNM=$P(MNODE0,"^",1) "RTN","CASHC2",23,0) .S MODE=$P(MNODE0,"^",3) I MODE'="" S MODE=$$SOCOUT^CASHR0(15050.112,.03,MODE) "RTN","CASHC2",24,0) .; Create new Method "RTN","CASHC2",25,0) .S METH(I)=##CLASS(%Dictionary.MethodDefinition).%New() "RTN","CASHC2",26,0) .S METH(I).Name=MTHNM "RTN","CASHC2",27,0) .S METH(I).ClassMethod=$P(MNODE0,"^",2) "RTN","CASHC2",28,0) .S METH(I).CodeMode=MODE "RTN","CASHC2",29,0) .S METH(I).Description=$P($G(^CASH(15050.11,FILE,2,MTHD,1)),"^",1) "RTN","CASHC2",30,0) .S METH(I).FormalSpec=$P($G(^CASH(15050.11,FILE,2,MTHD,2)),"^",1) "RTN","CASHC2",31,0) .S METH(I).Private=$P(MNODE0,"^",4) "RTN","CASHC2",32,0) .S METH(I).PublicList=$P($G(^CASH(15050.11,FILE,2,MTHD,3)),"^",1) "RTN","CASHC2",33,0) .S METH(I).ReturnType=$P(MNODE0,"^",5) "RTN","CASHC2",34,0) .; Loop through and add Code Lines (Implementation) "RTN","CASHC2",35,0) .F J=1:1 Q:'$D(^CASH(15050.11,FILE,2,MTHD,"CODE",J)) D "RTN","CASHC2",36,0) ..N LINE "RTN","CASHC2",37,0) ..S LINE=$G(^CASH(15050.11,FILE,2,MTHD,"CODE",J,0)) "RTN","CASHC2",38,0) ..; If CodeMode is not "expression", make sure lines have leading spaces "RTN","CASHC2",39,0) ..I MODE'="expression",$E(LINE)'=" " S LINE=" "_LINE "RTN","CASHC2",40,0) ..S OK=METH(I).Implementation.WriteLine(LINE) "RTN","CASHC2",41,0) ..Q "RTN","CASHC2",42,0) .D CLASS.Methods.SetAt(METH(I),I) "RTN","CASHC2",43,0) .; Save Class definition so far "RTN","CASHC2",44,0) .S OK=CLASS.%Save() "RTN","CASHC2",45,0) .; Rewind Implementation for subsequent saves (Use J to stop V4.1 compile errors) "RTN","CASHC2",46,0) .S J=METH(I).Implementation.Rewind() "RTN","CASHC2",47,0) .D CLASS.Methods.%UnSwizzleAt(I) "RTN","CASHC2",48,0) .I 'OK D ERRSAV^CASHCU("Method: "_I_" - "_METH(I).Name,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHC2",49,0) .K METH(I) "RTN","CASHC2",50,0) .Q "RTN","CASHC2",51,0) ; "RTN","CASHC2",52,0) XML ; Add XMLDump() method if FLAGS["X" "RTN","CASHC2",53,0) I FLAGS["X" D "RTN","CASHC2",54,0) .N METHX,QRY "RTN","CASHC2",55,0) .; ExtentAlt Query "RTN","CASHC2",56,0) .; "RTN","CASHC2",57,0) .; NOTE: This is a workaround, as there appears to be a bug with Extent, or in fact "RTN","CASHC2",58,0) .; any SELECT %ID FROM Table query! They use the first index when really they should "RTN","CASHC2",59,0) .; just scan the Master map. Often the first index doesn't contain all the rows! "RTN","CASHC2",60,0) .; ExtentAlt uses SELECT %ID FROM Table WHERE %ID>0 to force it to use the Master Map. "RTN","CASHC2",61,0) .; "RTN","CASHC2",62,0) .; Add the ExtentAlt Query "RTN","CASHC2",63,0) .S QRY=##CLASS(%Dictionary.QueryDefinition).%New() "RTN","CASHC2",64,0) .S QRY.Name="ExtentAlt" "RTN","CASHC2",65,0) .S QRY.SqlQuery="SELECT %ID FROM "_$$GETSQLNM^CASHCN(FILE,FLAGS,PACKAGE)_$C(13,10)_" WHERE %ID>0" "RTN","CASHC2",66,0) .S QRY.Type="%SQLQuery" "RTN","CASHC2",67,0) .D QRY.Parameters.SetAt(1,"CONTAINID") "RTN","CASHC2",68,0) .D CLASS.Queries.SetAt(QRY,1) "RTN","CASHC2",69,0) .; Save Class definition so far "RTN","CASHC2",70,0) .S OK=CLASS.%Save() "RTN","CASHC2",71,0) .D CLASS.Queries.%UnSwizzleAt(1) "RTN","CASHC2",72,0) .I 'OK D ERRSAV^CASHCU("Query: ExtentAlt",$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) Q "RTN","CASHC2",73,0) .; "RTN","CASHC2",74,0) .; Create New Method "RTN","CASHC2",75,0) .S METHX=##CLASS(%Dictionary.MethodDefinition).%New() "RTN","CASHC2",76,0) .S METHX.Name="XMLDump" "RTN","CASHC2",77,0) .S METHX.ClassMethod=1 "RTN","CASHC2",78,0) .S METHX.CodeMode="code" "RTN","CASHC2",79,0) .S METHX.Description="Method to Export the entire table to XML"_$C(13,10)_"NOTE: Internal values are returned!" "RTN","CASHC2",80,0) .S METHX.FormalSpec="MAXROWS:%Library.Integer=1000" "RTN","CASHC2",81,0) .S METHX.Private=0 "RTN","CASHC2",82,0) .S METHX.PublicList="" "RTN","CASHC2",83,0) .S METHX.ReturnType="" "RTN","CASHC2",84,0) .S METHX.SqlProc=1 "RTN","CASHC2",85,0) .; Add Code Lines (Implementation) "RTN","CASHC2",86,0) .D METHX.Implementation.WriteLine(" S RS=##CLASS(%ResultSet).%New()") "RTN","CASHC2",87,0) .D METHX.Implementation.WriteLine(" S RS.ClassName="""_CLNAME_"""") "RTN","CASHC2",88,0) .D METHX.Implementation.WriteLine(" S RS.QueryName=""ExtentAlt""") "RTN","CASHC2",89,0) .D METHX.Implementation.WriteLine(" D RS.Execute()") "RTN","CASHC2",90,0) .D METHX.Implementation.WriteLine(" F I=1:1:MAXROWS Q:'RS.Next() D") "RTN","CASHC2",91,0) .D METHX.Implementation.WriteLine(" .S ID=RS.GetData(1)") "RTN","CASHC2",92,0) .D METHX.Implementation.WriteLine(" .S OBJ=##CLASS("_CLNAME_").%OpenId(ID)") "RTN","CASHC2",93,0) .D METHX.Implementation.WriteLine(" .D OBJ.XMLExport(,""literal,indent"")") "RTN","CASHC2",94,0) .D METHX.Implementation.WriteLine(" .K OBJ") "RTN","CASHC2",95,0) .D METHX.Implementation.WriteLine(" .Q") "RTN","CASHC2",96,0) .D METHX.Implementation.WriteLine(" D RS.Close()") "RTN","CASHC2",97,0) .D METHX.Implementation.WriteLine(" K RS") "RTN","CASHC2",98,0) .D METHX.Implementation.WriteLine(" Q") "RTN","CASHC2",99,0) .; Insert Method definition into CLASS "RTN","CASHC2",100,0) .; Variable I should already be the last method # plus 1! "RTN","CASHC2",101,0) .D CLASS.Methods.SetAt(METHX,I) "RTN","CASHC2",102,0) .; Save Class definition so far "RTN","CASHC2",103,0) .S OK=CLASS.%Save() "RTN","CASHC2",104,0) .; Rewind Implementation for subsequent saves "RTN","CASHC2",105,0) .D METHX.Implementation.Rewind() "RTN","CASHC2",106,0) .D CLASS.Methods.%UnSwizzleAt(I) "RTN","CASHC2",107,0) .I 'OK D ERRSAV^CASHCU("Method: XMLDump",$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) Q "RTN","CASHC2",108,0) .; "RTN","CASHC2",109,0) CSP .; Add OnPage() method if FLAGS["W" "RTN","CASHC2",110,0) .I FLAGS["W" D "RTN","CASHC2",111,0) ..N METHW "RTN","CASHC2",112,0) ..; Create New Method "RTN","CASHC2",113,0) ..S METHW=##CLASS(%Dictionary.MethodDefinition).%New() "RTN","CASHC2",114,0) ..S METHW.Name="OnPage" "RTN","CASHC2",115,0) ..S METHW.ClassMethod=1 "RTN","CASHC2",116,0) ..S METHW.CodeMode="code" "RTN","CASHC2",117,0) ..S METHW.Description="Overriden OnPage() method to call XMLDump()"_$C(13,10)_"NOTE: Internal values are returned!" "RTN","CASHC2",118,0) ..S METHW.FormalSpec="" "RTN","CASHC2",119,0) ..S METHW.Private=0 "RTN","CASHC2",120,0) ..S METHW.PublicList="" "RTN","CASHC2",121,0) ..S METHW.ReturnType="%Library.Status" "RTN","CASHC2",122,0) ..S METHW.ServerOnly=1 "RTN","CASHC2",123,0) ..S METHW.SqlProc=0 "RTN","CASHC2",124,0) ..; Add Code Lines (Implementation) "RTN","CASHC2",125,0) ..D METHW.Implementation.WriteLine(" S MAXROWS=%request.Get(""MAXROWS"")") "RTN","CASHC2",126,0) ..D METHW.Implementation.WriteLine(" I MAXROWS="""" S MAXROWS=1000") "RTN","CASHC2",127,0) ..D METHW.Implementation.WriteLine(" W """",!") "RTN","CASHC2",128,0) ..D METHW.Implementation.WriteLine(" W """",!") "RTN","CASHC2",129,0) ..D METHW.Implementation.WriteLine(" D ..XMLDump(MAXROWS)") "RTN","CASHC2",130,0) ..D METHW.Implementation.WriteLine(" W """",!") "RTN","CASHC2",131,0) ..D METHW.Implementation.WriteLine(" Quit $$$OK") "RTN","CASHC2",132,0) ..; Insert Method definition into CLASS "RTN","CASHC2",133,0) ..S I=I+1 "RTN","CASHC2",134,0) ..D CLASS.Methods.SetAt(METHW,I) "RTN","CASHC2",135,0) ..; Save Class definition so far "RTN","CASHC2",136,0) ..S OK=CLASS.%Save() "RTN","CASHC2",137,0) ..; Rewind Implementation for subsequent saves "RTN","CASHC2",138,0) ..D METHW.Implementation.Rewind() "RTN","CASHC2",139,0) ..D CLASS.Methods.%UnSwizzleAt(I) "RTN","CASHC2",140,0) ..I 'OK D ERRSAV^CASHCU("Method: OnPage",$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHC2",141,0) ..Q "RTN","CASHC2",142,0) .Q "RTN","CASHC2",143,0) ; "RTN","CASHC2",144,0) TRIGERR ; Add the TriggerErrorMsg private classmethod "RTN","CASHC2",145,0) ; Create New Method "RTN","CASHC2",146,0) N METHT "RTN","CASHC2",147,0) S METHT=##CLASS(%Dictionary.MethodDefinition).%New() "RTN","CASHC2",148,0) S METHT.Name="TriggerErrorMsg" "RTN","CASHC2",149,0) S METHT.ClassMethod=1 "RTN","CASHC2",150,0) S METHT.CodeMode="code" "RTN","CASHC2",151,0) S METHT.Description="Private Internal Method to interpret Trigger Error Message" "RTN","CASHC2",152,0) S METHT.FormalSpec="&CASHERR:%Library.String" "RTN","CASHC2",153,0) S METHT.Private=1 "RTN","CASHC2",154,0) S METHT.PublicList="" "RTN","CASHC2",155,0) S METHT.ReturnType="%Library.String" "RTN","CASHC2",156,0) S METHT.SqlProc=0 "RTN","CASHC2",157,0) ; Add Code Lines (Implementation) "RTN","CASHC2",158,0) D METHT.Implementation.WriteLine(" D MSG^DIALOG(""ABET"",.ERR,"""","""",""CASHERR"")") "RTN","CASHC2",159,0) D METHT.Implementation.WriteLine(" S %msg=ERR(1)") "RTN","CASHC2",160,0) D METHT.Implementation.WriteLine(" I ERR>1 F I=2:1:ERR S %msg=%msg_$C(13,10)_ERR(I)") "RTN","CASHC2",161,0) D METHT.Implementation.WriteLine(" Q %msg") "RTN","CASHC2",162,0) ; Insert Method definition into CLASS "RTN","CASHC2",163,0) ; Variable I should already be the last method # plus 1! "RTN","CASHC2",164,0) D CLASS.Methods.SetAt(METHT,I) "RTN","CASHC2",165,0) S I=I+1 "RTN","CASHC2",166,0) ; Save Class definition so far "RTN","CASHC2",167,0) S OK=CLASS.%Save() "RTN","CASHC2",168,0) ; Rewind Implementation for subsequent saves "RTN","CASHC2",169,0) D METHT.Implementation.Rewind() "RTN","CASHC2",170,0) D CLASS.Methods.%UnSwizzleAt(I) "RTN","CASHC2",171,0) I 'OK D ERRSAV^CASHCU("Method: TriggerErrorMsg",$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) Q "RTN","CASHC2",172,0) ; "RTN","CASHC2",173,0) Q OK "RTN","CASHC3") 0^10^B80053616 "RTN","CASHC3",1,0) CASHC3 ;ALB/MGC - Compiler for Cache version 5.0.x+ - Continued (Triggers); 10/20/04@3:00:00 "RTN","CASHC3",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHC3",3,0) ; "RTN","CASHC3",4,0) ; IMPORTANT: These calls are for INTERNAL use only "RTN","CASHC3",5,0) ; "RTN","CASHC3",6,0) TRIGGERS(FILE,FLAGS,CLNAME,UIDNM,LIST,TMPLIST) ; Add Delete/Insert/Update Triggers "RTN","CASHC3",7,0) N CLASS,CODE,CRLF,INSCODE,OK,TRIG,UPDCODE "RTN","CASHC3",8,0) ; "RTN","CASHC3",9,0) ; Restore CLASS "RTN","CASHC3",10,0) S CLASS=##CLASS(%Dictionary.ClassDefinition).%OpenId(CLNAME) "RTN","CASHC3",11,0) S CRLF=$C(13,10) "RTN","CASHC3",12,0) S OK=1 "RTN","CASHC3",13,0) ; "RTN","CASHC3",14,0) DELETE ; Create new Before Delete Trigger "RTN","CASHC3",15,0) S TRIG=##CLASS(%Dictionary.TriggerDefinition).%New() "RTN","CASHC3",16,0) S TRIG.Name="BeforeDelete" "RTN","CASHC3",17,0) S TRIG.Description="Before Delete Trigger - Calls Classic FileMan API: ^DIK" "RTN","CASHC3",18,0) S TRIG.Event="DELETE" "RTN","CASHC3",19,0) S TRIG.Time="BEFORE" "RTN","CASHC3",20,0) ; Add Code "RTN","CASHC3",21,0) S CODE=" N %,%H,DA,DIC,DIK,DIQUIET,DISYS,DT,DTIME,DUZ,IO,U,X,Y" "RTN","CASHC3",22,0) S CODE=CODE_CRLF_" S %SkipFiling=1" "RTN","CASHC3",23,0) S CODE=CODE_CRLF_" S DIQUIET=1 D DT^DICRW" "RTN","CASHC3",24,0) S CODE=CODE_CRLF_" S IENS={IENS}" "RTN","CASHC3",25,0) S CODE=CODE_CRLF_" D DA^DILF(IENS,.DA)" "RTN","CASHC3",26,0) S CODE=CODE_CRLF_" S DIK=$$ROOT^DILFD("_FILE_",IENS)" "RTN","CASHC3",27,0) S CODE=CODE_CRLF_" D ^DIK" "RTN","CASHC3",28,0) S TRIG.Code=CODE "RTN","CASHC3",29,0) ; Insert Trigger definition into CLASS "RTN","CASHC3",30,0) D CLASS.Triggers.SetAt(TRIG,1) "RTN","CASHC3",31,0) S OK=CLASS.%Save() "RTN","CASHC3",32,0) D CLASS.Triggers.%UnSwizzleAt(1) "RTN","CASHC3",33,0) I 'OK D ERRSAV^CASHCU("Trigger: BeforeDelete",$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) Q OK "RTN","CASHC3",34,0) K TRIG "RTN","CASHC3",35,0) ; "RTN","CASHC3",36,0) ; Generate Insert and Update Code "RTN","CASHC3",37,0) D CODE(FILE,FLAGS,UIDNM,.LIST,.TMPLIST,.INSCODE,.UPDCODE) "RTN","CASHC3",38,0) ; "RTN","CASHC3",39,0) INSERT ; Create new Before Insert Trigger "RTN","CASHC3",40,0) S TRIG=##CLASS(%Dictionary.TriggerDefinition).%New() "RTN","CASHC3",41,0) S TRIG.Name="BeforeInsert" "RTN","CASHC3",42,0) S TRIG.Description="Before Insert Trigger - Calls Database Server API: UPDATE^DIE" "RTN","CASHC3",43,0) S TRIG.Event="INSERT" "RTN","CASHC3",44,0) S TRIG.Time="BEFORE" "RTN","CASHC3",45,0) ; Add Code to Trigger "RTN","CASHC3",46,0) S TRIG.Code=INSCODE "RTN","CASHC3",47,0) ; Insert Trigger definition into CLASS "RTN","CASHC3",48,0) D CLASS.Triggers.SetAt(TRIG,2) "RTN","CASHC3",49,0) S OK=CLASS.%Save() "RTN","CASHC3",50,0) D CLASS.Triggers.%UnSwizzleAt(2) "RTN","CASHC3",51,0) I 'OK D ERRSAV^CASHCU("Trigger: BeforeInsert",$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) Q OK "RTN","CASHC3",52,0) K TRIG "RTN","CASHC3",53,0) ; "RTN","CASHC3",54,0) UPDATE ; Create new Before Update Trigger "RTN","CASHC3",55,0) S TRIG=##CLASS(%Dictionary.TriggerDefinition).%New() "RTN","CASHC3",56,0) S TRIG.Name="BeforeUpdate" "RTN","CASHC3",57,0) S TRIG.Description="Before Update Trigger - Calls Database Server API: FILE^DIE" "RTN","CASHC3",58,0) S TRIG.Event="UPDATE" "RTN","CASHC3",59,0) S TRIG.Time="BEFORE" "RTN","CASHC3",60,0) ; Add Code to Trigger "RTN","CASHC3",61,0) S TRIG.Code=UPDCODE "RTN","CASHC3",62,0) ; Insert Trigger definition into CLASS "RTN","CASHC3",63,0) D CLASS.Triggers.SetAt(TRIG,3) "RTN","CASHC3",64,0) S OK=CLASS.%Save() "RTN","CASHC3",65,0) D CLASS.Triggers.%UnSwizzleAt(3) "RTN","CASHC3",66,0) I 'OK D ERRSAV^CASHCU("Trigger: BeforeUpdate",$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHC3",67,0) K TRIG "RTN","CASHC3",68,0) ; "RTN","CASHC3",69,0) Q OK "RTN","CASHC3",70,0) ; "RTN","CASHC3",71,0) CODE(FILE,FLAGS,UIDNM,LIST,TMPLIST,INSCODE,UPDCODE) ; Generate Insert and Update Code "RTN","CASHC3",72,0) ; Abstracted here to make just one pass through the fields "RTN","CASHC3",73,0) ; "RTN","CASHC3",74,0) N CODE,CRLF,FIELD,FTYPE,PARENT,PFLD,SQLNM "RTN","CASHC3",75,0) S CRLF=$C(13,10) "RTN","CASHC3",76,0) S FTYPE=$P($G(^CASH(15050.11,FILE,0)),"^",4) "RTN","CASHC3",77,0) S PFLD=$P($G(^CASH(15050.11,FILE,0)),"^",5) "RTN","CASHC3",78,0) ; "RTN","CASHC3",79,0) ; For Word Processing Files "RTN","CASHC3",80,0) I FTYPE="W" D "RTN","CASHC3",81,0) .N PFILE,PFTYPE "RTN","CASHC3",82,0) .S SQLNM=$$SQLNM(FILE,.01) "RTN","CASHC3",83,0) .S PARENT=$$PARENT(FILE,FLAGS,.PFILE,.PFTYPE) "RTN","CASHC3",84,0) .; Common Code "RTN","CASHC3",85,0) .S CODE=" N CASHARR,DISYS,DT,DTIME,DUZ,CASHERR,IENS,I,IO,U" "RTN","CASHC3",86,0) .S CODE=CODE_CRLF_" S %SkipFiling=1" "RTN","CASHC3",87,0) .; Create INSCODE and UPDCODE "RTN","CASHC3",88,0) .S INSCODE=CODE_CRLF_" I {"_SQLNM_"}="""" S %ok=0,%msg="""_$TR(SQLNM,"""","")_" must be entered"" Q" "RTN","CASHC3",89,0) .S UPDCODE=CODE_CRLF_" I '{"_SQLNM_"*C} Q" "RTN","CASHC3",90,0) .; More common code "RTN","CASHC3",91,0) .S CODE=$S(PFTYPE="F":" S IENS="_PARENT_"_"",""",1:" S IENS="""" F I=$L("_PARENT_",""||""):-1:1 S IENS=IENS_$P("_PARENT_",""||"",I)_"",""") "RTN","CASHC3",92,0) .S CODE=CODE_CRLF_" D GETWP^CASHR("_PFILE_","_PFLD_","_PARENT_",.CASHARR)" "RTN","CASHC3",93,0) .; Update INSCODE and UPDCODE "RTN","CASHC3",94,0) .S INSCODE=INSCODE_CRLF_CODE_CRLF_" S CASHARR($O(CASHARR(""""),-1)+1)={"_SQLNM_"}" "RTN","CASHC3",95,0) .S UPDCODE=UPDCODE_CRLF_CODE_CRLF_" S CASHARR({"_UIDNM_"})={"_SQLNM_"}" "RTN","CASHC3",96,0) .; Last section of common code "RTN","CASHC3",97,0) .S CODE=" D WP^DIE("_PFILE_",IENS,"_PFLD_","""",""CASHARR"",""CASHERR"")" "RTN","CASHC3",98,0) .S CODE=CODE_CRLF_" I $D(CASHERR) S %ok=0,%msg=..TriggerErrorMsg(.CASHERR)" "RTN","CASHC3",99,0) .S INSCODE=INSCODE_CRLF_CODE "RTN","CASHC3",100,0) .S UPDCODE=UPDCODE_CRLF_CODE "RTN","CASHC3",101,0) .Q "RTN","CASHC3",102,0) ; "RTN","CASHC3",103,0) ; For Top-level Files and Sub-files "RTN","CASHC3",104,0) I FTYPE'="W" D "RTN","CASHC3",105,0) .; Inserts "RTN","CASHC3",106,0) .S INSCODE=" N CASHARR,DISYS,DT,DTIME,DUZ,CASHERR,CASHFDA,CASHIEN,IENS,I,IO,U" "RTN","CASHC3",107,0) .S INSCODE=INSCODE_CRLF_" S %SkipFiling=1" "RTN","CASHC3",108,0) .S INSCODE=INSCODE_CRLF_" S CASHIEN(1)={"_UIDNM_"}" "RTN","CASHC3",109,0) .S INSCODE=INSCODE_CRLF_" S IENS=""+1,""" "RTN","CASHC3",110,0) .; Updates "RTN","CASHC3",111,0) .S UPDCODE=" N CASHARR,DISYS,DT,DTIME,DUZ,CASHERR,CASHFDA,IENS,I,IO,U" "RTN","CASHC3",112,0) .S UPDCODE=UPDCODE_CRLF_" S %SkipFiling=1" "RTN","CASHC3",113,0) .S UPDCODE=UPDCODE_CRLF_" S IENS={"_UIDNM_"}_"",""" "RTN","CASHC3",114,0) .; For Sub-files use Parent reference to get full IENS "RTN","CASHC3",115,0) .I FTYPE="S" D "RTN","CASHC3",116,0) ..N PFILE "RTN","CASHC3",117,0) ..S PARENT=$$PARENT(FILE,FLAGS) "RTN","CASHC3",118,0) ..S CODE=" F I=$L("_PARENT_",""||""):-1:1 S IENS=IENS_$P("_PARENT_",""||"",I)_"",""" "RTN","CASHC3",119,0) ..S INSCODE=INSCODE_CRLF_CODE "RTN","CASHC3",120,0) ..S UPDCODE=UPDCODE_CRLF_CODE "RTN","CASHC3",121,0) ..Q "RTN","CASHC3",122,0) .; Add lines for Data fields "RTN","CASHC3",123,0) .S FIELD="" "RTN","CASHC3",124,0) .F S FIELD=$O(^CASH(15050.11,FILE,1,"C","D",FIELD)) Q:FIELD="" D "RTN","CASHC3",125,0) ..I $D(LIST),'$D(LIST(FILE,FIELD)) Q "RTN","CASHC3",126,0) ..I $D(TMPLIST),'$D(TMPLIST(FIELD)) Q "RTN","CASHC3",127,0) ..S SQLNM=$$SQLNM(FILE,FIELD) "RTN","CASHC3",128,0) ..S INSCODE=INSCODE_CRLF_" S:{"_SQLNM_"}'="""" CASHFDA("_FILE_",IENS,"_FIELD_")={"_SQLNM_"}" "RTN","CASHC3",129,0) ..S UPDCODE=UPDCODE_CRLF_" S:{"_SQLNM_"*C} CASHFDA("_FILE_",IENS,"_FIELD_")={"_SQLNM_"}" "RTN","CASHC3",130,0) ..Q "RTN","CASHC3",131,0) .; Add lines for Pointer fields (if "E" or "P" FLAG passed in) "RTN","CASHC3",132,0) .I FLAGS["E"!(FLAGS["P") D "RTN","CASHC3",133,0) ..S FIELD="" "RTN","CASHC3",134,0) ..F S FIELD=$O(^CASH(15050.11,FILE,1,"C","P",FIELD)) Q:FIELD="" D "RTN","CASHC3",135,0) ...I $D(LIST),'$D(LIST(FILE,FIELD)) Q "RTN","CASHC3",136,0) ...I $D(TMPLIST),'$D(TMPLIST(FIELD)) Q "RTN","CASHC3",137,0) ...N NAME,PFILE "RTN","CASHC3",138,0) ...S NAME=$P($G(^CASH(15050.11,FILE,1,FIELD,0)),"^",1)_"ID" "RTN","CASHC3",139,0) ...S PFILE=$P($G(^CASH(15050.11,FILE,1,FIELD,1,1,0)),"^",2) "RTN","CASHC3",140,0) ...S SQLNM=$$SQLNM(FILE,FIELD) "RTN","CASHC3",141,0) ...; If both Flags passed, take the ID in preference "RTN","CASHC3",142,0) ...I FLAGS["E",FLAGS["P" D Q "RTN","CASHC3",143,0) ....; Insert code "RTN","CASHC3",144,0) ....S INSCODE=INSCODE_CRLF_" I {"_NAME_"}'="""",$$EXISTS^CASHR("_PFILE_",{"_NAME_"}) {" "RTN","CASHC3",145,0) ....S INSCODE=INSCODE_CRLF_" S CASHFDA("_FILE_",IENS,"_FIELD_")={"_NAME_"}" "RTN","CASHC3",146,0) ....S INSCODE=INSCODE_CRLF_" } ElseIf {"_SQLNM_"}'="""" {" "RTN","CASHC3",147,0) ....S INSCODE=INSCODE_CRLF_" S CASHFDA("_FILE_",IENS,"_FIELD_")={"_SQLNM_"}" "RTN","CASHC3",148,0) ....S INSCODE=INSCODE_CRLF_" }" "RTN","CASHC3",149,0) ....; Update code "RTN","CASHC3",150,0) ....S UPDCODE=UPDCODE_CRLF_" I {"_NAME_"*C},({"_NAME_"}="""")||($$EXISTS^CASHR("_PFILE_",{"_NAME_"})) {" "RTN","CASHC3",151,0) ....S UPDCODE=UPDCODE_CRLF_" S CASHFDA("_FILE_",IENS,"_FIELD_")={"_NAME_"}" "RTN","CASHC3",152,0) ....S UPDCODE=UPDCODE_CRLF_" } ElseIf {"_SQLNM_"*C} {" "RTN","CASHC3",153,0) ....S UPDCODE=UPDCODE_CRLF_" S CASHFDA("_FILE_",IENS,"_FIELD_")={"_SQLNM_"}" "RTN","CASHC3",154,0) ....S UPDCODE=UPDCODE_CRLF_" }" "RTN","CASHC3",155,0) ....Q "RTN","CASHC3",156,0) ...; Validate ID "RTN","CASHC3",157,0) ...I FLAGS["P" D Q "RTN","CASHC3",158,0) ....S INSCODE=INSCODE_CRLF_" I {"_NAME_"}'="""",$$EXISTS^CASHR("_PFILE_",{"_NAME_"}) S CASHFDA("_FILE_",IENS,"_FIELD_")={"_NAME_"}" "RTN","CASHC3",159,0) ....S UPDCODE=UPDCODE_CRLF_" I {"_NAME_"*C},({"_NAME_"}="""")||($$EXISTS^CASHR("_PFILE_",{"_NAME_"})) S CASHFDA("_FILE_",IENS,"_FIELD_")={"_NAME_"}" "RTN","CASHC3",160,0) ....Q "RTN","CASHC3",161,0) ...; Update validated expansion "RTN","CASHC3",162,0) ...S INSCODE=INSCODE_CRLF_" S:{"_SQLNM_"}'="""" CASHFDA("_FILE_",IENS,"_FIELD_")={"_SQLNM_"}" "RTN","CASHC3",163,0) ...S UPDCODE=UPDCODE_CRLF_" S:{"_SQLNM_"*C} CASHFDA("_FILE_",IENS,"_FIELD_")={"_SQLNM_"}" "RTN","CASHC3",164,0) ...Q "RTN","CASHC3",165,0) ..Q "RTN","CASHC3",166,0) .; Inserts "RTN","CASHC3",167,0) .S INSCODE=INSCODE_CRLF_" I '$D(CASHFDA) S %ok=0,%msg="""_$P($G(^CASH(15050.11,FILE,1,.01,0)),"^",1)_" must be entered"" Q" "RTN","CASHC3",168,0) .S INSCODE=INSCODE_CRLF_" D UPDATE^DIE("""",""CASHFDA"",""CASHIEN"",""CASHERR"")" "RTN","CASHC3",169,0) .S INSCODE=INSCODE_CRLF_" I $D(CASHERR) S %ok=0,%msg=..TriggerErrorMsg(.CASHERR)" "RTN","CASHC3",170,0) .; Updates "RTN","CASHC3",171,0) .S UPDCODE=UPDCODE_CRLF_" I $D(CASHFDA) {" "RTN","CASHC3",172,0) .S UPDCODE=UPDCODE_CRLF_" D FILE^DIE("""",""CASHFDA"",""CASHERR"")" "RTN","CASHC3",173,0) .S UPDCODE=UPDCODE_CRLF_" I $D(CASHERR) S %ok=0,%msg=..TriggerErrorMsg(.CASHERR)" "RTN","CASHC3",174,0) .S UPDCODE=UPDCODE_CRLF_" }" "RTN","CASHC3",175,0) .; If WP Fields are present, replace "+1" in IENS. These will be updates not inserts "RTN","CASHC3",176,0) .I $D(^CASH(15050.11,FILE,1,"C","W")) S INSCODE=INSCODE_CRLF_" S $P(IENS,"","",1)=CASHIEN(1)" "RTN","CASHC3",177,0) .; Add blocks for WP Fields "RTN","CASHC3",178,0) .S FIELD="" "RTN","CASHC3",179,0) .F S FIELD=$O(^CASH(15050.11,FILE,1,"C","W",FIELD)) Q:FIELD="" D "RTN","CASHC3",180,0) ..I $D(LIST),'$D(LIST(FILE,FIELD)) Q "RTN","CASHC3",181,0) ..I $D(TMPLIST),'$D(TMPLIST(FIELD)) Q "RTN","CASHC3",182,0) ..S SQLNM=$$SQLNM(FILE,FIELD) "RTN","CASHC3",183,0) ..; Common code "RTN","CASHC3",184,0) ..S CODE=" K CASHARR F I=1:1:$L({"_SQLNM_"},$C(13,10)) S CASHARR(I)=$P({"_SQLNM_"},$C(13,10),I)" "RTN","CASHC3",185,0) ..S CODE=CODE_CRLF_" D WP^DIE("_FILE_",IENS,"_FIELD_","""",""CASHARR"",""CASHERR"")" "RTN","CASHC3",186,0) ..S CODE=CODE_CRLF_" I $D(CASHERR) S %ok=0,%msg=..TriggerErrorMsg(.CASHERR)" "RTN","CASHC3",187,0) ..S CODE=CODE_CRLF_" }" "RTN","CASHC3",188,0) ..; Inserts "RTN","CASHC3",189,0) ..S INSCODE=INSCODE_CRLF_" I {"_SQLNM_"}'="""" {"_CRLF_CODE "RTN","CASHC3",190,0) ..; Updates "RTN","CASHC3",191,0) ..S UPDCODE=UPDCODE_CRLF_" I {"_SQLNM_"*C} {"_CRLF_CODE "RTN","CASHC3",192,0) ..Q "RTN","CASHC3",193,0) .Q "RTN","CASHC3",194,0) ; "RTN","CASHC3",195,0) SQLNM(FILE,FIELD) ; Get SQL Name for a Field "RTN","CASHC3",196,0) N SQLNM "RTN","CASHC3",197,0) S SQLNM=$P($G(^CASH(15050.11,FILE,1,FIELD,3)),"^",2) "RTN","CASHC3",198,0) I SQLNM="" S SQLNM=$P($G(^CASH(15050.11,FILE,1,FIELD,0)),"^",1) "RTN","CASHC3",199,0) ; Add quotes if prefixed with underscore. Required for {} syntax. "RTN","CASHC3",200,0) I $E(SQLNM)="_" S SQLNM=""""_SQLNM_"""" "RTN","CASHC3",201,0) Q SQLNM "RTN","CASHC3",202,0) ; "RTN","CASHC3",203,0) PARENT(FILE,FLAGS,PFILE,PFTYPE) ; Get details for the Parent Reference "RTN","CASHC3",204,0) N PNAME "RTN","CASHC3",205,0) S PFILE=$P($P($G(^CASH(15050.11,FILE,1,15050.111,0)),"^",9),"#",2) "RTN","CASHC3",206,0) S PFTYPE=$P($G(^CASH(15050.11,PFILE,0)),"^",4) "RTN","CASHC3",207,0) ; If FLAGS["N" get alternative Parent reference "RTN","CASHC3",208,0) I FLAGS["N" D Q PNAME "RTN","CASHC3",209,0) .N UIDNM,ROWID "RTN","CASHC3",210,0) .D GETNAMES^CASHCN(PFILE,"N","","","","",.UIDNM,.ROWID) "RTN","CASHC3",211,0) .I ROWID'="" S PNAME="{"_ROWID_"}" Q "RTN","CASHC3",212,0) .S PNAME="{"_UIDNM_"}" "RTN","CASHC3",213,0) .Q "RTN","CASHC3",214,0) S PNAME="{"_$$SQLNM(FILE,15050.111)_"}" "RTN","CASHC3",215,0) Q PNAME "RTN","CASHC4") 0^11^B59935224 "RTN","CASHC4",1,0) CASHC4 ;ALB/MGC - Compiler for Cache version 5.0.x+ - Continued (Storage Maps); 10/20/04@3:00:00 "RTN","CASHC4",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHC4",3,0) ; "RTN","CASHC4",4,0) ; IMPORTANT: These calls are for INTERNAL use only "RTN","CASHC4",5,0) ; "RTN","CASHC4",6,0) STORAGE(FILE,FLAGS,PACKAGE,ID,CLNAME,UIDNM,LIST,TMPLIST) ; Create the Storage "RTN","CASHC4",7,0) N CLASS,OK,STORAGE "RTN","CASHC4",8,0) ; "RTN","CASHC4",9,0) ; Restore CLASS "RTN","CASHC4",10,0) S CLASS=##CLASS(%Dictionary.ClassDefinition).%OpenId(CLNAME) "RTN","CASHC4",11,0) ; "RTN","CASHC4",12,0) ; Create Storage Definition "RTN","CASHC4",13,0) S STORAGE=##CLASS(%Dictionary.StorageDefinition).%New() "RTN","CASHC4",14,0) S STORAGE.Name="FileMan" "RTN","CASHC4",15,0) S STORAGE.Type="%CacheSQLStorage" "RTN","CASHC4",16,0) D CLASS.Storages.SetAt(STORAGE,1) "RTN","CASHC4",17,0) ; "RTN","CASHC4",18,0) ; Save Class definition so far "RTN","CASHC4",19,0) S OK=CLASS.%Save() "RTN","CASHC4",20,0) I 'OK D ERRSAV^CASHCU("Storage: FileMan",$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) Q OK "RTN","CASHC4",21,0) ; "RTN","CASHC4",22,0) MAPS ; Loop through and add the Maps "RTN","CASHC4",23,0) N DATA,I,J,M,MAP,PNTR,PNTRMAP,RCIENS,SKIPMAP,SUB "RTN","CASHC4",24,0) S M=1,PNTR=0,RCIENS="" "RTN","CASHC4",25,0) F I=1:1 Q:'$D(^CASH(15050.11,FILE,3,I)) D I $D(PNTRMAP(I)),'PNTR S PNTR=1 D Q:'OK "RTN","CASHC4",26,0) .N MAPNODE0,NAME,TYPE "RTN","CASHC4",27,0) .S MAPNODE0=$G(^CASH(15050.11,FILE,3,I,0)) "RTN","CASHC4",28,0) .S NAME=$P(MAPNODE0,"^",1) "RTN","CASHC4",29,0) .S TYPE=$P(MAPNODE0,"^",2) "RTN","CASHC4",30,0) .; Index Map override - if FLAGS["x" skip all Index maps, as HDR threaded queries can misuse them "RTN","CASHC4",31,0) .I FLAGS["x",TYPE="I" Q "RTN","CASHC4",32,0) .; Check if index MAP should be included (i.e. required fields mapped?) "RTN","CASHC4",33,0) .I TYPE="I" D Q:$D(SKIPMAP(I)) "RTN","CASHC4",34,0) ..S J="" "RTN","CASHC4",35,0) ..F S J=$O(^CASH(15050.11,FILE,3,I,1,"C",J)) Q:J="" D Q:$D(SKIPMAP(I)) "RTN","CASHC4",36,0) ...; If LIST array passed, check required fields for index passed "RTN","CASHC4",37,0) ...I $D(LIST),'$D(LIST(FILE,J)) S SKIPMAP(I)="" Q "RTN","CASHC4",38,0) ...; If TMPLIST array created check if Field should be mapped "RTN","CASHC4",39,0) ...I $D(TMPLIST),'$D(TMPLIST(J)) S SKIPMAP(I)="" Q "RTN","CASHC4",40,0) ...; Perform extra checks for Pointers only "RTN","CASHC4",41,0) ...Q:$P($G(^CASH(15050.11,FILE,1,J,3)),"^",1)'="P" "RTN","CASHC4",42,0) ...; If FLAGS contains P set PNTRMAP node "RTN","CASHC4",43,0) ...I FLAGS["P" S PNTRMAP(I)="" Q "RTN","CASHC4",44,0) ...; If FLAGS contains neither P nor E set SKIPMAP node "RTN","CASHC4",45,0) ...I FLAGS'["E" S SKIPMAP(I)="" "RTN","CASHC4",46,0) ...Q "RTN","CASHC4",47,0) ..Q "RTN","CASHC4",48,0) .; Quit if Pointer Map, but this is the first pass and FLAGS doesn't contain E "RTN","CASHC4",49,0) .I $D(PNTRMAP(I)),'PNTR,FLAGS'["E" Q "RTN","CASHC4",50,0) .; "RTN","CASHC4",51,0) .I TYPE'="" S TYPE=$$SOCOUT^CASHR0(15050.113,.02,TYPE) "RTN","CASHC4",52,0) .; If Pointer Map and second pass change Name "RTN","CASHC4",53,0) .I PNTR S NAME=NAME_"P" "RTN","CASHC4",54,0) .; Create new Map "RTN","CASHC4",55,0) .S MAP(M)=##CLASS(%Dictionary.StorageSQLMapDefinition).%New() "RTN","CASHC4",56,0) .S MAP(M).Name=NAME "RTN","CASHC4",57,0) .S MAP(M).Type=TYPE "RTN","CASHC4",58,0) .S MAP(M).Global="^"_$P(MAPNODE0,"^",3) "RTN","CASHC4",59,0) .; Make sure Indexes are Conditional, otherwise the Cache 5.0 Query Optimizer "RTN","CASHC4",60,0) .; relies on them to be 100% populated! "RTN","CASHC4",61,0) .I TYPE="index" D "RTN","CASHC4",62,0) ..N COND "RTN","CASHC4",63,0) ..S COND="" "RTN","CASHC4",64,0) ..F J=1:1 Q:'$D(^CASH(15050.11,FILE,3,I,1,J)) D "RTN","CASHC4",65,0) ...N EXP,FLD,SUBNODE0 "RTN","CASHC4",66,0) ...S SUBNODE0=$G(^CASH(15050.11,FILE,3,I,1,J,0)) "RTN","CASHC4",67,0) ...S EXP=$P(SUBNODE0,"^",1) "RTN","CASHC4",68,0) ...S FLD=$P(SUBNODE0,"^",4) "RTN","CASHC4",69,0) ...; If Pointer Map and second pass use Alternate Expression if it exists "RTN","CASHC4",70,0) ...I PNTR,$P(SUBNODE0,"^",5)'="" S EXP=$P(SUBNODE0,"^",5) "RTN","CASHC4",71,0) ...I $E(EXP,1,2)="{_" S COND=$S(COND="":"",1:COND_",")_"{"""_$P($P(EXP,"}",1),"{",2)_"""}'=""""" Q "RTN","CASHC4",72,0) ...I $E(EXP)="{" S COND=$S(COND="":"",1:COND_",")_EXP_"'=""""" "RTN","CASHC4",73,0) ...Q "RTN","CASHC4",74,0) ..S MAP(M).PopulationType="conditional" "RTN","CASHC4",75,0) ..S MAP(M).Condition=COND "RTN","CASHC4",76,0) ..Q "RTN","CASHC4",77,0) .D CLASS.Storages.GetAt(1).SQLMaps.SetAt(MAP(M),M) "RTN","CASHC4",78,0) .S OK=CLASS.%Save() "RTN","CASHC4",79,0) .I 'OK D ERRSAV^CASHCU("Map: "_I_" - "_MAP(M).Name,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) Q "RTN","CASHC4",80,0) .; "RTN","CASHC4",81,0) SUBS .; Loop through and add Subscripts "RTN","CASHC4",82,0) .F J=1:1 Q:'$D(^CASH(15050.11,FILE,3,I,1,J)) D Q:'OK "RTN","CASHC4",83,0) ..N EXP,FLD,SUBNODE0 "RTN","CASHC4",84,0) ..S SUBNODE0=$G(^CASH(15050.11,FILE,3,I,1,J,0)) "RTN","CASHC4",85,0) ..S EXP=$P(SUBNODE0,"^",1) "RTN","CASHC4",86,0) ..S FLD=$P(SUBNODE0,"^",4) "RTN","CASHC4",87,0) ..; If Pointer Map and second pass use Alternate Expression if it exists "RTN","CASHC4",88,0) ..I PNTR,$P(SUBNODE0,"^",5)'="" S EXP=$P(SUBNODE0,"^",5) "RTN","CASHC4",89,0) ..; Check if Expression points to a File # "RTN","CASHC4",90,0) ..I EXP?1"#".N.(1"."1.N) D "RTN","CASHC4",91,0) ...; If Master Map, update RCIENS (IENS Retrieval Code) "RTN","CASHC4",92,0) ...I M=1 S RCIENS="{L"_J_"}_"","""_$S(RCIENS="":"",1:"_"_RCIENS) "RTN","CASHC4",93,0) ...; If pointing to this FILE use UIDNM "RTN","CASHC4",94,0) ...I $E(EXP,2,255)=FILE S EXP="{"_UIDNM_"}" Q "RTN","CASHC4",95,0) ...; If pointing to a different file generate full reference "RTN","CASHC4",96,0) ...S EXP="{"_$$GETIDNM^CASHCN(EXP,FLAGS,PACKAGE,ID)_"}" "RTN","CASHC4",97,0) ...Q "RTN","CASHC4",98,0) ..; Add quotes for string subscripts "RTN","CASHC4",99,0) ..I EXP'["{",EXP'["""",+EXP'=EXP S EXP=""""_EXP_"""" "RTN","CASHC4",100,0) ..; Create new Subscript Definition "RTN","CASHC4",101,0) ..S SUB(M,J)=##CLASS(%Dictionary.StorageSQLMapSubDefinition).%New() "RTN","CASHC4",102,0) ..S SUB(M,J).Name=J "RTN","CASHC4",103,0) ..S SUB(M,J).Expression=EXP "RTN","CASHC4",104,0) ..S SUB(M,J).LoopInitValue=$P(SUBNODE0,"^",2) "RTN","CASHC4",105,0) ..S SUB(M,J).StopExpression=$P(SUBNODE0,"^",3) "RTN","CASHC4",106,0) ..D CLASS.Storages.GetAt(1).SQLMaps.GetAt(M).Subscripts.SetAt(SUB(M,J),J) "RTN","CASHC4",107,0) ..S OK=CLASS.%Save() "RTN","CASHC4",108,0) ..D CLASS.Storages.GetAt(1).SQLMaps.GetAt(M).Subscripts.%UnSwizzleAt(J) "RTN","CASHC4",109,0) ..I 'OK D ERRSAV^CASHCU("Subscript: "_I_","_J_" - "_SUB(M,J).Expression,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHC4",110,0) ..K SUB(M,J) "RTN","CASHC4",111,0) ..Q "RTN","CASHC4",112,0) IENS .; Add IENS to Master Map "RTN","CASHC4",113,0) .I M=1 D Q:'OK "RTN","CASHC4",114,0) ..; Create IEN Data Definition "RTN","CASHC4",115,0) ..S DATA(1,.0000001)=##CLASS(%Dictionary.StorageSQLMapDataDefinition).%New() "RTN","CASHC4",116,0) ..S DATA(1,.0000001).Name="IENS" "RTN","CASHC4",117,0) ..S DATA(1,.0000001).RetrievalCode=" S {*}="_RCIENS "RTN","CASHC4",118,0) ..D CLASS.Storages.GetAt(1).SQLMaps.GetAt(1).Data.SetAt(DATA(1,.0000001),.0000001) "RTN","CASHC4",119,0) ..S OK=CLASS.%Save() "RTN","CASHC4",120,0) ..D CLASS.Storages.GetAt(1).SQLMaps.GetAt(1).Data.%UnSwizzleAt(.0000001) "RTN","CASHC4",121,0) ..I 'OK D ERRSAV^CASHCU("Data: IENS",$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHC4",122,0) ..K DATA(1,.0000001) "RTN","CASHC4",123,0) ..Q "RTN","CASHC4",124,0) DATA .; Loop through and add Data "RTN","CASHC4",125,0) .S J=0 "RTN","CASHC4",126,0) .F S J=$O(^CASH(15050.11,FILE,3,I,2,J)) Q:'+J D Q:'OK "RTN","CASHC4",127,0) ..; If LIST array passed in check Data Field is in LIST "RTN","CASHC4",128,0) ..I $D(LIST),'$D(LIST(FILE,J)) Q "RTN","CASHC4",129,0) ..; If TMPLIST array created check data Field is in TMPLIST "RTN","CASHC4",130,0) ..I $D(TMPLIST),'$D(TMPLIST(J)) Q "RTN","CASHC4",131,0) ..N ALTLBL,DATNODE0,LABEL,PFLAG "RTN","CASHC4",132,0) ..S DATNODE0=$G(^CASH(15050.11,FILE,3,I,2,J,0)) "RTN","CASHC4",133,0) ..S LABEL=$P(DATNODE0,"^",1) "RTN","CASHC4",134,0) ..S PFLAG=$P(DATNODE0,"^",4) "RTN","CASHC4",135,0) ..S ALTLBL=$TR(LABEL,"_","")_"ID" "RTN","CASHC4",136,0) ..; Check if Data node is a Pointer, if so check FLAGS "RTN","CASHC4",137,0) ..I PFLAG D:FLAGS["P" Q:FLAGS'["E" Q:'OK "RTN","CASHC4",138,0) ...N K "RTN","CASHC4",139,0) ...S K=J+.0000001 "RTN","CASHC4",140,0) ...; Create new Data Definition for Pointer "RTN","CASHC4",141,0) ...S DATA(M,K)=##CLASS(%Dictionary.StorageSQLMapDataDefinition).%New() "RTN","CASHC4",142,0) ...S DATA(M,K).Name=ALTLBL "RTN","CASHC4",143,0) ...S DATA(M,K).Node=$P(DATNODE0,"^",2) "RTN","CASHC4",144,0) ...S DATA(M,K).Delimiter="""^""" "RTN","CASHC4",145,0) ...S DATA(M,K).Piece=$P(DATNODE0,"^",3) "RTN","CASHC4",146,0) ...S DATA(M,K).RetrievalCode=$G(^CASH(15050.11,FILE,3,I,2,J,1)) "RTN","CASHC4",147,0) ...D CLASS.Storages.GetAt(1).SQLMaps.GetAt(M).Data.SetAt(DATA(M,K),K) "RTN","CASHC4",148,0) ...S OK=CLASS.%Save() "RTN","CASHC4",149,0) ...D CLASS.Storages.GetAt(1).SQLMaps.GetAt(M).Data.%UnSwizzleAt(K) "RTN","CASHC4",150,0) ...I 'OK D ERRSAV^CASHCU("Data: "_I_","_K_" - "_DATA(M,K).Name,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHC4",151,0) ...K DATA(M,K) "RTN","CASHC4",152,0) ...Q "RTN","CASHC4",153,0) ..; Create new Data Definition "RTN","CASHC4",154,0) ..S DATA(M,J)=##CLASS(%Dictionary.StorageSQLMapDataDefinition).%New() "RTN","CASHC4",155,0) ..S DATA(M,J).Name=LABEL "RTN","CASHC4",156,0) ..S DATA(M,J).Node=$P(DATNODE0,"^",2) "RTN","CASHC4",157,0) ..S DATA(M,J).Delimiter="""^""" "RTN","CASHC4",158,0) ..S DATA(M,J).Piece=$P(DATNODE0,"^",3) "RTN","CASHC4",159,0) ..S DATA(M,J).RetrievalCode=$G(^CASH(15050.11,FILE,3,I,2,J,1)) "RTN","CASHC4",160,0) ..D CLASS.Storages.GetAt(1).SQLMaps.GetAt(M).Data.SetAt(DATA(M,J),J) "RTN","CASHC4",161,0) ..S OK=CLASS.%Save() "RTN","CASHC4",162,0) ..D CLASS.Storages.GetAt(1).SQLMaps.GetAt(M).Data.%UnSwizzleAt(J) "RTN","CASHC4",163,0) ..I 'OK D ERRSAV^CASHCU("Data: "_I_","_J_" - "_DATA(M,J).Name,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHC4",164,0) ..K DATA(M,J) "RTN","CASHC4",165,0) ..Q "RTN","CASHC4",166,0) .D CLASS.Storages.GetAt(1).SQLMaps.%UnSwizzleAt(M) "RTN","CASHC4",167,0) .K MAP(M) "RTN","CASHC4",168,0) .S M=M+1,PNTR=0 "RTN","CASHC4",169,0) .Q "RTN","CASHC4",170,0) ; "RTN","CASHC4",171,0) ; Set the Storage Strategy "RTN","CASHC4",172,0) S CLASS.StorageStrategy="FileMan" "RTN","CASHC4",173,0) ; "RTN","CASHC4",174,0) ; Save the Class Definition "RTN","CASHC4",175,0) S OK=CLASS.%Save() "RTN","CASHC4",176,0) ; "RTN","CASHC4",177,0) ; Remove STORAGE and CLASS references, and TMPLIST array if it exists "RTN","CASHC4",178,0) D CLASS.Storages.%UnSwizzleAt(1) "RTN","CASHC4",179,0) Q OK "RTN","CASHC5") 0^12^B30316225 "RTN","CASHC5",1,0) CASHC5 ;ALB/MGC - Compiler for Cache version 5.0.x+ - Continued (Web Services); 10/20/04@3:00:00 "RTN","CASHC5",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHC5",3,0) ; "RTN","CASHC5",4,0) ; IMPORTANT: These calls are for INTERNAL use only "RTN","CASHC5",5,0) ; "RTN","CASHC5",6,0) WEBSVC(FILE,FLAGS,PACKAGE,OWNER,NAME,PLIST) ; Create SOAP Web Service Class if "S" passed in "RTN","CASHC5",7,0) N OK,PROP,QRY,WSCLS,WSNAME,WSPRM,WSQRY "RTN","CASHC5",8,0) ; "RTN","CASHC5",9,0) ; Append "WS" to Class Name, but no more than 24 characters for uniqueness "RTN","CASHC5",10,0) S WSNAME=PACKAGE_"."_$E(NAME,1,24)_"WS" "RTN","CASHC5",11,0) S EXISTS=##CLASS(%Dictionary.ClassDefinition).%ExistsId(WSNAME) "RTN","CASHC5",12,0) ; "RTN","CASHC5",13,0) ; Attempt to Lock the class "RTN","CASHC5",14,0) L +^oddDEF(WSNAME):1 "RTN","CASHC5",15,0) I '$T W !,WSNAME," is locked" Q "RTN","CASHC5",16,0) ; "RTN","CASHC5",17,0) ; Delete current version of class if it exists "RTN","CASHC5",18,0) I EXISTS D CLDEL^CASHCU(WSNAME) "RTN","CASHC5",19,0) ; "RTN","CASHC5",20,0) ; Release lock (creating class takes out a new lock) "RTN","CASHC5",21,0) L -^oddDEF(WSNAME) "RTN","CASHC5",22,0) ; "RTN","CASHC5",23,0) ; Create the new Class "RTN","CASHC5",24,0) S WSCLS=##CLASS(%Dictionary.ClassDefinition).%New() "RTN","CASHC5",25,0) S WSCLS.Name=WSNAME "RTN","CASHC5",26,0) S WSCLS.Super="%SOAP.WebService" "RTN","CASHC5",27,0) S WSCLS.Description="DO NOT EDIT: Web Service Definition for "_PACKAGE_"."_NAME "RTN","CASHC5",28,0) ; "RTN","CASHC5",29,0) ; Add the SERVICENAME Parameter "RTN","CASHC5",30,0) S WSPRM(1)=##CLASS(%Dictionary.ParameterDefinition).%New() "RTN","CASHC5",31,0) S WSPRM(1).Name="SERVICENAME" "RTN","CASHC5",32,0) S WSPRM(1).Default=NAME_" Service" "RTN","CASHC5",33,0) S WSPRM(1).Description="SERVICENAME Parameter - overriden from %SOAP.WebBase" "RTN","CASHC5",34,0) D WSCLS.Parameters.SetAt(WSPRM(1),1) "RTN","CASHC5",35,0) D WSCLS.Parameters.%UnSwizzleAt(1) "RTN","CASHC5",36,0) ; "RTN","CASHC5",37,0) ; Add the LOCATION Parameter "RTN","CASHC5",38,0) S WSPRM(2)=##CLASS(%Dictionary.ParameterDefinition).%New() "RTN","CASHC5",39,0) S WSPRM(2).Name="LOCATION" "RTN","CASHC5",40,0) S WSPRM(2).Default="http://"_$$GETFQDN()_"/csp/"_$$GETNS()_"/"_WSNAME_".cls" "RTN","CASHC5",41,0) S WSPRM(2).Description="LOCATION Parameter - overriden from %SOAP.WebService" "RTN","CASHC5",42,0) D WSCLS.Parameters.SetAt(WSPRM(2),2) "RTN","CASHC5",43,0) D WSCLS.Parameters.%UnSwizzleAt(2) "RTN","CASHC5",44,0) K WSPRM "RTN","CASHC5",45,0) ; "RTN","CASHC5",46,0) ; PLIST should have been created in the PROP section! "RTN","CASHC5",47,0) ; Add the ByID Query WebMethod "RTN","CASHC5",48,0) S WSQRY(1)=##CLASS(%Dictionary.QueryDefinition).%New() "RTN","CASHC5",49,0) S WSQRY(1).Name="ByID" "RTN","CASHC5",50,0) S WSQRY(1).FormalSpec="ID:%Library.String" "RTN","CASHC5",51,0) S WSQRY(1).SqlProc=1 "RTN","CASHC5",52,0) S WSQRY(1).SqlQuery="SELECT "_PLIST_" FROM "_$$GETSQLNM^CASHCN(FILE,FLAGS,PACKAGE)_$C(13,10)_"WHERE (%ID = :ID)" "RTN","CASHC5",53,0) S WSQRY(1).Type="%SQLQuery" "RTN","CASHC5",54,0) S WSQRY(1).WebMethod=1 "RTN","CASHC5",55,0) D WSCLS.Queries.SetAt(WSQRY(1),1) "RTN","CASHC5",56,0) D WSCLS.Queries.%UnSwizzleAt(1) "RTN","CASHC5",57,0) K WSQRY(1) "RTN","CASHC5",58,0) S OK=WSCLS.%Save() "RTN","CASHC5",59,0) I 'OK D ERRSAV^CASHCU("Web Service Class: "_WSNAME,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) Q OK "RTN","CASHC5",60,0) ; "RTN","CASHC5",61,0) ; Loop through Indices "RTN","CASHC5",62,0) N I,J,K,QRY "RTN","CASHC5",63,0) ; Initialize QRY allowing for QRY(1)=ByID "RTN","CASHC5",64,0) S QRY("NM","BYID")="" "RTN","CASHC5",65,0) S QRY=2 "RTN","CASHC5",66,0) F I=2:1 Q:'$D(^CASH(15050.11,FILE,3,I)) D Q:'OK "RTN","CASHC5",67,0) .N MAPNODE0 "RTN","CASHC5",68,0) .S MAPNODE0=$G(^CASH(15050.11,FILE,3,I,0)) "RTN","CASHC5",69,0) .Q:$P(MAPNODE0,"^",2)'="I" "RTN","CASHC5",70,0) .Q:$D(SKIPMAP(I)) "RTN","CASHC5",71,0) .; Get all non-id Fields and create FLD array and FormalSpec "RTN","CASHC5",72,0) .N FLD,MISSING,PARAM,QRYNM,SPEC,WHERE "RTN","CASHC5",73,0) .S (SPEC,WHERE)="",MISSING=0,K=1 "RTN","CASHC5",74,0) .F J=1:1 Q:'$D(^CASH(15050.11,FILE,3,I,1,J)) D Q:MISSING "RTN","CASHC5",75,0) ..N EXP,SUBNODE0 "RTN","CASHC5",76,0) ..S SUBNODE0=$G(^CASH(15050.11,FILE,3,I,1,J,0)) "RTN","CASHC5",77,0) ..S FLD=$P(SUBNODE0,"^",1) "RTN","CASHC5",78,0) ..I FLD'?1"{"1.ANP1"}" Q "RTN","CASHC5",79,0) ..S FLD=$TR(FLD,"{}","") "RTN","CASHC5",80,0) ..; If FLD is missing from PLIST quit "RTN","CASHC5",81,0) ..I (","_PLIST_",")'[(","_FLD_",") S SPEC="",MISSING=1 Q "RTN","CASHC5",82,0) ..S PARAM=$TR(FLD,"_","") "RTN","CASHC5",83,0) ..I $D(PARAM(PARAM)) F L=1:1 S PARAM=$TR(FLD,"_","")_L Q:'$D(PARAM(PARAM)) "RTN","CASHC5",84,0) ..S PARAM(PARAM)="" "RTN","CASHC5",85,0) ..S FLD(K)=FLD,K=K+1 "RTN","CASHC5",86,0) ..S SPEC=$S(SPEC="":"",1:SPEC_",")_PARAM_":%Library.String" "RTN","CASHC5",87,0) ..S WHERE=$S(WHERE="":"",1:WHERE_" AND ")_FLD_" %STARTSWITH :"_PARAM "RTN","CASHC5",88,0) ..Q "RTN","CASHC5",89,0) .I SPEC="" Q "RTN","CASHC5",90,0) .I $D(QRY("SPEC",SPEC)) Q "RTN","CASHC5",91,0) .; Remove any underscores from the name "RTN","CASHC5",92,0) .S QRYNM="By"_$TR(FLD(1),"_","") "RTN","CASHC5",93,0) .I $D(QRY("NM",$$UP^XLFSTR(QRYNM))) F I=1:1 S QRYNM="By"_$TR(FLD(1),"_","")_I Q:'$D(QRY("NM",$$UP^XLFSTR(QRYNM))) "RTN","CASHC5",94,0) .S QRY("SPEC",SPEC)="" "RTN","CASHC5",95,0) .S QRY("NM",$$UP^XLFSTR(QRYNM))="" "RTN","CASHC5",96,0) .; Add the ByID Query WebMethod "RTN","CASHC5",97,0) .S WSQRY(QRY)=##CLASS(%Dictionary.QueryDefinition).%New() "RTN","CASHC5",98,0) .S WSQRY(QRY).Name=QRYNM "RTN","CASHC5",99,0) .S WSQRY(QRY).FormalSpec=SPEC "RTN","CASHC5",100,0) .S WSQRY(QRY).SqlProc=1 "RTN","CASHC5",101,0) .S WSQRY(QRY).SqlQuery="SELECT "_PLIST_" FROM "_$$GETSQLNM^CASHCN(FILE,FLAGS,PACKAGE)_$C(13,10)_"WHERE "_WHERE "RTN","CASHC5",102,0) .S WSQRY(QRY).Type="%SQLQuery" "RTN","CASHC5",103,0) .S WSQRY(QRY).WebMethod=1 "RTN","CASHC5",104,0) .D WSCLS.Queries.SetAt(WSQRY(QRY),QRY) "RTN","CASHC5",105,0) .S OK=WSCLS.%Save() "RTN","CASHC5",106,0) .D WSCLS.Queries.%UnSwizzleAt(QRY) "RTN","CASHC5",107,0) .I 'OK D ERRSAV^CASHCU("WS Query: "_QRY_" - "_WSQRY(QRY).Name,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHC5",108,0) .K WSQRY(QRY) "RTN","CASHC5",109,0) .S QRY=QRY+1 "RTN","CASHC5",110,0) .Q "RTN","CASHC5",111,0) ; "RTN","CASHC5",112,0) S OK=WSCLS.%Save() "RTN","CASHC5",113,0) I OK D "RTN","CASHC5",114,0) .; If Sub-file, set temp file entry for sub-files to be compiled later "RTN","CASHC5",115,0) .I '$$ISFILE^CASHU(FILE) S ^TMP("CASHCW",$J,"NAME",FILE)=WSNAME Q "RTN","CASHC5",116,0) .D CLCOMP^CASHCU(WSNAME,OWNER) "RTN","CASHC5",117,0) .; Now compile SOAP Web Service classes for any Sub-files "RTN","CASHC5",118,0) .I $D(^TMP("CASHCW",$J,"SUB",FILE)) D SUBCOMP(FILE,OWNER) "RTN","CASHC5",119,0) Q OK "RTN","CASHC5",120,0) ; "RTN","CASHC5",121,0) SUBCOMP(FILE,OWNER) ; Compile SOAP Web Service classes for Sub-files "RTN","CASHC5",122,0) N SUB,SUBNM "RTN","CASHC5",123,0) S SUB="" "RTN","CASHC5",124,0) F S SUB=$O(^TMP("CASHCW",$J,"SUB",FILE,SUB)) Q:SUB="" D "RTN","CASHC5",125,0) .S SUBNM=^TMP("CASHCW",$J,"NAME",SUB) "RTN","CASHC5",126,0) .D CLCOMP^CASHCU(SUBNM,OWNER) "RTN","CASHC5",127,0) .; Now compile any Sub-files of this Sub-file. Recursive call! "RTN","CASHC5",128,0) .I $D(^TMP("CASHCW",$J,"SUB",SUB)) D SUBCOMP(SUB,OWNER) "RTN","CASHC5",129,0) .K ^TMP("CASHCW",$J,"NAME",SUB) "RTN","CASHC5",130,0) .Q "RTN","CASHC5",131,0) K ^TMP("CASHCW",$J,"SUB",FILE) "RTN","CASHC5",132,0) Q "RTN","CASHC5",133,0) ; "RTN","CASHC5",134,0) ; Cache Server Info "RTN","CASHC5",135,0) ; "RTN","CASHC5",136,0) GETIP() ; Get this machine's IP address "RTN","CASHC5",137,0) Q $P($ZU(54,13,$ZU(54,0)),",",1) "RTN","CASHC5",138,0) ; "RTN","CASHC5",139,0) GETFQDN() ; Get this machine's Fully Qualified Domain Name "RTN","CASHC5",140,0) Q $P($ZU(54,13,$ZU(54,0)),",",2) "RTN","CASHC5",141,0) ; "RTN","CASHC5",142,0) GETNS() ; Get the current Namespace "RTN","CASHC5",143,0) N Y "RTN","CASHC5",144,0) X ^%ZOSF("UCI") "RTN","CASHC5",145,0) Q $P(Y,",",1) "RTN","CASHCN") 0^45^B13052905 "RTN","CASHCN",1,0) CASHCN ;ALB/MGC - FileMan Class Map - Compile Name Utilities ; 10/20/04@3:00:00 "RTN","CASHCN",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHCN",3,0) ; "RTN","CASHCN",4,0) Q ; Specific Entry Point must be used "RTN","CASHCN",5,0) ; "RTN","CASHCN",6,0) ; NAME UTILITY CALLS "RTN","CASHCN",7,0) ; "RTN","CASHCN",8,0) GETNAMES(FILE,FLAGS,PACKAGE,ID,NAME,SQLNM,UIDNM,ROWID) ; Return Names for FM File # "RTN","CASHCN",9,0) ; "RTN","CASHCN",10,0) ; Parameters: "RTN","CASHCN",11,0) ; "RTN","CASHCN",12,0) ; FILE - (Required) - FileMan File # (may have "#" prefix) "RTN","CASHCN",13,0) ; FLAGS - (Required) - May contain "N" for Simple Names and/or "I" for Simple Ids "RTN","CASHCN",14,0) ; PACKAGE - (Required) - Cache Package for generated Classes "RTN","CASHCN",15,0) ; ID - (Optional) - Optional ID Name override for Simple IDs "RTN","CASHCN",16,0) ; NAME - (Reference) - Return Class Name by reference "RTN","CASHCN",17,0) ; SQLNM - (Reference) - Return SQL Name by reference "RTN","CASHCN",18,0) ; UIDNM - (Reference) - Return Unique ID Name by reference "RTN","CASHCN",19,0) ; ROWID - (Reference) - Optionally Return RowID Name by reference "RTN","CASHCN",20,0) ; "RTN","CASHCN",21,0) N EXT,SUBNM "RTN","CASHCN",22,0) D GETNAMES^CASHFN11(FILE,.NAME,.SUBNM,.SQLNM) "RTN","CASHCN",23,0) I NAME="" S (UIDNM,ROWID)="" Q "RTN","CASHCN",24,0) ; "RTN","CASHCN",25,0) ; If Name Extension is set at Compile time, append to all Names "RTN","CASHCN",26,0) S EXT=$E($G(^TMP("CASHC",$J,"NAME-EXT",FILE))) "RTN","CASHCN",27,0) I EXT'="" D "RTN","CASHCN",28,0) .S NAME=NAME_EXT "RTN","CASHCN",29,0) .I SUBNM'="" S SUBNM=SUBNM_EXT "RTN","CASHCN",30,0) .I SQLNM'="" S SQLNM=SQLNM_EXT "RTN","CASHCN",31,0) .Q "RTN","CASHCN",32,0) ; "RTN","CASHCN",33,0) ; IF "N" Flag passed, change names "RTN","CASHCN",34,0) I FLAGS["N" D "RTN","CASHCN",35,0) .N NUM,SUFFIX "RTN","CASHCN",36,0) .I SUBNM'="" S NAME=SUBNM "RTN","CASHCN",37,0) .S SUFFIX="_"_$TR(FILE,".","_") "RTN","CASHCN",38,0) .S SQLNM=NAME_SUFFIX "RTN","CASHCN",39,0) .; HDR Compatibility - Truncate SQLNM to 30 characters (including possible EXT) "RTN","CASHCN",40,0) .I FLAGS["H",($L(NAME)+$L(SUFFIX))>29 S SQLNM=$E(NAME,1,29-$L(SUFFIX))_EXT_SUFFIX "RTN","CASHCN",41,0) .; Restrict length of name (including # and possible EXT) to 24 characters. "RTN","CASHCN",42,0) .; Avoids uniqueness issues when "S" flag adds class with "WS" appended to name "RTN","CASHCN",43,0) .S NUM=$TR(FILE,".","") "RTN","CASHCN",44,0) .I $L(NAME)+$L(NUM)>23 S NAME=$E(NAME,1,23-$L(NUM))_EXT_NUM Q "RTN","CASHCN",45,0) .S NAME=NAME_NUM "RTN","CASHCN",46,0) .Q "RTN","CASHCN",47,0) ; "RTN","CASHCN",48,0) I SUBNM'="" S UIDNM=SUBNM_"ID",ROWID=NAME_"ID" "RTN","CASHCN",49,0) E S UIDNM=NAME_"ID",ROWID="" "RTN","CASHCN",50,0) ; "RTN","CASHCN",51,0) I FLAGS["I" S UIDNM="IEN" I $G(ID)'="" D "RTN","CASHCN",52,0) .; HDR Compatibility - If ID is passed as "RowID" change Sub-file ID to "ChildSubX" "RTN","CASHCN",53,0) .I SUBNM'="",$$UP^XLFSTR(ID)="ROWID" D Q "RTN","CASHCN",54,0) ..N I,FNO "RTN","CASHCN",55,0) ..S FNO=FILE F I=0:1 S FNO=$G(^DD(FNO,0,"UP")) Q:FNO="" "RTN","CASHCN",56,0) ..S UIDNM="ChildSub"_I "RTN","CASHCN",57,0) ..S ROWID=ID "RTN","CASHCN",58,0) ..Q "RTN","CASHCN",59,0) .I ID?1A.AN S UIDNM=ID "RTN","CASHCN",60,0) .; Make sure that the passed in ID does not clash with a current field. "RTN","CASHCN",61,0) .; For now change the UIDNM, as this is far less complex. "RTN","CASHCN",62,0) .I $$FNMEXIST^CASHFN11(FILE,UIDNM) N J F J=0:1 I '$$FNMEXIST^CASHFN11(FILE,UIDNM_J) S UIDNM=UIDNM_J Q "RTN","CASHCN",63,0) .Q "RTN","CASHCN",64,0) Q "RTN","CASHCN",65,0) ; "RTN","CASHCN",66,0) GETCLNM(FILE,FLAGS,PACKAGE) ; Return Class Name for FM File # "RTN","CASHCN",67,0) ; "RTN","CASHCN",68,0) ; Parameters: "RTN","CASHCN",69,0) ; "RTN","CASHCN",70,0) ; FILE - (Required) - FileMan File # (may have "#" prefix) "RTN","CASHCN",71,0) ; FLAGS - (Required) - May contain "N" for Simple Names "RTN","CASHCN",72,0) ; PACKAGE - (Required) - Cache Package for generated Classes "RTN","CASHCN",73,0) ; "RTN","CASHCN",74,0) ; Return Value = Full Class Name (including Package) "RTN","CASHCN",75,0) ; "RTN","CASHCN",76,0) N FILE1,NAME "RTN","CASHCN",77,0) S FILE1=$TR(FILE,"#","") ; Strip "#" if necessary "RTN","CASHCN",78,0) D GETNAMES(FILE1,FLAGS,PACKAGE,"",.NAME) "RTN","CASHCN",79,0) I NAME="" Q "" "RTN","CASHCN",80,0) Q PACKAGE_"."_NAME "RTN","CASHCN",81,0) ; "RTN","CASHCN",82,0) GETSQLNM(FILE,FLAGS,PACKAGE) ; Return SQL Table Name for FM File # "RTN","CASHCN",83,0) ; "RTN","CASHCN",84,0) ; Parameters: "RTN","CASHCN",85,0) ; "RTN","CASHCN",86,0) ; FILE - (Required) - FileMan File # (may have "#" prefix) "RTN","CASHCN",87,0) ; FLAGS - (Required) - May contain "N" for Simple Names "RTN","CASHCN",88,0) ; PACKAGE - (Required) - Cache Package for generated Classes "RTN","CASHCN",89,0) ; "RTN","CASHCN",90,0) ; Return Value = Full SQL Table Name (including Schema) "RTN","CASHCN",91,0) ; "RTN","CASHCN",92,0) N FILE1,NAME,SQLNM "RTN","CASHCN",93,0) S FILE1=$TR(FILE,"#","") ; Strip "#" if necessary "RTN","CASHCN",94,0) D GETNAMES(FILE1,FLAGS,PACKAGE,"",.NAME,.SQLNM) "RTN","CASHCN",95,0) I SQLNM="" S SQLNM=NAME "RTN","CASHCN",96,0) I SQLNM="" Q "" "RTN","CASHCN",97,0) ; "RTN","CASHCN",98,0) ; If PACKAGE is User it must be changed to SQLUser for SQL "RTN","CASHCN",99,0) I $$UP^XLFSTR(PACKAGE)="USER" S PACKAGE="SQLUser" "RTN","CASHCN",100,0) ; "RTN","CASHCN",101,0) Q PACKAGE_"."_SQLNM "RTN","CASHCN",102,0) ; "RTN","CASHCN",103,0) GETIDNM(FILE,FLAGS,PACKAGE,ID) ; Return Full ID Reference for FM File # "RTN","CASHCN",104,0) ; "RTN","CASHCN",105,0) ; Parameters: "RTN","CASHCN",106,0) ; "RTN","CASHCN",107,0) ; FILE - (Required) - FileMan File # (may have "#" prefix) "RTN","CASHCN",108,0) ; FLAGS - (Required) - May contain "I" for Simple IDs "RTN","CASHCN",109,0) ; PACKAGE - (Required) - Cache Package for generated Classes "RTN","CASHCN",110,0) ; ID - (Optional) - Optional ID Name override for Simple IDs "RTN","CASHCN",111,0) ; "RTN","CASHCN",112,0) ; Return Value = Full SQL ID Name (including Schema) "RTN","CASHCN",113,0) ; "RTN","CASHCN",114,0) ; NOTE: %CacheSQLStorage is used so the SQL Table name must be used "RTN","CASHCN",115,0) ; rather than the Class Name. "RTN","CASHCN",116,0) ; "RTN","CASHCN",117,0) N FILE1,NAME,SQLNM,UIDNM "RTN","CASHCN",118,0) S FILE1=$TR(FILE,"#","") ; Strip "#" if necessary "RTN","CASHCN",119,0) D GETNAMES(FILE1,FLAGS,PACKAGE,ID,.NAME,.SQLNM,.UIDNM) "RTN","CASHCN",120,0) I SQLNM="" S SQLNM=NAME "RTN","CASHCN",121,0) I SQLNM="" Q "" "RTN","CASHCN",122,0) ; "RTN","CASHCN",123,0) ; If PACKAGE is User it must be changed to SQLUser for SQL "RTN","CASHCN",124,0) I $$UP^XLFSTR(PACKAGE)="USER" S PACKAGE="SQLUser" "RTN","CASHCN",125,0) ; "RTN","CASHCN",126,0) Q PACKAGE_"."_SQLNM_"."_UIDNM "RTN","CASHCU") 0^13^B35588272 "RTN","CASHCU",1,0) CASHCU ;ALB/MGC - FileMan Class Map - Compile Utilities ; 10/20/04@3:00:00 "RTN","CASHCU",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHCU",3,0) ; "RTN","CASHCU",4,0) Q ; Specific Entry Point must be used "RTN","CASHCU",5,0) ; "RTN","CASHCU",6,0) ; COMPILE UTILTIY CALLS "RTN","CASHCU",7,0) ; "RTN","CASHCU",8,0) CLCOMP(CLNAME,OWNER,FLAGS) ; Class Compile "RTN","CASHCU",9,0) ; Wrap this System call to NEW the variables "RTN","CASHCU",10,0) N %code,%msql,%objlasterror,bmidx,desirn,desrowid,err,f4,ifn,isub,len,mid,origin,sellist,success ; Version 5.0+ "RTN","CASHCU",11,0) N FIELD,FILE,PFIELD,PFILE,flist,ifn,mlfld,newlist,ridfname,sc,str,stub,temp,test ; Version 4.1 "RTN","CASHCU",12,0) N CFLG "RTN","CASHCU",13,0) S CFLG="U" "RTN","CASHCU",14,0) ; Change Class Owner if specified (default = _SYSTEM) "RTN","CASHCU",15,0) I $G(OWNER)'="" S %msql=OWNER "RTN","CASHCU",16,0) ; Add SQL Only Flag if "Q" passed in FLAGS "RTN","CASHCU",17,0) I $G(FLAGS)["Q" S CFLG="QU" "RTN","CASHCU",18,0) D $SYSTEM.OBJ.Compile(CLNAME,CFLG) "RTN","CASHCU",19,0) Q "RTN","CASHCU",20,0) ; "RTN","CASHCU",21,0) CLDEL(CLNAME) ; Class Delete "RTN","CASHCU",22,0) N NAME,OK,PACKAGE,SQLCODE,WSNAME,%objlasterror "RTN","CASHCU",23,0) ; Delete the main Class "RTN","CASHCU",24,0) D $SYSTEM.OBJ.Delete(CLNAME) "RTN","CASHCU",25,0) ; Now make sure any related classes are also deleted "RTN","CASHCU",26,0) ; These can't function without the parent and should not be left orphaned "RTN","CASHCU",27,0) ; "RTN","CASHCU",28,0) ; Unpack the Package and Name "RTN","CASHCU",29,0) I $L(CLNAME,".")=1 S PACKAGE="User",NAME=CLNAME "RTN","CASHCU",30,0) E S PACKAGE=$P(CLNAME,".",1,$L(CLNAME,".")-1),NAME=$P(CLNAME,".",$L(CLNAME,".")) "RTN","CASHCU",31,0) ; "RTN","CASHCU",32,0) ; Delete any Web Service classes that rely on this class "RTN","CASHCU",33,0) S WSNAME=PACKAGE_"."_$E(NAME,1,24)_"WS" "RTN","CASHCU",34,0) I $D(^oddDEF(WSNAME)) D "RTN","CASHCU",35,0) .N CLS "RTN","CASHCU",36,0) .S CLS=WSNAME "RTN","CASHCU",37,0) .D $SYSTEM.OBJ.Delete(CLS) "RTN","CASHCU",38,0) .F S CLS=$O(^oddDEF(CLS)) Q:$E(CLS,1,$L(WSNAME))'=WSNAME D $SYSTEM.OBJ.Delete(CLS) "RTN","CASHCU",39,0) .Q "RTN","CASHCU",40,0) ; "RTN","CASHCU",41,0) ; Now look for any related Sub files "RTN","CASHCU",42,0) ; Standard names first ("B" Index) "RTN","CASHCU",43,0) I $D(^CASH(15050.11,"B",NAME)) D "RTN","CASHCU",44,0) .N FILE,SUB "RTN","CASHCU",45,0) .S FILE=$O(^CASH(15050.11,"B",NAME,"")) Q:FILE="" "RTN","CASHCU",46,0) .S SUB=0 F S SUB=$O(^CASH(15050.11,FILE,4,SUB)) Q:'+SUB D "RTN","CASHCU",47,0) ..N SUBNM "RTN","CASHCU",48,0) ..S SUBNM=$P($G(^CASH(15050.11,SUB,0)),"^",1) Q:SUBNM="" "RTN","CASHCU",49,0) ..S SUBNM=PACKAGE_"."_SUBNM "RTN","CASHCU",50,0) ..; Recursive call to properly delete Subclasses "RTN","CASHCU",51,0) ..I $D(^oddDEF(SUBNM)) D CLDEL(SUBNM) "RTN","CASHCU",52,0) ..Q "RTN","CASHCU",53,0) .I $$FLDCNT^CASHFN11(FILE)>200!($P($G(^CASH(15050.11,FILE,4,0)),"^",4)>75) D "RTN","CASHCU",54,0) ..N I,CLS "RTN","CASHCU",55,0) ..F I=1:1:26 S CLS=PACKAGE_"."_NAME_$C(64+I) Q:'$D(^oddDEF(CLS)) D $SYSTEM.OBJ.Delete(CLS) "RTN","CASHCU",56,0) ..Q "RTN","CASHCU",57,0) .Q "RTN","CASHCU",58,0) ; Now alternate names created with the "N" Flag ("N" Index) "RTN","CASHCU",59,0) I $D(^CASH(15050.11,"N",NAME)) D "RTN","CASHCU",60,0) .N FILE,SUB "RTN","CASHCU",61,0) .S FILE=$O(^CASH(15050.11,"N",NAME,"")) Q:FILE="" "RTN","CASHCU",62,0) .S SUB=0 F S SUB=$O(^CASH(15050.11,FILE,4,SUB)) Q:'+SUB D "RTN","CASHCU",63,0) ..N NUM,SUBNM "RTN","CASHCU",64,0) ..S SUBNM=$P($G(^CASH(15050.11,SUB,0)),"^",2) Q:SUBNM="" "RTN","CASHCU",65,0) ..S NUM=$TR(SUB,".","") "RTN","CASHCU",66,0) ..S SUBNM=$E(SUBNM,1,23-$L(NUM))_NUM "RTN","CASHCU",67,0) ..S SUBNM=PACKAGE_"."_SUBNM "RTN","CASHCU",68,0) ..; Recursive call to properly delete Subclasses "RTN","CASHCU",69,0) ..I $D(^oddDEF(SUBNM)) D CLDEL(SUBNM) "RTN","CASHCU",70,0) ..Q "RTN","CASHCU",71,0) .I $$FLDCNT^CASHFN11(FILE)>200!($P($G(^CASH(15050.11,FILE,4,0)),"^",4)>75) D "RTN","CASHCU",72,0) ..N I,CLS,NM,NUM "RTN","CASHCU",73,0) ..S NM=$P($G(^CASH(15050.11,FILE,0)),"^",2) "RTN","CASHCU",74,0) ..I NM="" S NM=$P($G(^CASH(15050.11,FILE,0)),"^",1) "RTN","CASHCU",75,0) ..S NUM=$TR(FILE,".","") "RTN","CASHCU",76,0) ..F I=1:1:26 S CLS=PACKAGE_"."_$E(NM,1,23-$L(NUM))_$C(64+I)_NUM Q:'$D(^oddDEF(CLS)) D $SYSTEM.OBJ.Delete(CLS) "RTN","CASHCU",77,0) ..Q "RTN","CASHCU",78,0) .Q "RTN","CASHCU",79,0) Q "RTN","CASHCU",80,0) ; "RTN","CASHCU",81,0) CLASSOK(CLNAME) ; Is the passed in Class fully compiled? "RTN","CASHCU",82,0) ; "RTN","CASHCU",83,0) ; WARNING: Any open Objects will be closed by this call! "RTN","CASHCU",84,0) ; "RTN","CASHCU",85,0) ; I have found that ##CLASS(%Dictionary.CompiledClass).%ExistsId(NAME) can return "RTN","CASHCU",86,0) ; false positives. It seems to just check $D(^oddCOM(NAME)), which can still exist "RTN","CASHCU",87,0) ; if the compile failed late on. "RTN","CASHCU",88,0) ; The only way I've found to be 100% sure a class exists is to try and use it! "RTN","CASHCU",89,0) ; "RTN","CASHCU",90,0) N X S X="CLNOTOK^CASHCU" S @^%ZOSF("TRAP") "RTN","CASHCU",91,0) ; The value of RES is irrelevant, we are just testing that the class can be used "RTN","CASHCU",92,0) N RES "RTN","CASHCU",93,0) ; Use ExtentPrepare() instead of %ExistsId()! "RTN","CASHCU",94,0) ; This has slightly less overhead, and works for classes compiled with the "Q" flag (SQL only) "RTN","CASHCU",95,0) ;S RES=$ZOBJCLASSMETHOD(CLNAME,"%ExistsId",1) "RTN","CASHCU",96,0) S RES=$ZOBJCLASSMETHOD(CLNAME,"ExtentPrepare",1) "RTN","CASHCU",97,0) ; Make sure all objects are closed after this call, to prevent "" error "RTN","CASHCU",98,0) D $SYSTEM.OBJ.CloseObjects() "RTN","CASHCU",99,0) Q 1 "RTN","CASHCU",100,0) ; "RTN","CASHCU",101,0) CLNOTOK ; Class is not OK! "RTN","CASHCU",102,0) ; Make sure all objects are closed after this call, to prevent "" error "RTN","CASHCU",103,0) D $SYSTEM.OBJ.CloseObjects() "RTN","CASHCU",104,0) Q 0 "RTN","CASHCU",105,0) ; "RTN","CASHCU",106,0) MAXVALS(FILE,FLAGS,MAXT,MAXM) ; Initialize the Maximum Values of Properties/Sub-Classes per class "RTN","CASHCU",107,0) N PARAM "RTN","CASHCU",108,0) ; "RTN","CASHCU",109,0) S MAXT=250 ; This is the default for the Total Number of Properties "RTN","CASHCU",110,0) S MAXM=75 ; This is the default for the Number of Multiples "RTN","CASHCU",111,0) ; "RTN","CASHCU",112,0) ; Now check File #15050.14 for Parameter vales and overrides "RTN","CASHCU",113,0) ; Total number of Properties "RTN","CASHCU",114,0) S PARAM=$$FIND^CASHR(15050.14,"MAXIMUM FIELDS PER CLASS") "RTN","CASHCU",115,0) I +PARAM D "RTN","CASHCU",116,0) .N VAL "RTN","CASHCU",117,0) .; Check override for this File # "RTN","CASHCU",118,0) .S VAL=$$GETDATA^CASHR(15050.141,.02,PARAM_"||"_FILE) "RTN","CASHCU",119,0) .; Otherwise get default value "RTN","CASHCU",120,0) .I VAL="" S VAL=$$GETDATA^CASHR(15050.14,.02,PARAM) "RTN","CASHCU",121,0) .I +VAL S MAXT=VAL "RTN","CASHCU",122,0) .Q "RTN","CASHCU",123,0) ; Number of Multiples "RTN","CASHCU",124,0) S PARAM=$$FIND^CASHR(15050.14,"MAXIMUM MULTIPLES PER CLASS") "RTN","CASHCU",125,0) I +PARAM D "RTN","CASHCU",126,0) .N VAL "RTN","CASHCU",127,0) .; Check override for this File # "RTN","CASHCU",128,0) .S VAL=$$GETDATA^CASHR(15050.141,.02,PARAM_"||"_FILE) "RTN","CASHCU",129,0) .; Otherwise get default value "RTN","CASHCU",130,0) .I VAL="" S VAL=$$GETDATA^CASHR(15050.14,.02,PARAM) "RTN","CASHCU",131,0) .I +VAL S MAXM=VAL "RTN","CASHCU",132,0) .Q "RTN","CASHCU",133,0) Q "RTN","CASHCU",134,0) ; "RTN","CASHCU",135,0) ; ERROR TRAP "RTN","CASHCU",136,0) ; "RTN","CASHCU",137,0) ERROR ; Simple Error trap for Compilation errors "RTN","CASHCU",138,0) ; Kill All Compile variables in case of error "RTN","CASHCU",139,0) K CARD,CAT,CFLAGS,CLASS,CLNAME,CODE,COLL,COND,CRLF,DATA,DESC,ERROR,EXISTS,EXP "RTN","CASHCU",140,0) K FIELD,FLD,I,INDEX,J,K,LABEL,LASTMTD,LBL,LINE,M,MAP,MAPNODE0,METH,METHW,METHX "RTN","CASHCU",141,0) K MNODE0,MODE,MTHD,NAME,NODE0,OK,PARAM,PARENT,PARNODE0,PFILE,PFLAGS,PLIST "RTN","CASHCU",142,0) K PNODE0,PNODE3,PNTR,PNTRMAP,PROP,QRY,QRYNM,RCIENS,REL,REQ,SKIPMAP,SPEC,SQLNM "RTN","CASHCU",143,0) K STORAGE,SUB,SUBFILE,SUBNM,SUBNODE0,SUBS,SUPER,TMPLIST,TRIG,TYPE,UID,UIDNM "RTN","CASHCU",144,0) K VALUE,WHERE,WSCLS,WSNAME,WSPRM,WSQRY,X "RTN","CASHCU",145,0) ; Unlock ^XTMP("CASH") "RTN","CASHCU",146,0) D UNLOCK^CASHU($J) "RTN","CASHCU",147,0) ; "RTN","CASHCU",148,0) N ERRNO,OBJERR,ZE "RTN","CASHCU",149,0) S ERROR=$G(ERROR,"Compile Error") "RTN","CASHCU",150,0) S ZE=$$EC^%ZOSV() "RTN","CASHCU",151,0) D ERRSAV(ERROR,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),ZE,$G(%objlasterror),.LIST) "RTN","CASHCU",152,0) Q 0 "RTN","CASHCU",153,0) ; "RTN","CASHCU",154,0) ERRSAV(ERROR,FILE,FLAGS,PACKAGE,ID,OWNER,ZE,OBJLE,LIST) ; Save Error Details "RTN","CASHCU",155,0) N ERRNO,OBJERR "RTN","CASHCU",156,0) I $G(OBJLE)'="" D $SYSTEM.Status.DecomposeStatus(OBJLE,.OBJERR) "RTN","CASHCU",157,0) S OBJERR=$G(OBJERR) "RTN","CASHCU",158,0) I OBJERR'="" S OBJERR=OBJERR(OBJERR) "RTN","CASHCU",159,0) S ERRNO="" "RTN","CASHCU",160,0) D ADDERR^CASHFN13(.ERRNO,ERROR,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),ZE,OBJERR) "RTN","CASHCU",161,0) I $D(LIST) S LIST=0 F S LIST=$O(LIST(LIST)) Q:'+LIST D ADDLIST^CASHFN13(ERRNO,LIST) "RTN","CASHCU",162,0) W !,"ERROR: "_$ZE_"^Saved in #15050.13 IEN="_ERRNO,! "RTN","CASHCU",163,0) Q "RTN","CASHCU",164,0) ; "RTN","CASHCU",165,0) ; TIME PERIOD UTILITY "RTN","CASHCU",166,0) ; "RTN","CASHCU",167,0) TPLEN(TS1,TS2) ; Get Time Period Length for two Timestamps "RTN","CASHCU",168,0) N DAY1,DAY2,TIM1,TIM2,TP "RTN","CASHCU",169,0) S DAY1=$P(TS1,",",1) "RTN","CASHCU",170,0) S TIM1=$P(TS1,",",2) "RTN","CASHCU",171,0) S DAY2=$P(TS2,",",1) "RTN","CASHCU",172,0) S TIM2=$P(TS2,",",2) "RTN","CASHCU",173,0) ; Check for Invalid entries "RTN","CASHCU",174,0) I TS1'?1.5N1","1.5N Q -1 "RTN","CASHCU",175,0) I TS2'?1.5N1","1.5N Q -1 "RTN","CASHCU",176,0) I DAY1>DAY2 Q -1 "RTN","CASHCU",177,0) I DAY1=DAY2,TIM1>TIM2 Q -1 "RTN","CASHCU",178,0) I DAY2>DAY1 S TIM2=TIM2+((DAY2-DAY1)*86400) "RTN","CASHCU",179,0) S TP=TIM2-TIM1 "RTN","CASHCU",180,0) Q (TP\3600)_"h "_((TP#3600)\60)_"m "_(TP#60)_"s" "RTN","CASHD") 0^14^B63871937 "RTN","CASHD",1,0) CASHD ;ALB/MGC - Datatype Compiler for Cache version 5.0.x+ ; 01/27/05@3:00:00 "RTN","CASHD",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHD",3,0) ; "RTN","CASHD",4,0) Q ; Specific Entry Point must be used "RTN","CASHD",5,0) ; "RTN","CASHD",6,0) ALL() ; Create and Compile all Custom Datatypes (Cache 5+) "RTN","CASHD",7,0) ; "RTN","CASHD",8,0) ; IMPORTANT: Do Not call directly! "RTN","CASHD",9,0) ; This entry point should only be accessed by POST^CASHI "RTN","CASHD",10,0) ; "RTN","CASHD",11,0) ; See POST^CASHI for documentation. "RTN","CASHD",12,0) ; "RTN","CASHD",13,0) N DTYPE "RTN","CASHD",14,0) ; "RTN","CASHD",15,0) ; Loop through Custom Datatypes "RTN","CASHD",16,0) S DTYPE=0 "RTN","CASHD",17,0) F S DTYPE=$O(^CASH(15050.12,DTYPE)) Q:'+DTYPE D CREATE(DTYPE,"CASH.FileMan") "RTN","CASHD",18,0) Q 1 "RTN","CASHD",19,0) ; "RTN","CASHD",20,0) CREATE(DTYPE,PACKAGE,NONPB) ; Create and Compile Custom Datatype (Cache 5+) "RTN","CASHD",21,0) ; "RTN","CASHD",22,0) ; IMPORTANT: Do Not call directly! "RTN","CASHD",23,0) ; This entry point should only be accessed by ALL^CASHD "RTN","CASHD",24,0) ; "RTN","CASHD",25,0) N ARRAY,CDT,CLASS,DESC,DTNAME,EXISTS,I,IENS,INC,J,METH,ODBC,OK,PARAM,SQL,SUPER,VER "RTN","CASHD",26,0) ; "RTN","CASHD",27,0) S IENS=DTYPE_"," "RTN","CASHD",28,0) D UNPACK^CASHFN12(IENS,.ARRAY) "RTN","CASHD",29,0) ; "RTN","CASHD",30,0) ; Get Name "RTN","CASHD",31,0) S DTNAME=PACKAGE_"."_ARRAY(15050.12,IENS,.01) "RTN","CASHD",32,0) ; "RTN","CASHD",33,0) ; Check if Datatype exists and Delete if so "RTN","CASHD",34,0) S EXISTS=##CLASS(%Dictionary.ClassDefinition).%ExistsId(DTNAME) "RTN","CASHD",35,0) I EXISTS D CLDEL^CASHCU(DTNAME) "RTN","CASHD",36,0) ; "RTN","CASHD",37,0) S CDT=ARRAY(15050.12,IENS,.02) "RTN","CASHD",38,0) S ODBC=ARRAY(15050.12,IENS,.03) "RTN","CASHD",39,0) S SQL=ARRAY(15050.12,IENS,.04) "RTN","CASHD",40,0) S INC=ARRAY(15050.12,IENS,.05) "RTN","CASHD",41,0) S SUPER=ARRAY(15050.12,IENS,.06) "RTN","CASHD",42,0) ; "RTN","CASHD",43,0) DTYPE ; Create the new Class "RTN","CASHD",44,0) S CLASS=##CLASS(%Dictionary.ClassDefinition).%New() "RTN","CASHD",45,0) S CLASS.Name=DTNAME "RTN","CASHD",46,0) S CLASS.ClassType="datatype" "RTN","CASHD",47,0) I CDT'="" S CLASS.ClientDataType=CDT "RTN","CASHD",48,0) I ODBC'="" S CLASS.OdbcType=ODBC "RTN","CASHD",49,0) I SQL'="" S CLASS.SqlCategory=SQL "RTN","CASHD",50,0) I INC'="" S CLASS.IncludeGenerator=INC "RTN","CASHD",51,0) I SUPER'="" S CLASS.Super=SUPER "RTN","CASHD",52,0) S CLASS.ProcedureBlock=1 "RTN","CASHD",53,0) ; If Non Proceedure Block flag passed "RTN","CASHD",54,0) I $G(NONPB) S CLASS.ProcedureBlock=0 "RTN","CASHD",55,0) ; "RTN","CASHD",56,0) DESC ; Add the Description "RTN","CASHD",57,0) S DESC=$G(ARRAY(15050.12,IENS,1,1)) "RTN","CASHD",58,0) F J=2:1 Q:'$D(ARRAY(15050.12,IENS,1,J)) S DESC=DESC_$C(13,10)_ARRAY(15050.12,IENS,1,J) "RTN","CASHD",59,0) S CLASS.Description=DESC "RTN","CASHD",60,0) ; "RTN","CASHD",61,0) PARAM ; Loop through and add any Parameters "RTN","CASHD",62,0) S IENS="" "RTN","CASHD",63,0) F I=1:1 S IENS=$O(ARRAY(15050.123,IENS)) Q:IENS="" D "RTN","CASHD",64,0) .; Create new Parameter "RTN","CASHD",65,0) .S PARAM(I)=##CLASS(%Dictionary.ParameterDefinition).%New() "RTN","CASHD",66,0) .S PARAM(I).Name=ARRAY(15050.123,IENS,.01) "RTN","CASHD",67,0) .S PARAM(I).Default=ARRAY(15050.123,IENS,.02) "RTN","CASHD",68,0) .S PARAM(I).Type=ARRAY(15050.123,IENS,.03) "RTN","CASHD",69,0) .; Get Description "RTN","CASHD",70,0) .S DESC=$G(ARRAY(15050.123,IENS,1,1)) "RTN","CASHD",71,0) .F J=2:1 Q:'$D(ARRAY(15050.123,IENS,1,J)) S DESC=DESC_$C(13,10)_ARRAY(15050.123,IENS,1,J) "RTN","CASHD",72,0) .S PARAM(I).Description=DESC "RTN","CASHD",73,0) .D CLASS.Parameters.SetAt(PARAM(I),I) "RTN","CASHD",74,0) .Q "RTN","CASHD",75,0) ; "RTN","CASHD",76,0) METHODS ; Loop through and add any Methods "RTN","CASHD",77,0) S IENS="" "RTN","CASHD",78,0) S VER=$$OBJVER^CASHU() "RTN","CASHD",79,0) F I=1:1 S IENS=$O(ARRAY(15050.122,IENS)) Q:IENS="" D "RTN","CASHD",80,0) .; Create new Method "RTN","CASHD",81,0) .N NAME "RTN","CASHD",82,0) .S NAME=ARRAY(15050.122,IENS,.01) "RTN","CASHD",83,0) .S METH(I)=##CLASS(%Dictionary.MethodDefinition).%New() "RTN","CASHD",84,0) .S METH(I).Name=NAME "RTN","CASHD",85,0) .S METH(I).ClassMethod=ARRAY(15050.122,IENS,.02) "RTN","CASHD",86,0) .S METH(I).CodeMode=ARRAY(15050.122,IENS,.03) "RTN","CASHD",87,0) .S METH(I).FormalSpec=ARRAY(15050.122,IENS,.04) "RTN","CASHD",88,0) .S METH(I).Private=ARRAY(15050.122,IENS,.05) "RTN","CASHD",89,0) .S METH(I).PublicList=ARRAY(15050.122,IENS,.06) "RTN","CASHD",90,0) .S METH(I).ReturnType=ARRAY(15050.122,IENS,.07) "RTN","CASHD",91,0) .; Check IsValidDT() ReturnType if relevant - Change to Boolean for 5.1+ "RTN","CASHD",92,0) .I NAME="IsValidDT",VER>5 S METH(I).ReturnType="%Library.Boolean" "RTN","CASHD",93,0) .; Get Description "RTN","CASHD",94,0) .S DESC=$G(ARRAY(15050.122,IENS,1,1)) "RTN","CASHD",95,0) .F J=2:1 Q:'$D(ARRAY(15050.122,IENS,1,J)) S DESC=DESC_$C(13,10)_ARRAY(15050.122,IENS,1,J) "RTN","CASHD",96,0) .S METH(I).Description=DESC "RTN","CASHD",97,0) .; Loop through and add Code Lines (Implementation) "RTN","CASHD",98,0) .F J=1:1 Q:'$D(ARRAY(15050.122,IENS,2,J)) D "RTN","CASHD",99,0) ..N LINE "RTN","CASHD",100,0) ..S LINE=$G(ARRAY(15050.122,IENS,2,J)) "RTN","CASHD",101,0) ..; If CodeMode is not "expression", make sure lines have leading spaces "RTN","CASHD",102,0) ..I METH(I).CodeMode'="expression",$E(LINE)'=" " S LINE=" "_LINE "RTN","CASHD",103,0) ..S OK=METH(I).Implementation.WriteLine(LINE) "RTN","CASHD",104,0) ..Q "RTN","CASHD",105,0) .D CLASS.Methods.SetAt(METH(I),I) "RTN","CASHD",106,0) .Q "RTN","CASHD",107,0) ; "RTN","CASHD",108,0) S OK=CLASS.%Save() "RTN","CASHD",109,0) D CLCOMP^CASHCU(DTNAME) "RTN","CASHD",110,0) Q "RTN","CASHD",111,0) ; "RTN","CASHD",112,0) PREPARE ; Generate the Custom Datatype Initialisation Routines (CASHDT0*) from the current FileMan Datatypes "RTN","CASHD",113,0) ; "RTN","CASHD",114,0) ; IMPORTANT: This Utility should only be used if updates to the FileMan Datatypes need to be released "RTN","CASHD",115,0) ; "RTN","CASHD",116,0) N I,DTNAME,%ROWCOUNT,%objcn "RTN","CASHD",117,0) S DTNAME="CASH.FileMan" "RTN","CASHD",118,0) F I=1:1 S DTNAME=$O(^oddDEF(DTNAME)) Q:$E(DTNAME,1,12)'="CASH.FileMan" D "RTN","CASHD",119,0) .N BIT,CDT,DESC,DTYPE,INC,J,K,LINE,NM,ODBC,RTNM,SQL,SUPER "RTN","CASHD",120,0) .S RTNM="CASHDT0"_I "RTN","CASHD",121,0) .S DTYPE=##CLASS(%Dictionary.ClassDefinition).%OpenId(DTNAME) "RTN","CASHD",122,0) .S CDT=DTYPE.ClientDataType "RTN","CASHD",123,0) .S ODBC=DTYPE.OdbcType "RTN","CASHD",124,0) .S SQL=DTYPE.SqlCategory "RTN","CASHD",125,0) .S INC=DTYPE.IncludeGenerator "RTN","CASHD",126,0) .S SUPER=DTYPE.Super "RTN","CASHD",127,0) .S NM=$P(DTNAME,".",3) "RTN","CASHD",128,0) .K ^TMP("CASHD",$J) "RTN","CASHD",129,0) .; Routine header "RTN","CASHD",130,0) .S LINE=0 "RTN","CASHD",131,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=RTNM_" ;ALB/MGC - Initialisation for Custom Datatype "_I_" ; 01/27/05@3:00:00" "RTN","CASHD",132,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;;1.0;FM TO CACHE SQL;;Jul 08, 2005" "RTN","CASHD",133,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;" "RTN","CASHD",134,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; "_DTNAME "RTN","CASHD",135,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" N CODE,DESC" "RTN","CASHD",136,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;" "RTN","CASHD",137,0) .; Top level "RTN","CASHD",138,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; Add top level" "RTN","CASHD",139,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDDT^CASHFN12("_I_","""_NM_""","""_CDT_""","""_ODBC_""","""_SQL_""","""_INC_""","""_SUPER_""")" "RTN","CASHD",140,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;" "RTN","CASHD",141,0) .; Description "RTN","CASHD",142,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; Add Description" "RTN","CASHD",143,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" K DESC" "RTN","CASHD",144,0) .S DESC=DTYPE.Description "RTN","CASHD",145,0) .F J=1:1:$L(DESC,$C(13,10)) S BIT=$P(DESC,$C(13,10),J) S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" S DESC("_J_")="""_BIT_"""" "RTN","CASHD",146,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDDESC^CASHFN12("_I_",.DESC)" "RTN","CASHD",147,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;" "RTN","CASHD",148,0) .; Parameters "RTN","CASHD",149,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; Add Parameters" "RTN","CASHD",150,0) .F K=1:1:DTYPE.Parameters.Count() D "RTN","CASHD",151,0) ..N DEFAULT,NAME,PARAM,TYPE "RTN","CASHD",152,0) ..S PARAM=DTYPE.Parameters.GetAt(K) "RTN","CASHD",153,0) ..S NAME=PARAM.Name "RTN","CASHD",154,0) ..S DEFAULT=PARAM.Default "RTN","CASHD",155,0) ..S TYPE=PARAM.Type "RTN","CASHD",156,0) ..S DESC=PARAM.Description "RTN","CASHD",157,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" K DESC" "RTN","CASHD",158,0) ..F J=1:1:$L(DESC,$C(13,10)) S BIT=$P(DESC,$C(13,10),J) S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" S DESC("_J_")="""_BIT_"""" "RTN","CASHD",159,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDPARAM^CASHFN12("_I_","_K_","""_NAME_""","""_DEFAULT_""","""_TYPE_""")" "RTN","CASHD",160,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDPDESC^CASHFN12("_I_","_K_",.DESC)" "RTN","CASHD",161,0) ..Q "RTN","CASHD",162,0) .; Methods "RTN","CASHD",163,0) .F K=1:1:DTYPE.Methods.Count() D "RTN","CASHD",164,0) ..N CMODE,CMTHD,CODE,DESC,METH,NAME,PRIV,PUBLIC,RTYPE,SPEC "RTN","CASHD",165,0) ..S METH=DTYPE.Methods.GetAt(K) "RTN","CASHD",166,0) ..S NAME=METH.Name "RTN","CASHD",167,0) ..S CMTHD=METH.ClassMethod "RTN","CASHD",168,0) ..S CMODE=METH.CodeMode "RTN","CASHD",169,0) ..S SPEC=METH.FormalSpec "RTN","CASHD",170,0) ..S PRIV=METH.Private "RTN","CASHD",171,0) ..S PUBLIC=METH.PublicList "RTN","CASHD",172,0) ..S RTYPE=METH.ReturnType "RTN","CASHD",173,0) ..I CMODE'="" S CMODE=$$UP^XLFSTR($E(CMODE)) "RTN","CASHD",174,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;" "RTN","CASHD",175,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; Add "_NAME_" Method" "RTN","CASHD",176,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDMTD^CASHFN12("_I_","_K_","""_NAME_""","_+CMTHD_","""_CMODE_""","""_SPEC_""","_+PRIV_","""","""_RTYPE_""")" "RTN","CASHD",177,0) ..S DESC=METH.Description "RTN","CASHD",178,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; Add "_NAME_" Description" "RTN","CASHD",179,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" K DESC" "RTN","CASHD",180,0) ..F J=1:1 S BIT=$P(DESC,$C(13,10),J) Q:BIT="" S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" S DESC("_J_")="""_BIT_"""" "RTN","CASHD",181,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDMDESC^CASHFN12("_I_","_K_",.DESC)" "RTN","CASHD",182,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; Add "_NAME_" Code" "RTN","CASHD",183,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" K CODE" "RTN","CASHD",184,0) ..S CODE=METH.Implementation.Read() "RTN","CASHD",185,0) ..F J=1:1 S BIT=$P(CODE,$C(13,10),J) Q:BIT="" S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" S CODE("_J_")="_$$QUOTE^XLFSTR(BIT) "RTN","CASHD",186,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDCODE^CASHFN12("_I_","_K_",.CODE)" "RTN","CASHD",187,0) ..Q "RTN","CASHD",188,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;" "RTN","CASHD",189,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" Q" "RTN","CASHD",190,0) .D SAVE(RTNM,"^TMP(""CASHD"","_$J_",") "RTN","CASHD",191,0) .K ^TMP("CASHD",$J) "RTN","CASHD",192,0) .Q "RTN","CASHD",193,0) Q "RTN","CASHD",194,0) ; "RTN","CASHD",195,0) SAVE(X,DIE) ; "RTN","CASHD",196,0) N %,XCM,XCN,XCS "RTN","CASHD",197,0) S XCN=0 "RTN","CASHD",198,0) X ^%ZOSF("SAVE") "RTN","CASHD",199,0) Q "RTN","CASHDT01") 0^15^B23175140 "RTN","CASHDT01",1,0) CASHDT01 ;ALB/MGC - Initialisation for Custom Datatype 1 ; 01/27/05@3:00:00 "RTN","CASHDT01",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHDT01",3,0) ; "RTN","CASHDT01",4,0) ; CASH.FileMan.Date "RTN","CASHDT01",5,0) N CODE,DESC "RTN","CASHDT01",6,0) ; "RTN","CASHDT01",7,0) ; Add top level "RTN","CASHDT01",8,0) D ADDDT^CASHFN12(1,"Date","DATE","DATE","DATE","%occInclude,%occUtility","") "RTN","CASHDT01",9,0) ; "RTN","CASHDT01",10,0) ; Add Description "RTN","CASHDT01",11,0) K DESC "RTN","CASHDT01",12,0) S DESC(1)="DO NOT EDIT: Custom DataType - DATE - Mike Clayton 12/15/2004" "RTN","CASHDT01",13,0) S DESC(2)="Usage: FileMan DATE/TIME datatypes (Date only)" "RTN","CASHDT01",14,0) D ADDDESC^CASHFN12(1,.DESC) "RTN","CASHDT01",15,0) ; "RTN","CASHDT01",16,0) ; Add Parameters "RTN","CASHDT01",17,0) K DESC "RTN","CASHDT01",18,0) S DESC(1)="The FileMan Field should be specified " "RTN","CASHDT01",19,0) D ADDPARAM^CASHFN12(1,1,"FIELD","","") "RTN","CASHDT01",20,0) D ADDPDESC^CASHFN12(1,1,.DESC) "RTN","CASHDT01",21,0) K DESC "RTN","CASHDT01",22,0) S DESC(1)="The FileMan File should be specified" "RTN","CASHDT01",23,0) D ADDPARAM^CASHFN12(1,2,"FILE","","") "RTN","CASHDT01",24,0) D ADDPDESC^CASHFN12(1,2,.DESC) "RTN","CASHDT01",25,0) K DESC "RTN","CASHDT01",26,0) S DESC(1)="Used for converting Dates, and validating them if FILE and/or" "RTN","CASHDT01",27,0) S DESC(2)="FIELD are null." "RTN","CASHDT01",28,0) S DESC(3)="" "RTN","CASHDT01",29,0) S DESC(4)="[Note: The Runtime Calls pass these flags to DT^DILF. Valid FLAGS" "RTN","CASHDT01",30,0) S DESC(5)=" for CASH.FileMan.Date may include F,I,M,N & P, whilst X is mandatory]" "RTN","CASHDT01",31,0) D ADDPARAM^CASHFN12(1,3,"FLAGS","X","") "RTN","CASHDT01",32,0) D ADDPDESC^CASHFN12(1,3,.DESC) "RTN","CASHDT01",33,0) K DESC "RTN","CASHDT01",34,0) S DESC(1)="UNUSED: Included for compatibility with CASH.FileMan.StringDateTime " "RTN","CASHDT01",35,0) D ADDPARAM^CASHFN12(1,4,"TRANSFORM","0","BOOLEAN") "RTN","CASHDT01",36,0) D ADDPDESC^CASHFN12(1,4,.DESC) "RTN","CASHDT01",37,0) ; "RTN","CASHDT01",38,0) ; Add DisplayToLogical Method "RTN","CASHDT01",39,0) D ADDMTD^CASHFN12(1,1,"DisplayToLogical",1,"G","%val:%Library.String",0,"","CASH.FileMan.Date") "RTN","CASHDT01",40,0) ; Add DisplayToLogical Description "RTN","CASHDT01",41,0) K DESC "RTN","CASHDT01",42,0) S DESC(1)="Converts Display format (various) to FileMan DATE format (CYYMMDD)" "RTN","CASHDT01",43,0) D ADDMDESC^CASHFN12(1,1,.DESC) "RTN","CASHDT01",44,0) ; Add DisplayToLogical Code "RTN","CASHDT01",45,0) K CODE "RTN","CASHDT01",46,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT01",47,0) S CODE(2)=" S %code=""$$DATEIN^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""")""" "RTN","CASHDT01",48,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT01",49,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT01",50,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$INTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT01",51,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT01",52,0) D ADDCODE^CASHFN12(1,1,.CODE) "RTN","CASHDT01",53,0) ; "RTN","CASHDT01",54,0) ; Add IsValidDT Method "RTN","CASHDT01",55,0) D ADDMTD^CASHFN12(1,2,"IsValidDT",1,"G","%val:CASH.FileMan.Date",0,"","%Library.Integer") "RTN","CASHDT01",56,0) ; Add IsValidDT Description "RTN","CASHDT01",57,0) K DESC "RTN","CASHDT01",58,0) S DESC(1)="Tests if the value %val is a valid FileMan DATE - CYYMMDD" "RTN","CASHDT01",59,0) S DESC(2)="1 = Yes, 0 = No" "RTN","CASHDT01",60,0) D ADDMDESC^CASHFN12(1,2,.DESC) "RTN","CASHDT01",61,0) ; Add IsValidDT Code "RTN","CASHDT01",62,0) K CODE "RTN","CASHDT01",63,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT01",64,0) S CODE(2)=" S %code=""$$DATEVAL^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""")""" "RTN","CASHDT01",65,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT01",66,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT01",67,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$ISVALID^CASHR(""_FILE_"",""_FIELD_"",%val)"" Q $$$OK" "RTN","CASHDT01",68,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT01",69,0) D ADDCODE^CASHFN12(1,2,.CODE) "RTN","CASHDT01",70,0) ; "RTN","CASHDT01",71,0) ; Add LogicalToDisplay Method "RTN","CASHDT01",72,0) D ADDMTD^CASHFN12(1,3,"LogicalToDisplay",1,"G","%val:CASH.FileMan.Date",0,"","%Library.String") "RTN","CASHDT01",73,0) ; Add LogicalToDisplay Description "RTN","CASHDT01",74,0) K DESC "RTN","CASHDT01",75,0) S DESC(1)="Converts FileMan DATE format (CYYMMDD) to Display format (MMM DD, YYYY)" "RTN","CASHDT01",76,0) D ADDMDESC^CASHFN12(1,3,.DESC) "RTN","CASHDT01",77,0) ; Add LogicalToDisplay Code "RTN","CASHDT01",78,0) K CODE "RTN","CASHDT01",79,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT01",80,0) S CODE(2)=" S %code=""$$DATEOUT^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""")""" "RTN","CASHDT01",81,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT01",82,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT01",83,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$EXTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT01",84,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT01",85,0) D ADDCODE^CASHFN12(1,3,.CODE) "RTN","CASHDT01",86,0) ; "RTN","CASHDT01",87,0) ; Add LogicalToOdbc Method "RTN","CASHDT01",88,0) D ADDMTD^CASHFN12(1,4,"LogicalToOdbc",1,"G","%val:CASH.FileMan.Date",0,"","%Library.String") "RTN","CASHDT01",89,0) ; Add LogicalToOdbc Description "RTN","CASHDT01",90,0) K DESC "RTN","CASHDT01",91,0) S DESC(1)="Converts FileMan DATE format (CYYMMDD) to ODBC DATE format (YYYY-MM-DD)" "RTN","CASHDT01",92,0) D ADDMDESC^CASHFN12(1,4,.DESC) "RTN","CASHDT01",93,0) ; Add LogicalToOdbc Code "RTN","CASHDT01",94,0) K CODE "RTN","CASHDT01",95,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT01",96,0) S CODE(2)=" S %code=""$$DATEOUT^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""",1)""" "RTN","CASHDT01",97,0) S CODE(3)=" Q $$$OK" "RTN","CASHDT01",98,0) D ADDCODE^CASHFN12(1,4,.CODE) "RTN","CASHDT01",99,0) ; "RTN","CASHDT01",100,0) ; Add OdbcToLogical Method "RTN","CASHDT01",101,0) D ADDMTD^CASHFN12(1,5,"OdbcToLogical",1,"G","%val:%Library.String",0,"","CASH.FileMan.Date") "RTN","CASHDT01",102,0) ; Add OdbcToLogical Description "RTN","CASHDT01",103,0) K DESC "RTN","CASHDT01",104,0) S DESC(1)="Converts ODBC DATE format (YYYY-MM-DD) to FileMan DATE format (CYYMMDD)" "RTN","CASHDT01",105,0) D ADDMDESC^CASHFN12(1,5,.DESC) "RTN","CASHDT01",106,0) ; Add OdbcToLogical Code "RTN","CASHDT01",107,0) K CODE "RTN","CASHDT01",108,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT01",109,0) S CODE(2)=" S %code=""$$DATEIN^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""",1)""" "RTN","CASHDT01",110,0) S CODE(3)=" Q $$$OK" "RTN","CASHDT01",111,0) D ADDCODE^CASHFN12(1,5,.CODE) "RTN","CASHDT01",112,0) ; "RTN","CASHDT01",113,0) Q "RTN","CASHDT02") 0^16^B25155181 "RTN","CASHDT02",1,0) CASHDT02 ;ALB/MGC - Initialisation for Custom Datatype 2 ; 01/27/05@3:00:00 "RTN","CASHDT02",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHDT02",3,0) ; "RTN","CASHDT02",4,0) ; CASH.FileMan.DateTime "RTN","CASHDT02",5,0) N CODE,DESC "RTN","CASHDT02",6,0) ; "RTN","CASHDT02",7,0) ; Add top level "RTN","CASHDT02",8,0) D ADDDT^CASHFN12(2,"DateTime","TIMESTAMP","TIMESTAMP","TIMESTAMP","%occInclude,%occUtility","") "RTN","CASHDT02",9,0) ; "RTN","CASHDT02",10,0) ; Add Description "RTN","CASHDT02",11,0) K DESC "RTN","CASHDT02",12,0) S DESC(1)="DO NOT EDIT: Custom DataType - TIMESTAMP - Mike Clayton 12/15/2004" "RTN","CASHDT02",13,0) S DESC(2)="Usage: FileMan DATE/TIME datatypes (Date and Time)" "RTN","CASHDT02",14,0) D ADDDESC^CASHFN12(2,.DESC) "RTN","CASHDT02",15,0) ; "RTN","CASHDT02",16,0) ; Add Parameters "RTN","CASHDT02",17,0) K DESC "RTN","CASHDT02",18,0) S DESC(1)="The FileMan Field must be specified " "RTN","CASHDT02",19,0) D ADDPARAM^CASHFN12(2,1,"FIELD","","") "RTN","CASHDT02",20,0) D ADDPDESC^CASHFN12(2,1,.DESC) "RTN","CASHDT02",21,0) K DESC "RTN","CASHDT02",22,0) S DESC(1)="The FileMan File must be specified" "RTN","CASHDT02",23,0) D ADDPARAM^CASHFN12(2,2,"FILE","","") "RTN","CASHDT02",24,0) D ADDPDESC^CASHFN12(2,2,.DESC) "RTN","CASHDT02",25,0) K DESC "RTN","CASHDT02",26,0) S DESC(1)="Used for converting Datetimes, and validating them if FILE and/or" "RTN","CASHDT02",27,0) S DESC(2)="FIELD are null." "RTN","CASHDT02",28,0) S DESC(3)="" "RTN","CASHDT02",29,0) S DESC(4)="[Note: The Runtime Calls pass these flags to DT^DILF. Valid FLAGS" "RTN","CASHDT02",30,0) S DESC(5)=" for CASH.FileMan.DateTime may include F,I,M,N,P,R & S, whilst T & X" "RTN","CASHDT02",31,0) S DESC(6)=" are mandatory]" "RTN","CASHDT02",32,0) D ADDPARAM^CASHFN12(2,3,"FLAGS","TX","") "RTN","CASHDT02",33,0) D ADDPDESC^CASHFN12(2,3,.DESC) "RTN","CASHDT02",34,0) K DESC "RTN","CASHDT02",35,0) S DESC(1)="UNUSED: Included for compatibility with CASH.FileMan.StringDateTime " "RTN","CASHDT02",36,0) D ADDPARAM^CASHFN12(2,4,"TRANSFORM","0","BOOLEAN") "RTN","CASHDT02",37,0) D ADDPDESC^CASHFN12(2,4,.DESC) "RTN","CASHDT02",38,0) ; "RTN","CASHDT02",39,0) ; Add DisplayToLogical Method "RTN","CASHDT02",40,0) D ADDMTD^CASHFN12(2,1,"DisplayToLogical",1,"G","%val:%Library.String",0,"","CASH.FileMan.DateTime") "RTN","CASHDT02",41,0) ; Add DisplayToLogical Description "RTN","CASHDT02",42,0) K DESC "RTN","CASHDT02",43,0) S DESC(1)="Converts Display format (various) to FileMan DATE/TIME format (CYYMMDD.HHMMSS)" "RTN","CASHDT02",44,0) D ADDMDESC^CASHFN12(2,1,.DESC) "RTN","CASHDT02",45,0) ; Add DisplayToLogical Code "RTN","CASHDT02",46,0) K CODE "RTN","CASHDT02",47,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT02",48,0) S CODE(2)=" S %code=""$$DATEIN^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""")""" "RTN","CASHDT02",49,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT02",50,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT02",51,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$INTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT02",52,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT02",53,0) D ADDCODE^CASHFN12(2,1,.CODE) "RTN","CASHDT02",54,0) ; "RTN","CASHDT02",55,0) ; Add IsValidDT Method "RTN","CASHDT02",56,0) D ADDMTD^CASHFN12(2,2,"IsValidDT",1,"G","%val:CASH.FileMan.DateTime",0,"","%Library.Integer") "RTN","CASHDT02",57,0) ; Add IsValidDT Description "RTN","CASHDT02",58,0) K DESC "RTN","CASHDT02",59,0) S DESC(1)="Tests if the value %val is a valid FileMan DATE/TIME - CYYMMDD{.HHMMSS}" "RTN","CASHDT02",60,0) S DESC(2)="1 = Yes, 0 = No" "RTN","CASHDT02",61,0) D ADDMDESC^CASHFN12(2,2,.DESC) "RTN","CASHDT02",62,0) ; Add IsValidDT Code "RTN","CASHDT02",63,0) K CODE "RTN","CASHDT02",64,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT02",65,0) S CODE(2)=" S %code=""$$DATEVAL^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""")""" "RTN","CASHDT02",66,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT02",67,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT02",68,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$ISVALID^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT02",69,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT02",70,0) D ADDCODE^CASHFN12(2,2,.CODE) "RTN","CASHDT02",71,0) ; "RTN","CASHDT02",72,0) ; Add LogicalToDisplay Method "RTN","CASHDT02",73,0) D ADDMTD^CASHFN12(2,3,"LogicalToDisplay",1,"G","%val:CASH.FileMan.DateTime",0,"","%Library.String") "RTN","CASHDT02",74,0) ; Add LogicalToDisplay Description "RTN","CASHDT02",75,0) K DESC "RTN","CASHDT02",76,0) S DESC(1)="Converts FileMan DATE/TIME format (CYYMMDD.HHMMSS) to Display format (MMM DD, YYYY HH:MM:SS)" "RTN","CASHDT02",77,0) D ADDMDESC^CASHFN12(2,3,.DESC) "RTN","CASHDT02",78,0) ; Add LogicalToDisplay Code "RTN","CASHDT02",79,0) K CODE "RTN","CASHDT02",80,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT02",81,0) S CODE(2)=" S %code=""$$DATEOUT^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""")""" "RTN","CASHDT02",82,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT02",83,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT02",84,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$EXTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT02",85,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT02",86,0) D ADDCODE^CASHFN12(2,3,.CODE) "RTN","CASHDT02",87,0) ; "RTN","CASHDT02",88,0) ; Add LogicalToOdbc Method "RTN","CASHDT02",89,0) D ADDMTD^CASHFN12(2,4,"LogicalToOdbc",1,"G","%val:CASH.FileMan.DateTime",0,"","%Library.String") "RTN","CASHDT02",90,0) ; Add LogicalToOdbc Description "RTN","CASHDT02",91,0) K DESC "RTN","CASHDT02",92,0) S DESC(1)="Converts FileMan DATE/TIME format (CYYMMDD.HHMMSS) to ODBC TIMESTAMP format (YYYY-MM-DD HH:MM:SS)" "RTN","CASHDT02",93,0) D ADDMDESC^CASHFN12(2,4,.DESC) "RTN","CASHDT02",94,0) ; Add LogicalToOdbc Code "RTN","CASHDT02",95,0) K CODE "RTN","CASHDT02",96,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT02",97,0) S CODE(2)=" S %code=""$$DATEOUT^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""",1)""" "RTN","CASHDT02",98,0) S CODE(3)=" Q $$$OK" "RTN","CASHDT02",99,0) D ADDCODE^CASHFN12(2,4,.CODE) "RTN","CASHDT02",100,0) ; "RTN","CASHDT02",101,0) ; Add OdbcToLogical Method "RTN","CASHDT02",102,0) D ADDMTD^CASHFN12(2,5,"OdbcToLogical",1,"G","%val:%Library.String",0,"","CASH.FileMan.DateTime") "RTN","CASHDT02",103,0) ; Add OdbcToLogical Description "RTN","CASHDT02",104,0) K DESC "RTN","CASHDT02",105,0) S DESC(1)="Converts ODBC TIMESTAMP format (YYYY-MM-DD HH:MM:SS) to FileMan DATE/TIME format (CYYMMDD.HHMMSS)" "RTN","CASHDT02",106,0) D ADDMDESC^CASHFN12(2,5,.DESC) "RTN","CASHDT02",107,0) ; Add OdbcToLogical Code "RTN","CASHDT02",108,0) K CODE "RTN","CASHDT02",109,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT02",110,0) S CODE(2)=" S %code=""$$DATEIN^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""",1)""" "RTN","CASHDT02",111,0) S CODE(3)=" Q $$$OK" "RTN","CASHDT02",112,0) D ADDCODE^CASHFN12(2,5,.CODE) "RTN","CASHDT02",113,0) ; "RTN","CASHDT02",114,0) Q "RTN","CASHDT03") 0^17^B50096997 "RTN","CASHDT03",1,0) CASHDT03 ;ALB/MGC - Initialisation for Custom Datatype 3 ; 01/27/05@3:00:00 "RTN","CASHDT03",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHDT03",3,0) ; "RTN","CASHDT03",4,0) ; CASH.FileMan.Numeric "RTN","CASHDT03",5,0) N CODE,DESC "RTN","CASHDT03",6,0) ; "RTN","CASHDT03",7,0) ; Add top level "RTN","CASHDT03",8,0) D ADDDT^CASHFN12(3,"Numeric","VARCHAR","VARCHAR","STRING","","%Library.Float") "RTN","CASHDT03",9,0) ; "RTN","CASHDT03",10,0) ; Add Description "RTN","CASHDT03",11,0) K DESC "RTN","CASHDT03",12,0) S DESC(1)="DO NOT EDIT: Custom DataType - NUMERIC - Mike Clayton 12/15/2004" "RTN","CASHDT03",13,0) S DESC(2)="Usage: FileMan NUMERIC datatypes" "RTN","CASHDT03",14,0) D ADDDESC^CASHFN12(3,.DESC) "RTN","CASHDT03",15,0) ; "RTN","CASHDT03",16,0) ; Add Parameters "RTN","CASHDT03",17,0) K DESC "RTN","CASHDT03",18,0) S DESC(1)="The FileMan Field must be specified if Transforms are to be used" "RTN","CASHDT03",19,0) D ADDPARAM^CASHFN12(3,1,"FIELD","","") "RTN","CASHDT03",20,0) D ADDPDESC^CASHFN12(3,1,.DESC) "RTN","CASHDT03",21,0) K DESC "RTN","CASHDT03",22,0) S DESC(1)="The FileMan File must be specified if Transforms are to be used" "RTN","CASHDT03",23,0) D ADDPARAM^CASHFN12(3,2,"FILE","","") "RTN","CASHDT03",24,0) D ADDPDESC^CASHFN12(3,2,.DESC) "RTN","CASHDT03",25,0) ; "RTN","CASHDT03",26,0) ; Add DisplayToLogical Method "RTN","CASHDT03",27,0) D ADDMTD^CASHFN12(3,1,"DisplayToLogical",1,"G","%val:%Library.String",0,"","CASH.FileMan.Numeric") "RTN","CASHDT03",28,0) ; Add DisplayToLogical Description "RTN","CASHDT03",29,0) K DESC "RTN","CASHDT03",30,0) S DESC(1)="Converts the External value of a NUMERIC %val to the Internal value" "RTN","CASHDT03",31,0) D ADDMDESC^CASHFN12(3,1,.DESC) "RTN","CASHDT03",32,0) ; Add DisplayToLogical Code "RTN","CASHDT03",33,0) K CODE "RTN","CASHDT03",34,0) S CODE(1)=" /// Adapted from %Library.Float" "RTN","CASHDT03",35,0) S CODE(2)=" S %code=0" "RTN","CASHDT03",36,0) S CODE(3)=" I %parameter(""VALUELIST"")'="""",%parameter(""DISPLAYLIST"")'="""" D Q $$$OK" "RTN","CASHDT03",37,0) S CODE(4)=" . S sep=$E(%parameter(""DISPLAYLIST""))" "RTN","CASHDT03",38,0) S CODE(5)=" . S len=$L(%parameter(""DISPLAYLIST""),sep)" "RTN","CASHDT03",39,0) S CODE(6)=" . F i=2:1:$L(%parameter(""DISPLAYLIST""),sep) $$$GENERATE("" q:%val=""_$$quote($P(%parameter(""DISPLAYLIST""),sep,i))_"" ""_$$quote($P(%parameter(""VALUELIST""),sep,i)))" "RTN","CASHDT03",40,0) S CODE(7)=" . $$$GENERATE("" q """""""""")" "RTN","CASHDT03",41,0) S CODE(8)=" . Q" "RTN","CASHDT03",42,0) S CODE(9)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT03",43,0) S CODE(10)=" S %code=""%val""" "RTN","CASHDT03",44,0) S CODE(11)=" I %parameter(""FORMAT"")'="""" S %code=""$inumber(%val,""""""_%parameter(""FORMAT"")_"""""","""""""")""" "RTN","CASHDT03",45,0) S CODE(12)=" I %parameter(""SCALE"")'="""" S %code=""$normalize(""_%code_"",""_%parameter(""SCALE"")_"")""" "RTN","CASHDT03",46,0) S CODE(13)=" Q $$$OK" "RTN","CASHDT03",47,0) D ADDCODE^CASHFN12(3,1,.CODE) "RTN","CASHDT03",48,0) ; "RTN","CASHDT03",49,0) ; Add IsValidDT Method "RTN","CASHDT03",50,0) D ADDMTD^CASHFN12(3,2,"IsValidDT",1,"G","%val:CASH.FileMan.Numeric",0,"","%Library.Integer") "RTN","CASHDT03",51,0) ; Add IsValidDT Description "RTN","CASHDT03",52,0) K DESC "RTN","CASHDT03",53,0) S DESC(1)="Tests if the value %val is valid for a NUMERIC datatype" "RTN","CASHDT03",54,0) S DESC(2)="1 = Yes, 0 = No" "RTN","CASHDT03",55,0) D ADDMDESC^CASHFN12(3,2,.DESC) "RTN","CASHDT03",56,0) ; Add IsValidDT Code "RTN","CASHDT03",57,0) K CODE "RTN","CASHDT03",58,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT03",59,0) S CODE(2)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT03",60,0) S CODE(3)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT03",61,0) S CODE(4)=" I FILE'="""",FIELD'="""" S %code=""$$ISVALID^CASHR(""_FILE_"",""_FIELD_"",%val)"" Q $$$OK" "RTN","CASHDT03",62,0) S CODE(5)=" /// Taken from %Library.Float" "RTN","CASHDT03",63,0) S CODE(6)=" I %parameter(""VALUELIST"")'="""" D Q $$$OK" "RTN","CASHDT03",64,0) S CODE(7)=" . S sep=$e(%parameter(""VALUELIST""))" "RTN","CASHDT03",65,0) S CODE(8)=" . S %code=""(%val'[""""""_sep_"""""")&(""_$$quote(%parameter(""VALUELIST"")_sep)_""[(""""""_sep_""""""_%val_""""""_sep_""""""))""" "RTN","CASHDT03",66,0) S CODE(9)=" . Q" "RTN","CASHDT03",67,0) S CODE(10)=" S %code=""$isvalidnum(%val,,""_%parameter(""MINVAL"")_"",""_%parameter(""MAXVAL"")_"")""" "RTN","CASHDT03",68,0) S CODE(11)=" Q $$$OK" "RTN","CASHDT03",69,0) D ADDCODE^CASHFN12(3,2,.CODE) "RTN","CASHDT03",70,0) ; "RTN","CASHDT03",71,0) ; Add LogicalToDisplay Method "RTN","CASHDT03",72,0) D ADDMTD^CASHFN12(3,3,"LogicalToDisplay",1,"G","%val:CASH.FileMan.Numeric",0,"","%Library.String") "RTN","CASHDT03",73,0) ; Add LogicalToDisplay Description "RTN","CASHDT03",74,0) K DESC "RTN","CASHDT03",75,0) S DESC(1)="Converts the Internal value of a NUMERIC %val to the External value" "RTN","CASHDT03",76,0) D ADDMDESC^CASHFN12(3,3,.DESC) "RTN","CASHDT03",77,0) ; Add LogicalToDisplay Code "RTN","CASHDT03",78,0) K CODE "RTN","CASHDT03",79,0) S CODE(1)=" /// Adapted from %Library.Float" "RTN","CASHDT03",80,0) S CODE(2)=" S %code=0" "RTN","CASHDT03",81,0) S CODE(3)=" I %parameter(""VALUELIST"")'="""",%parameter(""DISPLAYLIST"")'="""" D Q $$$OK" "RTN","CASHDT03",82,0) S CODE(4)=" . S sep=$E(%parameter(""VALUELIST""))" "RTN","CASHDT03",83,0) S CODE(5)=" . S len=$L(%parameter(""VALUELIST""),sep)" "RTN","CASHDT03",84,0) S CODE(6)=" . F i=2:1:$L(%parameter(""VALUELIST""),sep) $$$GENERATE("" q:%val=""_$$quote($P(%parameter(""VALUELIST""),sep,i))_"" ""_$$quote($P(%parameter(""DISPLAYLIST""),sep,i)))" "RTN","CASHDT03",85,0) S CODE(7)=" . $$$GENERATE("" q """""""""")" "RTN","CASHDT03",86,0) S CODE(8)=" . Q" "RTN","CASHDT03",87,0) S CODE(9)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT03",88,0) S CODE(10)=" I %parameter(""FORMAT"")="""",%parameter(""SCALE"")="""" S %code=""%val"" Q $$$OK" "RTN","CASHDT03",89,0) S CODE(11)=" S temp=""""""""_%parameter(""FORMAT"")_""""""""" "RTN","CASHDT03",90,0) S CODE(12)=" I %parameter(""SCALE"")'="""" S temp=temp_"",""_%parameter(""SCALE"")" "RTN","CASHDT03",91,0) S CODE(13)=" S %code=""$s(%val="""""""":"""""""",1:$fn(%val,""_temp_""))""" "RTN","CASHDT03",92,0) S CODE(14)=" Q $$$OK" "RTN","CASHDT03",93,0) D ADDCODE^CASHFN12(3,3,.CODE) "RTN","CASHDT03",94,0) ; "RTN","CASHDT03",95,0) ; Add LogicalToOdbc Method "RTN","CASHDT03",96,0) D ADDMTD^CASHFN12(3,4,"LogicalToOdbc",1,"G","%val:CASH.FileMan.Numeric",0,"","%Library.String") "RTN","CASHDT03",97,0) ; Add LogicalToOdbc Description "RTN","CASHDT03",98,0) K DESC "RTN","CASHDT03",99,0) S DESC(1)="Converts the Internal value of a NUMERIC %val to the External value (ODBC)" "RTN","CASHDT03",100,0) D ADDMDESC^CASHFN12(3,4,.DESC) "RTN","CASHDT03",101,0) ; Add LogicalToOdbc Code "RTN","CASHDT03",102,0) K CODE "RTN","CASHDT03",103,0) S CODE(1)=" /// Adapted from %Library.Float" "RTN","CASHDT03",104,0) S CODE(2)=" S %code=0" "RTN","CASHDT03",105,0) S CODE(3)=" I %parameter(""VALUELIST"")'="""",%parameter(""DISPLAYLIST"")'="""" D Q $$$OK" "RTN","CASHDT03",106,0) S CODE(4)=" . S sep=$E(%parameter(""VALUELIST""))" "RTN","CASHDT03",107,0) S CODE(5)=" . S len=$L(%parameter(""VALUELIST""),sep)" "RTN","CASHDT03",108,0) S CODE(6)=" . F i=2:1:$L(%parameter(""VALUELIST""),sep) $$$GENERATE("" q:%val=""_$$quote($P(%parameter(""VALUELIST""),sep,i))_"" ""_$$quote($P(%parameter(""DISPLAYLIST""),sep,i)))" "RTN","CASHDT03",109,0) S CODE(7)=" . $$$GENERATE("" q """""""""")" "RTN","CASHDT03",110,0) S CODE(8)=" . Q" "RTN","CASHDT03",111,0) S CODE(9)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT03",112,0) S CODE(10)=" I %parameter(""FORMAT"")="""",%parameter(""SCALE"")="""" S %code=""%val"" Q $$$OK" "RTN","CASHDT03",113,0) S CODE(11)=" S temp=""""""""_%parameter(""FORMAT"")_""""""""" "RTN","CASHDT03",114,0) S CODE(12)=" I %parameter(""SCALE"")'="""" S temp=temp_"",""_%parameter(""SCALE"")" "RTN","CASHDT03",115,0) S CODE(13)=" S %code=""$s(%val="""""""":"""""""",1:$fn(%val,""_temp_""))""" "RTN","CASHDT03",116,0) S CODE(14)=" Q $$$OK" "RTN","CASHDT03",117,0) D ADDCODE^CASHFN12(3,4,.CODE) "RTN","CASHDT03",118,0) ; "RTN","CASHDT03",119,0) ; Add OdbcToLogical Method "RTN","CASHDT03",120,0) D ADDMTD^CASHFN12(3,5,"OdbcToLogical",1,"G","%val:%Library.String",0,"","CASH.FileMan.Numeric") "RTN","CASHDT03",121,0) ; Add OdbcToLogical Description "RTN","CASHDT03",122,0) K DESC "RTN","CASHDT03",123,0) S DESC(1)="Converts the External value (ODBC) of a NUMERIC %val to the Internal value" "RTN","CASHDT03",124,0) D ADDMDESC^CASHFN12(3,5,.DESC) "RTN","CASHDT03",125,0) ; Add OdbcToLogical Code "RTN","CASHDT03",126,0) K CODE "RTN","CASHDT03",127,0) S CODE(1)=" /// Adapted from %Library.Float" "RTN","CASHDT03",128,0) S CODE(2)=" S %code=0" "RTN","CASHDT03",129,0) S CODE(3)=" I %parameter(""VALUELIST"")'="""",%parameter(""DISPLAYLIST"")'="""" D Q $$$OK" "RTN","CASHDT03",130,0) S CODE(4)=" . S sep=$E(%parameter(""DISPLAYLIST""))" "RTN","CASHDT03",131,0) S CODE(5)=" . S len=$L(%parameter(""DISPLAYLIST""),sep)" "RTN","CASHDT03",132,0) S CODE(6)=" . F i=2:1:$L(%parameter(""DISPLAYLIST""),sep) $$$GENERATE("" q:%val=""_$$quote($P(%parameter(""DISPLAYLIST""),sep,i))_"" ""_$$quote($P(%parameter(""VALUELIST""),sep,i)))" "RTN","CASHDT03",133,0) S CODE(7)=" . $$$GENERATE("" q """""""""")" "RTN","CASHDT03",134,0) S CODE(8)=" . Q" "RTN","CASHDT03",135,0) S CODE(9)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT03",136,0) S CODE(10)=" S %code=""%val""" "RTN","CASHDT03",137,0) S CODE(11)=" I %parameter(""FORMAT"")'="""" S %code=""$inumber(%val,""""""_%parameter(""FORMAT"")_"""""","""""""")""" "RTN","CASHDT03",138,0) S CODE(12)=" I %parameter(""SCALE"")'="""" S %code=""$normalize(""_%code_"",""_%parameter(""SCALE"")_"")""" "RTN","CASHDT03",139,0) S CODE(13)=" Q $$$OK" "RTN","CASHDT03",140,0) D ADDCODE^CASHFN12(3,5,.CODE) "RTN","CASHDT03",141,0) ; "RTN","CASHDT03",142,0) Q "RTN","CASHDT04") 0^18^B19238130 "RTN","CASHDT04",1,0) CASHDT04 ;ALB/MGC - Initialisation for Custom Datatype 4 ; 01/27/05@3:00:00 "RTN","CASHDT04",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHDT04",3,0) ; "RTN","CASHDT04",4,0) ; CASH.FileMan.Pointer "RTN","CASHDT04",5,0) N CODE,DESC "RTN","CASHDT04",6,0) ; "RTN","CASHDT04",7,0) ; Add top level "RTN","CASHDT04",8,0) D ADDDT^CASHFN12(4,"Pointer","VARCHAR","VARCHAR","STRING","%occInclude,%occUtility","") "RTN","CASHDT04",9,0) ; "RTN","CASHDT04",10,0) ; Add Description "RTN","CASHDT04",11,0) K DESC "RTN","CASHDT04",12,0) S DESC(1)="DO NOT EDIT: Custom DataType - VARCHAR/STRING - Mike Clayton 12/15/2004" "RTN","CASHDT04",13,0) S DESC(2)="Usage: FileMan POINTER datatypes" "RTN","CASHDT04",14,0) D ADDDESC^CASHFN12(4,.DESC) "RTN","CASHDT04",15,0) ; "RTN","CASHDT04",16,0) ; Add Parameters "RTN","CASHDT04",17,0) K DESC "RTN","CASHDT04",18,0) S DESC(1)="The FileMan Field must be specified for this POINTER " "RTN","CASHDT04",19,0) D ADDPARAM^CASHFN12(4,1,"PFIELD","","") "RTN","CASHDT04",20,0) D ADDPDESC^CASHFN12(4,1,.DESC) "RTN","CASHDT04",21,0) K DESC "RTN","CASHDT04",22,0) S DESC(1)="The FileMan File must be specified for this POINTER " "RTN","CASHDT04",23,0) D ADDPARAM^CASHFN12(4,2,"PFILE","","") "RTN","CASHDT04",24,0) D ADDPDESC^CASHFN12(4,2,.DESC) "RTN","CASHDT04",25,0) ; "RTN","CASHDT04",26,0) ; Add DisplayToLogical Method "RTN","CASHDT04",27,0) D ADDMTD^CASHFN12(4,1,"DisplayToLogical",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT04",28,0) ; Add DisplayToLogical Description "RTN","CASHDT04",29,0) K DESC "RTN","CASHDT04",30,0) S DESC(1)="Converts the External value of a POINTER %val to the Internal value" "RTN","CASHDT04",31,0) D ADDMDESC^CASHFN12(4,1,.DESC) "RTN","CASHDT04",32,0) ; Add DisplayToLogical Code "RTN","CASHDT04",33,0) K CODE "RTN","CASHDT04",34,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT04",35,0) S CODE(2)=" S %code=""%val""" "RTN","CASHDT04",36,0) S CODE(3)=" S PFILE=%parameter(""PFILE"")" "RTN","CASHDT04",37,0) S CODE(4)=" I PFILE'="""" S %code=""$$FIND^CASHR(""_PFILE_"",%val)""" "RTN","CASHDT04",38,0) S CODE(5)=" Q $$$OK" "RTN","CASHDT04",39,0) D ADDCODE^CASHFN12(4,1,.CODE) "RTN","CASHDT04",40,0) ; "RTN","CASHDT04",41,0) ; Add IsValidDT Method "RTN","CASHDT04",42,0) D ADDMTD^CASHFN12(4,2,"IsValidDT",1,"G","%val:%Library.String",0,"","%Library.Integer") "RTN","CASHDT04",43,0) ; Add IsValidDT Description "RTN","CASHDT04",44,0) K DESC "RTN","CASHDT04",45,0) S DESC(1)="Tests if the value %val is valid for the POINTER" "RTN","CASHDT04",46,0) S DESC(2)="1 = Yes, 0 = No" "RTN","CASHDT04",47,0) D ADDMDESC^CASHFN12(4,2,.DESC) "RTN","CASHDT04",48,0) ; Add IsValidDT Code "RTN","CASHDT04",49,0) K CODE "RTN","CASHDT04",50,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT04",51,0) S CODE(2)=" S %code=1" "RTN","CASHDT04",52,0) S CODE(3)=" S PFILE=%parameter(""PFILE"")" "RTN","CASHDT04",53,0) S CODE(4)=" I PFILE'="""" S %code=""$$EXISTS^CASHR(""_PFILE_"",%val)""" "RTN","CASHDT04",54,0) S CODE(5)=" Q $$$OK" "RTN","CASHDT04",55,0) D ADDCODE^CASHFN12(4,2,.CODE) "RTN","CASHDT04",56,0) ; "RTN","CASHDT04",57,0) ; Add LogicalToDisplay Method "RTN","CASHDT04",58,0) D ADDMTD^CASHFN12(4,3,"LogicalToDisplay",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT04",59,0) ; Add LogicalToDisplay Description "RTN","CASHDT04",60,0) K DESC "RTN","CASHDT04",61,0) S DESC(1)="Expands the Internal value of a POINTER %val to the External value using the PFILE # and FIELD#" "RTN","CASHDT04",62,0) D ADDMDESC^CASHFN12(4,3,.DESC) "RTN","CASHDT04",63,0) ; Add LogicalToDisplay Code "RTN","CASHDT04",64,0) K CODE "RTN","CASHDT04",65,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT04",66,0) S CODE(2)=" S %code=""%val""" "RTN","CASHDT04",67,0) S CODE(3)=" S PFILE=%parameter(""PFILE"")" "RTN","CASHDT04",68,0) S CODE(4)=" S PFIELD=%parameter(""PFIELD"")" "RTN","CASHDT04",69,0) S CODE(5)=" I PFILE'="""",PFIELD'="""" S %code=""$$GETDATA^CASHR(""_PFILE_"",""_PFIELD_"",%val)""" "RTN","CASHDT04",70,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT04",71,0) D ADDCODE^CASHFN12(4,3,.CODE) "RTN","CASHDT04",72,0) ; "RTN","CASHDT04",73,0) ; Add LogicalToOdbc Method "RTN","CASHDT04",74,0) D ADDMTD^CASHFN12(4,4,"LogicalToOdbc",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT04",75,0) ; Add LogicalToOdbc Description "RTN","CASHDT04",76,0) K DESC "RTN","CASHDT04",77,0) S DESC(1)="Expands the Internal value of a POINTER %val to the External value using the PFILE # and FIELD#" "RTN","CASHDT04",78,0) D ADDMDESC^CASHFN12(4,4,.DESC) "RTN","CASHDT04",79,0) ; Add LogicalToOdbc Code "RTN","CASHDT04",80,0) K CODE "RTN","CASHDT04",81,0) S CODE(1)=" S PFILE=%parameter(""PFILE"")" "RTN","CASHDT04",82,0) S CODE(2)=" S PFIELD=%parameter(""PFIELD"")" "RTN","CASHDT04",83,0) S CODE(3)=" I PFILE=""""||(PFIELD="""") Q $$$OK" "RTN","CASHDT04",84,0) S CODE(4)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT04",85,0) S CODE(5)=" S %code=""$$GETDATA^CASHR(""_PFILE_"",""_PFIELD_"",%val)""" "RTN","CASHDT04",86,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT04",87,0) D ADDCODE^CASHFN12(4,4,.CODE) "RTN","CASHDT04",88,0) ; "RTN","CASHDT04",89,0) ; Add OdbcToLogical Method "RTN","CASHDT04",90,0) D ADDMTD^CASHFN12(4,5,"OdbcToLogical",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT04",91,0) ; Add OdbcToLogical Description "RTN","CASHDT04",92,0) K DESC "RTN","CASHDT04",93,0) S DESC(1)="Converts the ODBC value of a POINTER %val to the Internal value" "RTN","CASHDT04",94,0) D ADDMDESC^CASHFN12(4,5,.DESC) "RTN","CASHDT04",95,0) ; Add OdbcToLogical Code "RTN","CASHDT04",96,0) K CODE "RTN","CASHDT04",97,0) S CODE(1)=" S PFILE=%parameter(""PFILE"")" "RTN","CASHDT04",98,0) S CODE(2)=" I PFILE="""" Q $$$OK" "RTN","CASHDT04",99,0) S CODE(3)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT04",100,0) S CODE(4)=" S %code=""$$FIND^CASHR(""_PFILE_"",%val)""" "RTN","CASHDT04",101,0) S CODE(5)=" Q $$$OK" "RTN","CASHDT04",102,0) D ADDCODE^CASHFN12(4,5,.CODE) "RTN","CASHDT04",103,0) ; "RTN","CASHDT04",104,0) Q "RTN","CASHDT05") 0^19^B34572561 "RTN","CASHDT05",1,0) CASHDT05 ;ALB/MGC - Initialisation for Custom Datatype 5 ; 01/27/05@3:00:00 "RTN","CASHDT05",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHDT05",3,0) ; "RTN","CASHDT05",4,0) ; CASH.FileMan.SetOfCodes "RTN","CASHDT05",5,0) N CODE,DESC "RTN","CASHDT05",6,0) ; "RTN","CASHDT05",7,0) ; Add top level "RTN","CASHDT05",8,0) D ADDDT^CASHFN12(5,"SetOfCodes","VARCHAR","VARCHAR","STRING","%occInclude,%occUtility","") "RTN","CASHDT05",9,0) ; "RTN","CASHDT05",10,0) ; Add Description "RTN","CASHDT05",11,0) K DESC "RTN","CASHDT05",12,0) S DESC(1)="DO NOT EDIT: Custom DataType - VARCHAR/STRING - Mike Clayton 12/15/2004" "RTN","CASHDT05",13,0) S DESC(2)="Usage: FileMan SET OF CODES datatypes" "RTN","CASHDT05",14,0) D ADDDESC^CASHFN12(5,.DESC) "RTN","CASHDT05",15,0) ; "RTN","CASHDT05",16,0) ; Add Parameters "RTN","CASHDT05",17,0) K DESC "RTN","CASHDT05",18,0) S DESC(1)="Determines if Extended ODBC output should be used." "RTN","CASHDT05",19,0) S DESC(2)="1 = Yes, 0 = No" "RTN","CASHDT05",20,0) S DESC(3)="The default is 0" "RTN","CASHDT05",21,0) D ADDPARAM^CASHFN12(5,1,"EXTENDEDODBC","0","BOOLEAN") "RTN","CASHDT05",22,0) D ADDPDESC^CASHFN12(5,1,.DESC) "RTN","CASHDT05",23,0) K DESC "RTN","CASHDT05",24,0) S DESC(1)="The FileMan Field must be specified for this SET OF CODES " "RTN","CASHDT05",25,0) D ADDPARAM^CASHFN12(5,2,"FIELD","","") "RTN","CASHDT05",26,0) D ADDPDESC^CASHFN12(5,2,.DESC) "RTN","CASHDT05",27,0) K DESC "RTN","CASHDT05",28,0) S DESC(1)="The FileMan File must be specified for this SET OF CODES " "RTN","CASHDT05",29,0) D ADDPARAM^CASHFN12(5,3,"FILE","","") "RTN","CASHDT05",30,0) D ADDPDESC^CASHFN12(5,3,.DESC) "RTN","CASHDT05",31,0) K DESC "RTN","CASHDT05",32,0) S DESC(1)="Determines if Input/Output Transforms should be used for this field" "RTN","CASHDT05",33,0) S DESC(2)="1 = Yes, 0 = No" "RTN","CASHDT05",34,0) S DESC(3)="The default for SET OF CODES is 0" "RTN","CASHDT05",35,0) S DESC(4)="" "RTN","CASHDT05",36,0) S DESC(5)="[NOTE: A SET OF CODE field will not normally have Transforms associated with it," "RTN","CASHDT05",37,0) S DESC(6)=" but if they do, then the stored value may be different to the logical code!" "RTN","CASHDT05",38,0) S DESC(7)=" If this EXTERNAL^DILFD will not work correctly, so nested calls to $$OUTPUT^CASHR()" "RTN","CASHDT05",39,0) S DESC(8)=" are made before calling $$SOCOUT^CASHR0() and $$SOCVAL^CASHR0()]" "RTN","CASHDT05",40,0) D ADDPARAM^CASHFN12(5,4,"TRANSFORM","0","BOOLEAN") "RTN","CASHDT05",41,0) D ADDPDESC^CASHFN12(5,4,.DESC) "RTN","CASHDT05",42,0) ; "RTN","CASHDT05",43,0) ; Add DisplayToLogical Method "RTN","CASHDT05",44,0) D ADDMTD^CASHFN12(5,1,"DisplayToLogical",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT05",45,0) ; Add DisplayToLogical Description "RTN","CASHDT05",46,0) K DESC "RTN","CASHDT05",47,0) S DESC(1)="Converts the External value of a SET OF CODES %val to the Internal value" "RTN","CASHDT05",48,0) D ADDMDESC^CASHFN12(5,1,.DESC) "RTN","CASHDT05",49,0) ; Add DisplayToLogical Code "RTN","CASHDT05",50,0) K CODE "RTN","CASHDT05",51,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT05",52,0) S CODE(2)=" S %code=""%val""" "RTN","CASHDT05",53,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT05",54,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT05",55,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$INTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT05",56,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT05",57,0) D ADDCODE^CASHFN12(5,1,.CODE) "RTN","CASHDT05",58,0) ; "RTN","CASHDT05",59,0) ; Add IsValidDT Method "RTN","CASHDT05",60,0) D ADDMTD^CASHFN12(5,2,"IsValidDT",1,"G","%val:%Library.String",0,"","%Library.Integer") "RTN","CASHDT05",61,0) ; Add IsValidDT Description "RTN","CASHDT05",62,0) K DESC "RTN","CASHDT05",63,0) S DESC(1)="Tests if the value %val is valid for the SET OF CODES" "RTN","CASHDT05",64,0) S DESC(2)="1 = Yes, 0 = No" "RTN","CASHDT05",65,0) D ADDMDESC^CASHFN12(5,2,.DESC) "RTN","CASHDT05",66,0) ; Add IsValidDT Code "RTN","CASHDT05",67,0) K CODE "RTN","CASHDT05",68,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT05",69,0) S CODE(2)=" S %code=1" "RTN","CASHDT05",70,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT05",71,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT05",72,0) S CODE(5)=" I FILE'="""",FIELD'="""" D" "RTN","CASHDT05",73,0) S CODE(6)=" .I %parameter(""TRANSFORM"") S %code=""$$SOCVAL^CASHR0(""_FILE_"",""_FIELD_"",$$OUTPUT^CASHR(""_FILE_"",""_FIELD_"",%val))"" Q" "RTN","CASHDT05",74,0) S CODE(7)=" .S %code=""$$SOCVAL^CASHR0(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT05",75,0) S CODE(8)=" .Q" "RTN","CASHDT05",76,0) S CODE(9)=" Q $$$OK" "RTN","CASHDT05",77,0) D ADDCODE^CASHFN12(5,2,.CODE) "RTN","CASHDT05",78,0) ; "RTN","CASHDT05",79,0) ; Add LogicalToDisplay Method "RTN","CASHDT05",80,0) D ADDMTD^CASHFN12(5,3,"LogicalToDisplay",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT05",81,0) ; Add LogicalToDisplay Description "RTN","CASHDT05",82,0) K DESC "RTN","CASHDT05",83,0) S DESC(1)="Converts the Internal value of a SET OF CODES %val to the External value" "RTN","CASHDT05",84,0) D ADDMDESC^CASHFN12(5,3,.DESC) "RTN","CASHDT05",85,0) ; Add LogicalToDisplay Code "RTN","CASHDT05",86,0) K CODE "RTN","CASHDT05",87,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT05",88,0) S CODE(2)=" S %code=""%val""" "RTN","CASHDT05",89,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT05",90,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT05",91,0) S CODE(5)=" I FILE'="""",FIELD'="""" D" "RTN","CASHDT05",92,0) S CODE(6)=" .I %parameter(""TRANSFORM"") S %code=""$$SOCOUT^CASHR0(""_FILE_"",""_FIELD_"",$$OUTPUT^CASHR(""_FILE_"",""_FIELD_"",%val))"" Q" "RTN","CASHDT05",93,0) S CODE(7)=" .S %code=""$$EXTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT05",94,0) S CODE(8)=" .Q" "RTN","CASHDT05",95,0) S CODE(9)=" Q $$$OK" "RTN","CASHDT05",96,0) D ADDCODE^CASHFN12(5,3,.CODE) "RTN","CASHDT05",97,0) ; "RTN","CASHDT05",98,0) ; Add LogicalToOdbc Method "RTN","CASHDT05",99,0) D ADDMTD^CASHFN12(5,4,"LogicalToOdbc",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT05",100,0) ; Add LogicalToOdbc Description "RTN","CASHDT05",101,0) K DESC "RTN","CASHDT05",102,0) S DESC(1)="Converts the Internal value of a SET OF CODES %val to the External value (ODBC)" "RTN","CASHDT05",103,0) D ADDMDESC^CASHFN12(5,4,.DESC) "RTN","CASHDT05",104,0) ; Add LogicalToOdbc Code "RTN","CASHDT05",105,0) K CODE "RTN","CASHDT05",106,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT05",107,0) S CODE(2)=" S %code=""%val""" "RTN","CASHDT05",108,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT05",109,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT05",110,0) S CODE(5)=" I FILE'="""",FIELD'="""" D" "RTN","CASHDT05",111,0) S CODE(6)=" .I %parameter(""TRANSFORM"") S %code=""$$SOCOUT^CASHR0(""_FILE_"",""_FIELD_"",$$OUTPUT^CASHR(""_FILE_"",""_FIELD_"",%val))"" Q" "RTN","CASHDT05",112,0) S CODE(7)=" .S %code=""$$EXTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT05",113,0) S CODE(8)=" .I %parameter(""EXTENDEDODBC"") S %code=""%val_"""":""""_""_%code" "RTN","CASHDT05",114,0) S CODE(9)=" .Q" "RTN","CASHDT05",115,0) S CODE(10)=" Q $$$OK" "RTN","CASHDT05",116,0) D ADDCODE^CASHFN12(5,4,.CODE) "RTN","CASHDT05",117,0) ; "RTN","CASHDT05",118,0) ; Add OdbcToLogical Method "RTN","CASHDT05",119,0) D ADDMTD^CASHFN12(5,5,"OdbcToLogical",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT05",120,0) ; Add OdbcToLogical Description "RTN","CASHDT05",121,0) K DESC "RTN","CASHDT05",122,0) S DESC(1)="Converts the External value (ODBC) of a SET OF CODES %val to the Internal value" "RTN","CASHDT05",123,0) D ADDMDESC^CASHFN12(5,5,.DESC) "RTN","CASHDT05",124,0) ; Add OdbcToLogical Code "RTN","CASHDT05",125,0) K CODE "RTN","CASHDT05",126,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT05",127,0) S CODE(2)=" S %code=""%val""" "RTN","CASHDT05",128,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT05",129,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT05",130,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$INTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT05",131,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT05",132,0) D ADDCODE^CASHFN12(5,5,.CODE) "RTN","CASHDT05",133,0) ; "RTN","CASHDT05",134,0) Q "RTN","CASHDT06") 0^20^B65854905 "RTN","CASHDT06",1,0) CASHDT06 ;ALB/MGC - Initialisation for Custom Datatype 6 ; 01/27/05@3:00:00 "RTN","CASHDT06",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHDT06",3,0) ; "RTN","CASHDT06",4,0) ; CASH.FileMan.String "RTN","CASHDT06",5,0) N CODE,DESC "RTN","CASHDT06",6,0) ; "RTN","CASHDT06",7,0) ; Add top level "RTN","CASHDT06",8,0) D ADDDT^CASHFN12(6,"String","VARCHAR","VARCHAR","STRING","","%Library.String") "RTN","CASHDT06",9,0) ; "RTN","CASHDT06",10,0) ; Add Description "RTN","CASHDT06",11,0) K DESC "RTN","CASHDT06",12,0) S DESC(1)="DO NOT EDIT: Custom DataType - VARCHAR/STRING - Mike Clayton 12/15/2004" "RTN","CASHDT06",13,0) S DESC(2)="Usage: FileMan FREE TEXT datatypes" "RTN","CASHDT06",14,0) D ADDDESC^CASHFN12(6,.DESC) "RTN","CASHDT06",15,0) ; "RTN","CASHDT06",16,0) ; Add Parameters "RTN","CASHDT06",17,0) K DESC "RTN","CASHDT06",18,0) S DESC(1)="The default collation value used for this data type" "RTN","CASHDT06",19,0) S DESC(2)="Overriden to EXACT for use with Indexes" "RTN","CASHDT06",20,0) D ADDPARAM^CASHFN12(6,1,"COLLATION","EXACT","") "RTN","CASHDT06",21,0) D ADDPDESC^CASHFN12(6,1,.DESC) "RTN","CASHDT06",22,0) K DESC "RTN","CASHDT06",23,0) S DESC(1)="The FileMan Field must be specified if Transforms are to be used" "RTN","CASHDT06",24,0) D ADDPARAM^CASHFN12(6,2,"FIELD","","") "RTN","CASHDT06",25,0) D ADDPDESC^CASHFN12(6,2,.DESC) "RTN","CASHDT06",26,0) K DESC "RTN","CASHDT06",27,0) S DESC(1)="The FileMan File must be specified if Transforms are to be used" "RTN","CASHDT06",28,0) D ADDPARAM^CASHFN12(6,3,"FILE","","") "RTN","CASHDT06",29,0) D ADDPDESC^CASHFN12(6,3,.DESC) "RTN","CASHDT06",30,0) K DESC "RTN","CASHDT06",31,0) S DESC(1)="Determines if Input/Output Transforms should be used for this field" "RTN","CASHDT06",32,0) S DESC(2)="1 = Yes, 0 = No" "RTN","CASHDT06",33,0) S DESC(3)="The default for FREE TEXT is 1 " "RTN","CASHDT06",34,0) D ADDPARAM^CASHFN12(6,4,"TRANSFORM","1","BOOLEAN") "RTN","CASHDT06",35,0) D ADDPDESC^CASHFN12(6,4,.DESC) "RTN","CASHDT06",36,0) K DESC "RTN","CASHDT06",37,0) S DESC(1)="Determines whether to truncate the string to MAXLEN characters." "RTN","CASHDT06",38,0) D ADDPARAM^CASHFN12(6,5,"TRUNCATE","0","") "RTN","CASHDT06",39,0) D ADDPDESC^CASHFN12(6,5,.DESC) "RTN","CASHDT06",40,0) ; "RTN","CASHDT06",41,0) ; Add DisplayToLogical Method "RTN","CASHDT06",42,0) D ADDMTD^CASHFN12(6,1,"DisplayToLogical",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT06",43,0) ; Add DisplayToLogical Description "RTN","CASHDT06",44,0) K DESC "RTN","CASHDT06",45,0) S DESC(1)="Apply Input Transform to Data if TRANSFORM=1 and code exists" "RTN","CASHDT06",46,0) D ADDMDESC^CASHFN12(6,1,.DESC) "RTN","CASHDT06",47,0) ; Add DisplayToLogical Code "RTN","CASHDT06",48,0) K CODE "RTN","CASHDT06",49,0) S CODE(1)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT06",50,0) S CODE(2)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT06",51,0) S CODE(3)=" I %parameter(""TRANSFORM""),FILE'="""",FIELD'="""" D Q $$$OK" "RTN","CASHDT06",52,0) S CODE(4)=" .S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT06",53,0) S CODE(5)=" .S %code=""$$INTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT06",54,0) S CODE(6)=" .Q" "RTN","CASHDT06",55,0) S CODE(7)=" ///Adapted from %Library.String" "RTN","CASHDT06",56,0) S CODE(8)=" I %parameter(""VALUELIST"")'="""",%parameter(""DISPLAYLIST"")'="""" D Q $$$OK" "RTN","CASHDT06",57,0) S CODE(9)=" .S %codemode=$$$cMETHCODEMODECODE" "RTN","CASHDT06",58,0) S CODE(10)=" .S %code=0" "RTN","CASHDT06",59,0) S CODE(11)=" .S sep=$E(%parameter(""DISPLAYLIST""))" "RTN","CASHDT06",60,0) S CODE(12)=" .S len=$L(%parameter(""DISPLAYLIST""),sep)" "RTN","CASHDT06",61,0) S CODE(13)=" .F i=2:1:$L(%parameter(""DISPLAYLIST""),sep) $$$GENERATE("" q:%val=""_$$quote($P(%parameter(""DISPLAYLIST""),sep,i))_"" ""_$$quote($P(%parameter(""VALUELIST""),sep,i)))" "RTN","CASHDT06",62,0) S CODE(14)=" .$$$GENERATE("" q """""""""")" "RTN","CASHDT06",63,0) S CODE(15)=" .Q" "RTN","CASHDT06",64,0) S CODE(16)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT06",65,0) S CODE(17)=" S %code=""%val""" "RTN","CASHDT06",66,0) S CODE(18)=" Q $$$OK" "RTN","CASHDT06",67,0) D ADDCODE^CASHFN12(6,1,.CODE) "RTN","CASHDT06",68,0) ; "RTN","CASHDT06",69,0) ; Add IsValidDT Method "RTN","CASHDT06",70,0) D ADDMTD^CASHFN12(6,2,"IsValidDT",1,"G","%val:%Library.String",0,"","%Library.Integer") "RTN","CASHDT06",71,0) ; Add IsValidDT Description "RTN","CASHDT06",72,0) K DESC "RTN","CASHDT06",73,0) S DESC(1)="Tests if the value %val is valid" "RTN","CASHDT06",74,0) S DESC(2)="1 = Yes, 0 = No" "RTN","CASHDT06",75,0) D ADDMDESC^CASHFN12(6,2,.DESC) "RTN","CASHDT06",76,0) ; Add IsValidDT Code "RTN","CASHDT06",77,0) K CODE "RTN","CASHDT06",78,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT06",79,0) S CODE(2)=" S %code=1" "RTN","CASHDT06",80,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT06",81,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT06",82,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$ISVALID^CASHR(""_FILE_"",""_FIELD_"",%val)"" Q $$$OK" "RTN","CASHDT06",83,0) S CODE(6)=" ///Adapted from %Library.String" "RTN","CASHDT06",84,0) S CODE(7)=" I %parameter(""VALUELIST"")'="""" D Q $$$OK" "RTN","CASHDT06",85,0) S CODE(8)=" .S sep=$E(%parameter(""VALUELIST""))" "RTN","CASHDT06",86,0) S CODE(9)=" .S %code=""(%val'[""""""_sep_"""""")&(""_$$quote(%parameter(""VALUELIST"")_sep)_""[(""""""_sep_""""""_%val_""""""_sep_""""""))""" "RTN","CASHDT06",87,0) S CODE(10)=" .Q" "RTN","CASHDT06",88,0) S CODE(11)=" S str=""""" "RTN","CASHDT06",89,0) S CODE(12)=" I %parameter(""MINLEN"")'="""" S str=str_""($l(%val)'<""_(+%parameter(""MINLEN""))_"")""" "RTN","CASHDT06",90,0) S CODE(13)=" I '%parameter(""TRUNCATE""),%parameter(""MAXLEN"")'="""" S str=str_""&($l(%val)'>""_(+%parameter(""MAXLEN""))_"")""" "RTN","CASHDT06",91,0) S CODE(14)=" I %parameter(""PATTERN"")'="""" S str=str_""&(%val?""_%parameter(""PATTERN"")_"")""" "RTN","CASHDT06",92,0) S CODE(15)=" I str="""" S %code=1 Q $$$OK" "RTN","CASHDT06",93,0) S CODE(16)=" I $E(str)=""&"" S str=$E(str,2,999)" "RTN","CASHDT06",94,0) S CODE(17)=" S %code=str" "RTN","CASHDT06",95,0) S CODE(18)=" Q $$$OK" "RTN","CASHDT06",96,0) D ADDCODE^CASHFN12(6,2,.CODE) "RTN","CASHDT06",97,0) ; "RTN","CASHDT06",98,0) ; Add LogicalToDisplay Method "RTN","CASHDT06",99,0) D ADDMTD^CASHFN12(6,3,"LogicalToDisplay",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT06",100,0) ; Add LogicalToDisplay Description "RTN","CASHDT06",101,0) K DESC "RTN","CASHDT06",102,0) S DESC(1)="Apply Output Transform to Data if TRANSFORM=1 and code exists" "RTN","CASHDT06",103,0) D ADDMDESC^CASHFN12(6,3,.DESC) "RTN","CASHDT06",104,0) ; Add LogicalToDisplay Code "RTN","CASHDT06",105,0) K CODE "RTN","CASHDT06",106,0) S CODE(1)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT06",107,0) S CODE(2)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT06",108,0) S CODE(3)=" I %parameter(""TRANSFORM""),FILE'="""",FIELD'="""" D Q $$$OK" "RTN","CASHDT06",109,0) S CODE(4)=" .S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT06",110,0) S CODE(5)=" .S %code=""$$EXTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT06",111,0) S CODE(6)=" .Q" "RTN","CASHDT06",112,0) S CODE(7)=" ///Adapted from %Library.String" "RTN","CASHDT06",113,0) S CODE(8)=" I %parameter(""VALUELIST"")'="""",%parameter(""DISPLAYLIST"")'="""" D Q $$$OK" "RTN","CASHDT06",114,0) S CODE(9)=" .S %code=0" "RTN","CASHDT06",115,0) S CODE(10)=" .S %codemode=$$$cMETHCODEMODECODE" "RTN","CASHDT06",116,0) S CODE(11)=" .S sep=$E(%parameter(""VALUELIST""))" "RTN","CASHDT06",117,0) S CODE(12)=" .S len=$L(%parameter(""VALUELIST""),sep)" "RTN","CASHDT06",118,0) S CODE(13)=" .F i=2:1:$L(%parameter(""VALUELIST""),sep) $$$GENERATE("" q:%val=""_$$quote($P(%parameter(""VALUELIST""),sep,i))_"" ""_$$quote($P(%parameter(""DISPLAYLIST""),sep,i)))" "RTN","CASHDT06",119,0) S CODE(14)=" .$$$GENERATE("" q """""""""")" "RTN","CASHDT06",120,0) S CODE(15)=" .Q" "RTN","CASHDT06",121,0) S CODE(16)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT06",122,0) S CODE(17)=" S %code=""%val""" "RTN","CASHDT06",123,0) S CODE(18)=" Q $$$OK" "RTN","CASHDT06",124,0) D ADDCODE^CASHFN12(6,3,.CODE) "RTN","CASHDT06",125,0) ; "RTN","CASHDT06",126,0) ; Add LogicalToOdbc Method "RTN","CASHDT06",127,0) D ADDMTD^CASHFN12(6,4,"LogicalToOdbc",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT06",128,0) ; Add LogicalToOdbc Description "RTN","CASHDT06",129,0) K DESC "RTN","CASHDT06",130,0) S DESC(1)="Apply Output Transform to Data if TRANSFORM=1 and code exists" "RTN","CASHDT06",131,0) D ADDMDESC^CASHFN12(6,4,.DESC) "RTN","CASHDT06",132,0) ; Add LogicalToOdbc Code "RTN","CASHDT06",133,0) K CODE "RTN","CASHDT06",134,0) S CODE(1)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT06",135,0) S CODE(2)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT06",136,0) S CODE(3)=" I %parameter(""TRANSFORM""),FILE'="""",FIELD'="""" D Q $$$OK" "RTN","CASHDT06",137,0) S CODE(4)=" .S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT06",138,0) S CODE(5)=" .S %code=""$$EXTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT06",139,0) S CODE(6)=" .Q" "RTN","CASHDT06",140,0) S CODE(7)=" ///Adapted from %Library.String" "RTN","CASHDT06",141,0) S CODE(8)=" I %parameter(""VALUELIST"")'="""",%parameter(""DISPLAYLIST"")'="""" D Q $$$OK" "RTN","CASHDT06",142,0) S CODE(9)=" .S %code=0" "RTN","CASHDT06",143,0) S CODE(10)=" .S %codemode=$$$cMETHCODEMODECODE" "RTN","CASHDT06",144,0) S CODE(11)=" .S sep=$E(%parameter(""VALUELIST""))" "RTN","CASHDT06",145,0) S CODE(12)=" .S len=$L(%parameter(""VALUELIST""),sep)" "RTN","CASHDT06",146,0) S CODE(13)=" .F i=2:1:$L(%parameter(""VALUELIST""),sep) $$$GENERATE("" q:%val=""_$$quote($P(%parameter(""VALUELIST""),sep,i))_"" ""_$$quote($P(%parameter(""DISPLAYLIST""),sep,i)))" "RTN","CASHDT06",147,0) S CODE(14)=" .$$$GENERATE("" q """""""""")" "RTN","CASHDT06",148,0) S CODE(15)=" .Q" "RTN","CASHDT06",149,0) S CODE(16)=" /// Quit with no method definition!" "RTN","CASHDT06",150,0) S CODE(17)=" Q $$$OK" "RTN","CASHDT06",151,0) D ADDCODE^CASHFN12(6,4,.CODE) "RTN","CASHDT06",152,0) ; "RTN","CASHDT06",153,0) ; Add OdbcToLogical Method "RTN","CASHDT06",154,0) D ADDMTD^CASHFN12(6,5,"OdbcToLogical",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT06",155,0) ; Add OdbcToLogical Description "RTN","CASHDT06",156,0) K DESC "RTN","CASHDT06",157,0) S DESC(1)="Apply Input Transform to Data if TRANSFORM=1 and code exists" "RTN","CASHDT06",158,0) D ADDMDESC^CASHFN12(6,5,.DESC) "RTN","CASHDT06",159,0) ; Add OdbcToLogical Code "RTN","CASHDT06",160,0) K CODE "RTN","CASHDT06",161,0) S CODE(1)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT06",162,0) S CODE(2)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT06",163,0) S CODE(3)=" I %parameter(""TRANSFORM""),FILE'="""",FIELD'="""" D Q $$$OK" "RTN","CASHDT06",164,0) S CODE(4)=" .S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT06",165,0) S CODE(5)=" .S %code=""$$INTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT06",166,0) S CODE(6)=" .Q" "RTN","CASHDT06",167,0) S CODE(7)=" ///Adapted from %Library.String" "RTN","CASHDT06",168,0) S CODE(8)=" I %parameter(""VALUELIST"")'="""",%parameter(""DISPLAYLIST"")'="""" D Q $$$OK" "RTN","CASHDT06",169,0) S CODE(9)=" .S %codemode=$$$cMETHCODEMODECODE" "RTN","CASHDT06",170,0) S CODE(10)=" .S %code=0" "RTN","CASHDT06",171,0) S CODE(11)=" .S sep=$E(%parameter(""DISPLAYLIST""))" "RTN","CASHDT06",172,0) S CODE(12)=" .S len=$L(%parameter(""DISPLAYLIST""),sep)" "RTN","CASHDT06",173,0) S CODE(13)=" .F i=2:1:$L(%parameter(""DISPLAYLIST""),sep) $$$GENERATE("" q:%val=""_$$quote($P(%parameter(""DISPLAYLIST""),sep,i))_"" ""_$$quote($P(%parameter(""VALUELIST""),sep,i)))" "RTN","CASHDT06",174,0) S CODE(14)=" .$$$GENERATE("" q """""""""")" "RTN","CASHDT06",175,0) S CODE(15)=" .Q" "RTN","CASHDT06",176,0) S CODE(16)=" /// Quit with no method definition!" "RTN","CASHDT06",177,0) S CODE(17)=" Q $$$OK" "RTN","CASHDT06",178,0) D ADDCODE^CASHFN12(6,5,.CODE) "RTN","CASHDT06",179,0) ; "RTN","CASHDT06",180,0) Q "RTN","CASHDT07") 0^21^B25629428 "RTN","CASHDT07",1,0) CASHDT07 ;ALB/MGC - Initialisation for Custom Datatype 7 ; 01/27/05@3:00:00 "RTN","CASHDT07",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHDT07",3,0) ; "RTN","CASHDT07",4,0) ; CASH.FileMan.StringDateTime "RTN","CASHDT07",5,0) N CODE,DESC "RTN","CASHDT07",6,0) ; "RTN","CASHDT07",7,0) ; Add top level "RTN","CASHDT07",8,0) D ADDDT^CASHFN12(7,"StringDateTime","VARCHAR","VARCHAR","STRING","%occInclude,%occUtility","") "RTN","CASHDT07",9,0) ; "RTN","CASHDT07",10,0) ; Add Description "RTN","CASHDT07",11,0) K DESC "RTN","CASHDT07",12,0) S DESC(1)="DO NOT EDIT: Custom DataType - VARCHAR/STRING - Mike Clayton 12/15/2004" "RTN","CASHDT07",13,0) S DESC(2)="Usage: FileMan DATE/TIME datatypes (Imprecise dates)" "RTN","CASHDT07",14,0) D ADDDESC^CASHFN12(7,.DESC) "RTN","CASHDT07",15,0) ; "RTN","CASHDT07",16,0) ; Add Parameters "RTN","CASHDT07",17,0) K DESC "RTN","CASHDT07",18,0) S DESC(1)="The FileMan Field must be specified" "RTN","CASHDT07",19,0) D ADDPARAM^CASHFN12(7,1,"FIELD","","") "RTN","CASHDT07",20,0) D ADDPDESC^CASHFN12(7,1,.DESC) "RTN","CASHDT07",21,0) K DESC "RTN","CASHDT07",22,0) S DESC(1)="The FileMan File must be specified" "RTN","CASHDT07",23,0) D ADDPARAM^CASHFN12(7,2,"FILE","","") "RTN","CASHDT07",24,0) D ADDPDESC^CASHFN12(7,2,.DESC) "RTN","CASHDT07",25,0) K DESC "RTN","CASHDT07",26,0) S DESC(1)="Used for converting Datetimes, and validating them if FILE and/or" "RTN","CASHDT07",27,0) S DESC(2)="FIELD are null." "RTN","CASHDT07",28,0) S DESC(3)="" "RTN","CASHDT07",29,0) S DESC(4)="[Note: The Runtime Calls pass these flags to DT^DILF. Valid FLAGS" "RTN","CASHDT07",30,0) S DESC(5)=" for CASH.FileMan.DateTime may include F,I,M,N,P,R & S, whilst T & X" "RTN","CASHDT07",31,0) S DESC(6)=" are mandatory]" "RTN","CASHDT07",32,0) D ADDPARAM^CASHFN12(7,3,"FLAGS","TX","") "RTN","CASHDT07",33,0) D ADDPDESC^CASHFN12(7,3,.DESC) "RTN","CASHDT07",34,0) K DESC "RTN","CASHDT07",35,0) S DESC(1)="Determines if Input/Output Transforms should be used for this field" "RTN","CASHDT07",36,0) S DESC(2)="1 = Yes, 0 = No" "RTN","CASHDT07",37,0) S DESC(3)="The default for Imprecise DATE/TIME is 0" "RTN","CASHDT07",38,0) D ADDPARAM^CASHFN12(7,4,"TRANSFORM","0","BOOLEAN") "RTN","CASHDT07",39,0) D ADDPDESC^CASHFN12(7,4,.DESC) "RTN","CASHDT07",40,0) ; "RTN","CASHDT07",41,0) ; Add DisplayToLogical Method "RTN","CASHDT07",42,0) D ADDMTD^CASHFN12(7,1,"DisplayToLogical",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT07",43,0) ; Add DisplayToLogical Description "RTN","CASHDT07",44,0) K DESC "RTN","CASHDT07",45,0) S DESC(1)="Converts Display format (various) to FileMan DATE/TIME format (CYYMMDD.HHMMSS)" "RTN","CASHDT07",46,0) D ADDMDESC^CASHFN12(7,1,.DESC) "RTN","CASHDT07",47,0) ; Add DisplayToLogical Code "RTN","CASHDT07",48,0) K CODE "RTN","CASHDT07",49,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT07",50,0) S CODE(2)=" S %code=""$$DATEIN^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""")""" "RTN","CASHDT07",51,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT07",52,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT07",53,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$INTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT07",54,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT07",55,0) D ADDCODE^CASHFN12(7,1,.CODE) "RTN","CASHDT07",56,0) ; "RTN","CASHDT07",57,0) ; Add IsValidDT Method "RTN","CASHDT07",58,0) D ADDMTD^CASHFN12(7,2,"IsValidDT",1,"G","%val:CASH.FileMan.String",0,"","%Library.Integer") "RTN","CASHDT07",59,0) ; Add IsValidDT Description "RTN","CASHDT07",60,0) K DESC "RTN","CASHDT07",61,0) S DESC(1)="Tests if the value %val is a valid FileMan DATE/TIME - CYYMMDD{.HHMMSS}" "RTN","CASHDT07",62,0) S DESC(2)="1 = Yes, 0 = No" "RTN","CASHDT07",63,0) D ADDMDESC^CASHFN12(7,2,.DESC) "RTN","CASHDT07",64,0) ; Add IsValidDT Code "RTN","CASHDT07",65,0) K CODE "RTN","CASHDT07",66,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT07",67,0) S CODE(2)=" S %code=""$$DATEVAL^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""")""" "RTN","CASHDT07",68,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT07",69,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT07",70,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$ISVALID^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT07",71,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT07",72,0) D ADDCODE^CASHFN12(7,2,.CODE) "RTN","CASHDT07",73,0) ; "RTN","CASHDT07",74,0) ; Add LogicalToDisplay Method "RTN","CASHDT07",75,0) D ADDMTD^CASHFN12(7,3,"LogicalToDisplay",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT07",76,0) ; Add LogicalToDisplay Description "RTN","CASHDT07",77,0) K DESC "RTN","CASHDT07",78,0) S DESC(1)="Converts FileMan DATE/TIME format (CYYMMDD.HHMMSS) to Display format (MM/DD/YYYY HH:MM:SS)" "RTN","CASHDT07",79,0) D ADDMDESC^CASHFN12(7,3,.DESC) "RTN","CASHDT07",80,0) ; Add LogicalToDisplay Code "RTN","CASHDT07",81,0) K CODE "RTN","CASHDT07",82,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT07",83,0) S CODE(2)=" S %code=""$$DATEOUT^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""")""" "RTN","CASHDT07",84,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT07",85,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT07",86,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$EXTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT07",87,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT07",88,0) D ADDCODE^CASHFN12(7,3,.CODE) "RTN","CASHDT07",89,0) ; "RTN","CASHDT07",90,0) ; Add LogicalToOdbc Method "RTN","CASHDT07",91,0) D ADDMTD^CASHFN12(7,4,"LogicalToOdbc",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT07",92,0) ; Add LogicalToOdbc Description "RTN","CASHDT07",93,0) K DESC "RTN","CASHDT07",94,0) S DESC(1)="Converts FileMan DATE/TIME format (CYYMMDD.HHMMSS) to ODBC TIMESTAMP format (YYYY-MM-DD HH:MM:SS)" "RTN","CASHDT07",95,0) D ADDMDESC^CASHFN12(7,4,.DESC) "RTN","CASHDT07",96,0) ; Add LogicalToOdbc Code "RTN","CASHDT07",97,0) K CODE "RTN","CASHDT07",98,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT07",99,0) S CODE(2)=" S %code=""$$DATEOUT^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""",1)""" "RTN","CASHDT07",100,0) S CODE(3)=" Q $$$OK" "RTN","CASHDT07",101,0) D ADDCODE^CASHFN12(7,4,.CODE) "RTN","CASHDT07",102,0) ; "RTN","CASHDT07",103,0) ; Add OdbcToLogical Method "RTN","CASHDT07",104,0) D ADDMTD^CASHFN12(7,5,"OdbcToLogical",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT07",105,0) ; Add OdbcToLogical Description "RTN","CASHDT07",106,0) K DESC "RTN","CASHDT07",107,0) S DESC(1)="Converts ODBC TIMESTAMP format (YYYY-MM-DD HH:MM:SS) to FileMan DATE/TIME format (CYYMMDD.HHMMSS)" "RTN","CASHDT07",108,0) D ADDMDESC^CASHFN12(7,5,.DESC) "RTN","CASHDT07",109,0) ; Add OdbcToLogical Code "RTN","CASHDT07",110,0) K CODE "RTN","CASHDT07",111,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT07",112,0) S CODE(2)=" S %code=""$$DATEIN^CASHR0(%val,""""""_%parameter(""FLAGS"")_"""""",1)""" "RTN","CASHDT07",113,0) S CODE(3)=" Q $$$OK" "RTN","CASHDT07",114,0) D ADDCODE^CASHFN12(7,5,.CODE) "RTN","CASHDT07",115,0) ; "RTN","CASHDT07",116,0) Q "RTN","CASHDT08") 0^22^B20627139 "RTN","CASHDT08",1,0) CASHDT08 ;ALB/MGC - Initialisation for Custom Datatype 8 ; 01/27/05@3:00:00 "RTN","CASHDT08",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHDT08",3,0) ; "RTN","CASHDT08",4,0) ; CASH.FileMan.VariablePointer "RTN","CASHDT08",5,0) N CODE,DESC "RTN","CASHDT08",6,0) ; "RTN","CASHDT08",7,0) ; Add top level "RTN","CASHDT08",8,0) D ADDDT^CASHFN12(8,"VariablePointer","VARCHAR","VARCHAR","STRING","%occInclude,%occUtility","") "RTN","CASHDT08",9,0) ; "RTN","CASHDT08",10,0) ; Add Description "RTN","CASHDT08",11,0) K DESC "RTN","CASHDT08",12,0) S DESC(1)="DO NOT EDIT: Custom DataType - VARCHAR/STRING - Mike Clayton 12/15/2004" "RTN","CASHDT08",13,0) S DESC(2)="Usage: FileMan VARIABLE POINTER datatypes" "RTN","CASHDT08",14,0) D ADDDESC^CASHFN12(8,.DESC) "RTN","CASHDT08",15,0) ; "RTN","CASHDT08",16,0) ; Add Parameters "RTN","CASHDT08",17,0) K DESC "RTN","CASHDT08",18,0) S DESC(1)="The FileMan Field must be specified for Variable Pointers" "RTN","CASHDT08",19,0) D ADDPARAM^CASHFN12(8,1,"FIELD","","") "RTN","CASHDT08",20,0) D ADDPDESC^CASHFN12(8,1,.DESC) "RTN","CASHDT08",21,0) K DESC "RTN","CASHDT08",22,0) S DESC(1)="The FileMan File must be specified for Variable Pointers" "RTN","CASHDT08",23,0) D ADDPARAM^CASHFN12(8,2,"FILE","","") "RTN","CASHDT08",24,0) D ADDPDESC^CASHFN12(8,2,.DESC) "RTN","CASHDT08",25,0) ; "RTN","CASHDT08",26,0) ; Add DisplayToLogical Method "RTN","CASHDT08",27,0) D ADDMTD^CASHFN12(8,1,"DisplayToLogical",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT08",28,0) ; Add DisplayToLogical Description "RTN","CASHDT08",29,0) K DESC "RTN","CASHDT08",30,0) S DESC(1)="Converts the External value of a VARIABLE POINTER %val to the Internal value" "RTN","CASHDT08",31,0) D ADDMDESC^CASHFN12(8,1,.DESC) "RTN","CASHDT08",32,0) ; Add DisplayToLogical Code "RTN","CASHDT08",33,0) K CODE "RTN","CASHDT08",34,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT08",35,0) S CODE(2)=" S %code=""%val""" "RTN","CASHDT08",36,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT08",37,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT08",38,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$VPIN^CASHR0(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT08",39,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT08",40,0) D ADDCODE^CASHFN12(8,1,.CODE) "RTN","CASHDT08",41,0) ; "RTN","CASHDT08",42,0) ; Add IsValidDT Method "RTN","CASHDT08",43,0) D ADDMTD^CASHFN12(8,2,"IsValidDT",1,"G","%val:%Library.String",0,"","%Library.Integer") "RTN","CASHDT08",44,0) ; Add IsValidDT Description "RTN","CASHDT08",45,0) K DESC "RTN","CASHDT08",46,0) S DESC(1)="Tests if the value %val is valid for the POINTER" "RTN","CASHDT08",47,0) S DESC(2)="1 = Yes, 0 = No" "RTN","CASHDT08",48,0) D ADDMDESC^CASHFN12(8,2,.DESC) "RTN","CASHDT08",49,0) ; Add IsValidDT Code "RTN","CASHDT08",50,0) K CODE "RTN","CASHDT08",51,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT08",52,0) S CODE(2)=" S %code=1" "RTN","CASHDT08",53,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT08",54,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT08",55,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$EXTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)'=""""""""""" "RTN","CASHDT08",56,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT08",57,0) D ADDCODE^CASHFN12(8,2,.CODE) "RTN","CASHDT08",58,0) ; "RTN","CASHDT08",59,0) ; Add LogicalToDisplay Method "RTN","CASHDT08",60,0) D ADDMTD^CASHFN12(8,3,"LogicalToDisplay",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT08",61,0) ; Add LogicalToDisplay Description "RTN","CASHDT08",62,0) K DESC "RTN","CASHDT08",63,0) S DESC(1)="Converts the Internal value of a VARIABLE POINTER %val to the External value" "RTN","CASHDT08",64,0) D ADDMDESC^CASHFN12(8,3,.DESC) "RTN","CASHDT08",65,0) ; Add LogicalToDisplay Code "RTN","CASHDT08",66,0) K CODE "RTN","CASHDT08",67,0) S CODE(1)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT08",68,0) S CODE(2)=" S %code=""%val""" "RTN","CASHDT08",69,0) S CODE(3)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT08",70,0) S CODE(4)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT08",71,0) S CODE(5)=" I FILE'="""",FIELD'="""" S %code=""$$EXTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT08",72,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT08",73,0) D ADDCODE^CASHFN12(8,3,.CODE) "RTN","CASHDT08",74,0) ; "RTN","CASHDT08",75,0) ; Add LogicalToOdbc Method "RTN","CASHDT08",76,0) D ADDMTD^CASHFN12(8,4,"LogicalToOdbc",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT08",77,0) ; Add LogicalToOdbc Description "RTN","CASHDT08",78,0) K DESC "RTN","CASHDT08",79,0) S DESC(1)="Converts the Internal value of a VARIABLE POINTER %val to the External value" "RTN","CASHDT08",80,0) D ADDMDESC^CASHFN12(8,4,.DESC) "RTN","CASHDT08",81,0) ; Add LogicalToOdbc Code "RTN","CASHDT08",82,0) K CODE "RTN","CASHDT08",83,0) S CODE(1)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT08",84,0) S CODE(2)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT08",85,0) S CODE(3)=" I FILE=""""||(FIELD="""") Q $$$OK" "RTN","CASHDT08",86,0) S CODE(4)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT08",87,0) S CODE(5)=" S %code=""$$EXTERNAL^CASHR(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT08",88,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT08",89,0) D ADDCODE^CASHFN12(8,4,.CODE) "RTN","CASHDT08",90,0) ; "RTN","CASHDT08",91,0) ; Add OdbcToLogical Method "RTN","CASHDT08",92,0) D ADDMTD^CASHFN12(8,5,"OdbcToLogical",1,"G","%val:%Library.String",0,"","%Library.String") "RTN","CASHDT08",93,0) ; Add OdbcToLogical Description "RTN","CASHDT08",94,0) K DESC "RTN","CASHDT08",95,0) S DESC(1)="Converts the ODBC value of a VARIABLE POINTER %val to the Internal value" "RTN","CASHDT08",96,0) D ADDMDESC^CASHFN12(8,5,.DESC) "RTN","CASHDT08",97,0) ; Add OdbcToLogical Code "RTN","CASHDT08",98,0) K CODE "RTN","CASHDT08",99,0) S CODE(1)=" S FILE=%parameter(""FILE"")" "RTN","CASHDT08",100,0) S CODE(2)=" S FIELD=%parameter(""FIELD"")" "RTN","CASHDT08",101,0) S CODE(3)=" I FILE=""""||(FIELD="""") Q $$$OK" "RTN","CASHDT08",102,0) S CODE(4)=" S %codemode=$$$cMETHCODEMODEEXPRESSION" "RTN","CASHDT08",103,0) S CODE(5)=" S %code=""$$VPIN^CASHR0(""_FILE_"",""_FIELD_"",%val)""" "RTN","CASHDT08",104,0) S CODE(6)=" Q $$$OK" "RTN","CASHDT08",105,0) D ADDCODE^CASHFN12(8,5,.CODE) "RTN","CASHDT08",106,0) ; "RTN","CASHDT08",107,0) Q "RTN","CASHF") 0^44^B7955740 "RTN","CASHF",1,0) CASHF ;;ALB/MGC - FileMan Class Map - FileMan FILE/FIELD Utility Calls ; 01/31/04@5:00:00 "RTN","CASHF",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHF",3,0) ; "RTN","CASHF",4,0) Q ; Specific Entry Point must be used "RTN","CASHF",5,0) ; "RTN","CASHF",6,0) ; FILE Utility Calls "RTN","CASHF",7,0) ; "RTN","CASHF",8,0) FILE(FILE,NAME,GLNM) ; Unpack FILE details "RTN","CASHF",9,0) ; "RTN","CASHF",10,0) ; Parameters: "RTN","CASHF",11,0) ; "RTN","CASHF",12,0) ; FILE - (Required) The FileMan File # "RTN","CASHF",13,0) ; NAME - (Output) The File Name "RTN","CASHF",14,0) ; GLNM - (Output) The Global Name "RTN","CASHF",15,0) ; "RTN","CASHF",16,0) N CASHERR,CASHVAL,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHF",17,0) D FILE^DID(FILE,"","GLOBAL NAME;NAME","CASHVAL","CASHERR") "RTN","CASHF",18,0) S NAME=$G(CASHVAL("NAME")) "RTN","CASHF",19,0) S GLNM=$G(CASHVAL("GLOBAL NAME")) "RTN","CASHF",20,0) Q "RTN","CASHF",21,0) ; "RTN","CASHF",22,0) FILEINX() ; Return the Standardized FILE ATTRIBUTE used for the ^DIC("B" Index "RTN","CASHF",23,0) ; This call is required for the Internationalization version "RTN","CASHF",24,0) Q "Name" "RTN","CASHF",25,0) ; "RTN","CASHF",26,0) GLOBAL(FILE) ; Return the GLOBAL NAME Attribute for a File "RTN","CASHF",27,0) ; "RTN","CASHF",28,0) ; Parameters: "RTN","CASHF",29,0) ; "RTN","CASHF",30,0) ; FILE - (Required) The FileMan File # "RTN","CASHF",31,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHF",32,0) ; "RTN","CASHF",33,0) N CASHERR,DIERR,DISYS,DT,DTIME,DUZ,IO,U,X "RTN","CASHF",34,0) Q $$GET1^DID(FILE,"","","GLOBAL NAME","","CASHERR") "RTN","CASHF",35,0) ; "RTN","CASHF",36,0) ; FIELD Utility Calls "RTN","CASHF",37,0) ; "RTN","CASHF",38,0) FIELD(FILE,FIELD,LABEL,SPEC,DECD,TYPE,MULT,PNTR,GSL,INP,OUT,LEN) ; Unpack FIELD details "RTN","CASHF",39,0) ; "RTN","CASHF",40,0) ; Parameters: "RTN","CASHF",41,0) ; "RTN","CASHF",42,0) ; FILE - (Required) The FileMan File # "RTN","CASHF",43,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHF",44,0) ; LABEL - (Output) The Field Label "RTN","CASHF",45,0) ; SPEC - (Output) The Specifier "RTN","CASHF",46,0) ; DECD - (Output) The Decimal Default "RTN","CASHF",47,0) ; TYPE - (Output) The Field Type "RTN","CASHF",48,0) ; MULT - (Output) Multiple-Valued? "RTN","CASHF",49,0) ; PNTR - (Output) The Pointer value "RTN","CASHF",50,0) ; GSL - (Output) The Global Subscript Location "RTN","CASHF",51,0) ; INP - (Output) The Input Transform "RTN","CASHF",52,0) ; OUT - (Output) The Output Transform "RTN","CASHF",53,0) ; LEN - (Output) The Field Length "RTN","CASHF",54,0) ; "RTN","CASHF",55,0) N CASHATT,CASHERR,CASHVAL,DIERR,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHF",56,0) S CASHATT="DECIMAL DEFAULT;FIELD LENGTH;GLOBAL SUBSCRIPT LOCATION;INPUT TRANSFORM;LABEL;MULTIPLE-VALUED;OUTPUT TRANSFORM;POINTER;SPECIFIER;TYPE" "RTN","CASHF",57,0) D FIELD^DID(FILE,FIELD,"",CASHATT,"CASHVAL","CASHERR") "RTN","CASHF",58,0) S LABEL=$G(CASHVAL("LABEL")) "RTN","CASHF",59,0) S SPEC=$G(CASHVAL("SPECIFIER")) "RTN","CASHF",60,0) S DECD=$G(CASHVAL("DECIMAL DEFAULT")) "RTN","CASHF",61,0) S TYPE=$G(CASHVAL("TYPE")) "RTN","CASHF",62,0) S MULT=$G(CASHVAL("MULTIPLE-VALUED")) "RTN","CASHF",63,0) S PNTR=$G(CASHVAL("POINTER")) "RTN","CASHF",64,0) S GSL=$G(CASHVAL("GLOBAL SUBSCRIPT LOCATION")) "RTN","CASHF",65,0) S INP=$G(CASHVAL("INPUT TRANSFORM")) "RTN","CASHF",66,0) S OUT=$G(CASHVAL("OUTPUT TRANSFORM")) "RTN","CASHF",67,0) S LEN=$G(CASHVAL("FIELD LENGTH")) "RTN","CASHF",68,0) Q "RTN","CASHF",69,0) ; "RTN","CASHF",70,0) FLDINX() ; Return the Standardized FIELD ATTRIBUTE used for the ^DD(FILE,"B" Index "RTN","CASHF",71,0) ; This call is required for the Internationalization version "RTN","CASHF",72,0) Q "Label" "RTN","CASHF",73,0) ; "RTN","CASHF",74,0) INPUT(FILE,FIELD) ; Return the INPUT TRANSFORM Attribute for a Field "RTN","CASHF",75,0) ; "RTN","CASHF",76,0) ; Parameters: "RTN","CASHF",77,0) ; "RTN","CASHF",78,0) ; FILE - (Required) The FileMan File # "RTN","CASHF",79,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHF",80,0) ; "RTN","CASHF",81,0) N CASHERR,DIERR,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHF",82,0) Q $$GET1^DID(FILE,FIELD,"","INPUT TRANSFORM","","CASHERR") "RTN","CASHF",83,0) ; "RTN","CASHF",84,0) OUTPUT(FILE,FIELD) ; Return the OUTPUT TRANSFORM Attribute for a Field "RTN","CASHF",85,0) ; "RTN","CASHF",86,0) ; Parameters: "RTN","CASHF",87,0) ; "RTN","CASHF",88,0) ; FILE - (Required) The FileMan File # "RTN","CASHF",89,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHF",90,0) ; "RTN","CASHF",91,0) N CASHERR,DIERR,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHF",92,0) Q $$GET1^DID(FILE,FIELD,"","OUTPUT TRANSFORM","","CASHERR") "RTN","CASHF",93,0) ; "RTN","CASHF",94,0) POINTER(FILE,FIELD) ; Return the POINTER Attribute for a Field "RTN","CASHF",95,0) ; "RTN","CASHF",96,0) ; Parameters: "RTN","CASHF",97,0) ; "RTN","CASHF",98,0) ; FILE - (Required) The FileMan File # "RTN","CASHF",99,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHF",100,0) ; "RTN","CASHF",101,0) N CASHERR,DIERR,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHF",102,0) Q $$GET1^DID(FILE,FIELD,"","POINTER","","CASHERR") "RTN","CASHFN11") 0^23^B38734702 "RTN","CASHFN11",1,0) CASHFN11 ;;ALB/MGC - FileMan Class Mapper - File #15050.11 Utilities ; 11/15/04@3:00:00 "RTN","CASHFN11",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHFN11",3,0) ; "RTN","CASHFN11",4,0) Q ; Specific Entry Point must be used "RTN","CASHFN11",5,0) ; "RTN","CASHFN11",6,0) ADDFILE(FILE,NAME,SUBNM,SQLNM,FTYPE,PFLD) ; Create a new FM CLass Map (#15050.11) "RTN","CASHFN11",7,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHFN11",8,0) S CASHIEN(1)=FILE "RTN","CASHFN11",9,0) S CASHFDA(15050.11,"+1,",.01)=NAME ; File Name "RTN","CASHFN11",10,0) S CASHFDA(15050.11,"+1,",.02)=SUBNM ; Sub-File Name "RTN","CASHFN11",11,0) S CASHFDA(15050.11,"+1,",.03)=SQLNM ; SQL Name "RTN","CASHFN11",12,0) S CASHFDA(15050.11,"+1,",.04)=FTYPE ; File Type "RTN","CASHFN11",13,0) S CASHFDA(15050.11,"+1,",.05)=PFLD ; Parent Field "RTN","CASHFN11",14,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN11",15,0) Q "RTN","CASHFN11",16,0) ; "RTN","CASHFN11",17,0) ADDFLD(FILE,FIELD,NAME,CALC,CARD,COLL,DESC,INV,REL,REQ,SQLCODE,SQLCOMP,TYPE,CAT,SQLNM) ; Add a new FM Class Map - Property (#15050.111) "RTN","CASHFN11",18,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN11",19,0) S CASHIEN(1)=FIELD "RTN","CASHFN11",20,0) S IENS="+1,"_FILE_"," "RTN","CASHFN11",21,0) S CASHFDA(15050.111,IENS,.01)=NAME ; Field Name "RTN","CASHFN11",22,0) S CASHFDA(15050.111,IENS,.02)=CALC ; Calculated (1 or 0) "RTN","CASHFN11",23,0) S CASHFDA(15050.111,IENS,.03)=CARD ; Cardinality ("",one,many,parent,child) "RTN","CASHFN11",24,0) S CASHFDA(15050.111,IENS,.04)=COLL ; Collection ("",array,list) "RTN","CASHFN11",25,0) S CASHFDA(15050.111,IENS,.05)=INV ; Inverse Property (Relationships) "RTN","CASHFN11",26,0) S CASHFDA(15050.111,IENS,.06)=REL ; Relationship (1 or 0) "RTN","CASHFN11",27,0) S CASHFDA(15050.111,IENS,.07)=REQ ; Required (1 or 0) "RTN","CASHFN11",28,0) S CASHFDA(15050.111,IENS,.08)=SQLCOMP ; SQL Computed (1 or 0) "RTN","CASHFN11",29,0) S CASHFDA(15050.111,IENS,.09)=TYPE ; Cache Datatype "RTN","CASHFN11",30,0) S:DESC'="" CASHFDA(15050.111,IENS,.11)=DESC ; Description "RTN","CASHFN11",31,0) S:SQLCODE'="" CASHFDA(15050.111,IENS,.21)=SQLCODE ; SQL Code for Computed Field "RTN","CASHFN11",32,0) S CASHFDA(15050.111,IENS,.31)=CAT ; Field Category (data,multiple,child,pointer) "RTN","CASHFN11",33,0) S CASHFDA(15050.111,IENS,.32)=SQLNM ; SQL Field Name "RTN","CASHFN11",34,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN11",35,0) Q "RTN","CASHFN11",36,0) ; "RTN","CASHFN11",37,0) ADDPARAM(FILE,FIELD,ID,PARAM,VALUE) ; Add a new FM Class Map - Property Parameter (#15050.1111) "RTN","CASHFN11",38,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN11",39,0) S CASHIEN(1)=ID "RTN","CASHFN11",40,0) S IENS="+1,"_FIELD_","_FILE_"," "RTN","CASHFN11",41,0) S CASHFDA(15050.1111,IENS,.01)=PARAM ; Parameter Name "RTN","CASHFN11",42,0) S CASHFDA(15050.1111,IENS,.02)=VALUE ; Parameter Value "RTN","CASHFN11",43,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN11",44,0) Q "RTN","CASHFN11",45,0) ; "RTN","CASHFN11",46,0) ADDMTD(FILE,METHOD,NAME,CMTHD,CMODE,DESC,SPEC,PRIV,PUBLIC,RTYPE) ; Add a new FM Class Map - Method (#15050.112) "RTN","CASHFN11",47,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN11",48,0) S CASHIEN(1)=METHOD "RTN","CASHFN11",49,0) S IENS="+1,"_FILE_"," "RTN","CASHFN11",50,0) S CASHFDA(15050.112,IENS,.01)=NAME ; Method Name "RTN","CASHFN11",51,0) S CASHFDA(15050.112,IENS,.02)=CMTHD ; Class Method (1 or 0) "RTN","CASHFN11",52,0) S CASHFDA(15050.112,IENS,.03)=CMODE ; Code Mode ("",code,expression,objectgenerator) "RTN","CASHFN11",53,0) S CASHFDA(15050.112,IENS,.04)=PRIV ; Private (1 or 0) "RTN","CASHFN11",54,0) S CASHFDA(15050.112,IENS,.05)=RTYPE ; Return Type (Data type or Class) "RTN","CASHFN11",55,0) S:DESC'="" CASHFDA(15050.112,IENS,.11)=DESC ; Description "RTN","CASHFN11",56,0) S:SPEC'="" CASHFDA(15050.112,IENS,.21)=SPEC ; Formal Spec (parameters) "RTN","CASHFN11",57,0) S:PUBLIC'="" CASHFDA(15050.112,IENS,.31)=PUBLIC ; Public List (variables) "RTN","CASHFN11",58,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN11",59,0) Q "RTN","CASHFN11",60,0) ; "RTN","CASHFN11",61,0) ADDCODE(FILE,METHOD,CODE) ; Add a new FM Class Map - Method Code (#15050.1121) "RTN","CASHFN11",62,0) I '($D(CODE)\10) Q "RTN","CASHFN11",63,0) N DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN11",64,0) S IENS=METHOD_","_FILE_"," "RTN","CASHFN11",65,0) D WP^DIE(15050.112,IENS,1,"","CODE") ; Code Lines "RTN","CASHFN11",66,0) Q "RTN","CASHFN11",67,0) ; "RTN","CASHFN11",68,0) ADDMAP(FILE,MAP,NAME,TYPE,GLOBAL) ; Add a new FM Class Map - Map (#15050.113) "RTN","CASHFN11",69,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN11",70,0) S CASHIEN(1)=MAP "RTN","CASHFN11",71,0) S IENS="+1,"_FILE_"," "RTN","CASHFN11",72,0) S CASHFDA(15050.113,IENS,.01)=NAME ; Map Name "RTN","CASHFN11",73,0) S CASHFDA(15050.113,IENS,.02)=TYPE ; Map Type (data,index,bitmap,bitmapextent) "RTN","CASHFN11",74,0) S CASHFDA(15050.113,IENS,.03)=GLOBAL ; Global Name "RTN","CASHFN11",75,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN11",76,0) Q "RTN","CASHFN11",77,0) ; "RTN","CASHFN11",78,0) ADDSUBS(FILE,MAP,ID,EXP,INIT,STOP,FLDNO,ALTEXP) ; Add a new FM Class Map - Map Subscript (#15050.1131) "RTN","CASHFN11",79,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN11",80,0) S CASHIEN(1)=ID "RTN","CASHFN11",81,0) S IENS="+1,"_MAP_","_FILE_"," "RTN","CASHFN11",82,0) S CASHFDA(15050.1131,IENS,.01)=EXP ; Expression "RTN","CASHFN11",83,0) S CASHFDA(15050.1131,IENS,.02)=INIT ; Loop Init Value "RTN","CASHFN11",84,0) S CASHFDA(15050.1131,IENS,.03)=STOP ; Stop Expression "RTN","CASHFN11",85,0) S CASHFDA(15050.1131,IENS,.04)=FLDNO ; Field Number "RTN","CASHFN11",86,0) S CASHFDA(15050.1131,IENS,.05)=ALTEXP ; Alternate Expression (for Pointer fields) "RTN","CASHFN11",87,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN11",88,0) Q "RTN","CASHFN11",89,0) ; "RTN","CASHFN11",90,0) ADDDATA(FILE,MAP,ID,NAME,NODE,PCE,PFLAG,RCODE) ; Add a new FM Class Map - Map Data (#15050.1132) "RTN","CASHFN11",91,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN11",92,0) S CASHIEN(1)=ID "RTN","CASHFN11",93,0) S IENS="+1,"_MAP_","_FILE_"," "RTN","CASHFN11",94,0) S CASHFDA(15050.1132,IENS,.01)=NAME ; Field Name "RTN","CASHFN11",95,0) S CASHFDA(15050.1132,IENS,.02)=NODE ; Node "RTN","CASHFN11",96,0) S CASHFDA(15050.1132,IENS,.03)=PCE ; Piece "RTN","CASHFN11",97,0) S CASHFDA(15050.1132,IENS,.04)=PFLAG ; Pointer Flag "RTN","CASHFN11",98,0) S:RCODE'="" CASHFDA(15050.1132,IENS,.11)=RCODE ; Retrieval Code "RTN","CASHFN11",99,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN11",100,0) Q "RTN","CASHFN11",101,0) ; "RTN","CASHFN11",102,0) ADDSUBF(FILE,SUBFILE) ; Add a new FM Class Map - Sub File (#15050.114) "RTN","CASHFN11",103,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN11",104,0) S CASHIEN(1)=SUBFILE "RTN","CASHFN11",105,0) S IENS="+1,"_FILE_"," "RTN","CASHFN11",106,0) S CASHFDA(15050.114,IENS,.01)=SUBFILE ; Map Name "RTN","CASHFN11",107,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN11",108,0) Q "RTN","CASHFN11",109,0) ; "RTN","CASHFN11",110,0) DELALL ; Remove all FM Class Map entries (#15050.11) "RTN","CASHFN11",111,0) ; Lock ^XTMP("CASH") "RTN","CASHFN11",112,0) I '$$LOCK^CASHU($J,"DELALL^CASHFN11") Q "RTN","CASHFN11",113,0) N FILE,I,TOT "RTN","CASHFN11",114,0) S FILE=0 "RTN","CASHFN11",115,0) S TOT=$P($G(^CASH(15050.11,0)),"^",4) "RTN","CASHFN11",116,0) F I=1:1 S FILE=$O(^CASH(15050.11,FILE)) Q:'+FILE D DELFILE(FILE) I TOT S ^XTMP("CASH","STATUS")=(I*100\TOT)_"%" "RTN","CASHFN11",117,0) ; Unlock ^XTMP("CASH") "RTN","CASHFN11",118,0) D UNLOCK^CASHU($J) "RTN","CASHFN11",119,0) Q "RTN","CASHFN11",120,0) ; "RTN","CASHFN11",121,0) DELFILE(FILE) ; Remove an FM Class Map entry (#15050.11) "RTN","CASHFN11",122,0) N %,%H,DA,DIC,DIK,DIQUIET,DISYS,DT,DTIME,DUZ,IO,U,X,Y "RTN","CASHFN11",123,0) S DIQUIET=1 D DT^DICRW "RTN","CASHFN11",124,0) S DIK="^CASH(15050.11," "RTN","CASHFN11",125,0) S DA=FILE "RTN","CASHFN11",126,0) D ^DIK "RTN","CASHFN11",127,0) Q "RTN","CASHFN11",128,0) ; "RTN","CASHFN11",129,0) NMEXIST(NAME) ; Return 1 if the passed in FILE NAME exists "RTN","CASHFN11",130,0) Q $D(^CASH(15050.11,"U",$$UP^XLFSTR(NAME)))\10 "RTN","CASHFN11",131,0) ; "RTN","CASHFN11",132,0) SUBEXIST(SUBNM) ; Return 1 if the passed in SUB NAME exists "RTN","CASHFN11",133,0) Q $D(^CASH(15050.11,"N",SUBNM))\10 "RTN","CASHFN11",134,0) ; "RTN","CASHFN11",135,0) FNMEXIST(FILE,NAME) ; Return 1 if the passed in FIELD NAME exists "RTN","CASHFN11",136,0) ; Special Cases first "RTN","CASHFN11",137,0) N FNM,FSUBNM "RTN","CASHFN11",138,0) D GETNAMES(FILE,.FNM,.FSUBNM) "RTN","CASHFN11",139,0) ; Name cannot match default Class ID "RTN","CASHFN11",140,0) I $$UP^XLFSTR(FNM)_"ID"=$$UP^XLFSTR(NAME) Q 1 "RTN","CASHFN11",141,0) ; Name cannot match Unique Identifier for Sub-file "RTN","CASHFN11",142,0) I FSUBNM'="",$$UP^XLFSTR(FSUBNM)_"ID"=$$UP^XLFSTR(NAME) Q 1 "RTN","CASHFN11",143,0) ; Now check Uppercase Index "RTN","CASHFN11",144,0) Q $D(^CASH(15050.11,FILE,1,"U",$$UP^XLFSTR(NAME)))\10 "RTN","CASHFN11",145,0) ; "RTN","CASHFN11",146,0) GETNAMES(FILE,NAME,SUBNM,SQLNM) ; Get Names for passed in File "RTN","CASHFN11",147,0) ; File number will be passed with a leading # by CASHC* "RTN","CASHFN11",148,0) I $E(FILE)="#" S FILE=$E(FILE,2,255) "RTN","CASHFN11",149,0) N REC "RTN","CASHFN11",150,0) S REC=$G(^CASH(15050.11,FILE,0)) "RTN","CASHFN11",151,0) S NAME=$P(REC,"^",1) "RTN","CASHFN11",152,0) S SUBNM=$P(REC,"^",2) "RTN","CASHFN11",153,0) S SQLNM=$P(REC,"^",3) "RTN","CASHFN11",154,0) Q "RTN","CASHFN11",155,0) ; "RTN","CASHFN11",156,0) UNPACK(IENS,ARRAY,ERROR) ; Unpack File # 15050.11 - FM Class Map "RTN","CASHFN11",157,0) ; "RTN","CASHFN11",158,0) ; NOTE: IENS (FILE_",") is passed rather than FILE as it is a "RTN","CASHFN11",159,0) ; required Key for examining ARRAY. "RTN","CASHFN11",160,0) ; ARRAY and ERROR are passed by Reference. "RTN","CASHFN11",161,0) ; "RTN","CASHFN11",162,0) N DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHFN11",163,0) D GETS^DIQ(15050.11,IENS,"**","","ARRAY","ERROR") "RTN","CASHFN11",164,0) Q "RTN","CASHFN11",165,0) ; "RTN","CASHFN11",166,0) FLDCNT(FILE) ; Return the adjusted number of Fields in the File "RTN","CASHFN11",167,0) ; Get number of Properties from Field # 1 of File # 15050.11 "RTN","CASHFN11",168,0) ; (We could just use $P(^DD(FILE,0),"^",4), but as we actually create classes from "RTN","CASHFN11",169,0) ; ^CASH(15050.11,FILE), there is no guarantee this file is in step with ^DD). "RTN","CASHFN11",170,0) N FIELD,NO "RTN","CASHFN11",171,0) S NO=$P($G(^CASH(15050.11,FILE,1,0)),"^",4) "RTN","CASHFN11",172,0) ; Adjust total for WP Fields (as they count twice in this total). "RTN","CASHFN11",173,0) I $D(^CASH(15050.11,FILE,1,"C","W")) S FIELD="" F S FIELD=$O(^CASH(15050.11,FILE,1,"C","W",FIELD)) Q:FIELD="" S NO=NO-1 "RTN","CASHFN11",174,0) Q NO "RTN","CASHFN11",175,0) ; "RTN","CASHFN11",176,0) NINDEXS(DA,NM,SBNM) ; Create an "N" index record (for Class names created with the "N" Flag) "RTN","CASHFN11",177,0) ; Only set this level for Files if NM passed in "RTN","CASHFN11",178,0) I $G(NM)'="",'$$ISFILE^CASHU(DA) Q "RTN","CASHFN11",179,0) N NAME,NUM "RTN","CASHFN11",180,0) S NAME=$S($G(NM)'="":NM,1:$G(SBNM)) "RTN","CASHFN11",181,0) S NUM=$TR(DA,".","") "RTN","CASHFN11",182,0) S NAME=$E(NAME,1,23-$L(NUM))_NUM "RTN","CASHFN11",183,0) S ^CASH(15050.11,"N",NAME,DA)="" "RTN","CASHFN11",184,0) Q "RTN","CASHFN11",185,0) ; "RTN","CASHFN11",186,0) NINDEXK(DA,NM,SBNM) ; Kill an "N" index record (for Class names created with the "N" Flag) "RTN","CASHFN11",187,0) N NAME,NUM "RTN","CASHFN11",188,0) S NAME=$S($G(NM)'="":NM,1:$G(SBNM)) "RTN","CASHFN11",189,0) S NUM=$TR(DA,".","") "RTN","CASHFN11",190,0) S NAME=$E(NAME,1,23-$L(NUM))_NUM "RTN","CASHFN11",191,0) K ^CASH(15050.11,"N",NAME,DA) "RTN","CASHFN11",192,0) Q "RTN","CASHFN12") 0^24^B10663721 "RTN","CASHFN12",1,0) CASHFN12 ;;ALB/MGC - Custom Datatypes - File #15050.12 Utilities ; 01/27/05@3:00:00 "RTN","CASHFN12",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHFN12",3,0) ; "RTN","CASHFN12",4,0) Q ; Specific Entry Point must be used "RTN","CASHFN12",5,0) ; "RTN","CASHFN12",6,0) ADDDT(DTYPE,NAME,CDT,ODBCT,SQLCAT,INCGEN,SUPER) ; Create a new Custom Datatype (#15050.12) "RTN","CASHFN12",7,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHFN12",8,0) S CASHIEN(1)=DTYPE "RTN","CASHFN12",9,0) S CASHFDA(15050.12,"+1,",.01)=NAME ; Datatype Name "RTN","CASHFN12",10,0) S CASHFDA(15050.12,"+1,",.02)=CDT ; Client Datatype "RTN","CASHFN12",11,0) S CASHFDA(15050.12,"+1,",.03)=ODBCT ; ODBC Type "RTN","CASHFN12",12,0) S CASHFDA(15050.12,"+1,",.04)=SQLCAT ; SQL Category "RTN","CASHFN12",13,0) S CASHFDA(15050.12,"+1,",.05)=INCGEN ; Include Generator "RTN","CASHFN12",14,0) S CASHFDA(15050.12,"+1,",.06)=SUPER ; Super Classes "RTN","CASHFN12",15,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN12",16,0) Q "RTN","CASHFN12",17,0) ; "RTN","CASHFN12",18,0) ADDDESC(DTYPE,DESC) ; Add a new Custom Datatype - Description (#15050.121) "RTN","CASHFN12",19,0) I '($D(DESC)\10) Q "RTN","CASHFN12",20,0) N DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN12",21,0) S IENS=DTYPE_"," "RTN","CASHFN12",22,0) D WP^DIE(15050.12,IENS,1,"","DESC") ; Description "RTN","CASHFN12",23,0) Q "RTN","CASHFN12",24,0) ; "RTN","CASHFN12",25,0) ADDMTD(DTYPE,METHOD,NAME,CMTHD,CMODE,SPEC,PRIV,PUBLIC,RTYPE) ; Add a new Custom Datatype - Method (#15050.122) "RTN","CASHFN12",26,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN12",27,0) S CASHIEN(1)=METHOD "RTN","CASHFN12",28,0) S IENS="+1,"_DTYPE_"," "RTN","CASHFN12",29,0) S CASHFDA(15050.122,IENS,.01)=NAME ; Method Name "RTN","CASHFN12",30,0) S CASHFDA(15050.122,IENS,.02)=CMTHD ; Class Method (1 or 0) "RTN","CASHFN12",31,0) S CASHFDA(15050.122,IENS,.03)=CMODE ; Code Mode ("",code,expression,objectgenerator) "RTN","CASHFN12",32,0) S CASHFDA(15050.122,IENS,.04)=SPEC ; Formal Spec (parameters) "RTN","CASHFN12",33,0) S CASHFDA(15050.122,IENS,.05)=PRIV ; Private (1 or 0) "RTN","CASHFN12",34,0) S CASHFDA(15050.122,IENS,.06)=PUBLIC ; Public List (variables) "RTN","CASHFN12",35,0) S CASHFDA(15050.122,IENS,.07)=RTYPE ; Return Type (Data type or Class) "RTN","CASHFN12",36,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN12",37,0) Q "RTN","CASHFN12",38,0) ; "RTN","CASHFN12",39,0) ADDMDESC(DTYPE,METHOD,DESC) ; Add a new Custom Datatype - Method Description (#15050.1221) "RTN","CASHFN12",40,0) I '($D(DESC)\10) Q "RTN","CASHFN12",41,0) N DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN12",42,0) S IENS=METHOD_","_DTYPE_"," "RTN","CASHFN12",43,0) D WP^DIE(15050.122,IENS,1,"","DESC") ; Description "RTN","CASHFN12",44,0) Q "RTN","CASHFN12",45,0) ; "RTN","CASHFN12",46,0) ADDCODE(DTYPE,METHOD,CODE) ; Add a new Custom Datatype - Method Code (#15050.1222) "RTN","CASHFN12",47,0) I '($D(CODE)\10) Q "RTN","CASHFN12",48,0) N DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN12",49,0) S IENS=METHOD_","_DTYPE_"," "RTN","CASHFN12",50,0) D WP^DIE(15050.122,IENS,2,"","CODE") ; Code Lines "RTN","CASHFN12",51,0) Q "RTN","CASHFN12",52,0) ; "RTN","CASHFN12",53,0) ADDPARAM(DTYPE,PARAM,NAME,VALUE,TYPE) ; Add a new Custom Datatype - Parameter (#15050.123) "RTN","CASHFN12",54,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN12",55,0) S CASHIEN(1)=PARAM "RTN","CASHFN12",56,0) S IENS="+1,"_DTYPE_"," "RTN","CASHFN12",57,0) S CASHFDA(15050.123,IENS,.01)=NAME ; Parameter Name "RTN","CASHFN12",58,0) S CASHFDA(15050.123,IENS,.02)=VALUE ; Parameter Value "RTN","CASHFN12",59,0) S CASHFDA(15050.123,IENS,.03)=TYPE ; Parameter Type "RTN","CASHFN12",60,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN12",61,0) Q "RTN","CASHFN12",62,0) ; "RTN","CASHFN12",63,0) ADDPDESC(DTYPE,PARAM,DESC) ; Add a new Custom Datatype - Parameter Description (#15050.1231) "RTN","CASHFN12",64,0) I '($D(DESC)\10) Q "RTN","CASHFN12",65,0) N DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN12",66,0) S IENS=PARAM_","_DTYPE_"," "RTN","CASHFN12",67,0) D WP^DIE(15050.123,IENS,1,"","DESC") ; Description "RTN","CASHFN12",68,0) Q "RTN","CASHFN12",69,0) ; "RTN","CASHFN12",70,0) DELALL ; Remove all Custom Datatype entries (#15050.12) "RTN","CASHFN12",71,0) N DTYPE "RTN","CASHFN12",72,0) S DTYPE=0 "RTN","CASHFN12",73,0) F S DTYPE=$O(^CASH(15050.12,DTYPE)) Q:'+DTYPE D DELDTYPE(DTYPE) "RTN","CASHFN12",74,0) Q "RTN","CASHFN12",75,0) ; "RTN","CASHFN12",76,0) DELDTYPE(DTYPE) ; Remove a Custom Datatype entry (#15050.12) "RTN","CASHFN12",77,0) N %,%H,DA,DIC,DIK,DIQUIET,DISYS,DT,DTIME,DUZ,IO,U,X,Y "RTN","CASHFN12",78,0) S DIQUIET=1 D DT^DICRW "RTN","CASHFN12",79,0) S DIK="^CASH(15050.12," "RTN","CASHFN12",80,0) S DA=DTYPE "RTN","CASHFN12",81,0) D ^DIK "RTN","CASHFN12",82,0) Q "RTN","CASHFN12",83,0) ; "RTN","CASHFN12",84,0) UNPACK(IENS,ARRAY,ERROR) ; Unpack File # 15050.12 - Custom Datatype "RTN","CASHFN12",85,0) ; "RTN","CASHFN12",86,0) ; NOTE: IENS (FILE_",") is passed rather than FILE as it is a "RTN","CASHFN12",87,0) ; required Key for examining ARRAY. "RTN","CASHFN12",88,0) ; ARRAY and ERROR are passed by Reference. "RTN","CASHFN12",89,0) ; "RTN","CASHFN12",90,0) N DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHFN12",91,0) D GETS^DIQ(15050.12,IENS,"**","","ARRAY","ERROR") "RTN","CASHFN12",92,0) Q "RTN","CASHFN13") 0^25^B3395043 "RTN","CASHFN13",1,0) CASHFN13 ;;ALB/MGC - Errors - File #15050.13 Utilities ; 01/27/05@3:00:00 "RTN","CASHFN13",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHFN13",3,0) ; "RTN","CASHFN13",4,0) Q ; Specific Entry Point must be used "RTN","CASHFN13",5,0) ; "RTN","CASHFN13",6,0) ADDERR(ERROR,ERR,FILE,FLAGS,PCKG,ID,OWNER,ZE,OBJERR) ; Create a new Error (#15050.13) "RTN","CASHFN13",7,0) N %,%H,%I,CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IO,U,X "RTN","CASHFN13",8,0) D NOW^%DTC "RTN","CASHFN13",9,0) S CASHIEN(1)=$G(ERROR) "RTN","CASHFN13",10,0) S CASHFDA(15050.13,"+1,",.01)=% ; Error Date/Time "RTN","CASHFN13",11,0) S CASHFDA(15050.13,"+1,",.02)=ERR ; Error Text "RTN","CASHFN13",12,0) S CASHFDA(15050.13,"+1,",.03)=FILE ; File # "RTN","CASHFN13",13,0) S CASHFDA(15050.13,"+1,",.04)=FLAGS ; Flags passed "RTN","CASHFN13",14,0) S CASHFDA(15050.13,"+1,",.05)=PCKG ; Package for compilation "RTN","CASHFN13",15,0) S CASHFDA(15050.13,"+1,",.06)=ID ; ID if FLAGS["I" "RTN","CASHFN13",16,0) S CASHFDA(15050.13,"+1,",.07)=OWNER ; Valid SQL User "RTN","CASHFN13",17,0) S CASHFDA(15050.13,"+1,",2)=ZE ; $ZE Error Text "RTN","CASHFN13",18,0) S CASHFDA(15050.13,"+1,",3)=OBJERR ; Object Error Text "RTN","CASHFN13",19,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN13",20,0) S ERROR=CASHIEN(1) "RTN","CASHFN13",21,0) Q "RTN","CASHFN13",22,0) ; "RTN","CASHFN13",23,0) ADDLIST(ERROR,LIST) ; Add a new LIST entry - Parameter (#15050.131) "RTN","CASHFN13",24,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN13",25,0) S CASHIEN(1)=LIST "RTN","CASHFN13",26,0) S IENS="+1,"_ERROR_"," "RTN","CASHFN13",27,0) S CASHFDA(15050.131,IENS,.01)=LIST ; List entry "RTN","CASHFN13",28,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN13",29,0) Q "RTN","CASHFN13",30,0) ; "RTN","CASHFN13",31,0) DELALL ; Remove all Error entries (#15050.13) "RTN","CASHFN13",32,0) N ERROR "RTN","CASHFN13",33,0) S ERROR=0 "RTN","CASHFN13",34,0) F S ERROR=$O(^CASH(15050.13,ERROR)) Q:'+ERROR D DELERR(ERROR) "RTN","CASHFN13",35,0) Q "RTN","CASHFN13",36,0) ; "RTN","CASHFN13",37,0) DELERR(ERROR) ; Remove an Error entry (#15050.13) "RTN","CASHFN13",38,0) N %,%H,DA,DIC,DIK,DIQUIET,DISYS,DT,DTIME,DUZ,IO,U,X,Y "RTN","CASHFN13",39,0) S DIQUIET=1 D DT^DICRW "RTN","CASHFN13",40,0) S DIK="^CASH(15050.13," "RTN","CASHFN13",41,0) S DA=ERROR "RTN","CASHFN13",42,0) D ^DIK "RTN","CASHFN13",43,0) Q "RTN","CASHFN14") 0^46^B5900231 "RTN","CASHFN14",1,0) CASHFN14 ;;ALB/MGC - Parameters - File #15050.14 Utilities ; 05/15/06@3:00:00 "RTN","CASHFN14",2,0) ;;1.0;FM TO CACHE SQL;;May 15, 2006 "RTN","CASHFN14",3,0) ; "RTN","CASHFN14",4,0) Q ; Specific Entry Point must be used "RTN","CASHFN14",5,0) ; "RTN","CASHFN14",6,0) INIT ; Initialize the CASH Paramter File (#15050.14) "RTN","CASHFN14",7,0) ; Remove any existing entries "RTN","CASHFN14",8,0) D DELALL "RTN","CASHFN14",9,0) ; Now add the Maximum Fields Per Class entry (250 is the default) "RTN","CASHFN14",10,0) D ADDPARAM(1,"MAXIMUM FIELDS PER CLASS",250) "RTN","CASHFN14",11,0) ; Now add the Maximum Multiples Per Class entry (75 is the default) "RTN","CASHFN14",12,0) D ADDPARAM(2,"MAXIMUM MULTIPLES PER CLASS",75) "RTN","CASHFN14",13,0) Q "RTN","CASHFN14",14,0) ; "RTN","CASHFN14",15,0) ADDPARAM(PARAM,NAME,VALUE) ; Create a new Parameter (#15050.14) "RTN","CASHFN14",16,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHFN14",17,0) S CASHIEN(1)=$G(PARAM) "RTN","CASHFN14",18,0) S CASHFDA(15050.14,"+1,",.01)=NAME ; Parameter Name "RTN","CASHFN14",19,0) S CASHFDA(15050.14,"+1,",.02)=VALUE ; Default Parameter Value "RTN","CASHFN14",20,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN14",21,0) S PARAM=CASHIEN(1) "RTN","CASHFN14",22,0) Q "RTN","CASHFN14",23,0) ; "RTN","CASHFN14",24,0) UPDPARAM(PARAM,NAME,VALUE) ; Update a Parameter (#15050.14) "RTN","CASHFN14",25,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN14",26,0) S IENS=PARAM_"," "RTN","CASHFN14",27,0) S:NAME'="" CASHFDA(15050.14,IENS,.01)=NAME ; Parameter Name "RTN","CASHFN14",28,0) S:VALUE'="" CASHFDA(15050.14,IENS,.02)=VALUE ; Default Parameter Value "RTN","CASHFN14",29,0) D FILE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN14",30,0) Q "RTN","CASHFN14",31,0) ; "RTN","CASHFN14",32,0) ADDOVR(PARAM,FILE,VALUE) ; Add a new OVERRIDES entry - Parameter (#15050.141) "RTN","CASHFN14",33,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN14",34,0) S CASHIEN(1)=FILE "RTN","CASHFN14",35,0) S IENS="+1,"_PARAM_"," "RTN","CASHFN14",36,0) S CASHFDA(15050.141,IENS,.01)=FILE ; File Number "RTN","CASHFN14",37,0) S CASHFDA(15050.141,IENS,.02)=VALUE ; Override Value "RTN","CASHFN14",38,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN14",39,0) Q "RTN","CASHFN14",40,0) ; "RTN","CASHFN14",41,0) UPDOVR(PARAM,FILE,VALUE) ; Update an OVERRIDES entry - Parameter (#15050.141) "RTN","CASHFN14",42,0) N CASHFDA,CASHIEN,DISYS,DT,DTIME,DUZ,IENS,IO,U "RTN","CASHFN14",43,0) S IENS=FILE_","_PARAM_"," "RTN","CASHFN14",44,0) S CASHFDA(15050.141,IENS,.02)=VALUE ; Override Value "RTN","CASHFN14",45,0) D UPDATE^DIE("","CASHFDA","CASHIEN") "RTN","CASHFN14",46,0) Q "RTN","CASHFN14",47,0) ; "RTN","CASHFN14",48,0) DELALL ; Remove all Parameter entries (#15050.14) "RTN","CASHFN14",49,0) N PARAM "RTN","CASHFN14",50,0) S PARAM=0 "RTN","CASHFN14",51,0) F S PARAM=$O(^CASH(15050.14,PARAM)) Q:'+PARAM D DELPARAM(PARAM) "RTN","CASHFN14",52,0) Q "RTN","CASHFN14",53,0) ; "RTN","CASHFN14",54,0) DELPARAM(PARAM) ; Remove an Parameter entry (#15050.14) "RTN","CASHFN14",55,0) N %,%H,DA,DIC,DIK,DIQUIET,DISYS,DT,DTIME,DUZ,IO,U,X,Y "RTN","CASHFN14",56,0) S DIQUIET=1 D DT^DICRW "RTN","CASHFN14",57,0) S DIK="^CASH(15050.14," "RTN","CASHFN14",58,0) S DA=PARAM "RTN","CASHFN14",59,0) D ^DIK "RTN","CASHFN14",60,0) Q "RTN","CASHFN14",61,0) ; "RTN","CASHFN14",62,0) DELOVR(PARAM,FILE) ; Remove an OVERRIDES entry (#15050.141) "RTN","CASHFN14",63,0) N %,%H,DA,DIC,DIK,DIQUIET,DISYS,DT,DTIME,DUZ,IO,U,X,Y "RTN","CASHFN14",64,0) S DIQUIET=1 D DT^DICRW "RTN","CASHFN14",65,0) S DIK="^CASH(15050.14,"_PARAM_",1," "RTN","CASHFN14",66,0) S DA=FILE "RTN","CASHFN14",67,0) S DA(1)=PARAM "RTN","CASHFN14",68,0) D ^DIK "RTN","CASHFN14",69,0) Q "RTN","CASHFN19") 0^26^B16611231 "RTN","CASHFN19",1,0) CASHFN19 ;;ALB/MGC - SQL Reserved Words - File #15050.19 Utilities ; 11/10/04@4:00:00 "RTN","CASHFN19",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHFN19",3,0) ; "RTN","CASHFN19",4,0) Q ; Specific Entry Point must be used "RTN","CASHFN19",5,0) ; "RTN","CASHFN19",6,0) SQLRW(X) ; Return if X is SQL Reserved Word "RTN","CASHFN19",7,0) ; 1 - SQL Reserved Word "RTN","CASHFN19",8,0) ; 0 - Not a SQL Reserved Word "RTN","CASHFN19",9,0) S X=$$UP^XLFSTR(X) "RTN","CASHFN19",10,0) Q $D(^CASH(15050.19,"B",X))\10 "RTN","CASHFN19",11,0) ; "RTN","CASHFN19",12,0) INIT ; Initialize SQL Reserved Word File (15050.19) "RTN","CASHFN19",13,0) N DIC,DT,DTIME,DUZ,I,IO,J,LINE,U,X,Y "RTN","CASHFN19",14,0) F I=1:1 S LINE=$P($T(Z+I),";;",2) Q:LINE="" D "RTN","CASHFN19",15,0) .F J=1:1 S X=$P(LINE,"|",J) Q:X="" D "RTN","CASHFN19",16,0) ..S DIC="^CASH(15050.19,",DIC(0)="Z" "RTN","CASHFN19",17,0) ..D ^DIC "RTN","CASHFN19",18,0) ..I +Y=-1 K D0,DD D FILE^DICN W !,X," added" "RTN","CASHFN19",19,0) ..Q "RTN","CASHFN19",20,0) .Q "RTN","CASHFN19",21,0) Q "RTN","CASHFN19",22,0) ; "RTN","CASHFN19",23,0) DELALL ; Remove all SQL Reserved Word entries (#15050.19) "RTN","CASHFN19",24,0) N SQLRW "RTN","CASHFN19",25,0) S SQLRW=0 "RTN","CASHFN19",26,0) F S SQLRW=$O(^CASH(15050.19,SQLRW)) Q:'+SQLRW D DELRW(SQLRW) "RTN","CASHFN19",27,0) Q "RTN","CASHFN19",28,0) ; "RTN","CASHFN19",29,0) DELRW(SQLRW) ; Remove a SQL Reserved Word entry (#15050.19) "RTN","CASHFN19",30,0) N %,%H,DA,DIC,DIK,DIQUIET,DISYS,DT,DTIME,DUZ,IO,U,X,Y "RTN","CASHFN19",31,0) S DIQUIET=1 D DT^DICRW "RTN","CASHFN19",32,0) S DIK="^CASH(15050.19," "RTN","CASHFN19",33,0) S DA=SQLRW "RTN","CASHFN19",34,0) D ^DIK "RTN","CASHFN19",35,0) Q "RTN","CASHFN19",36,0) ; "RTN","CASHFN19",37,0) Z ; "RTN","CASHFN19",38,0) ;;%AFTERHAVING|%ALPHAUP|%ALTER|%ALTER_USER|%BEGTRANS| "RTN","CASHFN19",39,0) ;;%CHECKPRIV|%CREATE_ROLE|%CREATE_USER|%DBUGFULL| "RTN","CASHFN19",40,0) ;;%DELDATA|%DESCRIPTION|%DROP_ANY_ROLE|%DROP_USER| "RTN","CASHFN19",41,0) ;;%EXACT|%EXTERNAL|%FILE|%FOREACH|%FULL| "RTN","CASHFN19",42,0) ;;%GRANT_ANY_PRIVILEGE|%GRANT_ANY_ROLE|%INORDER| "RTN","CASHFN19",43,0) ;;%INTERNAL|%INTEXT|%INTRANS|%INTRANSACTION|%MCODE| "RTN","CASHFN19",44,0) ;;%NOCHECK|%NODELDATA|%NOINDEX|%NOLOCK|%NOTRIGGER| "RTN","CASHFN19",45,0) ;;%NUMROWS|%ODBCOUT|%ROUTINE|%ROWCOUNT|%STARTSWITH| "RTN","CASHFN19",46,0) ;;%STRING|%THRESHOLD|%UPPER| "RTN","CASHFN19",47,0) ;;ABSOLUTE|ACTION|ADD|ALL|ALLOCATE|ALTER|AND| "RTN","CASHFN19",48,0) ;;ANY|ARE|AS|ASC|ASSERTION|AT|AUTHORIZATION|AVG| "RTN","CASHFN19",49,0) ;;BEGIN|BETWEEN|BIT|BIT_LENGTH|BOTH|BY|CASCADE| "RTN","CASHFN19",50,0) ;;CASE|CAST|CATALOG|CHAR|CHARACTER|CHARACTER_LENGTH| "RTN","CASHFN19",51,0) ;;CHAR_LENGTH|CHECK|CLOSE|COALESCE|COBOL|COLLATE| "RTN","CASHFN19",52,0) ;;COLLATION|COLUMN|COMMIT|CONNECT|CONNECTION| "RTN","CASHFN19",53,0) ;;CONSTRAINT|CONSTRAINTS|CONTINUE|CONVERT| "RTN","CASHFN19",54,0) ;;CORRESPONDING|COUNT|CREATE|CROSS|CURRENT| "RTN","CASHFN19",55,0) ;;CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP| "RTN","CASHFN19",56,0) ;;CURRENT_USER|CURSOR|DATE|DAY|DEALLOCATE|DEC| "RTN","CASHFN19",57,0) ;;DECIMAL|DECLARE|DEFAULT|DEFERRABLE|DEFERRED| "RTN","CASHFN19",58,0) ;;DELETE|DESC|DESCRIBE|DESCRIPTOR|DIAGNOSTICS| "RTN","CASHFN19",59,0) ;;DISCONNECT|DISTINCT|DOMAIN|DOUBLE|DROP|ELSE| "RTN","CASHFN19",60,0) ;;END|ENDEXEC|ESCAPE|EXCEPT|EXCEPTION|EXEC| "RTN","CASHFN19",61,0) ;;EXECUTE|EXISTS|EXTERNAL|EXTRACT|FALSE|FETCH| "RTN","CASHFN19",62,0) ;;FILE|FIRST|FLOAT|FOR|FOREIGN|FORTRAN|FOUND| "RTN","CASHFN19",63,0) ;;FROM|FULL|GET|GLOBAL|GO|GOTO|GRANT|GROUP| "RTN","CASHFN19",64,0) ;;HAVING|HOUR|IDENTITY|IMMEDIATE|IN|INDICATOR| "RTN","CASHFN19",65,0) ;;INITIALLY|INNER|INPUT|INSENSITIVE|INSERT|INT| "RTN","CASHFN19",66,0) ;;INTEGER|INTERSECT|INTERVAL|INTO|IS|ISOLATION| "RTN","CASHFN19",67,0) ;;JOIN|KEY|LANGUAGE|LAST|LEADING|LEFT|LEVEL| "RTN","CASHFN19",68,0) ;;LIKE|LOCAL|LOWER|MATCH|MAX|MIN|MINUTE| "RTN","CASHFN19",69,0) ;;MODULE|MONTH|NAMES|NATIONAL|NATURAL|NCHAR| "RTN","CASHFN19",70,0) ;;NEXT|NO|NOT|NULL|NULLIF|NUMERIC|OCTET_LENGTH| "RTN","CASHFN19",71,0) ;;OF|ON|ONLY|OPEN|OPTION|OR|ORDER|OUTER| "RTN","CASHFN19",72,0) ;;OUTPUT|OVERLAPS|PAD|PARTIAL|PASCAL|PLI| "RTN","CASHFN19",73,0) ;;POSITION|PRECISION|PREPARE|PRESERVE|PRIMARY| "RTN","CASHFN19",74,0) ;;PRIOR|PRIVILEGES|PROCEDURE|PUBLIC|READ|REAL| "RTN","CASHFN19",75,0) ;;REFERENCES|RELATIVE|RESTRICT|REVOKE|RIGHT|ROLE| "RTN","CASHFN19",76,0) ;;ROLLBACK|ROWS|SCHEMA|SCROLL|SECOND|SECTION| "RTN","CASHFN19",77,0) ;;SELECT|SESSION_USER|SET|SIZE|SMALLINT|SOME| "RTN","CASHFN19",78,0) ;;SPACE|SQL|SQLCODE|SQLERROR|SQLSTATE|SUBSTRING| "RTN","CASHFN19",79,0) ;;SUM|SYSTEM_USER|TABLE|TEMPORARY|THEN|TIME| "RTN","CASHFN19",80,0) ;;TIMESTAMP|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO| "RTN","CASHFN19",81,0) ;;TRAILING|TRANSACTION|TRANSLATE|TRANSLATION|TRIM| "RTN","CASHFN19",82,0) ;;TRUE|UNION|UNIQUE|UNKNOWN|UPDATE|UPPER|USAGE| "RTN","CASHFN19",83,0) ;;USER|USING|VALUE|VALUES|VARCHAR|VARYING|VIEW| "RTN","CASHFN19",84,0) ;;WHEN|WHENEVER|WHERE|WITH|WORK|WRITE|YEAR| "RTN","CASHI") 0^27^B9673499 "RTN","CASHI",1,0) CASHI ;ALB/MGC - Initialisation for FileMan Class Map Tool ; 01/27/05@3:00:00 "RTN","CASHI",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHI",3,0) ; "RTN","CASHI",4,0) POST ; Post-install tasks "RTN","CASHI",5,0) ; IMPORTANT: This call should be run after the initial installation of the "RTN","CASHI",6,0) ; Data Standardisation FileMan Class Map tool "RTN","CASHI",7,0) ; "RTN","CASHI",8,0) ; Note: Running this utility subsequently should be harmless. The FileMan Datatypes "RTN","CASHI",9,0) ; and SQL Reserved Word files should be static. "RTN","CASHI",10,0) ; "RTN","CASHI",11,0) N OK,VER "RTN","CASHI",12,0) S VER=$$OBJVER^CASHU() "RTN","CASHI",13,0) ; "RTN","CASHI",14,0) ; Initialize SQL Reserved Words File (#15050.19) "RTN","CASHI",15,0) W !!,"Initializing SQL Reserved Words File (#15050.19), if necessary." "RTN","CASHI",16,0) D INIT^CASHFN19 "RTN","CASHI",17,0) ; "RTN","CASHI",18,0) ; Remove old Error Log data "RTN","CASHI",19,0) W !!,"Removing old Error Log data (#15050.13)" "RTN","CASHI",20,0) D DELALL^CASHFN13 "RTN","CASHI",21,0) ; "RTN","CASHI",22,0) ; For Non-Cache systems or Cache version less than V4.1 "RTN","CASHI",23,0) I VER<4.1 W !!,"WARNING! This tool requires Cache Objects V4.1 or higher to create Classes" Q "RTN","CASHI",24,0) ; "RTN","CASHI",25,0) ; Internationalization Setup, if required "RTN","CASHI",26,0) ; File #15050.17 and CASHINT must be installed first for non-US FileMan systems "RTN","CASHI",27,0) I $$ISFILE^CASHU(15050.17),$$ISRTN^CASHU("CASHINT") D ^CASHINT "RTN","CASHI",28,0) ; "RTN","CASHI",29,0) ; Create definitions for the CASH Utility Classes "RTN","CASHI",30,0) W !!,"Create and compile the CASH Utility Classes.",! "RTN","CASHI",31,0) D ^CASHUT01 "RTN","CASHI",32,0) D ^CASHUT02 "RTN","CASHI",33,0) ; "RTN","CASHI",34,0) ; Create and Compile the Utility Classes "RTN","CASHI",35,0) ; "RTN","CASHI",36,0) ; For Version 5.0 and higher "RTN","CASHI",37,0) I VER>4.1 S OK=$$ALL^CASHUT() "RTN","CASHI",38,0) ; For Version 4.1 "RTN","CASHI",39,0) I VER=4.1 S OK=$$ALL^CASHV4UT() "RTN","CASHI",40,0) ; "RTN","CASHI",41,0) ; Delete All Definitions for Custom FileMan Datatypes in File #15050.12 "RTN","CASHI",42,0) D DELALL^CASHFN12 "RTN","CASHI",43,0) ; "RTN","CASHI",44,0) ; Create Definitions for Custom FileMan Datatypes in File #15050.12 "RTN","CASHI",45,0) W !!,"Create and compile the latest CASH.FileMan Datatypes.",! "RTN","CASHI",46,0) D ^CASHDT01 "RTN","CASHI",47,0) D ^CASHDT02 "RTN","CASHI",48,0) D ^CASHDT03 "RTN","CASHI",49,0) D ^CASHDT04 "RTN","CASHI",50,0) D ^CASHDT05 "RTN","CASHI",51,0) D ^CASHDT06 "RTN","CASHI",52,0) D ^CASHDT07 "RTN","CASHI",53,0) D ^CASHDT08 "RTN","CASHI",54,0) ; "RTN","CASHI",55,0) ; Create and Compile Custom FileMan Datatypes "RTN","CASHI",56,0) ; "RTN","CASHI",57,0) ; For Version 5.0 and higher "RTN","CASHI",58,0) I VER>4.1 S OK=$$ALL^CASHD() "RTN","CASHI",59,0) ; For Version 4.1 "RTN","CASHI",60,0) I VER=4.1 S OK=$$ALL^CASHV4D() "RTN","CASHI",61,0) ; "RTN","CASHI",62,0) Q "RTN","CASHI",63,0) ; "RTN","CASHI",64,0) CLEAN ; Clean up previous versions (1.01b or earlier) if necessary "RTN","CASHI",65,0) ; "RTN","CASHI",66,0) ; IMPORTANT: This should only be run prior to an install or "RTN","CASHI",67,0) ; you may remove vital FileMan files! "RTN","CASHI",68,0) ; "RTN","CASHI",69,0) N %,%H,DA,DIC,DIK,DIQUIET,DISYS,DIU,DT,DTIME,DUZ,FILE,I,IO,NAME,ROU,U,X,Y "RTN","CASHI",70,0) S DIQUIET=1 D DT^DICRW "RTN","CASHI",71,0) ; "RTN","CASHI",72,0) ; Remove A5DSCM* routines if installed by previous version "RTN","CASHI",73,0) F I=1:1 S ROU=$T(ROU+I) Q:ROU="" D "RTN","CASHI",74,0) .S X=$P(ROU,";;",2) "RTN","CASHI",75,0) .X ^%ZOSF("TEST") "RTN","CASHI",76,0) .Q:'$T "RTN","CASHI",77,0) .X ^%ZOSF("DEL") W !,"Routine: ",X," - deleted" "RTN","CASHI",78,0) .Q "RTN","CASHI",79,0) ; "RTN","CASHI",80,0) ; Remove 15050.1* files if installed by previous version "RTN","CASHI",81,0) F FILE=15050.11:.01:15050.19 I $$VFILE^DILFD(FILE),$$ROOT^DILFD(FILE)["^A5DSCM" D "RTN","CASHI",82,0) .S DIU=FILE,DIU(0)="D" "RTN","CASHI",83,0) .D EN^DIU2 "RTN","CASHI",84,0) .W !,"File #: ",FILE," - deleted" "RTN","CASHI",85,0) .Q "RTN","CASHI",86,0) Q "RTN","CASHI",87,0) ; "RTN","CASHI",88,0) CLEANFM ; Remove Fileman classes if installed by previous version "RTN","CASHI",89,0) F NAME="Date","DateTime","Numeric","Pointer","SetOfCodes","String","StringDateTime","VariablePointer" D CLDEL^CASHCU("Fileman."_NAME) "RTN","CASHI",90,0) Q "RTN","CASHI",91,0) ; "RTN","CASHI",92,0) ROU ; List of deprecated Routines from versions 1.01* "RTN","CASHI",93,0) ;;A5DSCM "RTN","CASHI",94,0) ;;A5DSCM0 "RTN","CASHI",95,0) ;;A5DSCM01 "RTN","CASHI",96,0) ;;A5DSCM02 "RTN","CASHI",97,0) ;;A5DSCM03 "RTN","CASHI",98,0) ;;A5DSCM09 "RTN","CASHI",99,0) ;;A5DSCM1 "RTN","CASHI",100,0) ;;A5DSCM2 "RTN","CASHI",101,0) ;;A5DSCM3 "RTN","CASHI",102,0) ;;A5DSCMC "RTN","CASHI",103,0) ;;A5DSCMC0 "RTN","CASHI",104,0) ;;A5DSCMC1 "RTN","CASHI",105,0) ;;A5DSCMC2 "RTN","CASHI",106,0) ;;A5DSCMC3 "RTN","CASHI",107,0) ;;A5DSCMC4 "RTN","CASHI",108,0) ;;A5DSCMC5 "RTN","CASHI",109,0) ;;A5DSCMC6 "RTN","CASHI",110,0) ;;A5DSCMD "RTN","CASHI",111,0) ;;A5DSCMD4 "RTN","CASHI",112,0) ;;A5DSCMDI "RTN","CASHI",113,0) ;;A5DSCMI "RTN","CASHI",114,0) ;;A5DSCMR "RTN","CASHI",115,0) ;;A5DSCMT1 "RTN","CASHI",116,0) ;;A5DSCMT2 "RTN","CASHI",117,0) ;;A5DSCMT3 "RTN","CASHI",118,0) ;;A5DSCMT4 "RTN","CASHI",119,0) ;;A5DSCMT5 "RTN","CASHI",120,0) ;;A5DSCMT6 "RTN","CASHI",121,0) ;;A5DSCMT7 "RTN","CASHI",122,0) ;;A5DSCMT8 "RTN","CASHI",123,0) ;;A5DSCMU "RTN","CASHI",124,0) ;;A5DSCMUI "RTN","CASHN") 0^38^B6286040 "RTN","CASHN",1,0) CASHN ;;ALB/MGC - FileMan Class Map - Name Utilities ; 01/31/04@5:00:00 "RTN","CASHN",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHN",3,0) ; "RTN","CASHN",4,0) Q ; Specific Entry Point must be used "RTN","CASHN",5,0) ; "RTN","CASHN",6,0) ; Name Utility Calls "RTN","CASHN",7,0) ; "RTN","CASHN",8,0) NAME(DICNM) ; Get Name from ^DIC name "RTN","CASHN",9,0) N I,NAME "RTN","CASHN",10,0) ; Get Standardized Name "RTN","CASHN",11,0) S NAME=$$STDNAME(DICNM) "RTN","CASHN",12,0) ; Check for duplicate Names "RTN","CASHN",13,0) I '$$NMEXIST^CASHFN11(NAME) Q NAME "RTN","CASHN",14,0) ; If Name is 25 characters or more, adding an integer makes no difference "RTN","CASHN",15,0) ; (Cache only uses 25 characters for uniqueness) "RTN","CASHN",16,0) I $L(NAME)>24 S NAME=$$STDNAME(DICNM,24) Q:'$$NMEXIST^CASHFN11(NAME) NAME "RTN","CASHN",17,0) ; Otherwise append integers to get unique name "RTN","CASHN",18,0) F I=0:1 I '$$NMEXIST^CASHFN11(NAME_I) S NAME=NAME_I Q "RTN","CASHN",19,0) Q NAME "RTN","CASHN",20,0) ; "RTN","CASHN",21,0) STDNAME(NAME,LEN) ; Standardize Names "RTN","CASHN",22,0) N BIT,CNT,I,STDNAME "RTN","CASHN",23,0) S STDNAME="" "RTN","CASHN",24,0) ; Default is 25 characters - Cache only uses 25 characters for uniqueness constraints "RTN","CASHN",25,0) S LEN=$G(LEN,25) "RTN","CASHN",26,0) ; Convert non-standard Localized characters - held in the Localization File (#15050.17) "RTN","CASHN",27,0) ; Thanks to Heikki Koivulehto and Hellevi Ruonamaa "RTN","CASHN",28,0) I $P($G(^CASH(15050.17,1,0)),"^",2) D "RTN","CASHN",29,0) .N FROM,TO "RTN","CASHN",30,0) .S FROM=$P($G(^CASH(15050.17,1,0)),"^",3) Q:FROM="" "RTN","CASHN",31,0) .S TO=$P($G(^CASH(15050.17,1,0)),"^",4) "RTN","CASHN",32,0) .S NAME=$TR(NAME,FROM,TO) "RTN","CASHN",33,0) .Q "RTN","CASHN",34,0) ; Remove punctuation charachters "RTN","CASHN",35,0) S NAME=$TR(NAME,"!""#$%&'()*+,-.:;<=>?@[\]^`{|}~","") "RTN","CASHN",36,0) ; Convert forward slashes and underscores to spaces "RTN","CASHN",37,0) S NAME=$TR(NAME,"/_"," ") "RTN","CASHN",38,0) I $E(NAME)'?1UL S NAME="Z"_NAME "RTN","CASHN",39,0) S CNT=$L(NAME," ") "RTN","CASHN",40,0) ; Create "Standard" Name "RTN","CASHN",41,0) F I=1:1:CNT S BIT=$P(NAME," ",I),BIT(I)=$$UP^XLFSTR($E(BIT,1))_$$LOW^XLFSTR($E(BIT,2,255)),STDNAME=STDNAME_BIT(I) "RTN","CASHN",42,0) ; If Name is too long shorten it "RTN","CASHN",43,0) I $L(STDNAME)>LEN D "RTN","CASHN",44,0) .N AVG,MAX "RTN","CASHN",45,0) .; Attempt 1: Remove vowels from longer than average words (not first letter) "RTN","CASHN",46,0) .S AVG=$L(STDNAME)\CNT "RTN","CASHN",47,0) .S STDNAME="" "RTN","CASHN",48,0) .F I=1:1:CNT S:$L(BIT(I))>AVG BIT(I)=$TR(BIT(I),"aeiou","") S STDNAME=STDNAME_BIT(I) "RTN","CASHN",49,0) .I $L(STDNAME)'>LEN Q "RTN","CASHN",50,0) .; Attempt 2: Remove vowels from words longer than LEN\(no of words) (not first letter) "RTN","CASHN",51,0) .S STDNAME="",MAX=LEN\CNT "RTN","CASHN",52,0) .F I=1:1:CNT S:$L(BIT(I))>MAX BIT(I)=$TR(BIT(I),"aeiou","") S STDNAME=STDNAME_BIT(I) "RTN","CASHN",53,0) .I $L(STDNAME)'>LEN Q "RTN","CASHN",54,0) .; Finally cut off all words at LEN\{no of words} "RTN","CASHN",55,0) .S STDNAME="" "RTN","CASHN",56,0) .F I=1:1:CNT S BIT(I)=$E(BIT(I),1,MAX),STDNAME=STDNAME_BIT(I) "RTN","CASHN",57,0) .Q "RTN","CASHN",58,0) Q STDNAME "RTN","CASHR") 0^28^B32370795 "RTN","CASHR",1,0) CASHR ;;ALB/MGC - FileMan Class Map - Runtime Calls ; 12/20/04@3:00:00 "RTN","CASHR",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHR",3,0) ; "RTN","CASHR",4,0) Q ; Specific Entry Point must be used "RTN","CASHR",5,0) ; "RTN","CASHR",6,0) ; FILE Level Utilities "RTN","CASHR",7,0) ; "RTN","CASHR",8,0) EXISTS(FILE,IEN) ; Return if a given entry # exists for a given FileMan File "RTN","CASHR",9,0) ; "RTN","CASHR",10,0) ; Parameters: "RTN","CASHR",11,0) ; "RTN","CASHR",12,0) ; FILE - (Required) The FileMan File # "RTN","CASHR",13,0) ; IEN - (Required) Internal Entry Number to check for "RTN","CASHR",14,0) ; "RTN","CASHR",15,0) ; This call wraps $$FIND1^DIC, to New variables. "RTN","CASHR",16,0) ; Used by IsValidDT() Classmethods. "RTN","CASHR",17,0) ; "RTN","CASHR",18,0) N CASHERR,DIERR,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHR",19,0) Q $$FIND1^DIC(FILE,"","AQ",IEN,"","","CASHERR")>0 "RTN","CASHR",20,0) ; "RTN","CASHR",21,0) FIND(FILE,VALUE) ; Find an entry # for a given FileMan File and Value "RTN","CASHR",22,0) ; "RTN","CASHR",23,0) ; Parameters: "RTN","CASHR",24,0) ; "RTN","CASHR",25,0) ; FILE - (Required) The FileMan File # "RTN","CASHR",26,0) ; VALUE - (Required) The Value to search for "RTN","CASHR",27,0) ; "RTN","CASHR",28,0) ; This call wraps $$FIND1^DIC, to New variables. "RTN","CASHR",29,0) ; Used by DisplayToLogical() and OdbcToLogical() Classmethods. "RTN","CASHR",30,0) ; "RTN","CASHR",31,0) ; [NOTE: Invalid data MUST be returned as is, these methods should just convert data, "RTN","CASHR",32,0) ; whereas the IsValidDT() method validates and returns any error messages] "RTN","CASHR",33,0) ; "RTN","CASHR",34,0) N CASHERR,DIERR,DISYS,DT,DTIME,DUZ,IO,U,VALID "RTN","CASHR",35,0) S VALID=$$FIND1^DIC(FILE,"","MO",VALUE,"","","CASHERR") "RTN","CASHR",36,0) Q $S('VALID:VALUE,1:VALID) "RTN","CASHR",37,0) ; "RTN","CASHR",38,0) NEXTID(FILE,IENS) ; Get next ID for a given File # "RTN","CASHR",39,0) ; "RTN","CASHR",40,0) ; Parameters: "RTN","CASHR",41,0) ; "RTN","CASHR",42,0) ; FILE - (Required) The FileMan File # "RTN","CASHR",43,0) ; IENS - (Optional) IENS is required for sub-files "RTN","CASHR",44,0) ; "RTN","CASHR",45,0) N I,INCR,NEXT,ROOT "RTN","CASHR",46,0) S ROOT=$$ROOT^DILFD(FILE,$G(IENS)) "RTN","CASHR",47,0) I ROOT="" Q "" "RTN","CASHR",48,0) S NEXT=$P($G(@(ROOT_"0)")),"^",3) "RTN","CASHR",49,0) I NEXT="" Q 1 "RTN","CASHR",50,0) S INCR=1 "RTN","CASHR",51,0) I NEXT["." F I=1:1:$L($P(NEXT,".",2)) S INCR=INCR/10 "RTN","CASHR",52,0) F NEXT=NEXT:INCR Q:'$D(@(ROOT_NEXT_")")) "RTN","CASHR",53,0) Q NEXT "RTN","CASHR",54,0) ; "RTN","CASHR",55,0) FILEATTR(FILE,ATTR) ; Get File Attribute "RTN","CASHR",56,0) ; "RTN","CASHR",57,0) ; Parameters: "RTN","CASHR",58,0) ; "RTN","CASHR",59,0) ; FILE - (Required) The FileMan File # "RTN","CASHR",60,0) ; ATTR - (Required) The Attribute to be returned "RTN","CASHR",61,0) ; "RTN","CASHR",62,0) N CASHERR,CASHVAL,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHR",63,0) D FILE^DID(FILE,"",ATTR,"CASHVAL","CASHERR") "RTN","CASHR",64,0) I $D(CASHVAL(ATTR))=1 Q CASHVAL(ATTR) "RTN","CASHR",65,0) I $D(CASHVAL(ATTR)) N ARR,VALUE D Q VALUE "RTN","CASHR",66,0) .S ARR=$NA(CASHVAL(ATTR)) "RTN","CASHR",67,0) .S ARR=$Q(@ARR) "RTN","CASHR",68,0) .S VALUE=@ARR "RTN","CASHR",69,0) .F S ARR=$Q(@ARR) Q:ARR="" S VALUE=VALUE_$C(13,10)_@ARR "RTN","CASHR",70,0) .Q "RTN","CASHR",71,0) Q "" "RTN","CASHR",72,0) ; "RTN","CASHR",73,0) ; FIELD Level Utilities "RTN","CASHR",74,0) ; "RTN","CASHR",75,0) GETDATA(FILE,FIELD,ID) ; Return Data for a given FileMan File, Field and Cache Object ID "RTN","CASHR",76,0) ; "RTN","CASHR",77,0) ; Parameters: "RTN","CASHR",78,0) ; "RTN","CASHR",79,0) ; FILE - (Required) The FileMan File # "RTN","CASHR",80,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR",81,0) ; ID - (Required) Cache's internal Object Id "RTN","CASHR",82,0) ; "RTN","CASHR",83,0) ; The Cache Object Id is used to re-create IENS for GET1^DIQ "RTN","CASHR",84,0) ; e.g. "xx||yy||zz" => "zz,yy,xx," "RTN","CASHR",85,0) ; "RTN","CASHR",86,0) I $G(ID)="" Q "" "RTN","CASHR",87,0) N CASHERR,DIERR,DISYS,DT,DTIME,DUZ,I,IENS,IO,U "RTN","CASHR",88,0) ; Get IENS from ID "RTN","CASHR",89,0) S IENS="" "RTN","CASHR",90,0) F I=$L(ID,"||"):-1:1 S IENS=IENS_$P(ID,"||",I)_"," "RTN","CASHR",91,0) Q $$GET1^DIQ(FILE,IENS,FIELD,"","","CASHERR") "RTN","CASHR",92,0) ; "RTN","CASHR",93,0) GETDTIO(FILE,FIELD,ID) ; Return Data for a given FileMan File, Field and Cache Object ID "RTN","CASHR",94,0) ; Get the IO fields in case they are required by Computed fields or Transforms "RTN","CASHR",95,0) ; "RTN","CASHR",96,0) ; Parameters: "RTN","CASHR",97,0) ; "RTN","CASHR",98,0) ; FILE - (Required) The FileMan File # "RTN","CASHR",99,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR",100,0) ; ID - (Required) Cache's internal Object Id "RTN","CASHR",101,0) ; "RTN","CASHR",102,0) ; The Cache Object Id is used to re-create IENS for GET1^DIQ "RTN","CASHR",103,0) ; e.g. "xx||yy||zz" => "zz,yy,xx," "RTN","CASHR",104,0) ; "RTN","CASHR",105,0) I $G(ID)="" Q "" "RTN","CASHR",106,0) N %ZISI,%ZISX,%ZISZ,%DIERR,CASHERR,DISYS,DT,DTIME,DUZ,I,IENS,IO,IOBS "RTN","CASHR",107,0) N IOF,IOHG,IOM,ION,IOPAR,IOS,IOSL,IOST,IOT,IOUPAR,IOXY,POP,U "RTN","CASHR",108,0) D HOME^%ZIS "RTN","CASHR",109,0) ; Get IENS from ID "RTN","CASHR",110,0) S IENS="" "RTN","CASHR",111,0) F I=$L(ID,"||"):-1:1 S IENS=IENS_$P(ID,"||",I)_"," "RTN","CASHR",112,0) Q $$GET1^DIQ(FILE,IENS,FIELD,"","","CASHERR") "RTN","CASHR",113,0) ; "RTN","CASHR",114,0) GETWP(FILE,FIELD,ID,CASHARR) ; Return Serialized String for Word Processing Field given File, Field and Cache Object ID "RTN","CASHR",115,0) ; "RTN","CASHR",116,0) ; Parameters: "RTN","CASHR",117,0) ; "RTN","CASHR",118,0) ; FILE - (Required) The FileMan File # "RTN","CASHR",119,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR",120,0) ; ID - (Required) Cache's internal Object Id "RTN","CASHR",121,0) ; CASHARR - (Optional) Variable to return WP array by reference "RTN","CASHR",122,0) ; "RTN","CASHR",123,0) ; The Cache Object Id is used to re-create IENS for GET1^DIQ "RTN","CASHR",124,0) ; e.g. "xx||yy||zz" => "zz,yy,xx," "RTN","CASHR",125,0) ; "RTN","CASHR",126,0) ; Get IENS from ID "RTN","CASHR",127,0) N CASHERR,DISYS,DT,DTIME,DUZ,I,IENS,IO,SERIAL,U "RTN","CASHR",128,0) S (IENS,SERIAL)="" "RTN","CASHR",129,0) F I=$L(ID,"||"):-1:1 S IENS=IENS_$P(ID,"||",I)_"," "RTN","CASHR",130,0) D GET1^DIQ(FILE,IENS,FIELD,"","CASHARR","CASHERR") "RTN","CASHR",131,0) S SERIAL=$G(CASHARR(1)) "RTN","CASHR",132,0) ; Make sure serialized array does not go above 32K (32,767 bytes) "RTN","CASHR",133,0) F I=2:1 Q:'$D(CASHARR(I)) Q:($L(SERIAL)+$L($G(CASHARR(I))))>32765 S SERIAL=SERIAL_$C(13,10)_$G(CASHARR(I)) "RTN","CASHR",134,0) Q SERIAL "RTN","CASHR",135,0) ; "RTN","CASHR",136,0) FLDATTR(FILE,FIELD,ATTR) ; Get Field Attribute "RTN","CASHR",137,0) ; "RTN","CASHR",138,0) ; Parameters: "RTN","CASHR",139,0) ; "RTN","CASHR",140,0) ; FILE - (Required) The FileMan File # "RTN","CASHR",141,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR",142,0) ; ATTR - (Required) The Attribute to be returned "RTN","CASHR",143,0) ; "RTN","CASHR",144,0) N CASHERR,CASHVAL,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHR",145,0) D FIELD^DID(FILE,FIELD,"",ATTR,"CASHVAL","CASHERR") "RTN","CASHR",146,0) I $D(CASHVAL(ATTR))=1 Q CASHVAL(ATTR) "RTN","CASHR",147,0) I $D(CASHVAL(ATTR)) N ARR,VALUE D Q VALUE "RTN","CASHR",148,0) .S ARR=$NA(CASHVAL(ATTR)) "RTN","CASHR",149,0) .S ARR=$Q(@ARR) "RTN","CASHR",150,0) .S VALUE=@ARR "RTN","CASHR",151,0) .F S ARR=$Q(@ARR) Q:ARR="" S VALUE=VALUE_$C(13,10)_@ARR "RTN","CASHR",152,0) .Q "RTN","CASHR",153,0) Q "" "RTN","CASHR",154,0) ; "RTN","CASHR",155,0) EXTERNAL(FILE,FIELD,VALUE) ; Return the external value for a given internal value "RTN","CASHR",156,0) ; "RTN","CASHR",157,0) ; Parameters: "RTN","CASHR",158,0) ; "RTN","CASHR",159,0) ; FILE - (Required) The FileMan File # "RTN","CASHR",160,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR",161,0) ; VALUE - (Required) The FileMan Internal value to be converted "RTN","CASHR",162,0) ; "RTN","CASHR",163,0) ; This call wraps EXTERNAL^DILFD, to New variables. "RTN","CASHR",164,0) ; Used by LogicalToDisplay() and LogicalToOdbc() Classmethods. "RTN","CASHR",165,0) ; "RTN","CASHR",166,0) N CASHERR,DIERR,DISYS,DT,DTIME,DUZ,I,IENS,IO,U "RTN","CASHR",167,0) Q $$EXTERNAL^DILFD(FILE,FIELD,"",VALUE,"CASHERR") "RTN","CASHR",168,0) ; "RTN","CASHR",169,0) INTERNAL(FILE,FIELD,VALUE) ; Convert External Data to Internal FileMan format "RTN","CASHR",170,0) ; "RTN","CASHR",171,0) ; Parameters: "RTN","CASHR",172,0) ; "RTN","CASHR",173,0) ; FILE - (Required) The FileMan File # "RTN","CASHR",174,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR",175,0) ; VALUE - (Required) External value "RTN","CASHR",176,0) ; "RTN","CASHR",177,0) ; This call wraps CHK^DIE, to New variables. "RTN","CASHR",178,0) ; Used by DisplayToLogical() and OdbcToLogical() Classmethods. "RTN","CASHR",179,0) ; "RTN","CASHR",180,0) ; [NOTE: Invalid data MUST be returned as is, these methods should just convert data, "RTN","CASHR",181,0) ; whereas the IsValidDT() method validates and returns any error messages] "RTN","CASHR",182,0) ; "RTN","CASHR",183,0) N %DT,CASHERR,DIERR,DISYS,DT,DTIME,DUZ,IO,U,VALID "RTN","CASHR",184,0) D CHK^DIE(FILE,FIELD,"",VALUE,.VALID,"CASHERR") "RTN","CASHR",185,0) ; If Invalid, return as is, IsValidDT() needs to return error message "RTN","CASHR",186,0) I VALID="^" Q VALUE "RTN","CASHR",187,0) ; If Valid, return Internal value "RTN","CASHR",188,0) Q VALID "RTN","CASHR",189,0) ; "RTN","CASHR",190,0) ISVALID(FILE,FIELD,VALUE) ; Validate Internal Data for a given File and Field "RTN","CASHR",191,0) ; "RTN","CASHR",192,0) ; Parameters: "RTN","CASHR",193,0) ; "RTN","CASHR",194,0) ; FILE - (Required) The FileMan File # "RTN","CASHR",195,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR",196,0) ; VALUE - (Required) The FileMan Internal value to be validated "RTN","CASHR",197,0) ; "RTN","CASHR",198,0) ; Used by IsValidDT() Classmethods. "RTN","CASHR",199,0) ; "RTN","CASHR",200,0) N %DT,CASHERR,DIERR,DISYS,DT,DTIME,DUZ,IO,U,VALID "RTN","CASHR",201,0) ; Call CHK^DIE "RTN","CASHR",202,0) D CHK^DIE(FILE,FIELD,"",VALUE,.VALID,"CASHERR") "RTN","CASHR",203,0) I VALID="^" Q 0 "RTN","CASHR",204,0) Q 1 "RTN","CASHR",205,0) ; "RTN","CASHR",206,0) INPUT(FILE,FIELD,VALUE,ID) ; Call the Input Transform "RTN","CASHR",207,0) ; "RTN","CASHR",208,0) ; Parameters: "RTN","CASHR",209,0) ; "RTN","CASHR",210,0) ; FILE - (Required) The FileMan File # "RTN","CASHR",211,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR",212,0) ; VALUE - (Required) External value "RTN","CASHR",213,0) ; ID - (Optional) Cache's internal Object Id "RTN","CASHR",214,0) ; "RTN","CASHR",215,0) ; This call may be used by Classmethods where ID isn't available. "RTN","CASHR",216,0) ; Some Input Transforms require D0 or DA(), so if ID isn't passed "RTN","CASHR",217,0) ; the Transform cannot be executed. "RTN","CASHR",218,0) ; "RTN","CASHR",219,0) I $G(VALUE)="" Q "" "RTN","CASHR",220,0) N %,%DT,%H,D0,D1,D2,D3,D4,DA,DIERR,DIQUIET,DISYS,DT,DTIME,DUZ,IO,U,X,XCODE,Y "RTN","CASHR",221,0) S DIQUIET=1 D DT^DICRW "RTN","CASHR",222,0) S XCODE=$$INPUT^CASHF(FILE,FIELD) "RTN","CASHR",223,0) ; If exceutable code is null, return VALUE unchanged "RTN","CASHR",224,0) I XCODE="" Q VALUE "RTN","CASHR",225,0) S ID=$G(ID) "RTN","CASHR",226,0) ; If executable code relies on other instance data and ID isn't passed in, return VALUE unchanged "RTN","CASHR",227,0) I ID="",XCODE["DA"!(XCODE["D0") Q VALUE "RTN","CASHR",228,0) I ID'="" D "RTN","CASHR",229,0) .N I,J,L "RTN","CASHR",230,0) .S L=$L(ID,"||") "RTN","CASHR",231,0) .F I=L:-1:1 S J=$P(ID,"||",I),@("D"_(I-1))=J S:I'=L DA(L-I)=J S:I=L DA=J "RTN","CASHR",232,0) .Q "RTN","CASHR",233,0) S X=VALUE "RTN","CASHR",234,0) X XCODE "RTN","CASHR",235,0) ; X may be killed if Invalid! "RTN","CASHR",236,0) Q $G(X) "RTN","CASHR",237,0) ; "RTN","CASHR",238,0) OUTPUT(FILE,FIELD,VALUE,ID) ; Call the Ouput Transform "RTN","CASHR",239,0) ; "RTN","CASHR",240,0) ; Parameters: "RTN","CASHR",241,0) ; "RTN","CASHR",242,0) ; FILE - (Required) The FileMan File # "RTN","CASHR",243,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR",244,0) ; VALUE - (Required) The FileMan Internal value "RTN","CASHR",245,0) ; ID - (Optional) Cache's internal Object Id "RTN","CASHR",246,0) ; "RTN","CASHR",247,0) ; This call may be used by Classmethods where ID isn't available. "RTN","CASHR",248,0) ; Some Output Transforms require D0 or DA(), so if ID isn't passed "RTN","CASHR",249,0) ; the Transform cannot be executed. "RTN","CASHR",250,0) ; "RTN","CASHR",251,0) I $G(VALUE)="" Q "" "RTN","CASHR",252,0) N %,%DT,%H,D0,D1,D2,D3,D4,DA,DIERR,DIQUIET,DISYS,DT,DTIME,DUZ,IO,U,X,XCODE,Y "RTN","CASHR",253,0) S DIQUIET=1 D DT^DICRW "RTN","CASHR",254,0) S XCODE=$$OUTPUT^CASHF(FILE,FIELD) "RTN","CASHR",255,0) ; If exceutable code is null, return VALUE unchanged "RTN","CASHR",256,0) I XCODE="" Q VALUE "RTN","CASHR",257,0) S ID=$G(ID) "RTN","CASHR",258,0) ; If executable code relies on other instance data and ID isn't passed in, return VALUE unchanged "RTN","CASHR",259,0) I ID="",XCODE["DA"!(XCODE["D0") Q VALUE "RTN","CASHR",260,0) I ID'="" D "RTN","CASHR",261,0) .N I,J,L "RTN","CASHR",262,0) .S L=$L(ID,"||") "RTN","CASHR",263,0) .F I=L:-1:1 S J=$P(ID,"||",I),@("D"_(I-1))=J S:I'=L DA(L-I)=J S:I=L DA=J "RTN","CASHR",264,0) .Q "RTN","CASHR",265,0) S Y=VALUE "RTN","CASHR",266,0) X XCODE "RTN","CASHR",267,0) Q Y "RTN","CASHR0") 0^39^B19713130 "RTN","CASHR0",1,0) CASHR0 ;;ALB/MGC - FileMan Class Map - Runtime Calls - Continued; 12/20/04@3:00:00 "RTN","CASHR0",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHR0",3,0) ; "RTN","CASHR0",4,0) Q ; Specific Entry Point must be used "RTN","CASHR0",5,0) ; "RTN","CASHR0",6,0) ; DATE conversion Utilities "RTN","CASHR0",7,0) ; "RTN","CASHR0",8,0) DATEIN(VALUE,FLAGS,ODBC) ; Convert Date from External to Internal format (depending on FLAGS) "RTN","CASHR0",9,0) ; "RTN","CASHR0",10,0) ; Parameters: "RTN","CASHR0",11,0) ; "RTN","CASHR0",12,0) ; VALUE - (Required) External Date "RTN","CASHR0",13,0) ; FLAGS - (Optional) Flags used by DT^DILF "RTN","CASHR0",14,0) ; ODBC - (Optional) ODBC format flag "RTN","CASHR0",15,0) ; "RTN","CASHR0",16,0) N %DT,CASHERR,CASHVAL,DIERR,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHR0",17,0) S FLAGS=$G(FLAGS) "RTN","CASHR0",18,0) ; If ODBC flag passed try to convert various ODBC formats first. "RTN","CASHR0",19,0) I $G(ODBC) D "RTN","CASHR0",20,0) .I VALUE?4N Q "RTN","CASHR0",21,0) .I VALUE?4N1"-"1.2N S VALUE=$P(VALUE,"-",2)_"/"_$P(VALUE,"-",1) Q "RTN","CASHR0",22,0) .I VALUE?4N1"-"1.2N1"-"1.2N S VALUE=$P(VALUE,"-",2)_"/"_$P(VALUE,"-",3)_"/"_$P(VALUE,"-",1) Q "RTN","CASHR0",23,0) .I VALUE?.1(4N1"-")1.2N1"-"1.2N1" "1.2N1":"1.2N.(1":"1.2N) D "RTN","CASHR0",24,0) ..N DATE "RTN","CASHR0",25,0) ..S DATE=$P(VALUE," ",1) "RTN","CASHR0",26,0) ..I $L(DATE,"-")=2 S VALUE=$TR(DATE,"-","/")_"@"_$P(VALUE," ",2) Q "RTN","CASHR0",27,0) ..S DATE=$P(DATE,"-",2)_"/"_$P(DATE,"-",3)_"/"_$P(DATE,"-",1) "RTN","CASHR0",28,0) ..S VALUE=DATE_"@"_$P(VALUE," ",2) "RTN","CASHR0",29,0) ..Q "RTN","CASHR0",30,0) .Q "RTN","CASHR0",31,0) ; Call DT^DILF with passed in flags "RTN","CASHR0",32,0) D DT^DILF(FLAGS,VALUE,.CASHVAL,"","CASHERR") "RTN","CASHR0",33,0) ; If Invalid, return as is "RTN","CASHR0",34,0) I $D(CASHERR) Q VALUE "RTN","CASHR0",35,0) I CASHVAL=-1 Q VALUE "RTN","CASHR0",36,0) ; If Valid, return Internal value "RTN","CASHR0",37,0) Q CASHVAL "RTN","CASHR0",38,0) ; "RTN","CASHR0",39,0) DATEOUT(VALUE,FLAGS,ODBC) ; Convert Date from Internal to External formats (depending on FLAGS) "RTN","CASHR0",40,0) ; "RTN","CASHR0",41,0) ; Parameters: "RTN","CASHR0",42,0) ; "RTN","CASHR0",43,0) ; VALUE - (Required) Internal Date "RTN","CASHR0",44,0) ; FLAGS - (Optional) Flags used by DT^DILF (plus "O") "RTN","CASHR0",45,0) ; ODBC - (Optional) ODBC format flag "RTN","CASHR0",46,0) ; "RTN","CASHR0",47,0) N %DT,CASHERR,CASHVAL,DIERR,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHR0",48,0) S FLAGS=$G(FLAGS) "RTN","CASHR0",49,0) ; Call DT^DILF with passed in flags, plus "E" "RTN","CASHR0",50,0) D DT^DILF(FLAGS_"E",VALUE,.CASHVAL,"","CASHERR") "RTN","CASHR0",51,0) ; If Invalid, return null "RTN","CASHR0",52,0) I $D(CASHERR) Q "" "RTN","CASHR0",53,0) I CASHVAL=-1 Q "" "RTN","CASHR0",54,0) ; If ODBC flag, convert to ODBC format "RTN","CASHR0",55,0) I $G(ODBC) D Q CASHVAL "RTN","CASHR0",56,0) .N DATE,TIME "RTN","CASHR0",57,0) .S DATE=$P(CASHVAL,".",1) "RTN","CASHR0",58,0) .S TIME=$P(CASHVAL,".",2) "RTN","CASHR0",59,0) .S DATE=DATE+17000000 "RTN","CASHR0",60,0) .S CASHVAL=$E(DATE,1,4)_"-"_$E(DATE,5,6)_"-"_$E(DATE,7,8) "RTN","CASHR0",61,0) .I FLAGS["R"!(FLAGS["T"&(TIME'="")) D "RTN","CASHR0",62,0) ..S TIME=TIME_"000000" "RTN","CASHR0",63,0) ..S CASHVAL=CASHVAL_" "_$E(TIME,1,2)_":"_$E(TIME,3,4) "RTN","CASHR0",64,0) ..I FLAGS["S" S CASHVAL=CASHVAL_":"_$E(TIME,5,6) "RTN","CASHR0",65,0) ..Q "RTN","CASHR0",66,0) .Q "RTN","CASHR0",67,0) ; Otherwise return External value if defined "RTN","CASHR0",68,0) Q $G(CASHVAL(0)) "RTN","CASHR0",69,0) ; "RTN","CASHR0",70,0) DATEVAL(VALUE,FLAGS) ; Validate Internal Date "RTN","CASHR0",71,0) ; "RTN","CASHR0",72,0) ; Parameters: "RTN","CASHR0",73,0) ; "RTN","CASHR0",74,0) ; VALUE - (Required) Internal Date "RTN","CASHR0",75,0) ; FLAGS - (Optional) Flags used by DT^DILF "RTN","CASHR0",76,0) ; "RTN","CASHR0",77,0) N %DT,CASHERR,CASHVAL,DIERR,DISYS,DT,DTIME,DUZ,IO,U "RTN","CASHR0",78,0) S FLAGS=$G(FLAGS) "RTN","CASHR0",79,0) ; Call DT^DILF with passed in flags "RTN","CASHR0",80,0) D DT^DILF(FLAGS,VALUE,.CASHVAL,"","CASHERR") "RTN","CASHR0",81,0) ; If Invalid, return 0 "RTN","CASHR0",82,0) I $D(CASHERR) Q 0 "RTN","CASHR0",83,0) I CASHVAL=-1 Q 0 "RTN","CASHR0",84,0) ; If Valid, and equal to passed in VALUE, i.e. it was Internal format, return 1 "RTN","CASHR0",85,0) I CASHVAL=VALUE Q 1 "RTN","CASHR0",86,0) ; Otherwise return 0 "RTN","CASHR0",87,0) Q 0 "RTN","CASHR0",88,0) ; "RTN","CASHR0",89,0) ; SET OF CODES Utilities "RTN","CASHR0",90,0) ; "RTN","CASHR0",91,0) SOCIN(FILE,FIELD,VALUE) ; Set Of Codes - Convert External Value to Internal "RTN","CASHR0",92,0) ; "RTN","CASHR0",93,0) ; Parameters: "RTN","CASHR0",94,0) ; "RTN","CASHR0",95,0) ; FILE - (Required) The FileMan File # "RTN","CASHR0",96,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR0",97,0) ; VALUE - (Required) External value "RTN","CASHR0",98,0) ; "RTN","CASHR0",99,0) N CODES,START,SUB "RTN","CASHR0",100,0) S CODES=$$POINTER^CASHF(FILE,FIELD) "RTN","CASHR0",101,0) I CODES="" Q "" "RTN","CASHR0",102,0) ; Exact Internal value match "RTN","CASHR0",103,0) I $L(";"_CODES,";"_VALUE_":")>1 Q VALUE "RTN","CASHR0",104,0) ; Exact External value match "RTN","CASHR0",105,0) I $L(CODES,":"_VALUE_";")=2 S SUB=$P(CODES,":"_VALUE_";",1) Q $P(SUB,";",$L(SUB,";")) "RTN","CASHR0",106,0) ; Fuzzy External value matching "RTN","CASHR0",107,0) S START=$F(CODES,":"_VALUE) "RTN","CASHR0",108,0) I START=0!($F(CODES,":"_VALUE,START)) Q VALUE "RTN","CASHR0",109,0) S SUB=$E(CODES,1,START-$L(VALUE)-2) "RTN","CASHR0",110,0) Q $P(SUB,";",$L(SUB,";")) "RTN","CASHR0",111,0) ; "RTN","CASHR0",112,0) SOCOUT(FILE,FIELD,VALUE) ; Set Of Codes - Convert Internal Value to External "RTN","CASHR0",113,0) ; "RTN","CASHR0",114,0) ; Parameters: "RTN","CASHR0",115,0) ; "RTN","CASHR0",116,0) ; FILE - (Required) The FileMan File # "RTN","CASHR0",117,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR0",118,0) ; VALUE - (Required) The FileMan Internal value to be converted "RTN","CASHR0",119,0) ; "RTN","CASHR0",120,0) N CODES "RTN","CASHR0",121,0) S CODES=$$POINTER^CASHF(FILE,FIELD) "RTN","CASHR0",122,0) I CODES="" Q "" "RTN","CASHR0",123,0) Q $P($P(";"_CODES,";"_VALUE_":",2),";") "RTN","CASHR0",124,0) ; "RTN","CASHR0",125,0) SOCVAL(FILE,FIELD,VALUE) ; Set Of Codes - Is Valid Internal value? "RTN","CASHR0",126,0) ; "RTN","CASHR0",127,0) ; Parameters: "RTN","CASHR0",128,0) ; "RTN","CASHR0",129,0) ; FILE - (Required) The FileMan File # "RTN","CASHR0",130,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR0",131,0) ; VALUE - (Required) The FileMan Internal value to be validated "RTN","CASHR0",132,0) ; "RTN","CASHR0",133,0) N CODES "RTN","CASHR0",134,0) S CODES=$$POINTER^CASHF(FILE,FIELD) "RTN","CASHR0",135,0) I CODES="" Q 1 "RTN","CASHR0",136,0) Q $L(";"_CODES,";"_VALUE_":")>1 "RTN","CASHR0",137,0) ; "RTN","CASHR0",138,0) ; VARIABLE POINTER Utilities "RTN","CASHR0",139,0) ; "RTN","CASHR0",140,0) VPIN(FILE,FIELD,VALUE) ; Variable Pointers - Convert External Value to Internal "RTN","CASHR0",141,0) ; "RTN","CASHR0",142,0) ; Parameters: "RTN","CASHR0",143,0) ; "RTN","CASHR0",144,0) ; FILE - (Required) The FileMan File # "RTN","CASHR0",145,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR0",146,0) ; VALUE - (Required) External value "RTN","CASHR0",147,0) ; "RTN","CASHR0",148,0) ; This call wraps CHK^DIE, to New variables. "RTN","CASHR0",149,0) ; Used by DisplayToLogical() and OdbcToLogical() Classmethods. "RTN","CASHR0",150,0) ; "RTN","CASHR0",151,0) ; [NOTE: Invalid data MUST be returned as is, these methods should just convert data, "RTN","CASHR0",152,0) ; whereas the IsValidDT() method validates and returns any error messages] "RTN","CASHR0",153,0) ; "RTN","CASHR0",154,0) N %DT,CASHERR,DIERR,DISYS,DT,DTIME,DUZ,IO,U,VALID "RTN","CASHR0",155,0) D CHK^DIE(FILE,FIELD,"",VALUE,.VALID,"CASHERR") "RTN","CASHR0",156,0) ; If invalid, first check for multiple matches "RTN","CASHR0",157,0) I VALID="^",$G(CASHERR("DIERR",1))=299 D "RTN","CASHR0",158,0) .S FILE=$G(CASHERR("DIERR",1,"PARAM","FILE")) "RTN","CASHR0",159,0) .Q:FILE="" "RTN","CASHR0",160,0) .S VALID=$$FIND1^DIC(FILE,"","O",VALUE,"","","CASHERR") "RTN","CASHR0",161,0) .S VALID=$S(VALID="":"^",1:VALID_";"_$E($$GLOBAL^CASHF(FILE),2,99)) "RTN","CASHR0",162,0) .Q "RTN","CASHR0",163,0) ; If Invalid, return as is, IsValidDT() needs to return error message "RTN","CASHR0",164,0) I VALID="^" Q VALUE "RTN","CASHR0",165,0) ; If Valid, return Internal value "RTN","CASHR0",166,0) Q VALID "RTN","CASHR0",167,0) ; "RTN","CASHR0",168,0) GETVP(FILE,FIELD,ID,PFILE) ; Return VP Data and optionally filter by file "RTN","CASHR0",169,0) ; "RTN","CASHR0",170,0) ; Parameters: "RTN","CASHR0",171,0) ; "RTN","CASHR0",172,0) ; FILE - (Required) The FileMan File # "RTN","CASHR0",173,0) ; FIELD - (Required) The FileMan Field # "RTN","CASHR0",174,0) ; ID - (Required) Cache's internal Object Id "RTN","CASHR0",175,0) ; PFILE - (Optional) The Pointed to File (Only results for this file are returned if specified) "RTN","CASHR0",176,0) ; "RTN","CASHR0",177,0) ; The Cache Object Id is used to re-create IENS for GET1^DIQ "RTN","CASHR0",178,0) ; e.g. "xx||yy||zz" => "zz,yy,xx," "RTN","CASHR0",179,0) ; "RTN","CASHR0",180,0) I $G(ID)="" Q "" "RTN","CASHR0",181,0) N CASHERR,DISYS,DT,DTIME,DUZ,I,IENS,IO,U,VALUE "RTN","CASHR0",182,0) ; Get IENS from ID "RTN","CASHR0",183,0) S IENS="" "RTN","CASHR0",184,0) F I=$L(ID,"||"):-1:1 S IENS=IENS_$P(ID,"||",I)_"," "RTN","CASHR0",185,0) S VALUE=$$GET1^DIQ(FILE,IENS,FIELD,"I","","CASHERR") "RTN","CASHR0",186,0) I VALUE="" Q "" "RTN","CASHR0",187,0) I $G(PFILE)'="" D Q VALUE "RTN","CASHR0",188,0) .N GL "RTN","CASHR0",189,0) .S GL=$$GLOBAL^CASHF(PFILE) "RTN","CASHR0",190,0) .I GL="" S VALUE="" Q "RTN","CASHR0",191,0) .I $P(VALUE,";",2)'=$E(GL,2,255) S VALUE="" Q "RTN","CASHR0",192,0) .S VALUE=$P(VALUE,";",1) "RTN","CASHR0",193,0) .Q "RTN","CASHR0",194,0) Q VALUE "RTN","CASHU") 0^29^B4005707 "RTN","CASHU",1,0) CASHU ;;ALB/MGC - FileMan Class Map - Utility Calls ; 01/31/04@5:00:00 "RTN","CASHU",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHU",3,0) ; "RTN","CASHU",4,0) Q ; Specific Entry Point must be used "RTN","CASHU",5,0) ; "RTN","CASHU",6,0) ; File & Routine Utility Calls "RTN","CASHU",7,0) ; "RTN","CASHU",8,0) ISFILE(FILE) ; Return if this is a valid top level file "RTN","CASHU",9,0) ; "RTN","CASHU",10,0) ; Parameters: "RTN","CASHU",11,0) ; "RTN","CASHU",12,0) ; FILE - (Required) The FileMan File # "RTN","CASHU",13,0) ; "RTN","CASHU",14,0) ; NOTE: This call checks that the ^DIC(FILE,0) exists AND has data, and that there is "RTN","CASHU",15,0) ; no "UP" pointer. If an "UP" pointer exists, this file must be treated as a sub-file, "RTN","CASHU",16,0) ; as the parent file will rely on the relationship being present. "RTN","CASHU",17,0) ; "RTN","CASHU",18,0) I $P($G(^DIC(FILE,0)),"^",1)'="",'$D(^DD(FILE,0,"UP")) Q 1 "RTN","CASHU",19,0) Q 0 "RTN","CASHU",20,0) ; "RTN","CASHU",21,0) ISRTN(X) ; Return if this Routine exists or not "RTN","CASHU",22,0) ; "RTN","CASHU",23,0) ; Parameters: "RTN","CASHU",24,0) ; "RTN","CASHU",25,0) ; X - (Required) The Routine Name "RTN","CASHU",26,0) ; "RTN","CASHU",27,0) X ^%ZOSF("TEST") "RTN","CASHU",28,0) Q $T "RTN","CASHU",29,0) ; "RTN","CASHU",30,0) LOCK(JOB,CALL) ; Lock ^XTMP("CASH") to ensure single user mode "RTN","CASHU",31,0) ; "RTN","CASHU",32,0) ; Parameters: "RTN","CASHU",33,0) ; "RTN","CASHU",34,0) ; JOB - (Required) The $J for the process running the call "RTN","CASHU",35,0) ; CALL - (Required) The Name of the call to run "RTN","CASHU",36,0) ; "RTN","CASHU",37,0) I $G(CALL)=""!($G(JOB)="") Q 0 "RTN","CASHU",38,0) L +^XTMP("CASH"):0 "RTN","CASHU",39,0) ; If the Lock fails, return details about the job that owns the Lock "RTN","CASHU",40,0) I '$T W !,$G(^XTMP("CASH","RUN"))_" Status: "_$G(^XTMP("CASH","STATUS")),! Q 0 "RTN","CASHU",41,0) ; Update ^XTMP("CASH") with details for this job "RTN","CASHU",42,0) N NOW "RTN","CASHU",43,0) S NOW=$$NOW() "RTN","CASHU",44,0) K ^XTMP("CASH") "RTN","CASHU",45,0) S ^XTMP("CASH",0)=(NOW+2)_"^"_NOW_"^CASH FM To Cache SQL Mapping Tool" "RTN","CASHU",46,0) S ^XTMP("CASH","RUN")="Call: "_CALL_" is being run by Job#: "_JOB "RTN","CASHU",47,0) S ^XTMP("CASH","RUN",JOB)=CALL "RTN","CASHU",48,0) S ^XTMP("CASH","STATUS")="Running" "RTN","CASHU",49,0) Q 1 "RTN","CASHU",50,0) ; "RTN","CASHU",51,0) UNLOCK(JOB) ; Unlock ^XTMP("CASH") "RTN","CASHU",52,0) ; "RTN","CASHU",53,0) ; Parameters: "RTN","CASHU",54,0) ; "RTN","CASHU",55,0) ; JOB - (Required) The $J for the process running the process "RTN","CASHU",56,0) ; "RTN","CASHU",57,0) I $G(JOB)="" Q 0 "RTN","CASHU",58,0) ; If this process owns the Lock clear ^XTMP("CASH") "RTN","CASHU",59,0) I $D(^XTMP("CASH","RUN",JOB)) K ^XTMP("CASH") "RTN","CASHU",60,0) ; Release the Lock "RTN","CASHU",61,0) L -^XTMP("CASH") "RTN","CASHU",62,0) Q 1 "RTN","CASHU",63,0) ; "RTN","CASHU",64,0) ; SQL Reserved Word Utility "RTN","CASHU",65,0) ; "RTN","CASHU",66,0) SQLRW(X) ; Return if X is SQL Reserved Word "RTN","CASHU",67,0) ; "RTN","CASHU",68,0) ; Parameters: "RTN","CASHU",69,0) ; "RTN","CASHU",70,0) ; X - (Required) The Word to be checked against SQL Reserved Word lists "RTN","CASHU",71,0) ; "RTN","CASHU",72,0) I $$OBJVER()>4.1 Q $SYSTEM.SQL.IsReservedWord(X) "RTN","CASHU",73,0) Q $$SQLRW^CASHFN19(X) "RTN","CASHU",74,0) ; "RTN","CASHU",75,0) ; Time Utility "RTN","CASHU",76,0) ; "RTN","CASHU",77,0) NOW() ; Return the current FileMan Date "RTN","CASHU",78,0) N %,%H,%I,X "RTN","CASHU",79,0) D NOW^%DTC "RTN","CASHU",80,0) Q X "RTN","CASHU",81,0) ; "RTN","CASHU",82,0) ; Version Calls "RTN","CASHU",83,0) ; "RTN","CASHU",84,0) OBJVER() ; Cache Objects (Major) Version # "RTN","CASHU",85,0) ; If not Cache - Objects not present "RTN","CASHU",86,0) I ^%ZOSF("OS")'="OpenM-NT^18" Q 0 "RTN","CASHU",87,0) Q +$$VERSION^%ZOSV() "RTN","CASHU",88,0) ; "RTN","CASHU",89,0) VERSION() ; FM to Cache SQL Mapping Tool Version "RTN","CASHU",90,0) Q "Version 1.0 Build 8" "RTN","CASHUT") 0^40^B23058184 "RTN","CASHUT",1,0) CASHUT ;ALB/MGC - Utility Class Compiler for Cache version 5.0.x+ ; 11/30/2005@3:00:00 "RTN","CASHUT",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHUT",3,0) ; "RTN","CASHUT",4,0) Q ; Specific Entry Point must be used "RTN","CASHUT",5,0) ; "RTN","CASHUT",6,0) ALL() ; Create and Compile all Custom Datatypes (Cache 5+) "RTN","CASHUT",7,0) ; "RTN","CASHUT",8,0) ; IMPORTANT: Do Not call directly! "RTN","CASHUT",9,0) ; This entry point should only be accessed by POST^CASHI "RTN","CASHUT",10,0) ; "RTN","CASHUT",11,0) ; See POST^CASHI for documentation. "RTN","CASHUT",12,0) ; "RTN","CASHUT",13,0) N OK,%ROWCOUNT,%objcn "RTN","CASHUT",14,0) ; Create the child class (CASH.FMField) first (pseudo file #15050.1502) "RTN","CASHUT",15,0) S OK=$$CREATEP(15050.1502,"","CASH") "RTN","CASHUT",16,0) I 'OK Q OK "RTN","CASHUT",17,0) ; Create the parent class (CASH.FMFile) and compile (pseudo file #15050.1501) "RTN","CASHUT",18,0) S OK=$$CREATEP(15050.1501,"CM","CASH") "RTN","CASHUT",19,0) I 'OK Q OK "RTN","CASHUT",20,0) ; Create the registered class (CASH.Utility) and compile (pseudo file #15050.1503) "RTN","CASHUT",21,0) S OK=$$CREATER(15050.1503,"CASH") "RTN","CASHUT",22,0) I 'OK Q OK "RTN","CASHUT",23,0) ; "RTN","CASHUT",24,0) ; Delete the File #15050.11 and #15050.12 pseudo-records "RTN","CASHUT",25,0) D DELFILE^CASHFN11(15050.1501) "RTN","CASHUT",26,0) D DELFILE^CASHFN11(15050.1502) "RTN","CASHUT",27,0) D DELDTYPE^CASHFN12(15050.1503) "RTN","CASHUT",28,0) ; "RTN","CASHUT",29,0) Q 1 "RTN","CASHUT",30,0) ; "RTN","CASHUT",31,0) CREATEP(FILE,FLAGS,PACKAGE) ; Create a Persistent Utility Class "RTN","CASHUT",32,0) ; "RTN","CASHUT",33,0) ; IMPORTANT: Do Not call directly! "RTN","CASHUT",34,0) ; This entry point should only be accessed by CASHUT* routines "RTN","CASHUT",35,0) ; "RTN","CASHUT",36,0) I '$D(^CASH(15050.11,FILE)) Q 0 "RTN","CASHUT",37,0) ; "RTN","CASHUT",38,0) N CLASS,CLNAME,EXISTS,NAME,SQLNM,UIDNM "RTN","CASHUT",39,0) ; "RTN","CASHUT",40,0) S NAME=$P($G(^CASH(15050.11,FILE,0)),"^",1) "RTN","CASHUT",41,0) S UIDNM=NAME_"ID" "RTN","CASHUT",42,0) S CLNAME=PACKAGE_"."_NAME "RTN","CASHUT",43,0) I $$SQLRW^CASHU(NAME) S SQLNM="_"_NAME "RTN","CASHUT",44,0) E S SQLNM="" "RTN","CASHUT",45,0) ; "RTN","CASHUT",46,0) ; Delete the class if it already exists "RTN","CASHUT",47,0) S EXISTS=##CLASS(%Dictionary.ClassDefinition).%ExistsId(CLNAME) "RTN","CASHUT",48,0) I EXISTS D CLDEL^CASHCU(CLNAME) "RTN","CASHUT",49,0) ; "RTN","CASHUT",50,0) ; Create the class "RTN","CASHUT",51,0) I '$$CLASS^CASHC0(FILE,FLAGS,"",CLNAME,SQLNM,UIDNM,"") Q 0 "RTN","CASHUT",52,0) ; "RTN","CASHUT",53,0) ; Add the Properties "RTN","CASHUT",54,0) I '$$PROPS^CASHC1(FILE,FLAGS,PACKAGE,CLNAME,UIDNM,"") Q 0 "RTN","CASHUT",55,0) ; "RTN","CASHUT",56,0) ; Add the Storage "RTN","CASHUT",57,0) I '$$STORAGE^CASHC4(FILE,FLAGS,PACKAGE,"",CLNAME,UIDNM) Q 0 "RTN","CASHUT",58,0) ; "RTN","CASHUT",59,0) ; Compile the Class "RTN","CASHUT",60,0) I FLAGS["C" D CLCOMP^CASHCU(CLNAME) "RTN","CASHUT",61,0) ; "RTN","CASHUT",62,0) Q 1 "RTN","CASHUT",63,0) ; "RTN","CASHUT",64,0) CREATER(FILE,PACKAGE,OWNER) ; Create a Registered Utility Class "RTN","CASHUT",65,0) ; "RTN","CASHUT",66,0) ; IMPORTANT: Do Not call directly! "RTN","CASHUT",67,0) ; This entry point should only be accessed by CASHUT* routines "RTN","CASHUT",68,0) ; "RTN","CASHUT",69,0) N CLASS,CLNAME,DESC,EXISTS,I,J,METH,MTHD,NAME,OK,SQLNM "RTN","CASHUT",70,0) ; "RTN","CASHUT",71,0) S NAME=$P($G(^CASH(15050.12,FILE,0)),"^",1) "RTN","CASHUT",72,0) S CLNAME=PACKAGE_"."_NAME "RTN","CASHUT",73,0) I $$SQLRW^CASHU(NAME) S SQLNM="_"_NAME "RTN","CASHUT",74,0) E S SQLNM="" "RTN","CASHUT",75,0) ; "RTN","CASHUT",76,0) ; Delete the class if it already exists "RTN","CASHUT",77,0) S EXISTS=##CLASS(%Dictionary.ClassDefinition).%ExistsId(CLNAME) "RTN","CASHUT",78,0) I EXISTS D CLDEL^CASHCU(CLNAME) "RTN","CASHUT",79,0) ; "RTN","CASHUT",80,0) ; Create the class "RTN","CASHUT",81,0) S CLASS=##CLASS(%Dictionary.ClassDefinition).%New() "RTN","CASHUT",82,0) S CLASS.Description=$$GETWP^CASHR(15050.12,1,FILE) "RTN","CASHUT",83,0) S CLASS.Name=CLNAME "RTN","CASHUT",84,0) S CLASS.ProcedureBlock=0 "RTN","CASHUT",85,0) I SQLNM'="" S CLASS.SqlTableName=SQLNM "RTN","CASHUT",86,0) S CLASS.Super="%RegisteredObject" "RTN","CASHUT",87,0) I $G(OWNER)'="" S CLASS.Owner=OWNER "RTN","CASHUT",88,0) ; "RTN","CASHUT",89,0) ; Save Class definition so far "RTN","CASHUT",90,0) S OK=CLASS.%Save() "RTN","CASHUT",91,0) I 'OK D ERRSAV^CASHCU("Class: "_CLASS.Name,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) Q 0 "RTN","CASHUT",92,0) ; "RTN","CASHUT",93,0) ; Add Methods "RTN","CASHUT",94,0) S MTHD=0 "RTN","CASHUT",95,0) F I=1:1 S MTHD=$O(^CASH(15050.12,FILE,2,MTHD)) Q:'+MTHD D Q:'OK "RTN","CASHUT",96,0) .N MNODE0,MODE,PRIVATE "RTN","CASHUT",97,0) .S MNODE0=^CASH(15050.12,FILE,2,MTHD,0) "RTN","CASHUT",98,0) .S MODE=$P(MNODE0,"^",3) I MODE'="" S MODE=$$SOCOUT^CASHR0(15050.122,.03,MODE) "RTN","CASHUT",99,0) .S PRIVATE=$P(MNODE0,"^",5) "RTN","CASHUT",100,0) .; Create new Method "RTN","CASHUT",101,0) .S METH(I)=##CLASS(%Dictionary.MethodDefinition).%New() "RTN","CASHUT",102,0) .S METH(I).Name=$P(MNODE0,"^",1) "RTN","CASHUT",103,0) .S METH(I).ClassMethod=$P(MNODE0,"^",2) "RTN","CASHUT",104,0) .S METH(I).CodeMode=MODE "RTN","CASHUT",105,0) .S METH(I).Description=$$GETWP^CASHR(15050.122,1,FILE_"||"_I) "RTN","CASHUT",106,0) .S METH(I).FormalSpec=$P(MNODE0,"^",4) "RTN","CASHUT",107,0) .S METH(I).Private=PRIVATE "RTN","CASHUT",108,0) .S METH(I).PublicList=$P(MNODE0,"^",6) "RTN","CASHUT",109,0) .S METH(I).ReturnType=$P(MNODE0,"^",7) "RTN","CASHUT",110,0) .I 'PRIVATE S METH(I).SqlProc=1 "RTN","CASHUT",111,0) .; Loop through and add Code Lines (Implementation) "RTN","CASHUT",112,0) .F J=1:1 Q:'$D(^CASH(15050.12,FILE,2,MTHD,2,J)) D "RTN","CASHUT",113,0) ..N LINE "RTN","CASHUT",114,0) ..S LINE=$G(^CASH(15050.12,FILE,2,MTHD,2,J,0)) "RTN","CASHUT",115,0) ..; If CodeMode is not "expression", make sure lines have leading spaces "RTN","CASHUT",116,0) ..I MODE'="expression",$E(LINE)'=" " S LINE=" "_LINE "RTN","CASHUT",117,0) ..S OK=METH(I).Implementation.WriteLine(LINE) "RTN","CASHUT",118,0) ..Q "RTN","CASHUT",119,0) .D CLASS.Methods.SetAt(METH(I),I) "RTN","CASHUT",120,0) .; Save Class definition so far "RTN","CASHUT",121,0) .S OK=CLASS.%Save() "RTN","CASHUT",122,0) .; Rewind Implementation for subsequent saves (Use J to stop V4.1 compile errors) "RTN","CASHUT",123,0) .S J=METH(I).Implementation.Rewind() "RTN","CASHUT",124,0) .D CLASS.Methods.%UnSwizzleAt(I) "RTN","CASHUT",125,0) .K METH(I) "RTN","CASHUT",126,0) .I 'OK D ERRSAV^CASHCU("Method: "_I_" - "_METH(I).Name,$G(FILE),$G(FLAGS),$G(PACKAGE),$G(ID),$G(OWNER),"",$G(%objlasterror),.LIST) "RTN","CASHUT",127,0) .Q "RTN","CASHUT",128,0) ; "RTN","CASHUT",129,0) ; Compile the Class "RTN","CASHUT",130,0) D CLCOMP^CASHCU(CLNAME,$G(OWNER)) "RTN","CASHUT",131,0) ; "RTN","CASHUT",132,0) Q OK "RTN","CASHUT",133,0) "RTN","CASHUT01") 0^41^B16006893 "RTN","CASHUT01",1,0) CASHUT01 ;ALB/MGC - Initialisation for File & Field MetaData Classes ; 11/30/2005@3:00:00 "RTN","CASHUT01",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHUT01",3,0) ; "RTN","CASHUT01",4,0) N ATTR,DISYS,DT,DTIME,DUZ,DESC,FIELD,FILE,IO,LIST,NAME,U,UIDNM,VER "RTN","CASHUT01",5,0) ; "RTN","CASHUT01",6,0) ; Use Pseudo File #'s to "map" this non-existent file in File #15050.11 "RTN","CASHUT01",7,0) ; The 15050.1 Numberspace is reserved by this Package, so shouldn't have been used elsewhere! "RTN","CASHUT01",8,0) S FILE(1)=15050.1501 "RTN","CASHUT01",9,0) S FILE(2)=15050.1502 "RTN","CASHUT01",10,0) S NAME(1)="FMFile" "RTN","CASHUT01",11,0) S NAME(2)="FMField" "RTN","CASHUT01",12,0) S UIDNM(1)=NAME(1)_"ID" "RTN","CASHUT01",13,0) S UIDNM(2)=NAME(2)_"ID" "RTN","CASHUT01",14,0) ; "RTN","CASHUT01",15,0) FILE ; Create CASH.FMFile Utility Class "RTN","CASHUT01",16,0) ; "RTN","CASHUT01",17,0) ; Delete entry if it already exists "RTN","CASHUT01",18,0) I $D(^CASH(15050.11,FILE(1))) D DELFILE^CASHFN11(FILE(1)) "RTN","CASHUT01",19,0) ; "RTN","CASHUT01",20,0) ; Add top level "RTN","CASHUT01",21,0) D ADDFILE^CASHFN11(FILE(1),NAME(1),"","","F","") "RTN","CASHUT01",22,0) ; "RTN","CASHUT01",23,0) ; Add the Master Map and it's subscript "RTN","CASHUT01",24,0) D ADDMAP^CASHFN11(FILE(1),1,"Master","D","DIC") "RTN","CASHUT01",25,0) D ADDSUBS^CASHFN11(FILE(1),1,1,"#"_FILE(1),0,"'+{L1}","","") "RTN","CASHUT01",26,0) ; "RTN","CASHUT01",27,0) ; Add the Name B Index Map and subscripts "RTN","CASHUT01",28,0) D ADDMAP^CASHFN11(FILE(1),2,"NameBIndex","I","DIC") "RTN","CASHUT01",29,0) D ADDSUBS^CASHFN11(FILE(1),2,1,"B","","","","") "RTN","CASHUT01",30,0) D ADDSUBS^CASHFN11(FILE(1),2,2,"{"_$$FILEINX^CASHF()_"}","","","","") "RTN","CASHUT01",31,0) D ADDSUBS^CASHFN11(FILE(1),2,3,"#"_FILE(1),"","","","") "RTN","CASHUT01",32,0) ; "RTN","CASHUT01",33,0) ; Add File Attribute Properties "RTN","CASHUT01",34,0) K LIST "RTN","CASHUT01",35,0) D FILELST^DID("LIST") "RTN","CASHUT01",36,0) S ATTR="" "RTN","CASHUT01",37,0) F FIELD=1:1 S ATTR=$O(LIST(ATTR)) Q:ATTR="" D "RTN","CASHUT01",38,0) .N DATALBL,DESC,LABEL,MAX,RCODE,SQLLBL "RTN","CASHUT01",39,0) .S DESC="Calculated Field for FileMan File Attribute: "_ATTR "RTN","CASHUT01",40,0) .S MAX=$S($D(LIST(ATTR,"#(word-processing)")):32767,1:255) "RTN","CASHUT01",41,0) .; Get Standardized Label "RTN","CASHUT01",42,0) .S LABEL=$$STDNAME^CASHN(ATTR,25) "RTN","CASHUT01",43,0) .; Get SQL and Data labels "RTN","CASHUT01",44,0) .D LABELS^CASH2(LABEL,.SQLLBL,.DATALBL) "RTN","CASHUT01",45,0) .; Get Retrieval Code "RTN","CASHUT01",46,0) .S RCODE=" S {*}=$$FILEATTR^CASHR({L1},"""_ATTR_""")" "RTN","CASHUT01",47,0) .; Add Property "RTN","CASHUT01",48,0) .D ADDFLD^CASHFN11(FILE(1),FIELD,LABEL,0,"","",DESC,"",0,0,"",0,"%Library.String","D",SQLLBL) "RTN","CASHUT01",49,0) .D ADDPARAM^CASHFN11(FILE(1),FIELD,1,"MAXLEN",MAX) "RTN","CASHUT01",50,0) .; Add to Master Map Data "RTN","CASHUT01",51,0) .D ADDDATA^CASHFN11(FILE(1),1,FIELD,DATALBL,"","",0,RCODE) "RTN","CASHUT01",52,0) .Q "RTN","CASHUT01",53,0) ; "RTN","CASHUT01",54,0) ; Now Create Relationship field for this file (FILE) "RTN","CASHUT01",55,0) S DESC="Relationship To Child File - CASH.FMField" "RTN","CASHUT01",56,0) D ADDFLD^CASHFN11(FILE(1),FILE(2),UIDNM(2),0,"C","",DESC,UIDNM(1),1,0,"",0,"#"_FILE(2),"M","") "RTN","CASHUT01",57,0) ; "RTN","CASHUT01",58,0) FIELD ; Create CASH.FMField Utility Class "RTN","CASHUT01",59,0) ; "RTN","CASHUT01",60,0) ; Delete entry if it already exists "RTN","CASHUT01",61,0) I $D(^CASH(15050.11,FILE(2))) D DELFILE^CASHFN11(FILE(2)) "RTN","CASHUT01",62,0) ; "RTN","CASHUT01",63,0) ; Add top level "RTN","CASHUT01",64,0) D ADDFILE^CASHFN11(FILE(2),NAME(2),"","","S",FILE(1)) "RTN","CASHUT01",65,0) ; "RTN","CASHUT01",66,0) ; Add the Master Map and it's subscript "RTN","CASHUT01",67,0) D ADDMAP^CASHFN11(FILE(2),1,"Master","D","DD") "RTN","CASHUT01",68,0) D ADDSUBS^CASHFN11(FILE(2),1,1,"#"_FILE(1),0,"'+{L1}","","") "RTN","CASHUT01",69,0) D ADDSUBS^CASHFN11(FILE(2),1,2,"#"_FILE(2),0,"'+{L2}","","") "RTN","CASHUT01",70,0) ; "RTN","CASHUT01",71,0) ; Add the Name B Index Map and subscripts "RTN","CASHUT01",72,0) D ADDMAP^CASHFN11(FILE(2),2,"LabelBIndex","I","DD") "RTN","CASHUT01",73,0) D ADDSUBS^CASHFN11(FILE(2),2,1,"#"_FILE(1),0,"'+{L1}","","") "RTN","CASHUT01",74,0) D ADDSUBS^CASHFN11(FILE(2),2,2,"B","","","","") "RTN","CASHUT01",75,0) D ADDSUBS^CASHFN11(FILE(2),2,3,"{"_$$FLDINX^CASHF()_"}","","","","") "RTN","CASHUT01",76,0) D ADDSUBS^CASHFN11(FILE(2),2,4,"#"_FILE(2),"","","","") "RTN","CASHUT01",77,0) ; "RTN","CASHUT01",78,0) ; Add File Attribute Properties "RTN","CASHUT01",79,0) K LIST "RTN","CASHUT01",80,0) D FIELDLST^DID("LIST") "RTN","CASHUT01",81,0) S ATTR="" "RTN","CASHUT01",82,0) F FIELD=1:1 S ATTR=$O(LIST(ATTR)) Q:ATTR="" D "RTN","CASHUT01",83,0) .N DATALBL,DESC,LABEL,MAX,RCODE,SQLLBL "RTN","CASHUT01",84,0) .S DESC="Calculated Field for FileMan Field Attribute: "_ATTR "RTN","CASHUT01",85,0) .S MAX=$S($D(LIST(ATTR,"#(word-processing)")):32767,1:255) "RTN","CASHUT01",86,0) .; Get Standardized Label "RTN","CASHUT01",87,0) .S LABEL=$$STDNAME^CASHN(ATTR,25) "RTN","CASHUT01",88,0) .; Get SQL and Data labels "RTN","CASHUT01",89,0) .D LABELS^CASH2(LABEL,.SQLLBL,.DATALBL) "RTN","CASHUT01",90,0) .; Get Retrieval Code "RTN","CASHUT01",91,0) .S RCODE=" S {*}=$$FLDATTR^CASHR({L1},{L2},"""_ATTR_""")" "RTN","CASHUT01",92,0) .; Add Property "RTN","CASHUT01",93,0) .D ADDFLD^CASHFN11(FILE(2),FIELD,LABEL,0,"","",DESC,"",0,0,"",0,"%Library.String","D",SQLLBL) "RTN","CASHUT01",94,0) .D ADDPARAM^CASHFN11(FILE(2),FIELD,1,"MAXLEN",MAX) "RTN","CASHUT01",95,0) .; Add to Master Map Data "RTN","CASHUT01",96,0) .D ADDDATA^CASHFN11(FILE(2),1,FIELD,DATALBL,"","",0,RCODE) "RTN","CASHUT01",97,0) .Q "RTN","CASHUT01",98,0) ; "RTN","CASHUT01",99,0) ; Create Inverse Relationship field in the Multiple "RTN","CASHUT01",100,0) S DESC="Relationship To Parent File - CASH.FMFile" "RTN","CASHUT01",101,0) D ADDFLD^CASHFN11(FILE(2),FILE(1),UIDNM(1),0,"P","",DESC,UIDNM(2),1,1,"",0,"#"_FILE(1),"C","") ; "RTN","CASHUT01",102,0) ; "RTN","CASHUT01",103,0) Q "RTN","CASHUT02") 0^42^B86309925 "RTN","CASHUT02",1,0) CASHUT02 ;ALB/MGC - Initialisation for the Utility Class ; 11/30/2005@3:00:00 "RTN","CASHUT02",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHUT02",3,0) ; "RTN","CASHUT02",4,0) ; CASH.Utility "RTN","CASHUT02",5,0) N CODE,DESC,FN "RTN","CASHUT02",6,0) S FN=15050.1503 "RTN","CASHUT02",7,0) ; "RTN","CASHUT02",8,0) ; Add top level "RTN","CASHUT02",9,0) D ADDDT^CASHFN12(FN,"Utility","","","","","%RegisteredObject") "RTN","CASHUT02",10,0) ; "RTN","CASHUT02",11,0) ; Add Description "RTN","CASHUT02",12,0) K DESC "RTN","CASHUT02",13,0) S DESC(1)="DO NOT EDIT: CASH Utility Class - Mike Clayton 11/30/2005" "RTN","CASHUT02",14,0) S DESC(2)="Usage: Classmethod/Stored Procedure API Interface" "RTN","CASHUT02",15,0) D ADDDESC^CASHFN12(FN,.DESC) "RTN","CASHUT02",16,0) ; "RTN","CASHUT02",17,0) ; Add "All" Method "RTN","CASHUT02",18,0) D ADDMTD^CASHFN12(FN,1,"All",1,"C","&%qHandle:%SQLProcContext,FLAGS:%Library.String="""",PACKAGE:%Library.String="""",ID:%Library.String="""",OWNER:%Library.String=""""",0,"","") "RTN","CASHUT02",19,0) ; Add "All" Description "RTN","CASHUT02",20,0) K DESC "RTN","CASHUT02",21,0) S DESC(1)="Class Method/Stored Procedure front end for the ALL^CASH(FLAGS,PACKAGE,ID,OWNER) API" "RTN","CASHUT02",22,0) S DESC(2)="" "RTN","CASHUT02",23,0) S DESC(3)="NOTE: %SQLProcContext parameter added for consistency between Cache 4.1 and 5.0+." "RTN","CASHUT02",24,0) S DESC(4)=" Null device used to prevent JDBC problems with characters written to Principal." "RTN","CASHUT02",25,0) S DESC(5)="" "RTN","CASHUT02",26,0) S DESC(6)="Invoke as:" "RTN","CASHUT02",27,0) S DESC(7)="D ##CLASS(CASH.Utility).All("""",FLAGS,PACKAGE,ID,OWNER)" "RTN","CASHUT02",28,0) S DESC(8)="Or:" "RTN","CASHUT02",29,0) S DESC(9)="Call CASH.Utility_All FLAGS, PACKAGE, ID, OWNER" "RTN","CASHUT02",30,0) S DESC(10)="" "RTN","CASHUT02",31,0) D ADDMDESC^CASHFN12(FN,1,.DESC) "RTN","CASHUT02",32,0) ; Add "All" Code "RTN","CASHUT02",33,0) K CODE "RTN","CASHUT02",34,0) S CODE(1)=" N DEV,DEVNULL" "RTN","CASHUT02",35,0) S CODE(2)=" I '..NullOpen(.DEV,.DEVNULL) Q" "RTN","CASHUT02",36,0) S CODE(3)=" D ..Parameters(.FLAGS,.PACKAGE,.ID,.OWNER)" "RTN","CASHUT02",37,0) S CODE(4)=" D ALL^CASH(FLAGS,PACKAGE,ID,OWNER)" "RTN","CASHUT02",38,0) S CODE(5)=" D ..NullClose(DEV,DEVNULL)" "RTN","CASHUT02",39,0) D ADDCODE^CASHFN12(FN,1,.CODE) "RTN","CASHUT02",40,0) ; "RTN","CASHUT02",41,0) ; Add "Create" Method "RTN","CASHUT02",42,0) D ADDMTD^CASHFN12(FN,2,"Create",1,"C","&%qHandle:%SQLProcContext,FILE:%Library.String,FLAGS:%Library.String="""",PACKAGE:%Library.String="""",ID:%Library.String="""",OWNER:%Library.String="""",SERIAL:%Library.String",0,"","%Library.Integer") "RTN","CASHUT02",43,0) ; Add "Create" Description "RTN","CASHUT02",44,0) K DESC "RTN","CASHUT02",45,0) S DESC(1)="Class Method/Stored Procedure front end for the $$CREATE^CASH(FILE,FLAGS,PACKAGE,ID,OWNER,.LIST) API" "RTN","CASHUT02",46,0) S DESC(2)="" "RTN","CASHUT02",47,0) S DESC(3)="NOTE: %SQLProcContext parameter added for consistency between Cache 4.1 and 5.0+" "RTN","CASHUT02",48,0) S DESC(4)=" Null device used to prevent JDBC problems with characters written to Principal." "RTN","CASHUT02",49,0) S DESC(5)="" "RTN","CASHUT02",50,0) S DESC(6)="Invoke as:" "RTN","CASHUT02",51,0) S DESC(7)="S OK=##CLASS(CASH.Utility).Create("""",FILE,FLAGS,PACKAGE,ID,OWNER,.LIST)" "RTN","CASHUT02",52,0) S DESC(8)="Or:" "RTN","CASHUT02",53,0) S DESC(9)="Call CASH.Utility_Create FILE, FLAGS, PACKAGE, ID, OWNER" "RTN","CASHUT02",54,0) S DESC(10)="" "RTN","CASHUT02",55,0) D ADDMDESC^CASHFN12(FN,2,.DESC) "RTN","CASHUT02",56,0) ; Add "Create" Code "RTN","CASHUT02",57,0) K CODE "RTN","CASHUT02",58,0) S CODE(1)=" N DEV,DEVNULL,LIST,OK" "RTN","CASHUT02",59,0) S CODE(2)=" I '..NullOpen(.DEV,.DEVNULL) Q 0" "RTN","CASHUT02",60,0) S CODE(3)=" D ..Parameters(.FLAGS,.PACKAGE,.ID,.OWNER,.SERIAL,.LIST)" "RTN","CASHUT02",61,0) S CODE(4)=" S OK=$$CREATE^CASH(FILE,FLAGS,PACKAGE,ID,OWNER,.LIST)" "RTN","CASHUT02",62,0) S CODE(5)=" D ..NullClose(DEV,DEVNULL)" "RTN","CASHUT02",63,0) S CODE(6)=" Q OK" "RTN","CASHUT02",64,0) D ADDCODE^CASHFN12(FN,2,.CODE) "RTN","CASHUT02",65,0) ; "RTN","CASHUT02",66,0) ; Add "Delete" Method "RTN","CASHUT02",67,0) D ADDMTD^CASHFN12(FN,3,"Delete",1,"C","&%qHandle:%SQLProcContext,CLASS:%Library.String",0,"","") "RTN","CASHUT02",68,0) ; Add "Delete" Description "RTN","CASHUT02",69,0) K DESC "RTN","CASHUT02",70,0) S DESC(1)="Class Method/Stored Procedure to Delete a generated Class and all related Classes" "RTN","CASHUT02",71,0) S DESC(2)="This method calls $SYSTEM.OBJ.Delete(CLASS), but then looks for all extra Classes" "RTN","CASHUT02",72,0) S DESC(3)="created by passing the ""S"" flag into $$START^CASH (i.e. the associated Stored" "RTN","CASHUT02",73,0) S DESC(4)="Procedure and Web Service Classes). A check is then done for any related Child" "RTN","CASHUT02",74,0) S DESC(5)="Classes, and if found this call is made recursively to delete them also." "RTN","CASHUT02",75,0) S DESC(6)="" "RTN","CASHUT02",76,0) S DESC(7)="NOTE: %SQLProcContext parameter added for consistency between Cache 4.1 and 5.0+" "RTN","CASHUT02",77,0) S DESC(8)=" Null device used to prevent JDBC problems with characters written to Principal." "RTN","CASHUT02",78,0) S DESC(9)="" "RTN","CASHUT02",79,0) S DESC(10)="Invoke as:" "RTN","CASHUT02",80,0) S DESC(11)="D ##CLASS(CASH.Utility).Delete("""",CLASS)" "RTN","CASHUT02",81,0) S DESC(12)="Or:" "RTN","CASHUT02",82,0) S DESC(13)="Call CASH.Utility_Delete CLASS" "RTN","CASHUT02",83,0) S DESC(14)="" "RTN","CASHUT02",84,0) D ADDMDESC^CASHFN12(FN,3,.DESC) "RTN","CASHUT02",85,0) ; Add "Delete" Code "RTN","CASHUT02",86,0) K CODE "RTN","CASHUT02",87,0) S CODE(1)=" N DEV,DEVNULL" "RTN","CASHUT02",88,0) S CODE(2)=" I '$D(^oddDEF(CLASS)) Q" "RTN","CASHUT02",89,0) S CODE(3)=" I '..NullOpen(.DEV,.DEVNULL) Q" "RTN","CASHUT02",90,0) S CODE(4)=" D CLDEL^CASHCU(CLASS)" "RTN","CASHUT02",91,0) S CODE(5)=" D ..NullClose(DEV,DEVNULL)" "RTN","CASHUT02",92,0) S CODE(6)=" Q" "RTN","CASHUT02",93,0) D ADDCODE^CASHFN12(FN,3,.CODE) "RTN","CASHUT02",94,0) ; "RTN","CASHUT02",95,0) ; Add "DeletePackage" Method "RTN","CASHUT02",96,0) D ADDMTD^CASHFN12(FN,4,"DeletePackage",1,"C","&%qHandle:%SQLProcContext,PACKAGE:%Library.String",0,"","") "RTN","CASHUT02",97,0) ; Add "DeletePackage" Description "RTN","CASHUT02",98,0) K DESC "RTN","CASHUT02",99,0) S DESC(1)="Class Method/Stored Procedure to Delete an entire Package" "RTN","CASHUT02",100,0) S DESC(2)="This method does NOT call $SYSTEM.OBJ.DeletePackage(PACKAGE), as this call can" "RTN","CASHUT02",101,0) S DESC(3)="miss some of the lower level Stored Procedure/Web Service Classes." "RTN","CASHUT02",102,0) S DESC(4)="Instead this method loops through ^oddDEF to remove all Classes in the Package." "RTN","CASHUT02",103,0) S DESC(5)="" "RTN","CASHUT02",104,0) S DESC(6)="NOTE: %SQLProcContext parameter added for consistency between Cache 4.1 and 5.0+" "RTN","CASHUT02",105,0) S DESC(7)=" Null device used to prevent JDBC problems with characters written to Principal." "RTN","CASHUT02",106,0) S DESC(8)="" "RTN","CASHUT02",107,0) S DESC(9)="Invoke as:" "RTN","CASHUT02",108,0) S DESC(10)="D ##CLASS(CASH.Utility).DeletePackage("""",PACKAGE)" "RTN","CASHUT02",109,0) S DESC(11)="Or:" "RTN","CASHUT02",110,0) S DESC(12)="Call CASH.Utility_DeletePackage PACKAGE" "RTN","CASHUT02",111,0) S DESC(13)="" "RTN","CASHUT02",112,0) D ADDMDESC^CASHFN12(FN,4,.DESC) "RTN","CASHUT02",113,0) ; Add "DeletePackage" Code "RTN","CASHUT02",114,0) K CODE "RTN","CASHUT02",115,0) S CODE(1)=" N CLASS,DEV,DEVNULL,%objlasterror" "RTN","CASHUT02",116,0) S CODE(2)=" I '..NullOpen(.DEV,.DEVNULL) Q" "RTN","CASHUT02",117,0) S CODE(3)=" S CLASS=PACKAGE" "RTN","CASHUT02",118,0) S CODE(4)=" I $D(^oddDEF(CLASS)) D $SYSTEM.OBJ.Delete(CLASS)" "RTN","CASHUT02",119,0) S CODE(5)=" F S CLASS=$O(^oddDEF(CLASS)) Q:$E(CLASS,1,$L(PACKAGE))'=PACKAGE D $SYSTEM.OBJ.Delete(CLASS)" "RTN","CASHUT02",120,0) S CODE(6)=" D ..NullClose(DEV,DEVNULL)" "RTN","CASHUT02",121,0) D ADDCODE^CASHFN12(FN,4,.CODE) "RTN","CASHUT02",122,0) ; "RTN","CASHUT02",123,0) ; Add "NullClose" Method "RTN","CASHUT02",124,0) D ADDMTD^CASHFN12(FN,5,"NullClose",1,"C","DEV:%Library.String,DEVNULL:%Library.String",1,"","") "RTN","CASHUT02",125,0) ; Add "NullClose" Description "RTN","CASHUT02",126,0) K DESC "RTN","CASHUT02",127,0) S DESC(1)="Private Method to Close the Null Device" "RTN","CASHUT02",128,0) D ADDMDESC^CASHFN12(FN,5,.DESC) "RTN","CASHUT02",129,0) ; Add "NullClose" Code "RTN","CASHUT02",130,0) K CODE "RTN","CASHUT02",131,0) S CODE(1)=" ; Close the Null device" "RTN","CASHUT02",132,0) S CODE(2)=" C DEVNULL" "RTN","CASHUT02",133,0) S CODE(3)=" ; Use the original device" "RTN","CASHUT02",134,0) S CODE(4)=" U DEV" "RTN","CASHUT02",135,0) D ADDCODE^CASHFN12(FN,5,.CODE) "RTN","CASHUT02",136,0) ; "RTN","CASHUT02",137,0) ; Add "NullOpen" Method "RTN","CASHUT02",138,0) D ADDMTD^CASHFN12(FN,6,"NullOpen",1,"C","&DEV:%Library.String,&DEVNULL:%Library.String",1,"","%Library.Integer") "RTN","CASHUT02",139,0) ; Add "NullOpen" Description "RTN","CASHUT02",140,0) K DESC "RTN","CASHUT02",141,0) S DESC(1)="Private Method to Open the Null Device" "RTN","CASHUT02",142,0) D ADDMDESC^CASHFN12(FN,6,.DESC) "RTN","CASHUT02",143,0) ; Add "NullOpen" Code "RTN","CASHUT02",144,0) K CODE "RTN","CASHUT02",145,0) S CODE(1)=" ; Get Current Device" "RTN","CASHUT02",146,0) S CODE(2)=" S DEV=$IO" "RTN","CASHUT02",147,0) S CODE(3)=" ; Get Null Device" "RTN","CASHUT02",148,0) S CODE(4)=" S DEVNULL=$S($ZV[""Windows"":""//./nul"",$ZV[""UNIX"":""/dev/nul/"",1:""NL:"")" "RTN","CASHUT02",149,0) S CODE(5)=" ; If non-TCP device don't open Null Device" "RTN","CASHUT02",150,0) S CODE(6)=" I DEV'[""|TCP|"" Q 1" "RTN","CASHUT02",151,0) S CODE(7)=" ; Attempt to open Null Device" "RTN","CASHUT02",152,0) S CODE(8)=" O DEVNULL:""WNU"":1" "RTN","CASHUT02",153,0) S CODE(9)=" I '$T Q 0" "RTN","CASHUT02",154,0) S CODE(10)=" ; Use Null Device" "RTN","CASHUT02",155,0) S CODE(11)=" U DEVNULL" "RTN","CASHUT02",156,0) S CODE(12)=" Q 1" "RTN","CASHUT02",157,0) D ADDCODE^CASHFN12(FN,6,.CODE) "RTN","CASHUT02",158,0) ; "RTN","CASHUT02",159,0) ; Add "Parameters" Method "RTN","CASHUT02",160,0) D ADDMTD^CASHFN12(FN,7,"Parameters",1,"C","&FLAGS:%Library.String="""",&PACKAGE:%Library.String="""",&ID:%Library.String="""",&OWNER:%Library.String="""",&SERIAL:%Library.String="""",&LIST:%Library.String",1,"","") "RTN","CASHUT02",161,0) ; Add "Parameters" Description "RTN","CASHUT02",162,0) K DESC "RTN","CASHUT02",163,0) S DESC(1)="Private Method to process common Parameters" "RTN","CASHUT02",164,0) D ADDMDESC^CASHFN12(FN,7,.DESC) "RTN","CASHUT02",165,0) ; Add "Parameters" Code "RTN","CASHUT02",166,0) K CODE "RTN","CASHUT02",167,0) S CODE(1)=" ; If Strings are initialized as """" and not null in Java they will be passed as $C(0)!" "RTN","CASHUT02",168,0) S CODE(2)=" S FLAGS=$ZSTRIP(FLAGS,""*C"")" "RTN","CASHUT02",169,0) S CODE(3)=" S PACKAGE=$ZSTRIP(PACKAGE,""*C"")" "RTN","CASHUT02",170,0) S CODE(4)=" S ID=$ZSTRIP(ID,""*C"")" "RTN","CASHUT02",171,0) S CODE(5)=" S OWNER=$ZSTRIP(OWNER,""*C"")" "RTN","CASHUT02",172,0) S CODE(6)=" S SERIAL=$ZSTRIP(SERIAL,""*C"")" "RTN","CASHUT02",173,0) S CODE(7)=" ; If the Serialized LIST has been passed in, create the LIST array." "RTN","CASHUT02",174,0) S CODE(8)=" I SERIAL'="""" K LIST D" "RTN","CASHUT02",175,0) S CODE(9)=" .N BIT,FLD,FLDS,FNO,I,J" "RTN","CASHUT02",176,0) S CODE(10)=" .F I=1:1 S BIT=$P(SERIAL,"";"",I) Q:BIT="""" D" "RTN","CASHUT02",177,0) S CODE(11)=" ..S FNO=$P(BIT,"":"",1) Q:'+FNO" "RTN","CASHUT02",178,0) S CODE(12)=" ..S FLDS=$P(BIT,"":"",2)" "RTN","CASHUT02",179,0) S CODE(13)=" ..F J=1:1 S FLD=$P(FLDS,"","",J) Q:FLD="""" I +FLD S LIST(FNO,FLD)=""""" "RTN","CASHUT02",180,0) S CODE(14)=" ..Q" "RTN","CASHUT02",181,0) S CODE(15)=" .Q" "RTN","CASHUT02",182,0) D ADDCODE^CASHFN12(FN,7,.CODE) "RTN","CASHUT02",183,0) ; "RTN","CASHUT02",184,0) ; Add "Start" Method "RTN","CASHUT02",185,0) D ADDMTD^CASHFN12(FN,8,"Start",1,"C","&%qHandle:%SQLProcContext,FILE:%Library.String,FLAGS:%Library.String="""",PACKAGE:%Library.String="""",ID:%Library.String="""",OWNER:%Library.String="""",SERIAL:%Library.String",0,"","%Library.Integer") "RTN","CASHUT02",186,0) ; Add "Start" Description "RTN","CASHUT02",187,0) K DESC "RTN","CASHUT02",188,0) S DESC(1)="Class Method/Stored Procedure front end for the $$START^CASH(FILE,FLAGS,PACKAGE,ID,OWNER,.LIST) API" "RTN","CASHUT02",189,0) S DESC(2)="" "RTN","CASHUT02",190,0) S DESC(3)="NOTE: %SQLProcContext parameter added for consistency between Cache 4.1 and 5.0+" "RTN","CASHUT02",191,0) S DESC(4)=" Null device used to prevent JDBC problems with characters written to Principal." "RTN","CASHUT02",192,0) S DESC(5)="" "RTN","CASHUT02",193,0) S DESC(6)="Invoke as:" "RTN","CASHUT02",194,0) S DESC(7)="S OK=##CLASS(CASH.Utility).Start("""",FILE,FLAGS,PACKAGE,ID,OWNER,.LIST)" "RTN","CASHUT02",195,0) S DESC(8)="Or:" "RTN","CASHUT02",196,0) S DESC(9)="Call CASH.Utility_Start FILE, FLAGS, PACKAGE, ID, OWNER" "RTN","CASHUT02",197,0) S DESC(10)="" "RTN","CASHUT02",198,0) D ADDMDESC^CASHFN12(FN,8,.DESC) "RTN","CASHUT02",199,0) ; Add "Start" Code "RTN","CASHUT02",200,0) K CODE "RTN","CASHUT02",201,0) S CODE(1)=" N DEV,DEVNULL,LIST,OK" "RTN","CASHUT02",202,0) S CODE(2)=" I '..NullOpen(.DEV,.DEVNULL) Q 0" "RTN","CASHUT02",203,0) S CODE(3)=" D ..Parameters(.FLAGS,.PACKAGE,.ID,.OWNER,.SERIAL,.LIST)" "RTN","CASHUT02",204,0) S CODE(4)=" S OK=$$START^CASH(FILE,FLAGS,PACKAGE,ID,OWNER,.LIST)" "RTN","CASHUT02",205,0) S CODE(5)=" D ..NullClose(DEV,DEVNULL)" "RTN","CASHUT02",206,0) S CODE(6)=" Q OK" "RTN","CASHUT02",207,0) D ADDCODE^CASHFN12(FN,8,.CODE) "RTN","CASHUT02",208,0) ; "RTN","CASHUT02",209,0) Q "RTN","CASHV4C") 0^30^B59211480 "RTN","CASHV4C",1,0) CASHV4C ;ALB/MGC - Compiler for Cache version 4.1.x ; 10/20/04@3:00:00 "RTN","CASHV4C",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHV4C",3,0) ; "RTN","CASHV4C",4,0) Q ; Specific Entry Point must be used "RTN","CASHV4C",5,0) ; "RTN","CASHV4C",6,0) CREATE(FILE,FLAGS,PACKAGE,ID,OWNER,LIST,TMPLIST) ; Create and Compile (Cache 4.1.x) "RTN","CASHV4C",7,0) ; "RTN","CASHV4C",8,0) ; IMPORTANT: Do Not call directly! "RTN","CASHV4C",9,0) ; This entry point should only be accessed by CREATE^CASH "RTN","CASHV4C",10,0) ; "RTN","CASHV4C",11,0) ; See CREATE^CASH for documentation. "RTN","CASHV4C",12,0) ; "RTN","CASHV4C",13,0) ; Only for Version 4.1 "RTN","CASHV4C",14,0) I $$OBJVER^CASHU()'=4.1 Q "RTN","CASHV4C",15,0) ; "RTN","CASHV4C",16,0) N X S X="ERROR^CASHCU" S @^%ZOSF("TRAP") "RTN","CASHV4C",17,0) N CLNAME,EXISTS,MAXM,MAXT,NAME,NODE0,ROWID,SQLNM,SUPER,UIDNM "RTN","CASHV4C",18,0) N %ROWCOUNT,%objcn,%objlasterror "RTN","CASHV4C",19,0) N mlfld,sc,stub,test "RTN","CASHV4C",20,0) ; "RTN","CASHV4C",21,0) ; Check File has been Discovered by CASH "RTN","CASHV4C",22,0) I $G(FILE)="" W:$G(FLAGS)["V" !,"File# must be passed in",! Q 0 "RTN","CASHV4C",23,0) I '$D(^CASH(15050.11,FILE)) W:$G(FLAGS)["V" !,"File#: ",FILE," has not been discovered (use START^CASH)",! Q 0 "RTN","CASHV4C",24,0) ; "RTN","CASHV4C",25,0) ; Quit if this file has already been Compiled for this session "RTN","CASHV4C",26,0) I $D(^TMP("CASHC",$J,FILE)) Q 1 "RTN","CASHV4C",27,0) S ^TMP("CASHC",$J,FILE)="" "RTN","CASHV4C",28,0) ; "RTN","CASHV4C",29,0) ; Initilize optional Parameters "RTN","CASHV4C",30,0) S FLAGS=$G(FLAGS) "RTN","CASHV4C",31,0) S PACKAGE=$G(PACKAGE) "RTN","CASHV4C",32,0) I PACKAGE="" S PACKAGE="User" ;Default to User package if none passed "RTN","CASHV4C",33,0) S ID=$G(ID) "RTN","CASHV4C",34,0) S OWNER=$G(OWNER) "RTN","CASHV4C",35,0) I $D(LIST),'($D(LIST)\10) K LIST "RTN","CASHV4C",36,0) ; "RTN","CASHV4C",37,0) ; Unpack Names from File #15050.11, using passed in FLAGS, PACKAGE and ID "RTN","CASHV4C",38,0) D GETNAMES^CASHCN(FILE,FLAGS,PACKAGE,ID,.NAME,.SQLNM,.UIDNM,.ROWID) "RTN","CASHV4C",39,0) S CLNAME=PACKAGE_"."_NAME "RTN","CASHV4C",40,0) ; "RTN","CASHV4C",41,0) ; Check if Class exists and Delete if necessary (FORCE=1) "RTN","CASHV4C",42,0) S EXISTS=$D(^oddDEF(CLNAME)) "RTN","CASHV4C",43,0) I EXISTS,FLAGS'["F" W:FLAGS["V" !,CLNAME," already exists (use ""F"" to overwrite)",! Q 1 "RTN","CASHV4C",44,0) ; "RTN","CASHV4C",45,0) ; Attempt to Lock the class "RTN","CASHV4C",46,0) L +^oddDEF(CLNAME):1 "RTN","CASHV4C",47,0) I '$T W:FLAGS["V" !,CLNAME," is locked",! Q 0 "RTN","CASHV4C",48,0) ; "RTN","CASHV4C",49,0) ; Delete current version of class if it exists "RTN","CASHV4C",50,0) I EXISTS D CLDEL^CASHCU(CLNAME) "RTN","CASHV4C",51,0) ; "RTN","CASHV4C",52,0) ; Check required field mapped if LIST array is passed in! "RTN","CASHV4C",53,0) I $D(LIST) D "RTN","CASHV4C",54,0) .; The .01 field is always mapped "RTN","CASHV4C",55,0) .I '$D(LIST(FILE,.01)) S LIST(FILE,.01)="" "RTN","CASHV4C",56,0) .; Make sure Relationship field (#15050.111) is mapped for Multiple sub-files! "RTN","CASHV4C",57,0) .I '$$ISFILE^CASHU(FILE),'$D(LIST(FILE,15050.111)) S LIST(FILE,15050.111)="" "RTN","CASHV4C",58,0) .Q "RTN","CASHV4C",59,0) ; "RTN","CASHV4C",60,0) ; Large File Fixes (see TMPLIST^CASHC0 for more information) "RTN","CASHV4C",61,0) ; Create a TMPLIST array, that isn't passed to sub-files "RTN","CASHV4C",62,0) ; Initialize Maximum values "RTN","CASHV4C",63,0) D MAXVALS^CASHCU(FILE,FLAGS,.MAXT,.MAXM) "RTN","CASHV4C",64,0) ; Large Number of Properties fix (>250 by default) "RTN","CASHV4C",65,0) I '$D(LIST),'$D(TMPLIST),$$FLDCNT^CASHFN11(FILE)>MAXT D TMPLIST^CASHC0(FILE,FLAGS,MAXT,MAXM,.TMPLIST) "RTN","CASHV4C",66,0) ; Large number of Multiples fix (>75 by default) "RTN","CASHV4C",67,0) I '$D(LIST),'$D(TMPLIST),$P($G(^CASH(15050.11,FILE,4,0)),"^",4)>MAXM D "RTN","CASHV4C",68,0) .N FIELD,FLDCAT,SUBS "RTN","CASHV4C",69,0) .S (FIELD,SUBS)=0 "RTN","CASHV4C",70,0) .K ^TMP("CASHC",$J,"LIST",FILE) "RTN","CASHV4C",71,0) .F S FIELD=$O(^CASH(15050.11,FILE,1,FIELD)) Q:'+FIELD D "RTN","CASHV4C",72,0) ..S FLDCAT=$P($G(^CASH(15050.11,FILE,1,FIELD,3)),"^",1) "RTN","CASHV4C",73,0) ..; Count Multiples and add excess to ^TMP("CASHC",$J,"LIST") for continuation classes "RTN","CASHV4C",74,0) ..I FLDCAT="M" S SUBS=SUBS+1 I SUBS>MAXM S ^TMP("CASHC",$J,"LIST",FILE,(SUBS-1\MAXM),FIELD)="" Q "RTN","CASHV4C",75,0) ..; Try to ensure that WP Field ends up in the same Class as its Multiple "RTN","CASHV4C",76,0) ..I FLDCAT="W",SUBS' errors. Many sites have Low "Maximum Memory Per Process" settings! "RTN","CASHV4C",90,0) ; "RTN","CASHV4C",91,0) ; NOTE: It's not actually necessary to do this here in 4.1, but I've left this section "RTN","CASHV4C",92,0) ; for consistency between the two versions! "RTN","CASHV4C",93,0) ; "RTN","CASHV4C",94,0) ; Create any Required Sub-Classes if FLAGS["M" "RTN","CASHV4C",95,0) I FLAGS["M" D "RTN","CASHV4C",96,0) .N CFLAGS,FIELD "RTN","CASHV4C",97,0) .S CFLAGS=FLAGS "RTN","CASHV4C",98,0) .; If R not passed, strip P from CFLAGS "RTN","CASHV4C",99,0) .I FLAGS'["R",FLAGS'["r" S CFLAGS=$TR(CFLAGS,"P","") "RTN","CASHV4C",100,0) .S FIELD="" "RTN","CASHV4C",101,0) .F S FIELD=$O(^CASH(15050.11,FILE,1,"C","M",FIELD)) Q:FIELD="" D "RTN","CASHV4C",102,0) ..; If LIST array passed in check if Field should be mapped "RTN","CASHV4C",103,0) ..I $D(LIST),'$D(LIST(FILE,FIELD)) Q "RTN","CASHV4C",104,0) ..; If TMPLIST array created check if Field should be mapped "RTN","CASHV4C",105,0) ..I $D(TMPLIST),'$D(TMPLIST(FIELD)) Q "RTN","CASHV4C",106,0) ..N PNODE0,OK,SUBFILE,TYPE "RTN","CASHV4C",107,0) ..S PNODE0=^CASH(15050.11,FILE,1,FIELD,0) "RTN","CASHV4C",108,0) ..S TYPE=$P(PNODE0,"^",9) "RTN","CASHV4C",109,0) ..S SUBFILE=+$TR(TYPE,"#","") "RTN","CASHV4C",110,0) ..I $D(^TMP("CASHC",$J,SUBFILE)) Q "RTN","CASHV4C",111,0) ..S OK=$$CREATE(SUBFILE,CFLAGS,PACKAGE,ID,OWNER,.LIST) "RTN","CASHV4C",112,0) ..I OK,FLAGS["S" S ^TMP("CASHCW",$J,"SUB",FILE,SUBFILE)="" "RTN","CASHV4C",113,0) ..Q "RTN","CASHV4C",114,0) .Q "RTN","CASHV4C",115,0) ; "RTN","CASHV4C",116,0) ; Create Classes for Pointed to FILES "RTN","CASHV4C",117,0) I FLAGS["P" D "RTN","CASHV4C",118,0) .N PFLAGS,FIELD "RTN","CASHV4C",119,0) .S PFLAGS=FLAGS "RTN","CASHV4C",120,0) .; If R not passed, strip M & P from PFLAGS "RTN","CASHV4C",121,0) .I FLAGS'["R" S PFLAGS=$TR(PFLAGS,"MP","") "RTN","CASHV4C",122,0) .S FIELD="" "RTN","CASHV4C",123,0) .F S FIELD=$O(^CASH(15050.11,FILE,1,"C","P",FIELD)) Q:FIELD="" D "RTN","CASHV4C",124,0) ..; If LIST array passed in check if Field should be mapped "RTN","CASHV4C",125,0) ..I $D(LIST),'$D(LIST(FILE,FIELD)) Q "RTN","CASHV4C",126,0) ..; If TMPLIST array created check if Field should be mapped "RTN","CASHV4C",127,0) ..I $D(TMPLIST),'$D(TMPLIST(FIELD)) Q "RTN","CASHV4C",128,0) ..N PFILE,OK "RTN","CASHV4C",129,0) ..S PFILE=$P($G(^CASH(15050.11,FILE,1,FIELD,1,1,0)),"^",2) "RTN","CASHV4C",130,0) ..I FILE'=PFILE N FIELD S OK=$$CREATE(PFILE,PFLAGS,PACKAGE,ID,OWNER,.LIST) "RTN","CASHV4C",131,0) ..Q "RTN","CASHV4C",132,0) .Q "RTN","CASHV4C",133,0) ; "RTN","CASHV4C",134,0) ; Loop through and add Properties "RTN","CASHV4C",135,0) D PROPS^CASHV4C1(FILE,FLAGS,PACKAGE,CLNAME,UIDNM,ROWID,.LIST,.TMPLIST) "RTN","CASHV4C",136,0) ; "RTN","CASHV4C",137,0) ; Loop through and add any Methods "RTN","CASHV4C",138,0) D METHODS^CASHV4C2(FILE,FLAGS,PACKAGE,CLNAME,.LIST,.TMPLIST) "RTN","CASHV4C",139,0) ; "RTN","CASHV4C",140,0) ; Add Triggers "RTN","CASHV4C",141,0) D TRIGGERS^CASHV4C3(FILE,FLAGS,CLNAME,UIDNM,.LIST,.TMPLIST) "RTN","CASHV4C",142,0) ; "RTN","CASHV4C",143,0) ; Create the Storage "RTN","CASHV4C",144,0) D STORAGE^CASHV4C4(FILE,FLAGS,PACKAGE,ID,CLNAME,UIDNM,.LIST,.TMPLIST) "RTN","CASHV4C",145,0) K TMPLIST "RTN","CASHV4C",146,0) ; "RTN","CASHV4C",147,0) ; Set the Time Changed (required for Compile) "RTN","CASHV4C",148,0) S ^oddDEF(CLNAME,"spec","timechanged")=$H "RTN","CASHV4C",149,0) ; "RTN","CASHV4C",150,0) ; Release lock "RTN","CASHV4C",151,0) L -^oddDEF(CLNAME) "RTN","CASHV4C",152,0) ; "RTN","CASHV4C",153,0) ; Compile the Class "RTN","CASHV4C",154,0) ; (Sub-files must be compiled with their master class) "RTN","CASHV4C",155,0) I $$ISFILE^CASHU(FILE) D CLCOMP^CASHCU(CLNAME,OWNER,FLAGS) "RTN","CASHV4C",156,0) ; "RTN","CASHV4C",157,0) ; Create Continuation Classes if ^TMP("CASHC",$J,"LIST") is defined "RTN","CASHV4C",158,0) I $D(^TMP("CASHC",$J,"LIST",FILE)),'$D(^TMP("CASHC",$J,"NAME-EXT",FILE)) D I 'OK Q 0 "RTN","CASHV4C",159,0) .N I "RTN","CASHV4C",160,0) .F I=1:1:26 Q:'$D(^TMP("CASHC",$J,"LIST",FILE,I)) D Q:'OK "RTN","CASHV4C",161,0) ..N LIST,TMPLIST "RTN","CASHV4C",162,0) ..M TMPLIST=^TMP("CASHC",$J,"LIST",FILE,I) "RTN","CASHV4C",163,0) ..S ^TMP("CASHC",$J,"NAME-EXT",FILE)=$C(64+I) "RTN","CASHV4C",164,0) ..K ^TMP("CASHC",$J,FILE) ; Remove completed flag for this file "RTN","CASHV4C",165,0) ..S OK=$$CREATE(FILE,FLAGS,PACKAGE,ID,OWNER,.LIST,.TMPLIST) "RTN","CASHV4C",166,0) ..I OK,'$$ISFILE^CASHU(FILE) S OK=$$REL^CASHV4C1(FILE,FLAGS,PACKAGE,ID) "RTN","CASHV4C",167,0) ..Q "RTN","CASHV4C",168,0) .K ^TMP("CASHC",$J,"LIST",FILE) "RTN","CASHV4C",169,0) .K ^TMP("CASHC",$J,"NAME-EXT",FILE) "RTN","CASHV4C",170,0) .Q "RTN","CASHV4C",171,0) ; "RTN","CASHV4C",172,0) Q 1 "RTN","CASHV4C",173,0) ; "RTN","CASHV4C",174,0) ALL(FLAGS,PACKAGE,ID,OWNER) ;Compile all FileMan Files "RTN","CASHV4C",175,0) ; "RTN","CASHV4C",176,0) ; IMPORTANT: Do Not call directly! "RTN","CASHV4C",177,0) ; This entry point should only be accessed by ALL^CASH "RTN","CASHV4C",178,0) ; "RTN","CASHV4C",179,0) N CNT,CNTCR,CNTOK,DEL,FILE,I,TIME,TOT "RTN","CASHV4C",180,0) ; "RTN","CASHV4C",181,0) ; Lock ^XTMP("CASH") "RTN","CASHV4C",182,0) I '$$LOCK^CASHU($J,"ALL^CASH") Q "RTN","CASHV4C",183,0) ; Initialize Temporary Globals "RTN","CASHV4C",184,0) K ^TMP("CASH",$J),^TMP("CASHC",$J) "RTN","CASHV4C",185,0) S TIME(1)=$H "RTN","CASHV4C",186,0) ; "RTN","CASHV4C",187,0) ; Discover all files "RTN","CASHV4C",188,0) ; Ensure ^DIC(FILE,0) node is defined, and that FILE is not defined as a Sub-file "RTN","CASHV4C",189,0) S FILE=0,TOT=$P($G(^DIC(0)),"^",4) "RTN","CASHV4C",190,0) F I=1:1 S FILE=$O(^DIC(FILE)) Q:'+FILE D "RTN","CASHV4C",191,0) .I $$ISFILE^CASHU(FILE) D DISCVR^CASH0(FILE,"MPRV") "RTN","CASHV4C",192,0) .I TOT S ^XTMP("CASH","STATUS")="Discovery (1/4) - "_$FN(I/TOT*100,"",2)_"%" "RTN","CASHV4C",193,0) .Q "RTN","CASHV4C",194,0) S TIME(2)=$H "RTN","CASHV4C",195,0) ; "RTN","CASHV4C",196,0) ; Delete any Classes that already exist for this Package "RTN","CASHV4C",197,0) S FILE=0,DEL=0,TOT=$P($G(^CASH(15050.11,0)),"^",4) "RTN","CASHV4C",198,0) F I=1:1 S FILE=$O(^CASH(15050.11,FILE)) Q:'+FILE D "RTN","CASHV4C",199,0) .N CLNAME "RTN","CASHV4C",200,0) .S CLNAME=$$GETCLNM^CASHCN(FILE,FLAGS,PACKAGE) "RTN","CASHV4C",201,0) .I $D(^oddDEF(CLNAME)) D CLDEL^CASHCU(CLNAME) S DEL=DEL+1 "RTN","CASHV4C",202,0) .I TOT S ^XTMP("CASH","STATUS")="Clean Up (2/4) - "_$FN(I/TOT*100,"",2)_"%" "RTN","CASHV4C",203,0) .Q "RTN","CASHV4C",204,0) S TIME(3)=$H "RTN","CASHV4C",205,0) ; "RTN","CASHV4C",206,0) ; Create Classes "RTN","CASHV4C",207,0) ; Note: This is done in numeric order, except where classes have dependancies "RTN","CASHV4C",208,0) S FILE=0 "RTN","CASHV4C",209,0) F I=1:1 S FILE=$O(^CASH(15050.11,FILE)) Q:'+FILE I $$ISFILE^CASHU(FILE) D "RTN","CASHV4C",210,0) .N CLNAME,DEL,OK,TIME "RTN","CASHV4C",211,0) .S CLNAME=$$GETCLNM^CASHCN(FILE,FLAGS,PACKAGE) "RTN","CASHV4C",212,0) .W !,FILE "RTN","CASHV4C",213,0) .I $D(^oddCOM(CLNAME)) W !,"1^Already Compiled" Q "RTN","CASHV4C",214,0) .S OK=$$CREATE(FILE,"EFMPRV"_FLAGS,PACKAGE,ID,OWNER) "RTN","CASHV4C",215,0) .W !,$S(OK:OK,1:OK_"^Failed") "RTN","CASHV4C",216,0) .I TOT S ^XTMP("CASH","STATUS")="Compile (3/4) - "_$FN(I/TOT*100,"",2)_"%" "RTN","CASHV4C",217,0) .Q "RTN","CASHV4C",218,0) S TIME(4)=$H "RTN","CASHV4C",219,0) ; "RTN","CASHV4C",220,0) ; Count the number of successfully compiled Classes "RTN","CASHV4C",221,0) S (CNT,CNTOK,FILE)=0 "RTN","CASHV4C",222,0) F I=1:1 S FILE=$O(^CASH(15050.11,FILE)) Q:'+FILE D "RTN","CASHV4C",223,0) .N CLNAME "RTN","CASHV4C",224,0) .S CLNAME=$$GETCLNM^CASHCN(FILE,FLAGS,PACKAGE) "RTN","CASHV4C",225,0) .S CNT=CNT+1 "RTN","CASHV4C",226,0) .I $$CLASSOK^CASHCU(CLNAME) S CNTOK=CNTOK+1 "RTN","CASHV4C",227,0) .I TOT S ^XTMP("CASH","STATUS")="Checking (4/4) - "_$FN(I/TOT*100,"",2)_"%" "RTN","CASHV4C",228,0) .Q "RTN","CASHV4C",229,0) W !!,"Total Classes Discovered: ",CNT," in ",$$TPLEN^CASHCU(TIME(1),TIME(2)) "RTN","CASHV4C",230,0) W !,"Total Old Classes Removed: ",DEL," in ",$$TPLEN^CASHCU(TIME(2),TIME(3)) "RTN","CASHV4C",231,0) W !,"Total New Classes Compiled: ",CNTOK," (",$FN(CNTOK/CNT*100,"",2),"%)"," in ",$$TPLEN^CASHCU(TIME(3),TIME(4)) "RTN","CASHV4C",232,0) ; "RTN","CASHV4C",233,0) ; Delete Temporary Globals and unlock ^XTMP("CASH") "RTN","CASHV4C",234,0) K ^TMP("CASH",$J),^TMP("CASHC",$J) "RTN","CASHV4C",235,0) D UNLOCK^CASHU($J) "RTN","CASHV4C",236,0) ; "RTN","CASHV4C",237,0) Q "RTN","CASHV4C0") 0^31^B10300922 "RTN","CASHV4C0",1,0) CASHV4C0 ;ALB/MGC - Compiler for Cache version 4.1.x - Continued (Classes); 10/20/04@3:00:00 "RTN","CASHV4C0",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHV4C0",3,0) ; "RTN","CASHV4C0",4,0) ; IMPORTANT: These calls are for INTERNAL use only "RTN","CASHV4C0",5,0) ; "RTN","CASHV4C0",6,0) CLASS(FILE,FLAGS,OWNER,CLNAME,SQLNM,UIDNM,ROWID) ; Create the new Class "RTN","CASHV4C0",7,0) N SUPER,UIDIXNM "RTN","CASHV4C0",8,0) S ^oddDEF(CLNAME)="" "RTN","CASHV4C0",9,0) S ^oddDEF(CLNAME,"spec","description")="DO NOT EDIT: FileMan File #: "_FILE_" Name: "_$P($G(^DIC(FILE,0)),"^",1)_" - mapped by CASH" "RTN","CASHV4C0",10,0) S ^oddDEF(CLNAME,"spec","name")=CLNAME "RTN","CASHV4C0",11,0) S ^oddDEF(CLNAME,"spec","persistent")=1 "RTN","CASHV4C0",12,0) I ROWID'="" S ^oddDEF(CLNAME,"spec","sqlrowidname")=ROWID "RTN","CASHV4C0",13,0) S ^oddDEF(CLNAME,"spec","sqlrowidprivate")=$S(ROWID'="":0,FLAGS["H":0,1:1) "RTN","CASHV4C0",14,0) S SUPER="%Library.Persistent" "RTN","CASHV4C0",15,0) ;I FLAGS["X" S SUPER=SUPER_",%XML.Adaptor" I FLAGS["W" S SUPER=SUPER_",%CSP.Page" "RTN","CASHV4C0",16,0) S ^oddDEF(CLNAME,"spec","super")=SUPER "RTN","CASHV4C0",17,0) I SQLNM'="" S ^oddDEF(CLNAME,"spec","sqltablename")=SQLNM "RTN","CASHV4C0",18,0) I OWNER'="" S ^oddDEF(CLNAME,"spec","owner")=OWNER "RTN","CASHV4C0",19,0) ; "RTN","CASHV4C0",20,0) ; Add the READONLY parameter "RTN","CASHV4C0",21,0) S ^oddDEF(CLNAME,"parameter","READONLY")="" "RTN","CASHV4C0",22,0) S ^oddDEF(CLNAME,"parameter","READONLY","default")=$S(FLAGS["U":0,1:1) "RTN","CASHV4C0",23,0) S ^oddDEF(CLNAME,"parameter","READONLY","description")="Updates should NOT be allowed through default SQL!" "RTN","CASHV4C0",24,0) S ^oddDEF(CLNAME,"parameter","READONLY","final")=0 "RTN","CASHV4C0",25,0) S ^oddDEF(CLNAME,"parameter","READONLY","name")="READONLY" "RTN","CASHV4C0",26,0) ; "RTN","CASHV4C0",27,0) ; Add the Unique Identity Property "RTN","CASHV4C0",28,0) S ^oddDEF(CLNAME,"property",UIDNM)="" "RTN","CASHV4C0",29,0) S ^oddDEF(CLNAME,"property",UIDNM,"calculated")=0 "RTN","CASHV4C0",30,0) S ^oddDEF(CLNAME,"property",UIDNM,"collection")="" "RTN","CASHV4C0",31,0) S ^oddDEF(CLNAME,"property",UIDNM,"description")="Unique Object Identity/Primary Key - equivalent to IEN" "RTN","CASHV4C0",32,0) S ^oddDEF(CLNAME,"property",UIDNM,"final")=0 "RTN","CASHV4C0",33,0) S ^oddDEF(CLNAME,"property",UIDNM,"multidimensional")=0 "RTN","CASHV4C0",34,0) S ^oddDEF(CLNAME,"property",UIDNM,"name")=UIDNM "RTN","CASHV4C0",35,0) S ^oddDEF(CLNAME,"property",UIDNM,"private")=0 "RTN","CASHV4C0",36,0) S ^oddDEF(CLNAME,"property",UIDNM,"relationship")=0 "RTN","CASHV4C0",37,0) S ^oddDEF(CLNAME,"property",UIDNM,"required")=1 "RTN","CASHV4C0",38,0) S ^oddDEF(CLNAME,"property",UIDNM,"sqlcolumnnumber")=2 "RTN","CASHV4C0",39,0) S ^oddDEF(CLNAME,"property",UIDNM,"sqlcomputed")=0 "RTN","CASHV4C0",40,0) S ^oddDEF(CLNAME,"property",UIDNM,"transient")=0 "RTN","CASHV4C0",41,0) S ^oddDEF(CLNAME,"property",UIDNM,"type")="%Library.Float" "RTN","CASHV4C0",42,0) ; "RTN","CASHV4C0",43,0) ; Add the Unique Identity Property Index "RTN","CASHV4C0",44,0) S UIDIXNM=UIDNM_$S($L(UIDNM)>28:"",$L(UIDNM)>26:"Inx",1:"Index") "RTN","CASHV4C0",45,0) S ^oddDEF(CLNAME,"index",UIDIXNM)="" "RTN","CASHV4C0",46,0) S ^oddDEF(CLNAME,"index",UIDIXNM,"attributes")=UIDNM "RTN","CASHV4C0",47,0) S ^oddDEF(CLNAME,"index",UIDIXNM,"description")="Unique Identity Index on "_NAME_"ID" "RTN","CASHV4C0",48,0) S ^oddDEF(CLNAME,"index",UIDIXNM,"extent")=0 "RTN","CASHV4C0",49,0) S ^oddDEF(CLNAME,"index",UIDIXNM,"idkey")=1 "RTN","CASHV4C0",50,0) S ^oddDEF(CLNAME,"index",UIDIXNM,"name")=UIDIXNM "RTN","CASHV4C0",51,0) S ^oddDEF(CLNAME,"index",UIDIXNM,"primarykey")=1 "RTN","CASHV4C0",52,0) S ^oddDEF(CLNAME,"index",UIDIXNM,"unique")=1 "RTN","CASHV4C0",53,0) Q "RTN","CASHV4C1") 0^32^B78948097 "RTN","CASHV4C1",1,0) CASHV4C1 ;ALB/MGC - Compiler for Cache version 4.1.x - Continued (Properties); 10/20/04@3:00:00 "RTN","CASHV4C1",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHV4C1",3,0) ; "RTN","CASHV4C1",4,0) ; IMPORTANT: These calls are for INTERNAL use only "RTN","CASHV4C1",5,0) ; "RTN","CASHV4C1",6,0) PROPS(FILE,FLAGS,PACKAGE,CLNAME,UIDNM,ROWID,LIST,TMPLIST) ; Loop through and add Properties "RTN","CASHV4C1",7,0) N FIELD,I,IENS,J,PLIST,PROP "RTN","CASHV4C1",8,0) ; "RTN","CASHV4C1",9,0) ; Create IENS Property "RTN","CASHV4C1",10,0) S IENS="IENS" "RTN","CASHV4C1",11,0) S ^oddDEF(CLNAME,"property",IENS)="" "RTN","CASHV4C1",12,0) S ^oddDEF(CLNAME,"property",IENS,"calculated")=0 "RTN","CASHV4C1",13,0) S ^oddDEF(CLNAME,"property",IENS,"collection")="" "RTN","CASHV4C1",14,0) S ^oddDEF(CLNAME,"property",IENS,"description")="The FileMan IENS for this row" "RTN","CASHV4C1",15,0) S ^oddDEF(CLNAME,"property",IENS,"final")=0 "RTN","CASHV4C1",16,0) S ^oddDEF(CLNAME,"property",IENS,"multidimensional")=0 "RTN","CASHV4C1",17,0) S ^oddDEF(CLNAME,"property",IENS,"name")=IENS "RTN","CASHV4C1",18,0) S ^oddDEF(CLNAME,"property",IENS,"private")=0 "RTN","CASHV4C1",19,0) S ^oddDEF(CLNAME,"property",IENS,"relationship")=0 "RTN","CASHV4C1",20,0) S ^oddDEF(CLNAME,"property",IENS,"required")=0 "RTN","CASHV4C1",21,0) S ^oddDEF(CLNAME,"property",IENS,"sqlcolumnnumber")=3 "RTN","CASHV4C1",22,0) S ^oddDEF(CLNAME,"property",IENS,"sqlcomputed")=0 "RTN","CASHV4C1",23,0) S ^oddDEF(CLNAME,"property",IENS,"transient")=0 "RTN","CASHV4C1",24,0) S ^oddDEF(CLNAME,"property",IENS,"type")="%Library.String" "RTN","CASHV4C1",25,0) ; "RTN","CASHV4C1",26,0) S FIELD=0,I=3 "RTN","CASHV4C1",27,0) F S FIELD=$O(^CASH(15050.11,FILE,1,FIELD)) Q:'+FIELD D "RTN","CASHV4C1",28,0) .N ALTLBL,ALTSQL,CARD,CAT,COLL,DESC,INV,LABEL,PNODE0,PNODE3,REL,REQ,SQLCODE,SQLNM,TYPE "RTN","CASHV4C1",29,0) .; If LIST array passed in check if Field should be mapped "RTN","CASHV4C1",30,0) .I $D(LIST),'$D(LIST(FILE,FIELD)) Q "RTN","CASHV4C1",31,0) .; If TMPLIST array created check if Field should be mapped "RTN","CASHV4C1",32,0) .I $D(TMPLIST),'$D(TMPLIST(FIELD)) Q "RTN","CASHV4C1",33,0) .; Get the 0 node "RTN","CASHV4C1",34,0) .S PNODE0=^CASH(15050.11,FILE,1,FIELD,0) "RTN","CASHV4C1",35,0) .S LABEL=$P(PNODE0,"^",1) "RTN","CASHV4C1",36,0) .S CARD=$P(PNODE0,"^",3) I CARD'="" S CARD=$$SOCOUT^CASHR0(15050.111,.03,CARD) "RTN","CASHV4C1",37,0) .S COLL=$P(PNODE0,"^",4) I COLL'="" S COLL=$$SOCOUT^CASHR0(15050.111,.04,COLL) "RTN","CASHV4C1",38,0) .S INV=$P(PNODE0,"^",5) "RTN","CASHV4C1",39,0) .S REL=$P(PNODE0,"^",6) "RTN","CASHV4C1",40,0) .S REQ=$P(PNODE0,"^",7) "RTN","CASHV4C1",41,0) .S TYPE=$P(PNODE0,"^",9) "RTN","CASHV4C1",42,0) .S DESC=$G(^CASH(15050.11,FILE,1,FIELD,1)) "RTN","CASHV4C1",43,0) .S SQLCODE=$G(^CASH(15050.11,FILE,1,FIELD,2)) "RTN","CASHV4C1",44,0) .S PNODE3=$G(^CASH(15050.11,FILE,1,FIELD,3)) "RTN","CASHV4C1",45,0) .S CAT=$P(PNODE3,"^",1) "RTN","CASHV4C1",46,0) .S SQLNM=$P(PNODE3,"^",2) "RTN","CASHV4C1",47,0) .; Alternate Labels for Pointers "RTN","CASHV4C1",48,0) .S ALTLBL=LABEL_"ID",ALTSQL="" "RTN","CASHV4C1",49,0) .; "RTN","CASHV4C1",50,0) .; If Multiple, quit if M not passed in FLAGS "RTN","CASHV4C1",51,0) .I CAT="M",FLAGS'["M" Q "RTN","CASHV4C1",52,0) .; If Pointer, quit if P or E not passed in FLAGS, otherwise Get alternate labels "RTN","CASHV4C1",53,0) .I CAT="P",FLAGS'["P"&(FLAGS'["E") Q "RTN","CASHV4C1",54,0) .; "RTN","CASHV4C1",55,0) .; If SqlRowIdName has been overriden (Sub-Files), "ID" must be changed to ROWID "RTN","CASHV4C1",56,0) .I SQLCODE["{ID}",ROWID'="" S SQLCODE=$P(SQLCODE,"{ID}",1)_"{"_ROWID_"}"_$P(SQLCODE,"{ID}",2) "RTN","CASHV4C1",57,0) .; If Loose Validation ("L" flag), relax the Required and Date constraints "RTN","CASHV4C1",58,0) .I FLAGS["L" S REQ=0 I TYPE["CASH.FileMan.Date" S TYPE="CASH.FileMan.StringDateTime" "RTN","CASHV4C1",59,0) .; Check if Relationship and change names if FLAGS["N" "RTN","CASHV4C1",60,0) .I REL,FLAGS["N" D "RTN","CASHV4C1",61,0) ..N UIDNM,ROWID "RTN","CASHV4C1",62,0) ..I CARD="children" D GETNAMES^CASHCN(FILE,"N","","","","",.UIDNM,.ROWID) S INV=$S(ROWID'="":ROWID,1:UIDNM) Q "RTN","CASHV4C1",63,0) ..I CARD="parent" D GETNAMES^CASHCN($E(TYPE,2,255),"N","","","","",.UIDNM,.ROWID) S LABEL=$S(ROWID'="":ROWID,1:UIDNM) Q "RTN","CASHV4C1",64,0) ..Q "RTN","CASHV4C1",65,0) .; "RTN","CASHV4C1",66,0) .; HDR Compatibility - If FLAGS["H" change to HDR Datatypes (if installed) "RTN","CASHV4C1",67,0) .I FLAGS["H" D "RTN","CASHV4C1",68,0) ..I TYPE="CASH.FileMan.SetOfCodes",$D(^oddDEF("CASH.HDR.SetOfCodes")) S TYPE="CASH.HDR.SetOfCodes" Q "RTN","CASHV4C1",69,0) ..I TYPE="CASH.FileMan.StringDateTime"!(TYPE["CASH.FileMan.Date"),$D(^oddDEF("CASH.HDR.DateTime")) S TYPE="CASH.HDR.DateTime" Q "RTN","CASHV4C1",70,0) ..Q "RTN","CASHV4C1",71,0) .; "RTN","CASHV4C1",72,0) .; Check if TYPE points to a file #, if so get Class Name "RTN","CASHV4C1",73,0) .I TYPE?1"#".N.(1"."1.N) S TYPE=$$GETCLNM^CASHCN(TYPE,FLAGS,PACKAGE) "RTN","CASHV4C1",74,0) .; "RTN","CASHV4C1",75,0) .; If Pointer, create Reference if P passed in FLAGS, then quit if E not passed "RTN","CASHV4C1",76,0) .I CAT="P" D:FLAGS["P" Q:FLAGS'["E" "RTN","CASHV4C1",77,0) ..; Pointer Field "RTN","CASHV4C1",78,0) ..N PFILE,TYPE "RTN","CASHV4C1",79,0) ..S PFILE=$P($G(^CASH(15050.11,FILE,1,FIELD,1,1,0)),"^",2) "RTN","CASHV4C1",80,0) ..S TYPE=$$GETCLNM^CASHCN(PFILE,FLAGS,PACKAGE) "RTN","CASHV4C1",81,0) ..; Create new Property "RTN","CASHV4C1",82,0) ..S ^oddDEF(CLNAME,"property",ALTLBL)="" "RTN","CASHV4C1",83,0) ..S ^oddDEF(CLNAME,"property",ALTLBL,"calculated")=0 "RTN","CASHV4C1",84,0) ..S ^oddDEF(CLNAME,"property",ALTLBL,"collection")="" "RTN","CASHV4C1",85,0) ..S ^oddDEF(CLNAME,"property",ALTLBL,"description")="Pointer to File #: "_PFILE "RTN","CASHV4C1",86,0) ..S ^oddDEF(CLNAME,"property",ALTLBL,"final")=0 "RTN","CASHV4C1",87,0) ..S ^oddDEF(CLNAME,"property",ALTLBL,"multidimensional")=0 "RTN","CASHV4C1",88,0) ..S ^oddDEF(CLNAME,"property",ALTLBL,"name")=ALTLBL "RTN","CASHV4C1",89,0) ..S ^oddDEF(CLNAME,"property",ALTLBL,"private")=0 "RTN","CASHV4C1",90,0) ..S ^oddDEF(CLNAME,"property",ALTLBL,"relationship")=0 "RTN","CASHV4C1",91,0) ..S ^oddDEF(CLNAME,"property",ALTLBL,"required")=REQ "RTN","CASHV4C1",92,0) ..S ^oddDEF(CLNAME,"property",ALTLBL,"sqlcomputed")=0 "RTN","CASHV4C1",93,0) ..S ^oddDEF(CLNAME,"property",ALTLBL,"transient")=0 "RTN","CASHV4C1",94,0) ..S ^oddDEF(CLNAME,"property",ALTLBL,"type")=TYPE "RTN","CASHV4C1",95,0) ..; Set SQL Field Name if appropriate "RTN","CASHV4C1",96,0) ..I ALTSQL'="" S ^oddDEF(CLNAME,"property",ALTLBL,"sqlfieldname")=ALTSQL "RTN","CASHV4C1",97,0) ..S I=I+1 "RTN","CASHV4C1",98,0) ..Q "RTN","CASHV4C1",99,0) .; "RTN","CASHV4C1",100,0) .; Get Full Description from ^DD. There's no need to store this in #15050.11. "RTN","CASHV4C1",101,0) .I FLAGS["D",$D(^DD(FILE,FIELD,21)) D "RTN","CASHV4C1",102,0) ..F J=1:1 Q:'$D(^DD(FILE,FIELD,21,J)) S DESC=DESC_$C(13,10)_$G(^DD(FILE,FIELD,21,J,0)) "RTN","CASHV4C1",103,0) ..Q "RTN","CASHV4C1",104,0) .; Create new Property "RTN","CASHV4C1",105,0) .S ^oddDEF(CLNAME,"property",LABEL)="" "RTN","CASHV4C1",106,0) .S ^oddDEF(CLNAME,"property",LABEL,"calculated")=$P(PNODE0,"^",2) "RTN","CASHV4C1",107,0) .I CARD'="" S ^oddDEF(CLNAME,"property",LABEL,"cardinality")=CARD "RTN","CASHV4C1",108,0) .S ^oddDEF(CLNAME,"property",LABEL,"collection")=COLL "RTN","CASHV4C1",109,0) .S ^oddDEF(CLNAME,"property",LABEL,"description")=DESC "RTN","CASHV4C1",110,0) .S ^oddDEF(CLNAME,"property",LABEL,"final")=0 "RTN","CASHV4C1",111,0) .I INV'="" S ^oddDEF(CLNAME,"property",LABEL,"inverse")=INV "RTN","CASHV4C1",112,0) .S ^oddDEF(CLNAME,"property",LABEL,"multidimensional")=0 "RTN","CASHV4C1",113,0) .S ^oddDEF(CLNAME,"property",LABEL,"name")=LABEL "RTN","CASHV4C1",114,0) .S ^oddDEF(CLNAME,"property",LABEL,"private")=0 "RTN","CASHV4C1",115,0) .S ^oddDEF(CLNAME,"property",LABEL,"relationship")=REL "RTN","CASHV4C1",116,0) .S ^oddDEF(CLNAME,"property",LABEL,"required")=REQ "RTN","CASHV4C1",117,0) .S ^oddDEF(CLNAME,"property",LABEL,"sqlcomputed")=$P(PNODE0,"^",8) "RTN","CASHV4C1",118,0) .I SQLCODE'="" S ^oddDEF(CLNAME,"property",LABEL,"sqlcomputecode")=SQLCODE "RTN","CASHV4C1",119,0) .S ^oddDEF(CLNAME,"property",LABEL,"transient")=0 "RTN","CASHV4C1",120,0) .S ^oddDEF(CLNAME,"property",LABEL,"type")=TYPE "RTN","CASHV4C1",121,0) .; Add SQL Column Number (if Field is not a Relationship) "RTN","CASHV4C1",122,0) .I 'REL S ^oddDEF(CLNAME,"property",LABEL,"sqlcolumnnumber")=I+1 "RTN","CASHV4C1",123,0) .; Set SQL Field Name if appropriate "RTN","CASHV4C1",124,0) .I SQLNM'="" S ^oddDEF(CLNAME,"property",LABEL,"sqlfieldname")=SQLNM "RTN","CASHV4C1",125,0) .; Loop through and add Parameters "RTN","CASHV4C1",126,0) .F J=1:1 Q:'$D(^CASH(15050.11,FILE,1,FIELD,1,J)) D "RTN","CASHV4C1",127,0) ..N PARAM,PARNODE0,VALUE "RTN","CASHV4C1",128,0) ..S PARNODE0=^CASH(15050.11,FILE,1,FIELD,1,J,0) "RTN","CASHV4C1",129,0) ..S PARAM=$P(PARNODE0,"^",1) "RTN","CASHV4C1",130,0) ..S VALUE=$P(PARNODE0,"^",2) "RTN","CASHV4C1",131,0) ..Q:PARAM="" "RTN","CASHV4C1",132,0) ..S ^oddDEF(CLNAME,"property",LABEL,"parameter",PARAM)=VALUE "RTN","CASHV4C1",133,0) ..Q "RTN","CASHV4C1",134,0) .; If FLAGS["O" set ODBCEXTENDED=1 for SetOfCode fields "RTN","CASHV4C1",135,0) .I FLAGS["O",TYPE="CASH.FileMan.SetOfCodes" S ^oddDEF(CLNAME,"property",LABEL,"parameter","EXTENDEDODBC")=1 "RTN","CASHV4C1",136,0) .S I=I+1 "RTN","CASHV4C1",137,0) .Q "RTN","CASHV4C1",138,0) Q "RTN","CASHV4C1",139,0) ; "RTN","CASHV4C1",140,0) REL(FILE,FLAGS,PACKAGE,ID) ; Add the Parent-Child Relationship for a continuation Sub-class "RTN","CASHV4C1",141,0) N CLNAME,DESC,EXT,INV,LABEL,NAME,PARENT,PNODE0,ROWID,SQLNM,TYPE,UIDNM "RTN","CASHV4C1",142,0) ; "RTN","CASHV4C1",143,0) ; Get the Class Name "RTN","CASHV4C1",144,0) S CLNAME=$$GETCLNM^CASHCN(FILE,FLAGS,PACKAGE) "RTN","CASHV4C1",145,0) I '$D(^oddDEF(CLNAME)) Q 0 "RTN","CASHV4C1",146,0) ; Get Extension Character "RTN","CASHV4C1",147,0) S EXT=$G(^TMP("CASHC",$J,"NAME-EXT",FILE)) "RTN","CASHV4C1",148,0) ; Unpack the data for Field #15050.111 "RTN","CASHV4C1",149,0) S PNODE0=$G(^CASH(15050.11,FILE,1,15050.111,0)) "RTN","CASHV4C1",150,0) I PNODE0="" Q 0 "RTN","CASHV4C1",151,0) S LABEL=$P(PNODE0,"^",1) "RTN","CASHV4C1",152,0) S INV=$P(PNODE0,"^",5) "RTN","CASHV4C1",153,0) S INV=$E(INV,1,$L(INV)-2)_EXT_"ID" "RTN","CASHV4C1",154,0) S TYPE=$P(PNODE0,"^",9),PARENT=$E(TYPE,2,255) "RTN","CASHV4C1",155,0) S TYPE=$$GETCLNM^CASHCN(TYPE,FLAGS,PACKAGE) "RTN","CASHV4C1",156,0) I TYPE="" Q 0 "RTN","CASHV4C1",157,0) I '$D(^oddDEF(TYPE)) Q 0 "RTN","CASHV4C1",158,0) S DESC=$G(^CASH(15050.11,FILE,1,15050.111,1)) "RTN","CASHV4C1",159,0) ; Change names if FLAGS["N" "RTN","CASHV4C1",160,0) I FLAGS["N" D "RTN","CASHV4C1",161,0) .N UIDNM,ROWID "RTN","CASHV4C1",162,0) .D GETNAMES^CASHCN(PARENT,"N","","","","",.UIDNM,.ROWID) "RTN","CASHV4C1",163,0) .S LABEL=$S(ROWID'="":ROWID,1:UIDNM) "RTN","CASHV4C1",164,0) .Q "RTN","CASHV4C1",165,0) ; "RTN","CASHV4C1",166,0) ; Create the Parent Relationship Property "RTN","CASHV4C1",167,0) S ^oddDEF(CLNAME,"property",LABEL)="" "RTN","CASHV4C1",168,0) S ^oddDEF(CLNAME,"property",LABEL,"calculated")=0 "RTN","CASHV4C1",169,0) S ^oddDEF(CLNAME,"property",LABEL,"cardinality")=$$SOCOUT^CASHR0(15050.111,.03,"P") "RTN","CASHV4C1",170,0) S ^oddDEF(CLNAME,"property",LABEL,"collection")="" "RTN","CASHV4C1",171,0) S ^oddDEF(CLNAME,"property",LABEL,"description")=DESC "RTN","CASHV4C1",172,0) S ^oddDEF(CLNAME,"property",LABEL,"final")=0 "RTN","CASHV4C1",173,0) S ^oddDEF(CLNAME,"property",LABEL,"inverse")=INV "RTN","CASHV4C1",174,0) S ^oddDEF(CLNAME,"property",LABEL,"multidimensional")=0 "RTN","CASHV4C1",175,0) S ^oddDEF(CLNAME,"property",LABEL,"name")=LABEL "RTN","CASHV4C1",176,0) S ^oddDEF(CLNAME,"property",LABEL,"private")=0 "RTN","CASHV4C1",177,0) S ^oddDEF(CLNAME,"property",LABEL,"relationship")=1 "RTN","CASHV4C1",178,0) S ^oddDEF(CLNAME,"property",LABEL,"required")=0 "RTN","CASHV4C1",179,0) S ^oddDEF(CLNAME,"property",LABEL,"sqlcomputed")=0 "RTN","CASHV4C1",180,0) S ^oddDEF(CLNAME,"property",LABEL,"transient")=0 "RTN","CASHV4C1",181,0) S ^oddDEF(CLNAME,"property",LABEL,"type")=TYPE "RTN","CASHV4C1",182,0) ; "RTN","CASHV4C1",183,0) ; Create the Parent Relationship Property "RTN","CASHV4C1",184,0) S ^oddDEF(TYPE,"property",INV)="" "RTN","CASHV4C1",185,0) S ^oddDEF(TYPE,"property",INV,"calculated")=0 "RTN","CASHV4C1",186,0) S ^oddDEF(TYPE,"property",INV,"cardinality")=$$SOCOUT^CASHR0(15050.111,.03,"C") "RTN","CASHV4C1",187,0) S ^oddDEF(TYPE,"property",INV,"collection")="" "RTN","CASHV4C1",188,0) S ^oddDEF(TYPE,"property",INV,"description")="Relationship To Child File #: "_FILE_" (continuation "_EXT_")" "RTN","CASHV4C1",189,0) S ^oddDEF(TYPE,"property",INV,"final")=0 "RTN","CASHV4C1",190,0) S ^oddDEF(TYPE,"property",INV,"inverse")=LABEL "RTN","CASHV4C1",191,0) S ^oddDEF(TYPE,"property",INV,"multidimensional")=0 "RTN","CASHV4C1",192,0) S ^oddDEF(TYPE,"property",INV,"name")=INV "RTN","CASHV4C1",193,0) S ^oddDEF(TYPE,"property",INV,"private")=0 "RTN","CASHV4C1",194,0) S ^oddDEF(TYPE,"property",INV,"relationship")=1 "RTN","CASHV4C1",195,0) S ^oddDEF(TYPE,"property",INV,"required")=0 "RTN","CASHV4C1",196,0) S ^oddDEF(TYPE,"property",INV,"sqlcomputed")=0 "RTN","CASHV4C1",197,0) S ^oddDEF(TYPE,"property",INV,"transient")=0 "RTN","CASHV4C1",198,0) S ^oddDEF(TYPE,"property",INV,"type")=CLNAME "RTN","CASHV4C1",199,0) ; "RTN","CASHV4C1",200,0) Q 1 "RTN","CASHV4C2") 0^33^B12681943 "RTN","CASHV4C2",1,0) CASHV4C2 ;ALB/MGC - Compiler for Cache version 4.1.x - Continued (Methods); 10/20/04@3:00:00 "RTN","CASHV4C2",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHV4C2",3,0) ; "RTN","CASHV4C2",4,0) ; IMPORTANT: These calls are for INTERNAL use only "RTN","CASHV4C2",5,0) ; "RTN","CASHV4C2",6,0) METHODS(FILE,FLAGS,PACKAGE,CLNAME,LIST,TMPLIST) ; Loop through and add any Methods "RTN","CASHV4C2",7,0) N CODE,I,J,MTHD "RTN","CASHV4C2",8,0) S MTHD=0 "RTN","CASHV4C2",9,0) F I=1:1 S MTHD=$O(^CASH(15050.11,FILE,2,MTHD)) Q:'+MTHD D "RTN","CASHV4C2",10,0) .; The Get() methods are keyed by their associated Field # "RTN","CASHV4C2",11,0) .; If LIST array passed in check if the Field's Get() should be mapped "RTN","CASHV4C2",12,0) .I $D(LIST),'$D(LIST(FILE,MTHD)) Q "RTN","CASHV4C2",13,0) .; If TMPLIST array created check if the Field's Get() should be mapped "RTN","CASHV4C2",14,0) .I $D(TMPLIST),'$D(TMPLIST(MTHD)) Q "RTN","CASHV4C2",15,0) .N MNODE0,MODE,MTHNM "RTN","CASHV4C2",16,0) .S MNODE0=^CASH(15050.11,FILE,2,MTHD,0) "RTN","CASHV4C2",17,0) .S MTHNM=$P(MNODE0,"^",1) "RTN","CASHV4C2",18,0) .S MODE=$P(MNODE0,"^",3) I MODE'="" S MODE=$$SOCOUT^CASHR0(15050.112,.03,MODE) "RTN","CASHV4C2",19,0) .; Create new Method "RTN","CASHV4C2",20,0) .S ^oddDEF(CLNAME,"method",MTHNM)="" "RTN","CASHV4C2",21,0) .S ^oddDEF(CLNAME,"method",MTHNM,"classmethod")=$P(MNODE0,"^",2) "RTN","CASHV4C2",22,0) .S ^oddDEF(CLNAME,"method",MTHNM,"codemode")=MODE "RTN","CASHV4C2",23,0) .S ^oddDEF(CLNAME,"method",MTHNM,"description")=$P($G(^CASH(15050.11,FILE,2,MTHD,1)),"^",1) "RTN","CASHV4C2",24,0) .S ^oddDEF(CLNAME,"method",MTHNM,"final")=0 "RTN","CASHV4C2",25,0) .S ^oddDEF(CLNAME,"method",MTHNM,"formalspec")=$P($G(^CASH(15050.11,FILE,2,MTHD,2)),"^",1) "RTN","CASHV4C2",26,0) .S ^oddDEF(CLNAME,"method",MTHNM,"name")=MTHNM "RTN","CASHV4C2",27,0) .S ^oddDEF(CLNAME,"method",MTHNM,"private")=$P(MNODE0,"^",4) "RTN","CASHV4C2",28,0) .;Public List not implemented - $P($G(^CASH(15050.11,FILE,2,MTHD,1)),"^",1) "RTN","CASHV4C2",29,0) .S ^oddDEF(CLNAME,"method",MTHNM,"returntype")=$P(MNODE0,"^",5) "RTN","CASHV4C2",30,0) .S ^oddDEF(CLNAME,"method",MTHNM,"sqlproc")=0 "RTN","CASHV4C2",31,0) .; Loop through and add Code Lines (Implementation) "RTN","CASHV4C2",32,0) .S CODE=$G(^CASH(15050.11,FILE,2,MTHD,"CODE",1,0)) "RTN","CASHV4C2",33,0) .I MODE'="expression" D "RTN","CASHV4C2",34,0) ..I $E(CODE)'=" " S CODE=" "_CODE "RTN","CASHV4C2",35,0) ..F J=1:1 Q:'$D(^CASH(15050.11,FILE,2,MTHD,"CODE",J)) D "RTN","CASHV4C2",36,0) ...N LINE "RTN","CASHV4C2",37,0) ...S LINE=$G(^CASH(15050.11,FILE,2,MTHD,"CODE",J,0)) "RTN","CASHV4C2",38,0) ...I $E(LINE)'=" " S LINE=" "_LINE "RTN","CASHV4C2",39,0) ...S CODE=CODE_$C(13,10)_LINE "RTN","CASHV4C2",40,0) ..Q "RTN","CASHV4C2",41,0) .S ^oddDEF(CLNAME,"method",MTHNM,MODE)=CODE "RTN","CASHV4C2",42,0) .Q "RTN","CASHV4C2",43,0) ; "RTN","CASHV4C2",44,0) TRIGERR ; Add the TriggerErrorMsg private classmethod "RTN","CASHV4C2",45,0) ; Create New Method "RTN","CASHV4C2",46,0) S ^oddDEF(CLNAME,"method","TriggerErrorMsg")="" "RTN","CASHV4C2",47,0) S ^oddDEF(CLNAME,"method","TriggerErrorMsg","classmethod")=1 "RTN","CASHV4C2",48,0) S ^oddDEF(CLNAME,"method","TriggerErrorMsg","codemode")="code" "RTN","CASHV4C2",49,0) S ^oddDEF(CLNAME,"method","TriggerErrorMsg","description")="Private Internal Method to interpret Trigger Error Message" "RTN","CASHV4C2",50,0) S ^oddDEF(CLNAME,"method","TriggerErrorMsg","final")=0 "RTN","CASHV4C2",51,0) S ^oddDEF(CLNAME,"method","TriggerErrorMsg","formalspec")="&CASHERR:%Library.String" "RTN","CASHV4C2",52,0) S ^oddDEF(CLNAME,"method","TriggerErrorMsg","name")="TriggerErrorMsg" "RTN","CASHV4C2",53,0) S ^oddDEF(CLNAME,"method","TriggerErrorMsg","private")=1 "RTN","CASHV4C2",54,0) ;Public List not implemented - "" "RTN","CASHV4C2",55,0) S ^oddDEF(CLNAME,"method","TriggerErrorMsg","returntype")="%Library.String" "RTN","CASHV4C2",56,0) S ^oddDEF(CLNAME,"method","TriggerErrorMsg","sqlproc")=0 "RTN","CASHV4C2",57,0) ; Add Code Lines (Implementation) "RTN","CASHV4C2",58,0) S CODE=" D MSG^DIALOG(""ABET"",.ERR,"""","""",""CASHERR"")" "RTN","CASHV4C2",59,0) S CODE=CODE_$C(13,10)_" S %msg=ERR(1)" "RTN","CASHV4C2",60,0) S CODE=CODE_$C(13,10)_" I ERR>1 F I=2:1:ERR S %msg=%msg_$C(13,10)_ERR(I)" "RTN","CASHV4C2",61,0) S CODE=CODE_$C(13,10)_" Q %msg" "RTN","CASHV4C2",62,0) ; Insert Method definition into CLASS "RTN","CASHV4C2",63,0) S ^oddDEF(CLNAME,"method","TriggerErrorMsg","code")=CODE "RTN","CASHV4C2",64,0) Q "RTN","CASHV4C3") 0^34^B9394300 "RTN","CASHV4C3",1,0) CASHV4C3 ;ALB/MGC - Compiler for Cache version 4.1.x - Continued (Triggers); 10/20/04@3:00:00 "RTN","CASHV4C3",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHV4C3",3,0) ; "RTN","CASHV4C3",4,0) ; IMPORTANT: These calls are for INTERNAL use only "RTN","CASHV4C3",5,0) ; "RTN","CASHV4C3",6,0) TRIGGERS(FILE,FLAGS,CLNAME,UIDNM,LIST,TMPLIST) ; Add Delete/Insert/Update Triggers "RTN","CASHV4C3",7,0) N CLASS,CODE,CRLF,INSCODE,OK,TRIG,UPDCODE "RTN","CASHV4C3",8,0) S CRLF=$C(13,10) "RTN","CASHV4C3",9,0) ; "RTN","CASHV4C3",10,0) DELETE ; Create new Before Delete Trigger "RTN","CASHV4C3",11,0) ; Create CODE string "RTN","CASHV4C3",12,0) S CODE=" N %,%H,DA,DIC,DIK,DIQUIET,DISYS,DT,DTIME,DUZ,IO,U,X,Y" "RTN","CASHV4C3",13,0) S CODE=CODE_CRLF_" S %SkipFiling=1" "RTN","CASHV4C3",14,0) S CODE=CODE_CRLF_" S DIQUIET=1 D DT^DICRW" "RTN","CASHV4C3",15,0) S CODE=CODE_CRLF_" S IENS={IENS}" "RTN","CASHV4C3",16,0) S CODE=CODE_CRLF_" D DA^DILF(IENS,.DA)" "RTN","CASHV4C3",17,0) S CODE=CODE_CRLF_" S DIK=$$ROOT^DILFD("_FILE_",IENS)" "RTN","CASHV4C3",18,0) S CODE=CODE_CRLF_" D ^DIK" "RTN","CASHV4C3",19,0) ; Add Trigger "RTN","CASHV4C3",20,0) S ^oddDEF(CLNAME,"trigger","BeforeDelete")="" "RTN","CASHV4C3",21,0) S ^oddDEF(CLNAME,"trigger","BeforeDelete","code")=CODE "RTN","CASHV4C3",22,0) S ^oddDEF(CLNAME,"trigger","BeforeDelete","description")="Before Delete Trigger - Calls Classic FileMan API: ^DIK" "RTN","CASHV4C3",23,0) S ^oddDEF(CLNAME,"trigger","BeforeDelete","event")="delete" "RTN","CASHV4C3",24,0) S ^oddDEF(CLNAME,"trigger","BeforeDelete","name")="BeforeDelete" "RTN","CASHV4C3",25,0) S ^oddDEF(CLNAME,"trigger","BeforeDelete","order")=1 "RTN","CASHV4C3",26,0) S ^oddDEF(CLNAME,"trigger","BeforeDelete","time")="before" "RTN","CASHV4C3",27,0) ; "RTN","CASHV4C3",28,0) ; Generate Insert and Update Code "RTN","CASHV4C3",29,0) D CODE^CASHC3(FILE,FLAGS,UIDNM,.LIST,.TMPLIST,.INSCODE,.UPDCODE) "RTN","CASHV4C3",30,0) ; "RTN","CASHV4C3",31,0) INSERT ; Create new Before Insert Trigger "RTN","CASHV4C3",32,0) ; Add Trigger "RTN","CASHV4C3",33,0) S ^oddDEF(CLNAME,"trigger","BeforeInsert")="" "RTN","CASHV4C3",34,0) S ^oddDEF(CLNAME,"trigger","BeforeInsert","code")=INSCODE "RTN","CASHV4C3",35,0) S ^oddDEF(CLNAME,"trigger","BeforeInsert","description")="Before Insert Trigger - Calls Database Server API: UPDATE^DIE" "RTN","CASHV4C3",36,0) S ^oddDEF(CLNAME,"trigger","BeforeInsert","event")="insert" "RTN","CASHV4C3",37,0) S ^oddDEF(CLNAME,"trigger","BeforeInsert","name")="BeforeInsert" "RTN","CASHV4C3",38,0) S ^oddDEF(CLNAME,"trigger","BeforeInsert","order")=2 "RTN","CASHV4C3",39,0) S ^oddDEF(CLNAME,"trigger","BeforeInsert","time")="before" "RTN","CASHV4C3",40,0) ; "RTN","CASHV4C3",41,0) UPDATE ; Create new Before Update Trigger "RTN","CASHV4C3",42,0) ; Add Trigger "RTN","CASHV4C3",43,0) S ^oddDEF(CLNAME,"trigger","BeforeUpdate")="" "RTN","CASHV4C3",44,0) S ^oddDEF(CLNAME,"trigger","BeforeUpdate","code")=UPDCODE "RTN","CASHV4C3",45,0) S ^oddDEF(CLNAME,"trigger","BeforeUpdate","description")="Before Update Trigger - Calls Database Server API: FILE^DIE" "RTN","CASHV4C3",46,0) S ^oddDEF(CLNAME,"trigger","BeforeUpdate","event")="update" "RTN","CASHV4C3",47,0) S ^oddDEF(CLNAME,"trigger","BeforeUpdate","name")="BeforeUpdate" "RTN","CASHV4C3",48,0) S ^oddDEF(CLNAME,"trigger","BeforeUpdate","order")=3 "RTN","CASHV4C3",49,0) S ^oddDEF(CLNAME,"trigger","BeforeUpdate","time")="before" "RTN","CASHV4C3",50,0) ; "RTN","CASHV4C3",51,0) Q 1 "RTN","CASHV4C4") 0^35^B50425881 "RTN","CASHV4C4",1,0) CASHV4C4 ;ALB/MGC - Compiler for Cache version 4.1.x - Continued (Storage Maps); 10/20/04@3:00:00 "RTN","CASHV4C4",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHV4C4",3,0) ; "RTN","CASHV4C4",4,0) ; IMPORTANT: These calls are for INTERNAL use only "RTN","CASHV4C4",5,0) ; "RTN","CASHV4C4",6,0) STORAGE(FILE,FLAGS,PACKAGE,ID,CLNAME,UIDNM,LIST,TMPLIST) ; Create the Storage "RTN","CASHV4C4",7,0) S ^oddDEF(CLNAME,"storage","FileMan")="" "RTN","CASHV4C4",8,0) S ^oddDEF(CLNAME,"storage","FileMan","name")="FileMan" "RTN","CASHV4C4",9,0) S ^oddDEF(CLNAME,"storage","FileMan","sql")="" "RTN","CASHV4C4",10,0) S ^oddDEF(CLNAME,"storage","FileMan","sql","global")="" "RTN","CASHV4C4",11,0) S ^oddDEF(CLNAME,"storage","FileMan","sql","idexpression")="" "RTN","CASHV4C4",12,0) S ^oddDEF(CLNAME,"storage","FileMan","sql","nodestructure")="" "RTN","CASHV4C4",13,0) S ^oddDEF(CLNAME,"storage","FileMan","sql","rowidname")="" "RTN","CASHV4C4",14,0) S ^oddDEF(CLNAME,"storage","FileMan","sql","storagetype")="" "RTN","CASHV4C4",15,0) S ^oddDEF(CLNAME,"storage","FileMan","sql","tablenumber")="" "RTN","CASHV4C4",16,0) S ^oddDEF(CLNAME,"storage","FileMan","type")="%CacheSQLStorage" "RTN","CASHV4C4",17,0) ; "RTN","CASHV4C4",18,0) MAPS ; Loop through and add the Maps "RTN","CASHV4C4",19,0) N DATA,I,J,MAP,PNTR,PNTRMAP,RCIENS,RCODE,SKIPMAP,SUB "RTN","CASHV4C4",20,0) S PNTR=0,RCIENS="" "RTN","CASHV4C4",21,0) F I=1:1 Q:'$D(^CASH(15050.11,FILE,3,I)) D I $D(PNTRMAP(I)),'PNTR S PNTR=1 D "RTN","CASHV4C4",22,0) .N MAPNODE0,NAME,TYPE "RTN","CASHV4C4",23,0) .S MAPNODE0=$G(^CASH(15050.11,FILE,3,I,0)) "RTN","CASHV4C4",24,0) .S NAME=$P(MAPNODE0,"^",1) "RTN","CASHV4C4",25,0) .S TYPE=$P(MAPNODE0,"^",2) "RTN","CASHV4C4",26,0) .; Index Map override - if FLAGS["x" skip all Index maps, as HDR threaded queries can misuse them "RTN","CASHV4C4",27,0) .I FLAGS["x",TYPE="I" Q "RTN","CASHV4C4",28,0) .; Check if index MAP should be included (i.e. required fields mapped?) "RTN","CASHV4C4",29,0) .I 'PNTR,TYPE="I" D Q:$D(SKIPMAP(I)) "RTN","CASHV4C4",30,0) ..S J="" "RTN","CASHV4C4",31,0) ..F S J=$O(^CASH(15050.11,FILE,3,I,1,"C",J)) Q:J="" D Q:$D(SKIPMAP(I)) "RTN","CASHV4C4",32,0) ...; If LIST array passed, check required fields for index passed "RTN","CASHV4C4",33,0) ...I $D(LIST),'$D(LIST(FILE,J)) S SKIPMAP(I)="" Q "RTN","CASHV4C4",34,0) ...; If TMPLIST array created check if Field should be mapped "RTN","CASHV4C4",35,0) ...I $D(TMPLIST),'$D(TMPLIST(J)) S SKIPMAP(I)="" Q "RTN","CASHV4C4",36,0) ...; Perform extra checks for Pointers only "RTN","CASHV4C4",37,0) ...Q:$P($G(^CASH(15050.11,FILE,1,J,3)),"^",1)'="P" "RTN","CASHV4C4",38,0) ...; If FLAGS contains P set PNTRMAP node "RTN","CASHV4C4",39,0) ...I FLAGS["P" S PNTRMAP(I)="" Q "RTN","CASHV4C4",40,0) ...; If FLAGS contains neither P nor E set SKIPMAP node "RTN","CASHV4C4",41,0) ...I FLAGS'["E" S SKIPMAP(I)="" "RTN","CASHV4C4",42,0) ...Q "RTN","CASHV4C4",43,0) ..Q "RTN","CASHV4C4",44,0) .; Quit if Pointer Map, but this is the first pass and FLAGS doesn't contain E "RTN","CASHV4C4",45,0) .I $D(PNTRMAP(I)),'PNTR,FLAGS'["E" Q "RTN","CASHV4C4",46,0) .I TYPE'="" S TYPE=$$SOCOUT^CASHR0(15050.113,.02,TYPE) "RTN","CASHV4C4",47,0) .; If Pointer Map and second pass change Name "RTN","CASHV4C4",48,0) .I PNTR S NAME=NAME_"P" "RTN","CASHV4C4",49,0) .; Create new Map "RTN","CASHV4C4",50,0) .S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME)="" "RTN","CASHV4C4",51,0) .S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"global")="^"_$P(MAPNODE0,"^",3) "RTN","CASHV4C4",52,0) .S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"name")=NAME "RTN","CASHV4C4",53,0) .S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"populationpct")="" "RTN","CASHV4C4",54,0) .S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"populationtype")=$S(TYPE="index":"nonnull",1:"") "RTN","CASHV4C4",55,0) .S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"structure")="delimited" "RTN","CASHV4C4",56,0) .S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"type")=TYPE "RTN","CASHV4C4",57,0) .; "RTN","CASHV4C4",58,0) SUBS .; Loop through and add Subscripts "RTN","CASHV4C4",59,0) .F J=1:1 Q:'$D(^CASH(15050.11,FILE,3,I,1,J)) D "RTN","CASHV4C4",60,0) ..N EXP,FLD,SUBNODE0 "RTN","CASHV4C4",61,0) ..S SUBNODE0=$G(^CASH(15050.11,FILE,3,I,1,J,0)) "RTN","CASHV4C4",62,0) ..S EXP=$P(SUBNODE0,"^",1) "RTN","CASHV4C4",63,0) ..S FLD=$P(SUBNODE0,"^",4) "RTN","CASHV4C4",64,0) ..; If Pointer Map and second pass use Alternate Expression if it exists "RTN","CASHV4C4",65,0) ..I PNTR,$P(SUBNODE0,"^",5)'="" S EXP=$P(SUBNODE0,"^",5) "RTN","CASHV4C4",66,0) ..; Check if Expression points to a File # "RTN","CASHV4C4",67,0) ..I EXP?1"#".N.(1"."1.N) D "RTN","CASHV4C4",68,0) ...; If Master Map, update RCIENS (IENS Retrieval Code) "RTN","CASHV4C4",69,0) ...I I=1 S RCIENS="{L"_J_"}_"","""_$S(RCIENS="":"",1:"_"_RCIENS) "RTN","CASHV4C4",70,0) ...;If pointing to this FILE use UIDNM "RTN","CASHV4C4",71,0) ...I $E(EXP,2,255)=FILE S EXP="{"_UIDNM_"}" Q "RTN","CASHV4C4",72,0) ...;If pointing to a different file generate full reference "RTN","CASHV4C4",73,0) ...S EXP="{"_$$GETIDNM^CASHCN(EXP,FLAGS,PACKAGE,ID)_"}" "RTN","CASHV4C4",74,0) ...Q "RTN","CASHV4C4",75,0) ..;Add quotes for string subscripts "RTN","CASHV4C4",76,0) ..I EXP'["{",EXP'["""",+EXP'=EXP S EXP=""""_EXP_"""" "RTN","CASHV4C4",77,0) ..; Create new Subscript Definition "RTN","CASHV4C4",78,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"subscript",J)="" "RTN","CASHV4C4",79,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"subscript",J,"accesstype")="" "RTN","CASHV4C4",80,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"subscript",J,"delimiter")="" "RTN","CASHV4C4",81,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"subscript",J,"expression")=EXP "RTN","CASHV4C4",82,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"subscript",J,"name")=J "RTN","CASHV4C4",83,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"subscript",J,"nextcode")=$C(13,10) "RTN","CASHV4C4",84,0) ..; LoopInitValue=0 not available in 4.1.x, use StartValue=0.0000001 instead "RTN","CASHV4C4",85,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"subscript",J,"startvalue")=$S($P(SUBNODE0,"^",2)'="":"0.0000001",1:"") "RTN","CASHV4C4",86,0) ..; StopExpression='+{Lx} doesn't work well with StartValue in 4.1, use StopValue="""!""" instead "RTN","CASHV4C4",87,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"subscript",J,"stopvalue")=$S($P(SUBNODE0,"^",3)'="":"""!""",1:"") "RTN","CASHV4C4",88,0) ..Q "RTN","CASHV4C4",89,0) IENS .; Add IENS to Master Map "RTN","CASHV4C4",90,0) .I I=1 D "RTN","CASHV4C4",91,0) ..N IENS "RTN","CASHV4C4",92,0) ..S IENS="IENS" "RTN","CASHV4C4",93,0) ..; Create IEN Data Definition "RTN","CASHV4C4",94,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",IENS)="" "RTN","CASHV4C4",95,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",IENS,"name")=IENS "RTN","CASHV4C4",96,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",IENS,"retrievalcode")=" S {*}="_RCIENS "RTN","CASHV4C4",97,0) ..Q "RTN","CASHV4C4",98,0) DATA .; Loop through and add Data "RTN","CASHV4C4",99,0) .S J=0 "RTN","CASHV4C4",100,0) .F S J=$O(^CASH(15050.11,FILE,3,I,2,J)) Q:'+J D "RTN","CASHV4C4",101,0) ..; If LIST array passed in check Data Field is in LIST "RTN","CASHV4C4",102,0) ..I $D(LIST),'$D(LIST(FILE,J)) Q "RTN","CASHV4C4",103,0) ..; If TMPLIST array created check data Field is in TMPLIST "RTN","CASHV4C4",104,0) ..I $D(TMPLIST),'$D(TMPLIST(J)) Q "RTN","CASHV4C4",105,0) ..N ALTLBL,DATNODE0,LABEL,PFLAG "RTN","CASHV4C4",106,0) ..S DATNODE0=$G(^CASH(15050.11,FILE,3,I,2,J,0)) "RTN","CASHV4C4",107,0) ..S LABEL=$P(DATNODE0,"^",1) "RTN","CASHV4C4",108,0) ..S PFLAG=$P(DATNODE0,"^",4) "RTN","CASHV4C4",109,0) ..S RCODE=$G(^CASH(15050.11,FILE,3,I,2,J,1)) "RTN","CASHV4C4",110,0) ..S ALTLBL=$TR(LABEL,"_","")_"ID" "RTN","CASHV4C4",111,0) ..; Check if Data node is a Pointer, if so check FLAGS "RTN","CASHV4C4",112,0) ..I PFLAG D:FLAGS["P" Q:FLAGS'["E" "RTN","CASHV4C4",113,0) ...; Create new Data Definition for Pointer "RTN","CASHV4C4",114,0) ...S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",ALTLBL)="" "RTN","CASHV4C4",115,0) ...S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",ALTLBL,"name")=ALTLBL "RTN","CASHV4C4",116,0) ...I RCODE'="" S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",ALTLBL,"retrievalcode")=RCODE Q "RTN","CASHV4C4",117,0) ...S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",ALTLBL,"delimiter")="""^""" "RTN","CASHV4C4",118,0) ...S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",ALTLBL,"node")=$P(DATNODE0,"^",2) "RTN","CASHV4C4",119,0) ...S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",ALTLBL,"piece")=$P(DATNODE0,"^",3) "RTN","CASHV4C4",120,0) ...Q "RTN","CASHV4C4",121,0) ..; Create new Data Definition "RTN","CASHV4C4",122,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",LABEL)="" "RTN","CASHV4C4",123,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",LABEL,"name")=LABEL "RTN","CASHV4C4",124,0) ..I RCODE'="" S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",LABEL,"retrievalcode")=RCODE Q "RTN","CASHV4C4",125,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",LABEL,"delimiter")="""^""" "RTN","CASHV4C4",126,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",LABEL,"node")=$P(DATNODE0,"^",2) "RTN","CASHV4C4",127,0) ..S ^oddDEF(CLNAME,"storage","FileMan","sql","map",NAME,"data",LABEL,"piece")=$P(DATNODE0,"^",3) "RTN","CASHV4C4",128,0) ..Q "RTN","CASHV4C4",129,0) .S PNTR=0 "RTN","CASHV4C4",130,0) .Q "RTN","CASHV4C4",131,0) ; "RTN","CASHV4C4",132,0) ; Set the Storage Strategy "RTN","CASHV4C4",133,0) S ^oddDEF(CLNAME,"spec","storagestrategy")="FileMan" "RTN","CASHV4C4",134,0) Q "RTN","CASHV4D") 0^36^B75367826 "RTN","CASHV4D",1,0) CASHV4D ;ALB/MGC - Datatype Compiler for Cache version 4.1.x ; 01/27/05@3:00:00 "RTN","CASHV4D",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHV4D",3,0) ; "RTN","CASHV4D",4,0) Q ; Specific Entry Point must be used "RTN","CASHV4D",5,0) ; "RTN","CASHV4D",6,0) ALL() ; Create and Compile all Custom Datatypes (Cache 4.1) "RTN","CASHV4D",7,0) ; "RTN","CASHV4D",8,0) ; IMPORTANT: Do Not call directly! "RTN","CASHV4D",9,0) ; This entry point should only be accessed by POST^CASHI "RTN","CASHV4D",10,0) ; "RTN","CASHV4D",11,0) ; See POST^CASHI for documentation. "RTN","CASHV4D",12,0) ; "RTN","CASHV4D",13,0) N DTYPE "RTN","CASHV4D",14,0) ; "RTN","CASHV4D",15,0) ; Loop through Custom Datatypes "RTN","CASHV4D",16,0) S DTYPE=0 "RTN","CASHV4D",17,0) F S DTYPE=$O(^CASH(15050.12,DTYPE)) Q:'+DTYPE D CREATE(DTYPE,"CASH.FileMan") "RTN","CASHV4D",18,0) Q 1 "RTN","CASHV4D",19,0) ; "RTN","CASHV4D",20,0) CREATE(DTYPE,PACKAGE) ; Create and Compile Custom Datatype (Cache 4.1) "RTN","CASHV4D",21,0) ; "RTN","CASHV4D",22,0) ; IMPORTANT: Do Not call directly! "RTN","CASHV4D",23,0) ; This entry point should only be accessed by ALL^CASHD "RTN","CASHV4D",24,0) ; "RTN","CASHV4D",25,0) ; Only for Version 4.1 "RTN","CASHV4D",26,0) I $$OBJVER^CASHU()'=4.1 Q "RTN","CASHV4D",27,0) ; "RTN","CASHV4D",28,0) N ARRAY,CDT,DESC,DTNAME,I,IENS,INC,J,ODBC,SQL,SUPER "RTN","CASHV4D",29,0) ; "RTN","CASHV4D",30,0) S IENS=DTYPE_"," "RTN","CASHV4D",31,0) D UNPACK^CASHFN12(IENS,.ARRAY) "RTN","CASHV4D",32,0) ; "RTN","CASHV4D",33,0) ; Get Name "RTN","CASHV4D",34,0) S DTNAME=PACKAGE_"."_ARRAY(15050.12,IENS,.01) "RTN","CASHV4D",35,0) ; "RTN","CASHV4D",36,0) ; Check if Datatype exists and Delete if so "RTN","CASHV4D",37,0) I $D(^oddDEF(DTNAME)) D CLDEL^CASHCU(DTNAME) "RTN","CASHV4D",38,0) ; "RTN","CASHV4D",39,0) S CDT=ARRAY(15050.12,IENS,.02) "RTN","CASHV4D",40,0) S ODBC=ARRAY(15050.12,IENS,.03) "RTN","CASHV4D",41,0) S SQL=ARRAY(15050.12,IENS,.04) "RTN","CASHV4D",42,0) S INC=ARRAY(15050.12,IENS,.05) "RTN","CASHV4D",43,0) S SUPER=ARRAY(15050.12,IENS,.06) "RTN","CASHV4D",44,0) ; "RTN","CASHV4D",45,0) DTYPE ; Create the new Class "RTN","CASHV4D",46,0) S ^oddDEF(DTNAME)="" "RTN","CASHV4D",47,0) S ^oddDEF(DTNAME,"spec","name")=DTNAME "RTN","CASHV4D",48,0) S ^oddDEF(DTNAME,"spec","datatype")=1 "RTN","CASHV4D",49,0) I CDT'="" S ^oddDEF(DTNAME,"spec","clientdatatype")=CDT "RTN","CASHV4D",50,0) I ODBC'="" S ^oddDEF(DTNAME,"spec","odbctype")=ODBC "RTN","CASHV4D",51,0) I SQL'="" S ^oddDEF(DTNAME,"spec","sqlcategory")=SQL "RTN","CASHV4D",52,0) I INC'="" S ^oddDEF(DTNAME,"spec","includegenerator")=INC "RTN","CASHV4D",53,0) I SUPER'="" S ^oddDEF(DTNAME,"spec","super")=SUPER "RTN","CASHV4D",54,0) ; "RTN","CASHV4D",55,0) DESC ; Add the Description "RTN","CASHV4D",56,0) S DESC=$G(ARRAY(15050.12,IENS,1,1)) "RTN","CASHV4D",57,0) F J=2:1 Q:'$D(ARRAY(15050.12,IENS,1,J)) S DESC=DESC_$C(13,10)_ARRAY(15050.12,IENS,1,J) "RTN","CASHV4D",58,0) S ^oddDEF(DTNAME,"spec","description")=DESC "RTN","CASHV4D",59,0) ; "RTN","CASHV4D",60,0) PARAM ; Loop through and add any Parameters "RTN","CASHV4D",61,0) S IENS="" "RTN","CASHV4D",62,0) F I=1:1 S IENS=$O(ARRAY(15050.123,IENS)) Q:IENS="" D "RTN","CASHV4D",63,0) .N DEFAULT,DESC,PARNM,TYPE "RTN","CASHV4D",64,0) .S PARNM=ARRAY(15050.123,IENS,.01) "RTN","CASHV4D",65,0) .S DEFAULT=ARRAY(15050.123,IENS,.02) "RTN","CASHV4D",66,0) .S TYPE=ARRAY(15050.123,IENS,.03) "RTN","CASHV4D",67,0) .; Create new Parameter "RTN","CASHV4D",68,0) .S ^oddDEF(DTNAME,"parameter",PARNM)="" "RTN","CASHV4D",69,0) .S ^oddDEF(DTNAME,"parameter",PARNM,"name")=PARNM "RTN","CASHV4D",70,0) .I DEFAULT'="" S ^oddDEF(DTNAME,"parameter",PARNM,"default")=DEFAULT "RTN","CASHV4D",71,0) .I TYPE'="" S ^oddDEF(DTNAME,"parameter",PARNM,"type")=TYPE "RTN","CASHV4D",72,0) .; Get Description "RTN","CASHV4D",73,0) .S DESC=$G(ARRAY(15050.123,IENS,1,1)) "RTN","CASHV4D",74,0) .F J=2:1 Q:'$D(ARRAY(15050.123,IENS,1,J)) S DESC=DESC_$C(13,10)_ARRAY(15050.123,IENS,1,J) "RTN","CASHV4D",75,0) .S ^oddDEF(DTNAME,"parameter",PARNM,"description")=DESC "RTN","CASHV4D",76,0) .Q "RTN","CASHV4D",77,0) ; "RTN","CASHV4D",78,0) METHODS ; Loop through and add any Methods "RTN","CASHV4D",79,0) S IENS="" "RTN","CASHV4D",80,0) F I=1:1 S IENS=$O(ARRAY(15050.122,IENS)) Q:IENS="" D "RTN","CASHV4D",81,0) .N CODE,DESC,MTHNM,MODE "RTN","CASHV4D",82,0) .S MTHNM=ARRAY(15050.122,IENS,.01) "RTN","CASHV4D",83,0) .S MODE=ARRAY(15050.122,IENS,.03) "RTN","CASHV4D",84,0) .; Create new Method "RTN","CASHV4D",85,0) .S ^oddDEF(DTNAME,"method",MTHNM)="" "RTN","CASHV4D",86,0) .S ^oddDEF(DTNAME,"method",MTHNM,"name")=MTHNM "RTN","CASHV4D",87,0) .S ^oddDEF(DTNAME,"method",MTHNM,"classmethod")=ARRAY(15050.122,IENS,.02) "RTN","CASHV4D",88,0) .S ^oddDEF(DTNAME,"method",MTHNM,"codemode")=MODE "RTN","CASHV4D",89,0) .S ^oddDEF(DTNAME,"method",MTHNM,"final")=0 "RTN","CASHV4D",90,0) .S ^oddDEF(DTNAME,"method",MTHNM,"formalspec")=ARRAY(15050.122,IENS,.04) "RTN","CASHV4D",91,0) .S ^oddDEF(DTNAME,"method",MTHNM,"private")=ARRAY(15050.122,IENS,.05) "RTN","CASHV4D",92,0) .;Public List not implemented - ARRAY(15050.122,IENS,.06) "RTN","CASHV4D",93,0) .S ^oddDEF(DTNAME,"method",MTHNM,"returntype")=ARRAY(15050.122,IENS,.07) "RTN","CASHV4D",94,0) .S ^oddDEF(DTNAME,"method",MTHNM,"sqlproc")=0 "RTN","CASHV4D",95,0) .; Get Description "RTN","CASHV4D",96,0) .S DESC=$G(ARRAY(15050.122,IENS,1,1)) "RTN","CASHV4D",97,0) .F J=2:1 Q:'$D(ARRAY(15050.122,IENS,1,J)) S DESC=DESC_$C(13,10)_ARRAY(15050.122,IENS,1,J) "RTN","CASHV4D",98,0) .S ^oddDEF(DTNAME,"method",MTHNM,"description")=DESC "RTN","CASHV4D",99,0) .; Loop through and add Code Lines (Implementation) "RTN","CASHV4D",100,0) .S CODE=$G(ARRAY(15050.122,IENS,2,1)) "RTN","CASHV4D",101,0) .; If CodeMode is not "expression", make sure lines have leading spaces "RTN","CASHV4D",102,0) .I MODE'="expression" D "RTN","CASHV4D",103,0) ..I $E(CODE)'=" " S CODE=" "_CODE "RTN","CASHV4D",104,0) ..F J=2:1 Q:'$D(ARRAY(15050.122,IENS,2,J)) D "RTN","CASHV4D",105,0) ...N LINE "RTN","CASHV4D",106,0) ...S LINE=$G(ARRAY(15050.122,IENS,2,J)) "RTN","CASHV4D",107,0) ...I $E(LINE)'=" " S LINE=" "_LINE "RTN","CASHV4D",108,0) ...S CODE=CODE_$C(13,10)_LINE "RTN","CASHV4D",109,0) ...Q "RTN","CASHV4D",110,0) ..Q "RTN","CASHV4D",111,0) .S ^oddDEF(DTNAME,"method",MTHNM,MODE)=CODE "RTN","CASHV4D",112,0) .Q "RTN","CASHV4D",113,0) ; "RTN","CASHV4D",114,0) ; Set the Time Changed (required for Compile) "RTN","CASHV4D",115,0) S ^oddDEF(DTNAME,"spec","timechanged")=$H "RTN","CASHV4D",116,0) ; "RTN","CASHV4D",117,0) D CLCOMP^CASHCU(DTNAME) "RTN","CASHV4D",118,0) Q "RTN","CASHV4D",119,0) ; "RTN","CASHV4D",120,0) PREPARE ; Generate the Custom Datatype Initialisation Routine (CASHI) from the current FileMan Datatypes "RTN","CASHV4D",121,0) ; "RTN","CASHV4D",122,0) ; IMPORTANT: This Utility should only be used if updates to the FileMan Datatypes need to be released "RTN","CASHV4D",123,0) ; "RTN","CASHV4D",124,0) ; Only for Version 4.1 "RTN","CASHV4D",125,0) I $$OBJVER^CASHU()'=4.1 Q "RTN","CASHV4D",126,0) ; "RTN","CASHV4D",127,0) N I,DTNAME "RTN","CASHV4D",128,0) S DTNAME="CASH.FileMan" "RTN","CASHV4D",129,0) F I=1:1 S DTNAME=$O(^oddDEF(DTNAME)) Q:$E(DTNAME,1,12)'="CASH.FileMan" D "RTN","CASHV4D",130,0) .N BIT,CDT,DESC,DTYPE,INC,J,K,LINE,METH,NM,ODBC,PARAM,RTNM,SQL,SUPER "RTN","CASHV4D",131,0) .S RTNM="CASHDT0"_I "RTN","CASHV4D",132,0) .S CDT=$G(^oddDEF(DTNAME,"spec","clientdatatype")) "RTN","CASHV4D",133,0) .S ODBC=$G(^oddDEF(DTNAME,"spec","odbctype")) "RTN","CASHV4D",134,0) .S SQL=$G(^oddDEF(DTNAME,"spec","sqlcategory")) "RTN","CASHV4D",135,0) .S INC=$G(^oddDEF(DTNAME,"spec","includegenerator")) "RTN","CASHV4D",136,0) .S SUPER=$G(^oddDEF(DTNAME,"spec","super")) "RTN","CASHV4D",137,0) .S NM=$P(DTNAME,".",2) "RTN","CASHV4D",138,0) .K ^TMP("CASHD",$J) "RTN","CASHV4D",139,0) .; Routine header "RTN","CASHV4D",140,0) .S LINE=0 "RTN","CASHV4D",141,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=RTNM_" ;ALB/MGC - Initialisation for Custom Datatype "_I_" ; 01/27/05@3:00:00" "RTN","CASHV4D",142,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;;1.0;FM TO CACHE SQL;;Jul 08, 2005" "RTN","CASHV4D",143,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;" "RTN","CASHV4D",144,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; "_DTNAME "RTN","CASHV4D",145,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" N CODE,DESC" "RTN","CASHV4D",146,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;" "RTN","CASHV4D",147,0) .; Top level "RTN","CASHV4D",148,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; Add top level" "RTN","CASHV4D",149,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDDT^CASHFN12("_I_","""_NM_""","""_CDT_""","""_ODBC_""","""_SQL_""","""_INC_""","""_SUPER_""")" "RTN","CASHV4D",150,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;" "RTN","CASHV4D",151,0) .; Description "RTN","CASHV4D",152,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; Add Description" "RTN","CASHV4D",153,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" K DESC" "RTN","CASHV4D",154,0) .S DESC=$G(^oddDEF(DTNAME,"spec","description")) "RTN","CASHV4D",155,0) .F J=1:1:$L(DESC,$C(13,10)) S BIT=$P(DESC,$C(13,10),J) S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" S DESC("_J_")="""_BIT_"""" "RTN","CASHV4D",156,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDDESC^CASHFN12("_I_",.DESC)" "RTN","CASHV4D",157,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;" "RTN","CASHV4D",158,0) .; Parameters "RTN","CASHV4D",159,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; Add Parameters" "RTN","CASHV4D",160,0) .S PARAM="" "RTN","CASHV4D",161,0) .F K=1:1 S PARAM=$O(^oddDEF(DTNAME,"parameter",PARAM)) Q:PARAM="" D "RTN","CASHV4D",162,0) ..N DEFAULT,TYPE "RTN","CASHV4D",163,0) ..S DEFAULT=$G(^oddDEF(DTNAME,"parameter",PARAM,"default")) "RTN","CASHV4D",164,0) ..S TYPE=$G(^oddDEF(DTNAME,"parameter",PARAM,"type")) "RTN","CASHV4D",165,0) ..S DESC=$G(^oddDEF(DTNAME,"parameter",PARAM,"description")) "RTN","CASHV4D",166,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" K DESC" "RTN","CASHV4D",167,0) ..F J=1:1:$L(DESC,$C(13,10)) S BIT=$P(DESC,$C(13,10),J) S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" S DESC("_J_")="""_BIT_"""" "RTN","CASHV4D",168,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDPARAM^CASHFN12("_I_","_K_","""_PARAM_""","""_DEFAULT_""","""_TYPE_""")" "RTN","CASHV4D",169,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDPDESC^CASHFN12("_I_","_K_",.DESC)" "RTN","CASHV4D",170,0) ..Q "RTN","CASHV4D",171,0) .; Methods "RTN","CASHV4D",172,0) .S METH="" "RTN","CASHV4D",173,0) .F K=1:1 S METH=$O(^oddDEF(DTNAME,"method",METH)) Q:METH="" D "RTN","CASHV4D",174,0) ..N CMODE,CMTHD,CODE,DESC,PRIV,RTYPE,SPEC "RTN","CASHV4D",175,0) ..S CMTHD=$G(^oddDEF(DTNAME,"method",METH,"classmethod")) "RTN","CASHV4D",176,0) ..S CMODE=$G(^oddDEF(DTNAME,"method",METH,"codemode")) "RTN","CASHV4D",177,0) ..S SPEC=$G(^oddDEF(DTNAME,"method",METH,"formalspec")) "RTN","CASHV4D",178,0) ..S PRIV=$G(^oddDEF(DTNAME,"method",METH,"private")) "RTN","CASHV4D",179,0) ..S RTYPE=$G(^oddDEF(DTNAME,"method",METH,"returntype")) "RTN","CASHV4D",180,0) ..I CMODE'="" S CMODE=$$UP^XLFSTR($E(CMODE)) "RTN","CASHV4D",181,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;" "RTN","CASHV4D",182,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; Add "_METH_" Method" "RTN","CASHV4D",183,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDMTD^CASHFN12("_I_","_K_","""_METH_""","_+CMTHD_","""_CMODE_""","""_SPEC_""","_+PRIV_","""","""_RTYPE_""")" "RTN","CASHV4D",184,0) ..S DESC=$G(^oddDEF(DTNAME,"method",METH,"description")) "RTN","CASHV4D",185,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; Add "_METH_" Description" "RTN","CASHV4D",186,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" K DESC" "RTN","CASHV4D",187,0) ..F J=1:1 S BIT=$P(DESC,$C(13,10),J) Q:BIT="" S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" S DESC("_J_")="""_BIT_"""" "RTN","CASHV4D",188,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDMDESC^CASHFN12("_I_","_K_",.DESC)" "RTN","CASHV4D",189,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ; Add "_METH_" Code" "RTN","CASHV4D",190,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" K CODE" "RTN","CASHV4D",191,0) ..I CMODE="C" S CODE=$G(^oddDEF(DTNAME,"method",METH,"code")) "RTN","CASHV4D",192,0) ..I CMODE="E" S CODE=$G(^oddDEF(DTNAME,"method",METH,"expression")) "RTN","CASHV4D",193,0) ..I CMODE="G" S CODE=$G(^oddDEF(DTNAME,"method",METH,"generator")) "RTN","CASHV4D",194,0) ..F J=1:1 S BIT=$P(CODE,$C(13,10),J) Q:BIT="" S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" S CODE("_J_")="_$$QUOTE^XLFSTR(BIT) "RTN","CASHV4D",195,0) ..S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" D ADDCODE^CASHFN12("_I_","_K_",.CODE)" "RTN","CASHV4D",196,0) ..Q "RTN","CASHV4D",197,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" ;" "RTN","CASHV4D",198,0) .S LINE=LINE+1,^TMP("CASHD",$J,LINE,0)=" Q" "RTN","CASHV4D",199,0) .D SAVE^CASHD(RTNM,"^TMP(""CASHD"","_$J_",") "RTN","CASHV4D",200,0) .K ^TMP("CASHD",$J) "RTN","CASHV4D",201,0) .Q "RTN","CASHV4D",202,0) Q "RTN","CASHV4UT") 0^43^B18435414 "RTN","CASHV4UT",1,0) CASHV4UT ;ALB/MGC - Utility Class Compiler for Cache version 4.1.x ; 11/30/2005@3:00:00 "RTN","CASHV4UT",2,0) ;;1.0;FM TO CACHE SQL;;Jul 08, 2005 "RTN","CASHV4UT",3,0) ; "RTN","CASHV4UT",4,0) Q ; Specific Entry Point must be used "RTN","CASHV4UT",5,0) ; "RTN","CASHV4UT",6,0) ALL() ; Create and Compile all Custom Datatypes (Cache 5+) "RTN","CASHV4UT",7,0) ; "RTN","CASHV4UT",8,0) ; IMPORTANT: Do Not call directly! "RTN","CASHV4UT",9,0) ; This entry point should only be accessed by POST^CASHI "RTN","CASHV4UT",10,0) ; "RTN","CASHV4UT",11,0) ; See POST^CASHI for documentation. "RTN","CASHV4UT",12,0) ; "RTN","CASHV4UT",13,0) ; Create the child class (CASH.FMField) first (pseudo file #15050.1502) "RTN","CASHV4UT",14,0) D CREATEP(15050.1502,"","CASH") "RTN","CASHV4UT",15,0) ; Create the parent class (CASH.FMFile) and compile (pseudo file #15050.1501) "RTN","CASHV4UT",16,0) D CREATEP(15050.1501,"CM","CASH") "RTN","CASHV4UT",17,0) ; Create the registered class (CASH.Utility) and compile (pseudo file #15050.1503) "RTN","CASHV4UT",18,0) D CREATER(15050.1503,"CASH") "RTN","CASHV4UT",19,0) ; "RTN","CASHV4UT",20,0) ; Delete the File #15050.11 and #15050.12 pseudo-records "RTN","CASHV4UT",21,0) D DELFILE^CASHFN11(15050.1501) "RTN","CASHV4UT",22,0) D DELFILE^CASHFN11(15050.1502) "RTN","CASHV4UT",23,0) D DELDTYPE^CASHFN12(15050.1503) "RTN","CASHV4UT",24,0) ; "RTN","CASHV4UT",25,0) Q 1 "RTN","CASHV4UT",26,0) ; "RTN","CASHV4UT",27,0) CREATEP(FILE,FLAGS,PACKAGE) ; Create a Persistent Utility Class "RTN","CASHV4UT",28,0) ; "RTN","CASHV4UT",29,0) ; IMPORTANT: Do Not call directly! "RTN","CASHV4UT",30,0) ; This entry point should only be accessed by CASHUT* routines "RTN","CASHV4UT",31,0) ; "RTN","CASHV4UT",32,0) I '$D(^CASH(15050.11,FILE)) Q "RTN","CASHV4UT",33,0) ; "RTN","CASHV4UT",34,0) N CLASS,CLNAME,EXISTS,NAME,SQLNM,UIDNM "RTN","CASHV4UT",35,0) ; "RTN","CASHV4UT",36,0) S NAME=$P($G(^CASH(15050.11,FILE,0)),"^",1) "RTN","CASHV4UT",37,0) S UIDNM=NAME_"ID" "RTN","CASHV4UT",38,0) S CLNAME=PACKAGE_"."_NAME "RTN","CASHV4UT",39,0) I $$SQLRW^CASHU(NAME) S SQLNM="_"_NAME "RTN","CASHV4UT",40,0) E S SQLNM="" "RTN","CASHV4UT",41,0) ; "RTN","CASHV4UT",42,0) ; Delete the class if it already exists "RTN","CASHV4UT",43,0) S EXISTS=$D(^oddDEF(CLNAME)) "RTN","CASHV4UT",44,0) I EXISTS D CLDEL^CASHCU(CLNAME) "RTN","CASHV4UT",45,0) ; "RTN","CASHV4UT",46,0) ; Create the class "RTN","CASHV4UT",47,0) D CLASS^CASHV4C0(FILE,FLAGS,"",CLNAME,SQLNM,UIDNM,"") "RTN","CASHV4UT",48,0) ; "RTN","CASHV4UT",49,0) ; Add the Properties "RTN","CASHV4UT",50,0) D PROPS^CASHV4C1(FILE,FLAGS,PACKAGE,CLNAME,UIDNM,"") "RTN","CASHV4UT",51,0) ; "RTN","CASHV4UT",52,0) ; Add the Storage "RTN","CASHV4UT",53,0) D STORAGE^CASHV4C4(FILE,FLAGS,PACKAGE,"",CLNAME,UIDNM) "RTN","CASHV4UT",54,0) ; "RTN","CASHV4UT",55,0) ; Set the Time Changed (required for Compile) "RTN","CASHV4UT",56,0) S ^oddDEF(CLNAME,"spec","timechanged")=$H "RTN","CASHV4UT",57,0) ; "RTN","CASHV4UT",58,0) ; Compile the Class "RTN","CASHV4UT",59,0) I FLAGS["C" D CLCOMP^CASHCU(CLNAME) "RTN","CASHV4UT",60,0) ; "RTN","CASHV4UT",61,0) Q "RTN","CASHV4UT",62,0) ; "RTN","CASHV4UT",63,0) CREATER(FILE,PACKAGE,OWNER) ; Create a Registered Utility Class "RTN","CASHV4UT",64,0) ; "RTN","CASHV4UT",65,0) ; IMPORTANT: Do Not call directly! "RTN","CASHV4UT",66,0) ; This entry point should only be accessed by CASHUT* routines "RTN","CASHV4UT",67,0) ; "RTN","CASHV4UT",68,0) N CLASS,CLNAME,DESC,EXISTS,I,J,METH,MTHD,NAME,SQLNM "RTN","CASHV4UT",69,0) ; "RTN","CASHV4UT",70,0) S NAME=$P($G(^CASH(15050.12,FILE,0)),"^",1) "RTN","CASHV4UT",71,0) S CLNAME=PACKAGE_"."_NAME "RTN","CASHV4UT",72,0) I $$SQLRW^CASHU(NAME) S SQLNM="_"_NAME "RTN","CASHV4UT",73,0) E S SQLNM="" "RTN","CASHV4UT",74,0) ; "RTN","CASHV4UT",75,0) ; Delete the class if it already exists "RTN","CASHV4UT",76,0) S EXISTS=$D(^oddDEF(CLNAME)) "RTN","CASHV4UT",77,0) I EXISTS D CLDEL^CASHCU(CLNAME) "RTN","CASHV4UT",78,0) ; "RTN","CASHV4UT",79,0) ; Create the class "RTN","CASHV4UT",80,0) S ^oddDEF(CLNAME)="" "RTN","CASHV4UT",81,0) S ^oddDEF(CLNAME,"spec","description")=$$GETWP^CASHR(15050.12,1,FILE) "RTN","CASHV4UT",82,0) S ^oddDEF(CLNAME,"spec","name")=CLNAME "RTN","CASHV4UT",83,0) I SQLNM'="" S ^oddDEF(CLNAME,"spec","sqltablename")=SQLNM "RTN","CASHV4UT",84,0) S ^oddDEF(CLNAME,"spec","super")="%RegisteredObject" "RTN","CASHV4UT",85,0) I $G(OWNER)'="" S ^oddDEF(CLNAME,"spec","owner")=OWNER "RTN","CASHV4UT",86,0) ; "RTN","CASHV4UT",87,0) ; Add Methods "RTN","CASHV4UT",88,0) S MTHD=0 "RTN","CASHV4UT",89,0) F I=1:1 S MTHD=$O(^CASH(15050.12,FILE,2,MTHD)) Q:'+MTHD D "RTN","CASHV4UT",90,0) .N CODE,MNODE0,MODE,MTHNM,PRIVATE "RTN","CASHV4UT",91,0) .S MNODE0=^CASH(15050.12,FILE,2,MTHD,0) "RTN","CASHV4UT",92,0) .S MTHNM=$P(MNODE0,"^",1) "RTN","CASHV4UT",93,0) .S MODE=$P(MNODE0,"^",3) I MODE'="" S MODE=$$SOCOUT^CASHR0(15050.122,.03,MODE) "RTN","CASHV4UT",94,0) .S PRIVATE=$P(MNODE0,"^",5) "RTN","CASHV4UT",95,0) .; Create new Method "RTN","CASHV4UT",96,0) .S ^oddDEF(CLNAME,"method",MTHNM)="" "RTN","CASHV4UT",97,0) .S ^oddDEF(CLNAME,"method",MTHNM,"classmethod")=$P(MNODE0,"^",2) "RTN","CASHV4UT",98,0) .S ^oddDEF(CLNAME,"method",MTHNM,"codemode")=MODE "RTN","CASHV4UT",99,0) .S ^oddDEF(CLNAME,"method",MTHNM,"description")=$$GETWP^CASHR(15050.122,1,FILE_"||"_I) "RTN","CASHV4UT",100,0) .S ^oddDEF(CLNAME,"method",MTHNM,"final")=0 "RTN","CASHV4UT",101,0) .S ^oddDEF(CLNAME,"method",MTHNM,"formalspec")=$P(MNODE0,"^",4) "RTN","CASHV4UT",102,0) .S ^oddDEF(CLNAME,"method",MTHNM,"name")=MTHNM "RTN","CASHV4UT",103,0) .S ^oddDEF(CLNAME,"method",MTHNM,"private")=PRIVATE "RTN","CASHV4UT",104,0) .;Public List not implemented - $P(MNODE0,"^",6) "RTN","CASHV4UT",105,0) .S ^oddDEF(CLNAME,"method",MTHNM,"returntype")=$P(MNODE0,"^",7) "RTN","CASHV4UT",106,0) .S ^oddDEF(CLNAME,"method",MTHNM,"sqlproc")=$S(PRIVATE:0,1:1) "RTN","CASHV4UT",107,0) .; Loop through and add Code Lines (Implementation) "RTN","CASHV4UT",108,0) .S CODE=$G(^CASH(15050.12,FILE,2,MTHD,2,1,0)) "RTN","CASHV4UT",109,0) .I MODE'="expression" D "RTN","CASHV4UT",110,0) ..I $E(CODE)'=" " S CODE=" "_CODE "RTN","CASHV4UT",111,0) ..F J=2:1 Q:'$D(^CASH(15050.12,FILE,2,MTHD,2,J)) D "RTN","CASHV4UT",112,0) ...N LINE "RTN","CASHV4UT",113,0) ...S LINE=$G(^CASH(15050.12,FILE,2,MTHD,2,J,0)) "RTN","CASHV4UT",114,0) ...I $E(LINE)'=" " S LINE=" "_LINE "RTN","CASHV4UT",115,0) ...S CODE=CODE_$C(13,10)_LINE "RTN","CASHV4UT",116,0) ..Q "RTN","CASHV4UT",117,0) .S ^oddDEF(CLNAME,"method",MTHNM,MODE)=CODE "RTN","CASHV4UT",118,0) .Q "RTN","CASHV4UT",119,0) ; "RTN","CASHV4UT",120,0) ; Compile the Class "RTN","CASHV4UT",121,0) D CLCOMP^CASHCU(CLNAME,$G(OWNER)) "RTN","CASHV4UT",122,0) ; "RTN","CASHV4UT",123,0) Q "SEC","^DIC",15050.11,15050.11,0,"AUDIT") @ "SEC","^DIC",15050.11,15050.11,0,"DD") @ "SEC","^DIC",15050.11,15050.11,0,"DEL") @ "SEC","^DIC",15050.11,15050.11,0,"LAYGO") @ "SEC","^DIC",15050.11,15050.11,0,"RD") @ "SEC","^DIC",15050.11,15050.11,0,"WR") @ "SEC","^DIC",15050.12,15050.12,0,"AUDIT") @ "SEC","^DIC",15050.12,15050.12,0,"DD") @ "SEC","^DIC",15050.12,15050.12,0,"DEL") @ "SEC","^DIC",15050.12,15050.12,0,"LAYGO") @ "SEC","^DIC",15050.12,15050.12,0,"RD") @ "SEC","^DIC",15050.12,15050.12,0,"WR") @ "SEC","^DIC",15050.13,15050.13,0,"AUDIT") @ "SEC","^DIC",15050.13,15050.13,0,"DD") @ "SEC","^DIC",15050.13,15050.13,0,"DEL") @ "SEC","^DIC",15050.13,15050.13,0,"LAYGO") @ "SEC","^DIC",15050.13,15050.13,0,"RD") @ "SEC","^DIC",15050.13,15050.13,0,"WR") @ "SEC","^DIC",15050.14,15050.14,0,"AUDIT") @ "SEC","^DIC",15050.14,15050.14,0,"DD") @ "SEC","^DIC",15050.14,15050.14,0,"DEL") @ "SEC","^DIC",15050.14,15050.14,0,"LAYGO") @ "SEC","^DIC",15050.14,15050.14,0,"RD") @ "SEC","^DIC",15050.14,15050.14,0,"WR") @ "SEC","^DIC",15050.19,15050.19,0,"AUDIT") @ "SEC","^DIC",15050.19,15050.19,0,"DD") @ "SEC","^DIC",15050.19,15050.19,0,"DEL") @ "SEC","^DIC",15050.19,15050.19,0,"LAYGO") @ "SEC","^DIC",15050.19,15050.19,0,"RD") @ "SEC","^DIC",15050.19,15050.19,0,"WR") @ "VER") 8.0^22.0 "^DD",15050.11,15050.11,0) FIELD^^4^9 "^DD",15050.11,15050.11,0,"DDA") N "^DD",15050.11,15050.11,0,"DT") 3051203 "^DD",15050.11,15050.11,0,"IX","B",15050.11,.01) "^DD",15050.11,15050.11,0,"IX","N",15050.11,.01) "^DD",15050.11,15050.11,0,"IX","N",15050.11,.02) "^DD",15050.11,15050.11,0,"IX","S",15050.114,.01) "^DD",15050.11,15050.11,0,"IX","U",15050.11,.01) "^DD",15050.11,15050.11,0,"NM","CASH FM CLASS MAP") "^DD",15050.11,15050.11,0,"PT",15050.114,.01) "^DD",15050.11,15050.11,0,"VRPK") FM TO CACHE SQL "^DD",15050.11,15050.11,.01,0) NAME^RF^^0;1^K:$L(X)>30!($L(X)<3)!'(X'?1P.E) X "^DD",15050.11,15050.11,.01,1,0) ^.1 "^DD",15050.11,15050.11,.01,1,1,0) 15050.11^B "^DD",15050.11,15050.11,.01,1,1,1) S ^CASH(15050.11,"B",$E(X,1,30),DA)="" "^DD",15050.11,15050.11,.01,1,1,2) K ^CASH(15050.11,"B",$E(X,1,30),DA) "^DD",15050.11,15050.11,.01,1,2,0) 15050.11^U^MUMPS "^DD",15050.11,15050.11,.01,1,2,1) S ^CASH(15050.11,"U",$E($$UP^XLFSTR(X),1,30),DA)="" "^DD",15050.11,15050.11,.01,1,2,2) K ^CASH(15050.11,"U",$E($$UP^XLFSTR(X),1,30),DA) "^DD",15050.11,15050.11,.01,1,2,"DT") 3050204 "^DD",15050.11,15050.11,.01,1,3,0) 15050.11^N^MUMPS "^DD",15050.11,15050.11,.01,1,3,1) D NINDEXS^CASHFN11(DA,X,"") "^DD",15050.11,15050.11,.01,1,3,2) D NINDEXK^CASHFN11(DA,X,"") "^DD",15050.11,15050.11,.01,1,3,"%D",0) ^.101^1^1^3060207^^ "^DD",15050.11,15050.11,.01,1,3,"%D",1,0) Index for Class names created with the "N" Flag "^DD",15050.11,15050.11,.01,1,3,"DT") 3060207 "^DD",15050.11,15050.11,.01,3) Answer must be 3-30 characters in length. "^DD",15050.11,15050.11,.01,21,0) ^.001^7^7^3060523^^^^ "^DD",15050.11,15050.11,.01,21,1,0) Standardized Name for the Class to be created. "^DD",15050.11,15050.11,.01,21,2,0) If this Class is based on a Top-level file the name is taken from ^DIC. "^DD",15050.11,15050.11,.01,21,3,0) For Sub-files or WP Fields the name is a Standardized compound of this "^DD",15050.11,15050.11,.01,21,4,0) file's ^DD name, prefixed by the Parent file names. "^DD",15050.11,15050.11,.01,21,5,0) Note: The Standardizing process makes all words title case, then removes "^DD",15050.11,15050.11,.01,21,6,0) all spaces and other punctuation. The names are then shortened to 25 "^DD",15050.11,15050.11,.01,21,7,0) characters or less (required for uniqueness). "^DD",15050.11,15050.11,.01,"DT") 3060207 "^DD",15050.11,15050.11,.02,0) SUB NAME^F^^0;2^K:$L(X)>30!($L(X)<3) X "^DD",15050.11,15050.11,.02,1,0) ^.1 "^DD",15050.11,15050.11,.02,1,1,0) 15050.11^N^MUMPS "^DD",15050.11,15050.11,.02,1,1,1) D NINDEXS^CASHFN11(DA,"",X) "^DD",15050.11,15050.11,.02,1,1,2) D NINDEXK^CASHFN11(DA,"",X) "^DD",15050.11,15050.11,.02,1,1,"%D",0) ^^1^1^3060207^ "^DD",15050.11,15050.11,.02,1,1,"%D",1,0) Index for Class names created with the "N" Flag "^DD",15050.11,15050.11,.02,1,1,"DT") 3060207 "^DD",15050.11,15050.11,.02,3) Answer must be 3-30 characters in length. "^DD",15050.11,15050.11,.02,21,0) ^.001^4^4^3051210^^^^ "^DD",15050.11,15050.11,.02,21,1,0) Standardized Name of this element only (not prefixed by Parent file "^DD",15050.11,15050.11,.02,21,2,0) names), if this Class is based on a Sub-file or WP Field. "^DD",15050.11,15050.11,.02,21,3,0) This field is left blank for Top-level files! "^DD",15050.11,15050.11,.02,21,4,0) SUB NAME is used to name the Class if the "N" Flag is used. "^DD",15050.11,15050.11,.02,"DT") 3060207 "^DD",15050.11,15050.11,.03,0) SQL NAME^F^^0;3^K:$L(X)>30!($L(X)<3) X "^DD",15050.11,15050.11,.03,3) Answer must be 3-30 characters in length. "^DD",15050.11,15050.11,.03,21,0) ^.001^2^2^3051210^^^^ "^DD",15050.11,15050.11,.03,21,1,0) The name to be used for the SQL Table (if different from NAME). "^DD",15050.11,15050.11,.03,21,2,0) SQL NAME must be specified if NAME is a SQL Reserved Word. "^DD",15050.11,15050.11,.03,"DT") 3050119 "^DD",15050.11,15050.11,.04,0) FILE TYPE^RS^F:File (Top Level);S:Sub-File (Multiple);W:WP Sub-File;^0;4^Q "^DD",15050.11,15050.11,.04,21,0) ^.001^2^2^3051210^^^^ "^DD",15050.11,15050.11,.04,21,1,0) File Type of the file this Class is based on (Top-level, Sub-File or "^DD",15050.11,15050.11,.04,21,2,0) WP Field). Used by the compiler to generate appropriate update code. "^DD",15050.11,15050.11,.04,"DT") 3051019 "^DD",15050.11,15050.11,.05,0) PARENT FIELD^NJ16,7^^0;5^K:+X'=X!(X>99999999)!(X<.0000001)!(X?.E1"."8N.N) X "^DD",15050.11,15050.11,.05,3) Type a Number between .0000001 and 99999999, 7 Decimal Digits "^DD",15050.11,15050.11,.05,21,0) ^.001^2^2^3060207^^^^ "^DD",15050.11,15050.11,.05,21,1,0) If this Class is based on a Sub-file or WP Field, this field points to "^DD",15050.11,15050.11,.05,21,2,0) the related Field in the Parent File. "^DD",15050.11,15050.11,.05,21,3,0) E.g. for #5.01, PARENT FIELD = 3 (Field #3 in File #5 refers to #5.01). "^DD",15050.11,15050.11,.05,"DT") 3051203 "^DD",15050.11,15050.11,1,0) PROPERTIES^15050.111^^1;0 "^DD",15050.11,15050.11,1,21,0) ^.001^1^1^3051203^^^^ "^DD",15050.11,15050.11,1,21,1,0) Multiple containing Property details for the Class. "^DD",15050.11,15050.11,2,0) METHODS^15050.112^^2;0 "^DD",15050.11,15050.11,2,21,0) ^.001^1^1^3051129^^^^ "^DD",15050.11,15050.11,2,21,1,0) Multiple containing Method details for the Class. "^DD",15050.11,15050.11,3,0) MAPS^15050.113^^3;0 "^DD",15050.11,15050.11,3,21,0) ^.001^1^1^3051121^^^^ "^DD",15050.11,15050.11,3,21,1,0) Multiple containing Storage Map details for the Class. "^DD",15050.11,15050.11,4,0) SUB FILES^15050.114P^^4;0 "^DD",15050.11,15050.11,4,21,0) ^.001^1^1^3060514^^^ "^DD",15050.11,15050.11,4,21,1,0) Multiple containing Sub Files for this Class. "^DD",15050.11,15050.11,4,"DT") 3051011 "^DD",15050.11,15050.111,0) PROPERTIES SUB-FIELD^^1^14 "^DD",15050.11,15050.111,0,"DT") 3051203 "^DD",15050.11,15050.111,0,"IX","B",15050.111,.01) "^DD",15050.11,15050.111,0,"IX","C",15050.111,.31) "^DD",15050.11,15050.111,0,"IX","U",15050.111,.01) "^DD",15050.11,15050.111,0,"NM","PROPERTIES") "^DD",15050.11,15050.111,0,"UP") 15050.11 "^DD",15050.11,15050.111,.01,0) NAME^MRF^^0;1^K:$L(X)>30!($L(X)<1) X "^DD",15050.11,15050.111,.01,1,0) ^.1 "^DD",15050.11,15050.111,.01,1,1,0) 15050.111^B "^DD",15050.11,15050.111,.01,1,1,1) S ^CASH(15050.11,DA(1),1,"B",$E(X,1,30),DA)="" "^DD",15050.11,15050.111,.01,1,1,2) K ^CASH(15050.11,DA(1),1,"B",$E(X,1,30),DA) "^DD",15050.11,15050.111,.01,1,2,0) 15050.111^U^MUMPS "^DD",15050.11,15050.111,.01,1,2,1) S ^CASH(15050.11,DA(1),1,"U",$E($$UP^XLFSTR(X),1,30),DA)="" "^DD",15050.11,15050.111,.01,1,2,2) K ^CASH(15050.11,DA(1),1,"U",$E($$UP^XLFSTR(X),1,30),DA) "^DD",15050.11,15050.111,.01,1,2,"DT") 3050203 "^DD",15050.11,15050.111,.01,3) Answer must be 1-30 characters in length. "^DD",15050.11,15050.111,.01,21,0) ^^1^1^3051103^ "^DD",15050.11,15050.111,.01,21,1,0) Standardized Name for the Property to be created. "^DD",15050.11,15050.111,.01,"DT") 3050203 "^DD",15050.11,15050.111,.02,0) CALCULATED^RS^0:No;1:Yes;^0;2^Q "^DD",15050.11,15050.111,.02,3) "^DD",15050.11,15050.111,.02,21,0) ^.001^1^1^3051103^^^^ "^DD",15050.11,15050.111,.02,21,1,0) Is the Property Calculated (1 for Yes, 0 for No)? "^DD",15050.11,15050.111,.02,"DT") 3050719 "^DD",15050.11,15050.111,.03,0) CARDINALITY^S^O:one;M:many;P:parent;C:children;^0;3^Q "^DD",15050.11,15050.111,.03,21,0) ^.001^1^1^3051103^^^^ "^DD",15050.11,15050.111,.03,21,1,0) Cardinality of a Relationship type Property (One-Many or Parent-Child). "^DD",15050.11,15050.111,.03,"DT") 3041112 "^DD",15050.11,15050.111,.04,0) COLLECTION^S^A:array;L:list;B:binarystream;C:characterstream;^0;4^Q "^DD",15050.11,15050.111,.04,21,0) ^.001^1^1^3051103^^ "^DD",15050.11,15050.111,.04,21,1,0) Type of Collection Property (Array, List or Stream) "^DD",15050.11,15050.111,.04,"DT") 3041112 "^DD",15050.11,15050.111,.05,0) INVERSE^F^^0;5^K:$L(X)>30!($L(X)<1) X "^DD",15050.11,15050.111,.05,3) Answer must be 1-30 characters in length. "^DD",15050.11,15050.111,.05,21,0) ^.001^1^1^3051011^^^ "^DD",15050.11,15050.111,.05,21,1,0) Inverse Class Name for a Realtionship type Property. "^DD",15050.11,15050.111,.05,"DT") 3041112 "^DD",15050.11,15050.111,.06,0) RELATIONSHIP^S^0:No;1:Yes;^0;6^Q "^DD",15050.11,15050.111,.06,3) "^DD",15050.11,15050.111,.06,21,0) ^.001^1^1^3050719^^^ "^DD",15050.11,15050.111,.06,21,1,0) Is the Property a Relationship (1 for Yes, 0 for No)? "^DD",15050.11,15050.111,.06,"DT") 3050719 "^DD",15050.11,15050.111,.07,0) REQUIRED^RS^0:No;1:Yes;^0;7^Q "^DD",15050.11,15050.111,.07,3) "^DD",15050.11,15050.111,.07,9) @ "^DD",15050.11,15050.111,.07,21,0) ^.001^1^1^3050719^^^ "^DD",15050.11,15050.111,.07,21,1,0) Is the Property Required (1 for Yes, 0 for No)? "^DD",15050.11,15050.111,.07,"DT") 3050719 "^DD",15050.11,15050.111,.08,0) SQL COMPUTED^S^0:No;1:Yes;^0;8^Q "^DD",15050.11,15050.111,.08,3) "^DD",15050.11,15050.111,.08,9) @ "^DD",15050.11,15050.111,.08,21,0) ^.001^1^1^3050719^^ "^DD",15050.11,15050.111,.08,21,1,0) Is the Property a SQL Computed Field (1 for Yes, 0 for No)? "^DD",15050.11,15050.111,.08,"DT") 3050719 "^DD",15050.11,15050.111,.09,0) TYPE^RF^^0;9^K:$L(X)>30!($L(X)<1) X "^DD",15050.11,15050.111,.09,1,0) ^.1^^0 "^DD",15050.11,15050.111,.09,3) Answer must be 1-30 characters in length. "^DD",15050.11,15050.111,.09,9) @ "^DD",15050.11,15050.111,.09,21,0) ^^1^1^3050621^ "^DD",15050.11,15050.111,.09,21,1,0) The DataType of the Property. "^DD",15050.11,15050.111,.09,"DT") 3050118 "^DD",15050.11,15050.111,.11,0) DESCRIPTION^F^^1;1^K:$L(X)>80!($L(X)<1) X "^DD",15050.11,15050.111,.11,1,0) ^.1^^0 "^DD",15050.11,15050.111,.11,3) Answer must be 1-80 characters in length. "^DD",15050.11,15050.111,.11,21,0) ^^1^1^3050621^ "^DD",15050.11,15050.111,.11,21,1,0) The Description of the Property, used in the Class Definition. "^DD",15050.11,15050.111,.11,"DT") 3050117 "^DD",15050.11,15050.111,.21,0) SQL COMPUTE CODE^K^^2;E1,245^K:$L(X)>245 X D:$D(X) ^DIM "^DD",15050.11,15050.111,.21,3) This is Standard MUMPS code. "^DD",15050.11,15050.111,.21,9) @ "^DD",15050.11,15050.111,.21,21,0) ^^1^1^3050621^ "^DD",15050.11,15050.111,.21,21,1,0) SQL Compute Code for a SQL Computed Property. "^DD",15050.11,15050.111,.21,"DT") 3041112 "^DD",15050.11,15050.111,.31,0) FIELD CATEGORY^RS^C:child;D:data;M:multiple;P:pointer;T:transient;W:wp data;^3;1^Q "^DD",15050.11,15050.111,.31,1,0) ^.1 "^DD",15050.11,15050.111,.31,1,1,0) 15050.111^C "^DD",15050.11,15050.111,.31,1,1,1) S ^CASH(15050.11,DA(1),1,"C",$E(X,1,30),DA)="" "^DD",15050.11,15050.111,.31,1,1,2) K ^CASH(15050.11,DA(1),1,"C",$E(X,1,30),DA) "^DD",15050.11,15050.111,.31,1,1,"DT") 3050208 "^DD",15050.11,15050.111,.31,21,0) ^.001^1^1^3051203^^^^ "^DD",15050.11,15050.111,.31,21,1,0) Field category of the Property, used internally by the Compiler. "^DD",15050.11,15050.111,.31,"DT") 3051203 "^DD",15050.11,15050.111,.32,0) SQL FIELD NAME^F^^3;2^K:$L(X)>30!($L(X)<3) X "^DD",15050.11,15050.111,.32,3) Answer must be 3-30 characters in length. "^DD",15050.11,15050.111,.32,21,0) ^^1^1^3050621^ "^DD",15050.11,15050.111,.32,21,1,0) The SQL Field Name for the Property (if different from NAME). "^DD",15050.11,15050.111,.32,"DT") 3050119 "^DD",15050.11,15050.111,1,0) PARAMETERS^15050.1111^^1;0 "^DD",15050.11,15050.111,1,21,0) ^.001^1^1^3051104^^^^ "^DD",15050.11,15050.111,1,21,1,0) Multiple containing Property Parameters for the Class. "^DD",15050.11,15050.1111,0) PARAMETERS SUB-FIELD^^1^3 "^DD",15050.11,15050.1111,0,"DT") 3041116 "^DD",15050.11,15050.1111,0,"IX","B",15050.1111,.01) "^DD",15050.11,15050.1111,0,"NM","PARAMETERS") "^DD",15050.11,15050.1111,0,"UP") 15050.111 "^DD",15050.11,15050.1111,.01,0) PARAMETER NAME^MRF^^0;1^K:$L(X)>30!($L(X)<1) X "^DD",15050.11,15050.1111,.01,1,0) ^.1 "^DD",15050.11,15050.1111,.01,1,1,0) 15050.1111^B "^DD",15050.11,15050.1111,.01,1,1,1) S ^CASH(15050.11,DA(2),1,DA(1),1,"B",$E(X,1,30),DA)="" "^DD",15050.11,15050.1111,.01,1,1,2) K ^CASH(15050.11,DA(2),1,DA(1),1,"B",$E(X,1,30),DA) "^DD",15050.11,15050.1111,.01,3) Answer must be 1-30 characters in length. "^DD",15050.11,15050.1111,.01,21,0) ^^1^1^3050621^ "^DD",15050.11,15050.1111,.01,21,1,0) The Parameter Name. "^DD",15050.11,15050.1111,.01,"DT") 3041117 "^DD",15050.11,15050.1111,.02,0) PARAMETER VALUE^F^^0;2^K:$L(X)>30!($L(X)<1) X "^DD",15050.11,15050.1111,.02,3) Answer must be 1-30 characters in length. "^DD",15050.11,15050.1111,.02,21,0) ^^1^1^3050621^ "^DD",15050.11,15050.1111,.02,21,1,0) The Parameters default Value. "^DD",15050.11,15050.1111,.02,"DT") 3041117 "^DD",15050.11,15050.1111,1,0) STRING^CJ8^^ ; ^S Y(15050.1111,1,1)=$S($D(^CASH(15050.11,D0,1,D1,1,D2,0)):^(0),1:"") S X=$P(Y(15050.1111,1,1),U,1)_" = "_$P(Y(15050.1111,1,1),U,2) "^DD",15050.11,15050.1111,1,9) ^ "^DD",15050.11,15050.1111,1,9.01) 15050.1111^.02;15050.1111^.01 "^DD",15050.11,15050.1111,1,9.1) PARAMETER NAME_" = "_PARAMETER VALUE "^DD",15050.11,15050.1111,1,21,0) ^^1^1^3051104^ "^DD",15050.11,15050.1111,1,21,1,0) Calculated Field to display the Parameter details "^DD",15050.11,15050.112,0) METHODS SUB-FIELD^^1^10 "^DD",15050.11,15050.112,0,"DT") 3050719 "^DD",15050.11,15050.112,0,"IX","B",15050.112,.01) "^DD",15050.11,15050.112,0,"NM","METHODS") "^DD",15050.11,15050.112,0,"UP") 15050.11 "^DD",15050.11,15050.112,.01,0) NAME^MRF^^0;1^K:$L(X)>30!($L(X)<1) X "^DD",15050.11,15050.112,.01,1,0) ^.1 "^DD",15050.11,15050.112,.01,1,1,0) 15050.112^B "^DD",15050.11,15050.112,.01,1,1,1) S ^CASH(15050.11,DA(1),2,"B",$E(X,1,30),DA)="" "^DD",15050.11,15050.112,.01,1,1,2) K ^CASH(15050.11,DA(1),2,"B",$E(X,1,30),DA) "^DD",15050.11,15050.112,.01,3) Answer must be 1-30 characters in length. "^DD",15050.11,15050.112,.01,21,0) ^^1^1^3051104^ "^DD",15050.11,15050.112,.01,21,1,0) Standardized Name for the Method to be created. "^DD",15050.11,15050.112,.01,"DT") 3041112 "^DD",15050.11,15050.112,.02,0) CLASS METHOD^RS^0:No;1:Yes;^0;2^Q "^DD",15050.11,15050.112,.02,3) "^DD",15050.11,15050.112,.02,21,0) ^.001^3^3^3051118^^^^ "^DD",15050.11,15050.112,.02,21,1,0) Is the Method a Classmethod (1 for Yes, 0 for No)? "^DD",15050.11,15050.112,.02,21,2,0) Classmethods are static methods that can be called without instantiating "^DD",15050.11,15050.112,.02,21,3,0) the Class. Most methods created by this tool will be Classmethods. "^DD",15050.11,15050.112,.02,"DT") 3050719 "^DD",15050.11,15050.112,.03,0) CODE MODE^S^A:call;C:code;E:expression;G:generator;O:objectgenerator;^0;3^Q "^DD",15050.11,15050.112,.03,21,0) ^.001^5^5^3051104^^ "^DD",15050.11,15050.112,.03,21,1,0) How the Method Code is implemented (call, code, expression, generator, "^DD",15050.11,15050.112,.03,21,2,0) or object generator). "^DD",15050.11,15050.112,.03,21,3,0) Most Methods used by this tool will be a simple expression or a list of "^DD",15050.11,15050.112,.03,21,4,0) lines (code). The more complex datatype methods often use Method "^DD",15050.11,15050.112,.03,21,5,0) generators. "^DD",15050.11,15050.112,.03,"DT") 3041112 "^DD",15050.11,15050.112,.04,0) PRIVATE^S^0:No;1:Yes;^0;4^Q "^DD",15050.11,15050.112,.04,3) "^DD",15050.11,15050.112,.04,21,0) ^^1^1^3051104^ "^DD",15050.11,15050.112,.04,21,1,0) Is the Method Private (1 for Yes, 0 for No)? "^DD",15050.11,15050.112,.04,"DT") 3050719 "^DD",15050.11,15050.112,.05,0) RETURN TYPE^F^^0;5^K:$L(X)>30!($L(X)<1) X "^DD",15050.11,15050.112,.05,3) Answer must be 1-30 characters in length. "^DD",15050.11,15050.112,.05,21,0) ^^1^1^3051104^ "^DD",15050.11,15050.112,.05,21,1,0) The DataType of the Return Value (if applicable). "^DD",15050.11,15050.112,.05,"DT") 3041117 "^DD",15050.11,15050.112,.06,0) FIELD NUMBER^NJ16,7^^0;6^K:+X'=X!(X>99999999)!(X<.0000001)!(X?.E1"."8N.N) X "^DD",15050.11,15050.112,.06,3) Type a Number between .0000001 and 99999999, 7 Decimal Digits "^DD",15050.11,15050.112,.06,21,0) ^.001^2^2^3051104^^^^ "^DD",15050.11,15050.112,.06,21,1,0) The FileMan Field Number this Method is associated with (if applicable), "^DD",15050.11,15050.112,.06,21,2,0) e.g. a Property's Get() method. "^DD",15050.11,15050.112,.06,"DT") 3050127 "^DD",15050.11,15050.112,.11,0) DESCRIPTION^F^^1;1^K:$L(X)>80!($L(X)<1) X "^DD",15050.11,15050.112,.11,3) Answer must be 1-80 characters in length. "^DD",15050.11,15050.112,.11,21,0) ^.001^1^1^3051129^^ "^DD",15050.11,15050.112,.11,21,1,0) The Description of the Method, used in the Class Definition. "^DD",15050.11,15050.112,.11,"DT") 3041112 "^DD",15050.11,15050.112,.21,0) FORMAL SPEC^F^^2;1^K:$L(X)>80!($L(X)<1) X "^DD",15050.11,15050.112,.21,3) Answer must be 1-80 characters in length. "^DD",15050.11,15050.112,.21,21,0) ^^2^2^3051104^ "^DD",15050.11,15050.112,.21,21,1,0) The Formal Specification (list of Parameters and their DataTypes) for "^DD",15050.11,15050.112,.21,21,2,0) this Method. "^DD",15050.11,15050.112,.21,"DT") 3041112 "^DD",15050.11,15050.112,.31,0) PUBLIC LIST^F^^3;1^K:$L(X)>80!($L(X)<1) X "^DD",15050.11,15050.112,.31,3) Answer must be 1-80 characters in length. "^DD",15050.11,15050.112,.31,21,0) ^^3^3^3051104^ "^DD",15050.11,15050.112,.31,21,1,0) A list of Public Variables to be declared for this Method. "^DD",15050.11,15050.112,.31,21,2,0) This is only relevant for ProcedureBlock(=True) methods, where variables "^DD",15050.11,15050.112,.31,21,3,0) need to be passed to called non-ProcedureBlock code. "^DD",15050.11,15050.112,.31,"DT") 3041117 "^DD",15050.11,15050.112,1,0) CODE^15050.1121^^CODE;0 "^DD",15050.11,15050.112,1,21,0) ^.001^1^1^3051104^^ "^DD",15050.11,15050.112,1,21,1,0) Multiple containing Implementation Code for the Method. "^DD",15050.11,15050.112,1,"DT") 3041117 "^DD",15050.11,15050.1121,0) CODE SUB-FIELD^^.01^1 "^DD",15050.11,15050.1121,0,"DT") 3041117 "^DD",15050.11,15050.1121,0,"NM","CODE") "^DD",15050.11,15050.1121,0,"UP") 15050.112 "^DD",15050.11,15050.1121,.01,0) CODE^W^^0;1^Q "^DD",15050.11,15050.1121,.01,21,0) ^^1^1^3051104^ "^DD",15050.11,15050.1121,.01,21,1,0) Word Processing Field containing Implementation Code for the Method. "^DD",15050.11,15050.1121,.01,"DT") 3041117 "^DD",15050.11,15050.113,0) MAPS SUB-FIELD^^2^5 "^DD",15050.11,15050.113,0,"DT") 3050127 "^DD",15050.11,15050.113,0,"IX","B",15050.113,.01) "^DD",15050.11,15050.113,0,"IX","F",15050.1131,.04) "^DD",15050.11,15050.113,0,"NM","MAPS") "^DD",15050.11,15050.113,0,"UP") 15050.11 "^DD",15050.11,15050.113,.01,0) NAME^MF^^0;1^K:$L(X)>30!($L(X)<1) X "^DD",15050.11,15050.113,.01,1,0) ^.1 "^DD",15050.11,15050.113,.01,1,1,0) 15050.113^B "^DD",15050.11,15050.113,.01,1,1,1) S ^CASH(15050.11,DA(1),3,"B",$E(X,1,30),DA)="" "^DD",15050.11,15050.113,.01,1,1,2) K ^CASH(15050.11,DA(1),3,"B",$E(X,1,30),DA) "^DD",15050.11,15050.113,.01,3) Answer must be 1-30 characters in length. "^DD",15050.11,15050.113,.01,21,0) ^^1^1^3051104^ "^DD",15050.11,15050.113,.01,21,1,0) Standardized Name for the Storage Map to be created. "^DD",15050.11,15050.113,.01,"DT") 3041112 "^DD",15050.11,15050.113,.02,0) TYPE^RS^D:data;I:index;B:bitmap;E:bitmapextent;^0;2^Q "^DD",15050.11,15050.113,.02,21,0) ^.001^3^3^3051104^^ "^DD",15050.11,15050.113,.02,21,1,0) The Storage Map Type (data, index, bitmap, or bitmapextent). "^DD",15050.11,15050.113,.02,21,2,0) This tool will only generate one Data Map per Class, the other Maps "^DD",15050.11,15050.113,.02,21,3,0) will be Indexes. "^DD",15050.11,15050.113,.02,"DT") 3041112 "^DD",15050.11,15050.113,.03,0) GLOBAL NAME^RF^^0;3^K:$L(X)>8!($L(X)<1) X "^DD",15050.11,15050.113,.03,3) Answer must be 1-8 characters in length. "^DD",15050.11,15050.113,.03,21,0) ^^1^1^3051104^ "^DD",15050.11,15050.113,.03,21,1,0) The Global that will be referenced by this Storage Map. "^DD",15050.11,15050.113,.03,"DT") 3041112 "^DD",15050.11,15050.113,1,0) SUBSCRIPTS^15050.1131^^1;0 "^DD",15050.11,15050.113,1,21,0) ^.001^1^1^3051118^^^ "^DD",15050.11,15050.113,1,21,1,0) Multiple containing the Subscripts for this Storage Map "^DD",15050.11,15050.113,2,0) DATA^15050.1132^^2;0 "^DD",15050.11,15050.113,2,21,0) ^.001^2^2^3051121^^^^ "^DD",15050.11,15050.113,2,21,1,0) Multiple containing Data elements for this Storage Map, where applicable. "^DD",15050.11,15050.113,2,21,2,0) Index Maps will not usually contain any Data elements. "^DD",15050.11,15050.1131,0) SUBSCRIPTS SUB-FIELD^^.05^5 "^DD",15050.11,15050.1131,0,"DT") 3050127 "^DD",15050.11,15050.1131,0,"IX","B",15050.1131,.01) "^DD",15050.11,15050.1131,0,"IX","C",15050.1131,.04) "^DD",15050.11,15050.1131,0,"IX","D",15050.1131,.05) "^DD",15050.11,15050.1131,0,"NM","SUBSCRIPTS") "^DD",15050.11,15050.1131,0,"UP") 15050.113 "^DD",15050.11,15050.1131,.01,0) EXPRESSION^MRF^^0;1^K:$L(X)>30!($L(X)<1) X "^DD",15050.11,15050.1131,.01,1,0) ^.1 "^DD",15050.11,15050.1131,.01,1,1,0) 15050.1131^B "^DD",15050.11,15050.1131,.01,1,1,1) S ^CASH(15050.11,DA(2),3,DA(1),1,"B",$E(X,1,30),DA)="" "^DD",15050.11,15050.1131,.01,1,1,2) K ^CASH(15050.11,DA(2),3,DA(1),1,"B",$E(X,1,30),DA) "^DD",15050.11,15050.1131,.01,3) Answer must be 1-30 characters in length. "^DD",15050.11,15050.1131,.01,21,0) ^.001^6^6^3051104^^ "^DD",15050.11,15050.1131,.01,21,1,0) The Expression to be used for this Subscript in the Storage Map. "^DD",15050.11,15050.1131,.01,21,2,0) This Expression can be a String, e.g. "5" or "B", a reference to a "^DD",15050.11,15050.1131,.01,21,3,0) field with curly braces, e.g. "{Expression}", or a reference to a "^DD",15050.11,15050.1131,.01,21,4,0) FileMan File with a preceding "#", e.g. "#5" (this would be a "^DD",15050.11,15050.1131,.01,21,5,0) reference to the STATE file Class, whose full name would be resolved "^DD",15050.11,15050.1131,.01,21,6,0) at runtime, depending on the FLAGS and PACKAGE variables passed). "^DD",15050.11,15050.1131,.01,"DT") 3041112 "^DD",15050.11,15050.1131,.02,0) LOOP INIT VALUE^F^^0;2^K:$L(X)>10!($L(X)<1) X "^DD",15050.11,15050.1131,.02,3) Answer must be 1-10 characters in length. "^DD",15050.11,15050.1131,.02,21,0) ^.001^5^5^3051104^^^ "^DD",15050.11,15050.1131,.02,21,1,0) The Loop Initialization Value used by the Storage Map for this Subscript, "^DD",15050.11,15050.1131,.02,21,2,0) if applicable. "^DD",15050.11,15050.1131,.02,21,3,0) FileMan Data Maps include a '0' (zero) node that contains no relevant "^DD",15050.11,15050.1131,.02,21,4,0) data for an individual row. Setting the LoopInitValue=0 instead of the "^DD",15050.11,15050.1131,.02,21,5,0) default ("") means that this '0' node is skipped. "^DD",15050.11,15050.1131,.02,"DT") 3050119 "^DD",15050.11,15050.1131,.03,0) STOP EXPRESSION^F^^0;3^K:$L(X)>10!($L(X)<1) X "^DD",15050.11,15050.1131,.03,3) Answer must be 1-10 characters in length. "^DD",15050.11,15050.1131,.03,21,0) ^.001^7^7^3051104^^ "^DD",15050.11,15050.1131,.03,21,1,0) The Stop Expression used by the Storage map for this Subscript, if "^DD",15050.11,15050.1131,.03,21,2,0) applicable. "^DD",15050.11,15050.1131,.03,21,3,0) FileMan Data Maps often contain Index subscripts held at the same "^DD",15050.11,15050.1131,.03,21,4,0) logical level as data. The Index subscripts are non-numeric, e.g. "B", "^DD",15050.11,15050.1131,.03,21,5,0) whereas the Data level subscripts are always numeric. Using a Stop "^DD",15050.11,15050.1131,.03,21,6,0) Expression of "'+{Lx}" (where {Lx} is the appropriate subscript level "^DD",15050.11,15050.1131,.03,21,7,0) variable) ensures that the loop quits when there are no more data rows. "^DD",15050.11,15050.1131,.03,"DT") 3050119 "^DD",15050.11,15050.1131,.04,0) FIELD NUMBER^NJ16,7^^0;4^K:+X'=X!(X>99999999)!(X<.0000001)!(X?.E1"."8N.N) X "^DD",15050.11,15050.1131,.04,1,0) ^.1 "^DD",15050.11,15050.1131,.04,1,1,0) 15050.1131^C "^DD",15050.11,15050.1131,.04,1,1,1) S ^CASH(15050.11,DA(2),3,DA(1),1,"C",$E(X,1,30),DA)="" "^DD",15050.11,15050.1131,.04,1,1,2) K ^CASH(15050.11,DA(2),3,DA(1),1,"C",$E(X,1,30),DA) "^DD",15050.11,15050.1131,.04,1,1,"DT") 3050113 "^DD",15050.11,15050.1131,.04,1,2,0) 15050.113^F "^DD",15050.11,15050.1131,.04,1,2,1) S ^CASH(15050.11,DA(2),3,"F",$E(X,1,30),DA(1),DA)="" "^DD",15050.11,15050.1131,.04,1,2,2) K ^CASH(15050.11,DA(2),3,"F",$E(X,1,30),DA(1),DA) "^DD",15050.11,15050.1131,.04,1,2,"DT") 3050208 "^DD",15050.11,15050.1131,.04,3) Type a Number between .0000001 and 99999999, 7 Decimal Digits "^DD",15050.11,15050.1131,.04,21,0) ^.001^5^5^3051104^^^ "^DD",15050.11,15050.1131,.04,21,1,0) The Fileman Field Number that this Expression is associated with, "^DD",15050.11,15050.1131,.04,21,2,0) where applicable. "^DD",15050.11,15050.1131,.04,21,3,0) When a Class is being compiled using just a subset of the fields, "^DD",15050.11,15050.1131,.04,21,4,0) e.g. LIST array passed in, this Field is used to determine if this "^DD",15050.11,15050.1131,.04,21,5,0) Index Map should be included in the Class. "^DD",15050.11,15050.1131,.04,"DT") 3050208 "^DD",15050.11,15050.1131,.05,0) ALTERNATE EXPRESSION^F^^0;5^K:$L(X)>30!($L(X)<3) X "^DD",15050.11,15050.1131,.05,1,0) ^.1 "^DD",15050.11,15050.1131,.05,1,1,0) 15050.1131^D "^DD",15050.11,15050.1131,.05,1,1,1) S ^CASH(15050.11,DA(2),3,DA(1),1,"D",$E(X,1,30),DA)="" "^DD",15050.11,15050.1131,.05,1,1,2) K ^CASH(15050.11,DA(2),3,DA(1),1,"D",$E(X,1,30),DA) "^DD",15050.11,15050.1131,.05,1,1,"DT") 3050120 "^DD",15050.11,15050.1131,.05,3) Answer must be 3-30 characters in length. "^DD",15050.11,15050.1131,.05,21,0) ^^8^8^3051104^ "^DD",15050.11,15050.1131,.05,21,1,0) An Alternate Expression for this Expression, where applicable. "^DD",15050.11,15050.1131,.05,21,2,0) This Field is used for Indexed Pointer Fields. The Alternate Expression "^DD",15050.11,15050.1131,.05,21,3,0) will usually have "ID" appended, e.g. "{State}" and "{StateID}". "^DD",15050.11,15050.1131,.05,21,4,0) If FLAGS contains "E", then a Map will be created for this Class using the "^DD",15050.11,15050.1131,.05,21,5,0) default Expression. If FLAGS contains "P" a Map will be created using the "^DD",15050.11,15050.1131,.05,21,6,0) Alternate Expression. If FLAGS contains both "E" and "P", then both Maps "^DD",15050.11,15050.1131,.05,21,7,0) will be created, BUT if FLAGS contains neither "E" nor "P" this Storage Map "^DD",15050.11,15050.1131,.05,21,8,0) will NOT be created at all. "^DD",15050.11,15050.1131,.05,"DT") 3050120 "^DD",15050.11,15050.1132,0) DATA SUB-FIELD^^.11^5 "^DD",15050.11,15050.1132,0,"DT") 3050119 "^DD",15050.11,15050.1132,0,"IX","B",15050.1132,.01) "^DD",15050.11,15050.1132,0,"NM","DATA") "^DD",15050.11,15050.1132,0,"UP") 15050.113 "^DD",15050.11,15050.1132,.01,0) NAME^MRF^^0;1^K:$L(X)>30!($L(X)<1) X "^DD",15050.11,15050.1132,.01,1,0) ^.1 "^DD",15050.11,15050.1132,.01,1,1,0) 15050.1132^B "^DD",15050.11,15050.1132,.01,1,1,1) S ^CASH(15050.11,DA(2),3,DA(1),2,"B",$E(X,1,30),DA)="" "^DD",15050.11,15050.1132,.01,1,1,2) K ^CASH(15050.11,DA(2),3,DA(1),2,"B",$E(X,1,30),DA) "^DD",15050.11,15050.1132,.01,3) Answer must be 1-30 characters in length. "^DD",15050.11,15050.1132,.01,21,0) ^.001^2^2^3051104^^ "^DD",15050.11,15050.1132,.01,21,1,0) Standardized Name for the Data element. "^DD",15050.11,15050.1132,.01,21,2,0) This must match a Property Name defined in File #15050.111 "^DD",15050.11,15050.1132,.01,"DT") 3041112 "^DD",15050.11,15050.1132,.02,0) NODE^F^^0;2^K:$L(X)>30!($L(X)<1) X "^DD",15050.11,15050.1132,.02,3) Answer must be 1-30 characters in length. "^DD",15050.11,15050.1132,.02,21,0) ^.001^5^5^3051104^^ "^DD",15050.11,15050.1132,.02,21,1,0) The Global Node that contains this Data element. "^DD",15050.11,15050.1132,.02,21,2,0) A FileMan global reference is defined by the Global Name, the Subscripts "^DD",15050.11,15050.1132,.02,21,3,0) and this Node, e.g. the State File (#5) is stored in ^DIC (Global Name), "^DD",15050.11,15050.1132,.02,21,4,0) with two Subscripts: 5 and the IEN, and the data is all contained in "^DD",15050.11,15050.1132,.02,21,5,0) the '0' (zero) node. The full global reference would be ^DIC(5,IEN,0). "^DD",15050.11,15050.1132,.02,"DT") 3041112 "^DD",15050.11,15050.1132,.03,0) PIECE^NJ3,0^^0;3^K:+X'=X!(X>999)!(X<1)!(X?.E1"."1N.N) X "^DD",15050.11,15050.1132,.03,3) Type a Number between 1 and 999, 0 Decimal Digits "^DD",15050.11,15050.1132,.03,21,0) ^^3^3^3051104^ "^DD",15050.11,15050.1132,.03,21,1,0) The Piece of the Global Node that contains this Data element. "^DD",15050.11,15050.1132,.03,21,2,0) It is assumed that the Delimiter will be "^" and the $Piece function "^DD",15050.11,15050.1132,.03,21,3,0) will be used to extract the appropriate sub-string. "^DD",15050.11,15050.1132,.03,"DT") 3041112 "^DD",15050.11,15050.1132,.04,0) POINTER FLAG^RNJ1,0^^0;4^K:+X'=X!(X>1)!(X<0)!(X?.E1"."1N.N) X "^DD",15050.11,15050.1132,.04,3) Type a Number between 0 and 1, 0 Decimal Digits "^DD",15050.11,15050.1132,.04,21,0) ^.001^1^1^3051118^^ "^DD",15050.11,15050.1132,.04,21,1,0) Is the Data element a Pointer (1 for Yes, 0 for No)? "^DD",15050.11,15050.1132,.04,"DT") 3050119 "^DD",15050.11,15050.1132,.11,0) RETRIEVAL CODE^K^^1;E1,245^K:$L(X)>245 X D:$D(X) ^DIM "^DD",15050.11,15050.1132,.11,3) This is Standard MUMPS code. "^DD",15050.11,15050.1132,.11,9) @ "^DD",15050.11,15050.1132,.11,21,0) ^.001^3^3^3051121^^ "^DD",15050.11,15050.1132,.11,21,1,0) The Retrieval Code for this Data element, where applicable. "^DD",15050.11,15050.1132,.11,21,2,0) This Field is used when NODE and PIECE are not defined and custom code must "^DD",15050.11,15050.1132,.11,21,3,0) be used to extract the data. "^DD",15050.11,15050.1132,.11,"DT") 3050118 "^DD",15050.11,15050.114,0) SUB FILES SUB-FIELD^^.01^1 "^DD",15050.11,15050.114,0,"DT") 3051011 "^DD",15050.11,15050.114,0,"IX","B",15050.114,.01) "^DD",15050.11,15050.114,0,"NM","SUB FILES") "^DD",15050.11,15050.114,0,"UP") 15050.11 "^DD",15050.11,15050.114,.01,0) SUB FILE^MP15050.11'^CASH(15050.11,^0;1^Q "^DD",15050.11,15050.114,.01,1,0) ^.1 "^DD",15050.11,15050.114,.01,1,1,0) 15050.114^B "^DD",15050.11,15050.114,.01,1,1,1) S ^CASH(15050.11,DA(1),4,"B",$E(X,1,30),DA)="" "^DD",15050.11,15050.114,.01,1,1,2) K ^CASH(15050.11,DA(1),4,"B",$E(X,1,30),DA) "^DD",15050.11,15050.114,.01,1,2,0) 15050.11^S "^DD",15050.11,15050.114,.01,1,2,1) S ^CASH(15050.11,"S",$E(X,1,30),DA(1),DA)="" "^DD",15050.11,15050.114,.01,1,2,2) K ^CASH(15050.11,"S",$E(X,1,30),DA(1),DA) "^DD",15050.11,15050.114,.01,1,2,"DT") 3051011 "^DD",15050.11,15050.114,.01,21,0) ^.001^1^1^3060514^^ "^DD",15050.11,15050.114,.01,21,1,0) Pointer to the Sub-File "^DD",15050.11,15050.114,.01,"DT") 3051011 "^DD",15050.12,15050.12,0) FIELD^^3^9 "^DD",15050.12,15050.12,0,"DDA") N "^DD",15050.12,15050.12,0,"DT") 3051130 "^DD",15050.12,15050.12,0,"IX","B",15050.12,.01) "^DD",15050.12,15050.12,0,"NM","CASH CUSTOM DATATYPES") "^DD",15050.12,15050.12,0,"VRPK") FM TO CACHE SQL "^DD",15050.12,15050.12,.01,0) NAME^RF^^0;1^K:$L(X)>30!($L(X)<3)!'(X'?1P.E) X "^DD",15050.12,15050.12,.01,1,0) ^.1 "^DD",15050.12,15050.12,.01,1,1,0) 15050.12^B "^DD",15050.12,15050.12,.01,1,1,1) S ^CASH(15050.12,"B",$E(X,1,30),DA)="" "^DD",15050.12,15050.12,.01,1,1,2) K ^CASH(15050.12,"B",$E(X,1,30),DA) "^DD",15050.12,15050.12,.01,3) Answer must be 3-30 characters in length. "^DD",15050.12,15050.12,.01,21,0) ^.001^1^1^3051118^^ "^DD",15050.12,15050.12,.01,21,1,0) The name of the Custom DataType to be created "^DD",15050.12,15050.12,.01,"DT") 3051118 "^DD",15050.12,15050.12,.02,0) CLIENT DATA TYPE^RF^^0;2^K:$L(X)>20!($L(X)<1) X "^DD",15050.12,15050.12,.02,3) Answer must be 1-20 characters in length. "^DD",15050.12,15050.12,.02,21,0) ^^3^3^3051118^ "^DD",15050.12,15050.12,.02,21,1,0) The Cache Client Data Type for this Custom DataType. "^DD",15050.12,15050.12,.02,21,2,0) This is mandatory for Cache DataType classes, and specifies the Java/C++ "^DD",15050.12,15050.12,.02,21,3,0) or other client class to which a variable is mapped. "^DD",15050.12,15050.12,.02,"DT") 3041215 "^DD",15050.12,15050.12,.03,0) ODBC TYPE^RF^^0;3^K:$L(X)>20!($L(X)<1) X "^DD",15050.12,15050.12,.03,3) Answer must be 1-20 characters in length. "^DD",15050.12,15050.12,.03,21,0) ^^4^4^3051118^ "^DD",15050.12,15050.12,.03,21,1,0) The Cache ODBC Type for this Custom Datatype. "^DD",15050.12,15050.12,.03,21,2,0) This is the type used when the DataType is accessed via ODBC. "^DD",15050.12,15050.12,.03,21,3,0) The ODBC value must match this type in the OdbcToLogical() and "^DD",15050.12,15050.12,.03,21,4,0) LogicalToOdbc() methods. "^DD",15050.12,15050.12,.03,"DT") 3041215 "^DD",15050.12,15050.12,.04,0) SQL CATEGORY^RF^^0;4^K:$L(X)>20!($L(X)<1) X "^DD",15050.12,15050.12,.04,3) Answer must be 1-20 characters in length. "^DD",15050.12,15050.12,.04,21,0) ^^3^3^3051118^ "^DD",15050.12,15050.12,.04,21,1,0) The Cache SQL Category for this Custom DataType. "^DD",15050.12,15050.12,.04,21,2,0) This determines how Cache SQL performs operations on the value of data "^DD",15050.12,15050.12,.04,21,3,0) of this DataType. "^DD",15050.12,15050.12,.04,"DT") 3041215 "^DD",15050.12,15050.12,.05,0) INCLUDE GENERATOR^F^^0;5^K:$L(X)>30!($L(X)<1) X "^DD",15050.12,15050.12,.05,3) Answer must be 1-30 characters in length. "^DD",15050.12,15050.12,.05,21,0) ^^2^2^3051118^ "^DD",15050.12,15050.12,.05,21,1,0) An optional list of Cache include (.INC) files, used when compiling any "^DD",15050.12,15050.12,.05,21,2,0) method generator methods in this Custom DataType. "^DD",15050.12,15050.12,.05,"DT") 3041215 "^DD",15050.12,15050.12,.06,0) SUPER^F^^0;6^K:$L(X)>30!($L(X)<1) X "^DD",15050.12,15050.12,.06,3) Answer must be 1-30 characters in length. "^DD",15050.12,15050.12,.06,21,0) ^^1^1^3051118^ "^DD",15050.12,15050.12,.06,21,1,0) An optional Super Class for this Custom DataType. "^DD",15050.12,15050.12,.06,"DT") 3050201 "^DD",15050.12,15050.12,1,0) DESCRIPTION^15050.121^^1;0 "^DD",15050.12,15050.12,1,21,0) ^.001^2^2^3051119^^ "^DD",15050.12,15050.12,1,21,1,0) Word Processing field containing Description details for Custom DataType. "^DD",15050.12,15050.12,1,21,2,0) Used to document the class. "^DD",15050.12,15050.12,2,0) METHODS^15050.122^^2;0 "^DD",15050.12,15050.12,2,21,0) ^.001^1^1^3051130^^^^ "^DD",15050.12,15050.12,2,21,1,0) Multiple containing details about the Custom DataType Methods. "^DD",15050.12,15050.12,3,0) PARAMETERS^15050.123^^3;0 "^DD",15050.12,15050.12,3,21,0) ^^1^1^3051119^ "^DD",15050.12,15050.12,3,21,1,0) Multiple containing details about the Custom DataType Parameters. "^DD",15050.12,15050.121,0) DESCRIPTION SUB-FIELD^^.01^1 "^DD",15050.12,15050.121,0,"DT") 3041215 "^DD",15050.12,15050.121,0,"NM","DESCRIPTION") "^DD",15050.12,15050.121,0,"UP") 15050.12 "^DD",15050.12,15050.121,.01,0) DESCRIPTION^W^^0;1^Q "^DD",15050.12,15050.121,.01,21,0) ^.001^1^1^3051119^^ "^DD",15050.12,15050.121,.01,21,1,0) The Description of the Custom DataType. "^DD",15050.12,15050.121,.01,"DT") 3041215 "^DD",15050.12,15050.122,0) METHODS SUB-FIELD^^2^9 "^DD",15050.12,15050.122,0,"DT") 3051130 "^DD",15050.12,15050.122,0,"IX","B",15050.122,.01) "^DD",15050.12,15050.122,0,"NM","METHODS") "^DD",15050.12,15050.122,0,"UP") 15050.12 "^DD",15050.12,15050.122,.01,0) NAME^MRF^^0;1^K:$L(X)>30!($L(X)<1) X "^DD",15050.12,15050.122,.01,1,0) ^.1 "^DD",15050.12,15050.122,.01,1,1,0) 15050.122^B "^DD",15050.12,15050.122,.01,1,1,1) S ^CASH(15050.12,DA(1),2,"B",$E(X,1,30),DA)="" "^DD",15050.12,15050.122,.01,1,1,2) K ^CASH(15050.12,DA(1),2,"B",$E(X,1,30),DA) "^DD",15050.12,15050.122,.01,3) Answer must be 1-30 characters in length. "^DD",15050.12,15050.122,.01,21,0) ^^1^1^3051119^ "^DD",15050.12,15050.122,.01,21,1,0) The Name of the Method. "^DD",15050.12,15050.122,.01,"DT") 3041215 "^DD",15050.12,15050.122,.02,0) CLASS METHOD^RNJ1,0^^0;2^K:+X'=X!(X>1)!(X<0)!(X?.E1"."1N.N) X "^DD",15050.12,15050.122,.02,3) Type a Number between 0 and 1, 0 Decimal Digits "^DD",15050.12,15050.122,.02,21,0) ^^3^3^3051119^ "^DD",15050.12,15050.122,.02,21,1,0) Is the Method a Class Method (1 for Yes, 0 for No)? "^DD",15050.12,15050.122,.02,21,2,0) DataType Methods will usually be Class Methods rather than Instance "^DD",15050.12,15050.122,.02,21,3,0) Methods. "^DD",15050.12,15050.122,.02,"DT") 3041215 "^DD",15050.12,15050.122,.03,0) CODE MODE^RS^C:code;E:expression;G:generator;O:objectgenerator;^0;3^Q "^DD",15050.12,15050.122,.03,21,0) ^.001^7^7^3051130^^ "^DD",15050.12,15050.122,.03,21,1,0) The Code Mode that the Method uses when compiling (code, expression, "^DD",15050.12,15050.122,.03,21,2,0) generator, objectgenerator). "^DD",15050.12,15050.122,.03,21,3,0) Code - This code is inserted directly into the Property Methods. "^DD",15050.12,15050.122,.03,21,4,0) Expression - The code is an extrinsic function called directly. "^DD",15050.12,15050.122,.03,21,5,0) Generator, objectgenerator - The code is generated at compile time, so "^DD",15050.12,15050.122,.03,21,6,0) each Property can have it's own unique version of this Method code "^DD",15050.12,15050.122,.03,21,7,0) (Polymorphism). "^DD",15050.12,15050.122,.03,"DT") 3041215 "^DD",15050.12,15050.122,.04,0) FORMAL SPEC^F^^0;4^K:$L(X)>80!($L(X)<1) X "^DD",15050.12,15050.122,.04,3) Answer must be 1-80 characters in length. "^DD",15050.12,15050.122,.04,21,0) ^.001^3^3^3051130^^ "^DD",15050.12,15050.122,.04,21,1,0) The Formal Specification for the Method. "^DD",15050.12,15050.122,.04,21,2,0) This is a list of all the parameters, their type, default value and "^DD",15050.12,15050.122,.04,21,3,0) whether passed by value or reference. "^DD",15050.12,15050.122,.04,"DT") 3041215 "^DD",15050.12,15050.122,.05,0) PRIVATE^NJ1,0^^0;5^K:+X'=X!(X>1)!(X<0)!(X?.E1"."1N.N) X "^DD",15050.12,15050.122,.05,3) Type a Number between 0 and 1, 0 Decimal Digits "^DD",15050.12,15050.122,.05,21,0) ^^1^1^3051119^ "^DD",15050.12,15050.122,.05,21,1,0) Is the Method Private (1 for Yes, 0 for No)? "^DD",15050.12,15050.122,.05,"DT") 3041215 "^DD",15050.12,15050.122,.06,0) PUBLIC LIST^F^^0;6^K:$L(X)>80!($L(X)<1) X "^DD",15050.12,15050.122,.06,3) Answer must be 1-80 characters in length. "^DD",15050.12,15050.122,.06,21,0) ^^5^5^3051119^ "^DD",15050.12,15050.122,.06,21,1,0) The Public List for the Method. "^DD",15050.12,15050.122,.06,21,2,0) This contains a list of any variables that need to be declared as Public "^DD",15050.12,15050.122,.06,21,3,0) in the Method. If the Procedure Block calls non-Procedure Block M code "^DD",15050.12,15050.122,.06,21,4,0) you may need to declare some variables as Public, so they can be used "^DD",15050.12,15050.122,.06,21,5,0) within this code. "^DD",15050.12,15050.122,.06,"DT") 3041215 "^DD",15050.12,15050.122,.07,0) RETURN TYPE^F^^0;7^K:$L(X)>30!($L(X)<1) X "^DD",15050.12,15050.122,.07,3) Answer must be 1-30 characters in length. "^DD",15050.12,15050.122,.07,21,0) ^^1^1^3051119^ "^DD",15050.12,15050.122,.07,21,1,0) The DataType of the Return Value for this Method. "^DD",15050.12,15050.122,.07,"DT") 3041215 "^DD",15050.12,15050.122,1,0) DESCRIPTION^15050.1221^^1;0 "^DD",15050.12,15050.122,1,21,0) ^^1^1^3051119^ "^DD",15050.12,15050.122,1,21,1,0) Word Processing field containing Description details for Method. "^DD",15050.12,15050.122,2,0) CODE^15050.1222^^2;0 "^DD",15050.12,15050.122,2,21,0) ^^1^1^3051119^ "^DD",15050.12,15050.122,2,21,1,0) Word Processing field containing Code details for the Method. "^DD",15050.12,15050.1221,0) DESCRIPTION SUB-FIELD^^.01^1 "^DD",15050.12,15050.1221,0,"DT") 3041215 "^DD",15050.12,15050.1221,0,"NM","DESCRIPTION") "^DD",15050.12,15050.1221,0,"UP") 15050.122 "^DD",15050.12,15050.1221,.01,0) DESCRIPTION^W^^0;1^Q "^DD",15050.12,15050.1221,.01,21,0) ^^1^1^3051119^ "^DD",15050.12,15050.1221,.01,21,1,0) The Description of the Method. "^DD",15050.12,15050.1221,.01,"DT") 3041215 "^DD",15050.12,15050.1222,0) CODE SUB-FIELD^^.01^1 "^DD",15050.12,15050.1222,0,"DT") 3041215 "^DD",15050.12,15050.1222,0,"NM","CODE") "^DD",15050.12,15050.1222,0,"UP") 15050.122 "^DD",15050.12,15050.1222,.01,0) CODE^W^^0;1^Q "^DD",15050.12,15050.1222,.01,21,0) ^^1^1^3051119^ "^DD",15050.12,15050.1222,.01,21,1,0) The Code for the Method. "^DD",15050.12,15050.1222,.01,"DT") 3041215 "^DD",15050.12,15050.123,0) PARAMETERS SUB-FIELD^^1^4 "^DD",15050.12,15050.123,0,"DT") 3050913 "^DD",15050.12,15050.123,0,"IX","B",15050.123,.01) "^DD",15050.12,15050.123,0,"NM","PARAMETERS") "^DD",15050.12,15050.123,0,"UP") 15050.12 "^DD",15050.12,15050.123,.01,0) PARAMETER NAME^MRF^^0;1^K:$L(X)>30!($L(X)<1) X "^DD",15050.12,15050.123,.01,1,0) ^.1 "^DD",15050.12,15050.123,.01,1,1,0) 15050.123^B "^DD",15050.12,15050.123,.01,1,1,1) S ^CASH(15050.12,DA(1),3,"B",$E(X,1,30),DA)="" "^DD",15050.12,15050.123,.01,1,1,2) K ^CASH(15050.12,DA(1),3,"B",$E(X,1,30),DA) "^DD",15050.12,15050.123,.01,3) Answer must be 1-30 characters in length. "^DD",15050.12,15050.123,.01,21,0) ^^1^1^3051119^ "^DD",15050.12,15050.123,.01,21,1,0) The Parameter Name. "^DD",15050.12,15050.123,.01,"DT") 3050127 "^DD",15050.12,15050.123,.02,0) PARAMETER VALUE^F^^0;2^K:$L(X)>30!($L(X)<1) X "^DD",15050.12,15050.123,.02,3) Answer must be 1-30 characters in length. "^DD",15050.12,15050.123,.02,21,0) ^^2^2^3051119^ "^DD",15050.12,15050.123,.02,21,1,0) The default value for the Parameter. "^DD",15050.12,15050.123,.02,21,2,0) This can be overriden when defining the Property. "^DD",15050.12,15050.123,.02,"DT") 3050127 "^DD",15050.12,15050.123,.03,0) TYPE^F^^0;3^K:$L(X)>50!($L(X)<1) X "^DD",15050.12,15050.123,.03,3) Answer must be 1-50 characters in length. "^DD",15050.12,15050.123,.03,21,0) ^^2^2^3051119^ "^DD",15050.12,15050.123,.03,21,1,0) The optional DataType of the Parameter. "^DD",15050.12,15050.123,.03,21,2,0) E.g. BOOLEAN. "^DD",15050.12,15050.123,.03,"DT") 3050913 "^DD",15050.12,15050.123,1,0) DESCRIPTION^15050.1231^^1;0 "^DD",15050.12,15050.123,1,21,0) ^^1^1^3051119^ "^DD",15050.12,15050.123,1,21,1,0) Word Processing field containing Description details for the Parameter. "^DD",15050.12,15050.1231,0) DESCRIPTION SUB-FIELD^^.01^1 "^DD",15050.12,15050.1231,0,"DT") 3050127 "^DD",15050.12,15050.1231,0,"NM","DESCRIPTION") "^DD",15050.12,15050.1231,0,"UP") 15050.123 "^DD",15050.12,15050.1231,.01,0) DESCRIPTION^W^^0;1^Q "^DD",15050.12,15050.1231,.01,21,0) ^^1^1^3051119^ "^DD",15050.12,15050.1231,.01,21,1,0) The Description of the Parameter. "^DD",15050.12,15050.1231,.01,"DT") 3050127 "^DD",15050.13,15050.13,0) FIELD^^3^10 "^DD",15050.13,15050.13,0,"DDA") N "^DD",15050.13,15050.13,0,"DT") 3050719 "^DD",15050.13,15050.13,0,"IX","B",15050.13,.01) "^DD",15050.13,15050.13,0,"NM","CASH ERRORS") "^DD",15050.13,15050.13,0,"VRPK") FM TO CACHE SQL "^DD",15050.13,15050.13,.01,0) ERROR DATE/TIME^RD^^0;1^S %DT="ESTXR" D ^%DT S X=Y K:Y<1 X "^DD",15050.13,15050.13,.01,1,0) ^.1 "^DD",15050.13,15050.13,.01,1,1,0) 15050.13^B "^DD",15050.13,15050.13,.01,1,1,1) S ^CASH(15050.13,"B",$E(X,1,30),DA)="" "^DD",15050.13,15050.13,.01,1,1,2) K ^CASH(15050.13,"B",$E(X,1,30),DA) "^DD",15050.13,15050.13,.01,3) "^DD",15050.13,15050.13,.01,21,0) ^^1^1^3051119^ "^DD",15050.13,15050.13,.01,21,1,0) The Date and Time the Error occured. "^DD",15050.13,15050.13,.01,"DT") 3050205 "^DD",15050.13,15050.13,.02,0) ERROR TEXT^RF^^0;2^K:$L(X)>80!($L(X)<1) X "^DD",15050.13,15050.13,.02,3) Answer must be 1-80 characters in length. "^DD",15050.13,15050.13,.02,21,0) ^^1^1^3051119^ "^DD",15050.13,15050.13,.02,21,1,0) The Text of the Error message returned. "^DD",15050.13,15050.13,.02,"DT") 3050205 "^DD",15050.13,15050.13,.03,0) FILE #^NJ16,7^^0;3^K:+X'=X!(X>99999999)!(X<.0000001)!(X?.E1"."8N.N) X "^DD",15050.13,15050.13,.03,3) Type a Number between .0000001 and 99999999, 7 Decimal Digits "^DD",15050.13,15050.13,.03,21,0) ^^1^1^3051119^ "^DD",15050.13,15050.13,.03,21,1,0) The File # the Mapping Tool was processing at the time of the Error. "^DD",15050.13,15050.13,.03,"DT") 3050205 "^DD",15050.13,15050.13,.04,0) FLAGS^F^^0;4^K:$L(X)>15!($L(X)<1) X "^DD",15050.13,15050.13,.04,3) Answer must be 1-15 characters in length. "^DD",15050.13,15050.13,.04,21,0) ^^2^2^3051119^ "^DD",15050.13,15050.13,.04,21,1,0) The value of FLAGS passed in for this compilation. "^DD",15050.13,15050.13,.04,21,2,0) Useful for debugging purposes. "^DD",15050.13,15050.13,.04,"DT") 3050608 "^DD",15050.13,15050.13,.05,0) PACKAGE^F^^0;5^K:$L(X)>20!($L(X)<1) X "^DD",15050.13,15050.13,.05,3) Answer must be 1-20 characters in length. "^DD",15050.13,15050.13,.05,21,0) ^^2^2^3051119^ "^DD",15050.13,15050.13,.05,21,1,0) The value of PACKAGE passed in for this compilation. "^DD",15050.13,15050.13,.05,21,2,0) Useful for debugging. "^DD",15050.13,15050.13,.05,"DT") 3050608 "^DD",15050.13,15050.13,.06,0) ID^F^^0;6^K:$L(X)>20!($L(X)<1) X "^DD",15050.13,15050.13,.06,3) Answer must be 1-20 characters in length. "^DD",15050.13,15050.13,.06,21,0) ^^2^2^3051119^ "^DD",15050.13,15050.13,.06,21,1,0) The value of ID passed in for this compilation. "^DD",15050.13,15050.13,.06,21,2,0) Useful for debugging. "^DD",15050.13,15050.13,.06,"DT") 3050608 "^DD",15050.13,15050.13,.07,0) OWNER^F^^0;7^K:$L(X)>20!($L(X)<1) X "^DD",15050.13,15050.13,.07,3) Answer must be 1-20 characters in length. "^DD",15050.13,15050.13,.07,21,0) ^^2^2^3051119^ "^DD",15050.13,15050.13,.07,21,1,0) The value of OWNER passed in for this compilation. "^DD",15050.13,15050.13,.07,21,2,0) Useful for debugging. "^DD",15050.13,15050.13,.07,"DT") 3050608 "^DD",15050.13,15050.13,1,0) LIST^15050.131^^1;0 "^DD",15050.13,15050.13,1,21,0) ^^1^1^3051119^ "^DD",15050.13,15050.13,1,21,1,0) Multiple containing the values of LIST passed in for this compilation. "^DD",15050.13,15050.13,2,0) $ZE ERROR TEXT^RF^^2;E1,245^K:$L(X)>245!($L(X)<1) X "^DD",15050.13,15050.13,2,3) Answer must be 1-245 characters in length. "^DD",15050.13,15050.13,2,9) @ "^DD",15050.13,15050.13,2,21,0) ^.001^2^2^3051119^^ "^DD",15050.13,15050.13,2,21,1,0) The text of the $ZE system variable after the error. "^DD",15050.13,15050.13,2,21,2,0) This may contain M code/syntax. "^DD",15050.13,15050.13,2,"DT") 3050719 "^DD",15050.13,15050.13,3,0) OBJECT ERROR TEXT^F^^3;E1,245^K:$L(X)>245!($L(X)<1) X "^DD",15050.13,15050.13,3,3) Answer must be 1-245 characters in length. "^DD",15050.13,15050.13,3,9) @ "^DD",15050.13,15050.13,3,21,0) ^^3^3^3051119^ "^DD",15050.13,15050.13,3,21,1,0) The text of the special %objlasterror system variable. "^DD",15050.13,15050.13,3,21,2,0) This will be in the format of %Library.Status, with embedded lists. "^DD",15050.13,15050.13,3,21,3,0) Use $SYSTEM.Status.DecomposeStatus() to interpret. "^DD",15050.13,15050.13,3,"DT") 3050719 "^DD",15050.13,15050.131,0) LIST SUB-FIELD^^.01^1 "^DD",15050.13,15050.131,0,"DT") 3050608 "^DD",15050.13,15050.131,0,"IX","B",15050.131,.01) "^DD",15050.13,15050.131,0,"NM","LIST") "^DD",15050.13,15050.131,0,"UP") 15050.13 "^DD",15050.13,15050.131,.01,0) LIST^MF^^0;1^K:$L(X)>30!($L(X)<1) X "^DD",15050.13,15050.131,.01,1,0) ^.1 "^DD",15050.13,15050.131,.01,1,1,0) 15050.131^B "^DD",15050.13,15050.131,.01,1,1,1) S ^CASH(15050.13,DA(1),1,"B",$E(X,1,30),DA)="" "^DD",15050.13,15050.131,.01,1,1,2) K ^CASH(15050.13,DA(1),1,"B",$E(X,1,30),DA) "^DD",15050.13,15050.131,.01,3) Answer must be 1-30 characters in length. "^DD",15050.13,15050.131,.01,21,0) ^^1^1^3051119^ "^DD",15050.13,15050.131,.01,21,1,0) The value of the LIST array node passed in. "^DD",15050.13,15050.131,.01,"DT") 3050608 "^DD",15050.14,15050.14,0) FIELD^^1^3 "^DD",15050.14,15050.14,0,"DDA") N "^DD",15050.14,15050.14,0,"DT") 3060514 "^DD",15050.14,15050.14,0,"IX","B",15050.14,.01) "^DD",15050.14,15050.14,0,"NM","CASH PARAMETER FILE") "^DD",15050.14,15050.14,.01,0) PARAMETER NAME^RF^^0;1^K:$L(X)>30!($L(X)<3)!'(X'?1P.E) X "^DD",15050.14,15050.14,.01,1,0) ^.1 "^DD",15050.14,15050.14,.01,1,1,0) 15050.14^B "^DD",15050.14,15050.14,.01,1,1,1) S ^CASH(15050.14,"B",$E(X,1,30),DA)="" "^DD",15050.14,15050.14,.01,1,1,2) K ^CASH(15050.14,"B",$E(X,1,30),DA) "^DD",15050.14,15050.14,.01,3) Answer must be 3-30 characters in length. "^DD",15050.14,15050.14,.01,21,0) ^^1^1^3060514^ "^DD",15050.14,15050.14,.01,21,1,0) The Name used to identify the Parameter "^DD",15050.14,15050.14,.01,"DT") 3060514 "^DD",15050.14,15050.14,.02,0) PARAMETER VALUE^F^^0;2^K:$L(X)>30!($L(X)<1) X "^DD",15050.14,15050.14,.02,3) Answer must be 1-30 characters in length. "^DD",15050.14,15050.14,.02,21,0) ^^1^1^3060514^ "^DD",15050.14,15050.14,.02,21,1,0) The default value for the named Parameter "^DD",15050.14,15050.14,.02,"DT") 3060514 "^DD",15050.14,15050.14,1,0) OVERRIDES^15050.141^^1;0 "^DD",15050.14,15050.14,1,21,0) ^.001^2^2^3060514^^^ "^DD",15050.14,15050.14,1,21,1,0) The default value of the Parameter can be overridden on a file by file "^DD",15050.14,15050.14,1,21,2,0) basis using this multiple. "^DD",15050.14,15050.141,0) OVERRIDES SUB-FIELD^^.02^2 "^DD",15050.14,15050.141,0,"DT") 3060514 "^DD",15050.14,15050.141,0,"IX","B",15050.141,.01) "^DD",15050.14,15050.141,0,"NM","OVERRIDES") "^DD",15050.14,15050.141,0,"UP") 15050.14 "^DD",15050.14,15050.141,.01,0) FILE NUMBER^MNJ20,9X^^0;1^K:+X'=X!(X>9999999999)!(X<0)!(X?.E1"."10N.N) X S:$D(X) DINUM=X "^DD",15050.14,15050.141,.01,1,0) ^.1 "^DD",15050.14,15050.141,.01,1,1,0) 15050.141^B "^DD",15050.14,15050.141,.01,1,1,1) S ^CASH(15050.14,DA(1),1,"B",$E(X,1,30),DA)="" "^DD",15050.14,15050.141,.01,1,1,2) K ^CASH(15050.14,DA(1),1,"B",$E(X,1,30),DA) "^DD",15050.14,15050.141,.01,3) Type a Number between 0 and 9999999999, 9 Decimal Digits "^DD",15050.14,15050.141,.01,21,0) ^.001^6^6^3060514^^^^ "^DD",15050.14,15050.141,.01,21,1,0) This is the FileMan file (or sub-file) number that the Parameter value "^DD",15050.14,15050.141,.01,21,2,0) is to be overridden for. "^DD",15050.14,15050.141,.01,21,3,0) "S:$D(X) DINUM=X" is used in the Input Transform to ensure the value is "^DD",15050.14,15050.141,.01,21,4,0) keyed by the file #. "^DD",15050.14,15050.141,.01,21,5,0) NOTE: This field is NOT a Pointer to File #1, as we need to allow "^DD",15050.14,15050.141,.01,21,6,0) sub-files to be entered as well. "^DD",15050.14,15050.141,.01,"DT") 3060514 "^DD",15050.14,15050.141,.02,0) OVERRIDE VALUE^F^^0;2^K:$L(X)>30!($L(X)<1) X "^DD",15050.14,15050.141,.02,3) Answer must be 1-30 characters in length. "^DD",15050.14,15050.141,.02,21,0) ^^1^1^3060514^ "^DD",15050.14,15050.141,.02,21,1,0) The overridden value for the named Parameter for the file # specified "^DD",15050.14,15050.141,.02,"DT") 3060514 "^DD",15050.19,15050.19,0) FIELD^^.01^1 "^DD",15050.19,15050.19,0,"DT") 3041112 "^DD",15050.19,15050.19,0,"IX","B",15050.19,.01) "^DD",15050.19,15050.19,0,"NM","CASH SQL RESERVED WORDS") "^DD",15050.19,15050.19,0,"VRPK") FM TO CACHE SQL "^DD",15050.19,15050.19,.01,0) NAME^RF^^0;1^K:$L(X)>30!($L(X)<2)!'(X?.UP) X "^DD",15050.19,15050.19,.01,1,0) ^.1 "^DD",15050.19,15050.19,.01,1,1,0) 15050.19^B "^DD",15050.19,15050.19,.01,1,1,1) S ^CASH(15050.19,"B",$E(X,1,30),DA)="" "^DD",15050.19,15050.19,.01,1,1,2) K ^CASH(15050.19,"B",$E(X,1,30),DA) "^DD",15050.19,15050.19,.01,3) Answer must be 2-30 characters in length. "^DD",15050.19,15050.19,.01,21,0) ^^1^1^3051119^ "^DD",15050.19,15050.19,.01,21,1,0) The Text of the SQL Reserved Word. "^DD",15050.19,15050.19,.01,"DT") 3041112 "^DIC",15050.11,15050.11,0) CASH FM CLASS MAP^15050.11 "^DIC",15050.11,15050.11,0,"GL") ^CASH(15050.11, "^DIC",15050.11,15050.11,"%",0) ^1.005^^0 "^DIC",15050.11,15050.11,"%D",0) ^^5^5^3050613^ "^DIC",15050.11,15050.11,"%D",1,0) This file contains the Maps (or templates) used to create Cache classes "^DIC",15050.11,15050.11,"%D",2,0) for FileMan files. Each map is created by the START^CASH call, which "^DIC",15050.11,15050.11,"%D",3,0) examines the ^DIC and ^DD structures for the file. This Map can be used to "^DIC",15050.11,15050.11,"%D",4,0) create many different Cache classes, with different options (FLAGS), by "^DIC",15050.11,15050.11,"%D",5,0) using the CREATE^CASH call. "^DIC",15050.11,"B","CASH FM CLASS MAP",15050.11) "^DIC",15050.12,15050.12,0) CASH CUSTOM DATATYPES^15050.12 "^DIC",15050.12,15050.12,0,"GL") ^CASH(15050.12, "^DIC",15050.12,15050.12,"%",0) ^1.005^^0 "^DIC",15050.12,15050.12,"%D",0) ^^2^2^3051130^ "^DIC",15050.12,15050.12,"%D",1,0) This file contains the Maps (or templates) used to create the Custom "^DIC",15050.12,15050.12,"%D",2,0) Datatype classes that support the FM To Cache SQL Mapping Tool. "^DIC",15050.12,"B","CASH CUSTOM DATATYPES",15050.12) "^DIC",15050.13,15050.13,0) CASH ERRORS^15050.13 "^DIC",15050.13,15050.13,0,"GL") ^CASH(15050.13, "^DIC",15050.13,15050.13,"%",0) ^1.005^^0 "^DIC",15050.13,15050.13,"%D",0) ^^2^2^3050613^ "^DIC",15050.13,15050.13,"%D",1,0) This file contains any error messages generated by the compile process "^DIC",15050.13,15050.13,"%D",2,0) CREATE^CASH. "^DIC",15050.13,"B","CASH ERRORS",15050.13) "^DIC",15050.14,15050.14,0) CASH PARAMETER FILE^15050.14 "^DIC",15050.14,15050.14,0,"GL") ^CASH(15050.14, "^DIC",15050.14,15050.14,"%",0) ^1.005^^ "^DIC",15050.14,15050.14,"%D",0) ^^3^3^3060514^ "^DIC",15050.14,15050.14,"%D",1,0) This file contains various parameters used by the CASH FM To Cache SQL "^DIC",15050.14,15050.14,"%D",2,0) Mapping Tool. The top level file contains the defaults used by the system, "^DIC",15050.14,15050.14,"%D",3,0) but these can be overridden in the OVERRIDES multiple. "^DIC",15050.14,"B","CASH PARAMETER FILE",15050.14) "^DIC",15050.19,15050.19,0) CASH SQL RESERVED WORDS^15050.19 "^DIC",15050.19,15050.19,0,"GL") ^CASH(15050.19, "^DIC",15050.19,15050.19,"%D",0) ^^6^6^3050613^ "^DIC",15050.19,15050.19,"%D",1,0) This file contains a list of SQL Reserved Words. When the Discovery "^DIC",15050.19,15050.19,"%D",2,0) process (START^CASH) assigns names, each one is checked against this "^DIC",15050.19,15050.19,"%D",3,0) list, and changed if necessary. "^DIC",15050.19,15050.19,"%D",4,0) "^DIC",15050.19,15050.19,"%D",5,0) NOTE: This file is not used in Cache 5.0+. The system provided call "^DIC",15050.19,15050.19,"%D",6,0) $SYSTEM.SQL.IsReservedWord() is used instead. "^DIC",15050.19,"B","CASH SQL RESERVED WORDS",15050.19) **END** **END**