OREDITOR1 ; SLC/AGP - Core Editor Forms ;Dec 03, 2025@08:41:17
;;3.0;ORDER ENTRY/RESULTS REPORTING;**508**;Dec 17, 1997;Build 39
;
; Reference to $$MAXBLANK^XMXUTIL1 supported by ICR # 2735
; Reference to FORMAT^PXRMTEXT supported by ICR # 7459
;
Q
;
BLDFDA(FILENUM,GBL,NAME,DATA,ERROR,SHARRAY) ;
N ADDCNT,DIDX,DIFF,FDA,IARRAY,IDX,IENS,KSUB,MSG,NODE,OBJ,ORIMGR,SUB,TEXT,UFDA,VALUE
S ADDCNT=+$O(@GBL@("A"),-1)
S DIDX=0 F S DIDX=$O(DATA(NAME,DIDX)) Q:DIDX'>0 D
.K OBJ M OBJ=DATA(NAME,DIDX)
.S IDX=+$G(OBJ("id"))
.I IDX>0,'$$DIFF(.OBJ,.SHARRAY,.IARRAY) Q
.I IDX=0 S IDX=$$SETNEW(.OBJ,FILENUM,GBL,.IARRAY,.KSUB) I IDX=0 Q
.S IENS=IDX_","
.I FILENUM=101.73 D FDACOMPONENT(.OBJ,.FDA,.KSUB,IENS)
.I FILENUM=101.75 D FDAPLUGIN(.OBJ,.FDA,.KSUB,IENS)
.I FILENUM=101.76 D FDASCHEMA(.OBJ,.FDA,.KSUB,IENS)
BLDFDAX ;
S ORIMGR=1
I $D(FDA) D FILE^DIE("","FDA","MSG")
I $D(MSG) S ERROR="Error updating "_NAME_" file"
I $D(IARRAY) D DELETE(GBL,.IARRAY)
S SUB="" F S SUB=$O(KSUB(SUB)) Q:SUB="" K ^TMP(SUB,$J)
Q
;
DELETE(GBL,IARRAY) ;
N DA,DIK,ORIMGR
S DIK=$E(GBL,1,$L(GBL)-1)_","
S DA=0 F S DA=$O(@GBL@(DA)) Q:DA'>0 D
.I '$D(IARRAY(DA)) S ORIMGR=1 D ^DIK
Q
;
COMPAREANDSET(INPUTS,DATA,HARRAY,SUB,SHARRAY) ;
M DATA=INPUTS("data")
M HARRAY=DATA("hashValues") K DATA("hashValues")
M DATA=INPUTS("data",SUB),HARRAY=DATA("hashValues") K DATA("hashValues")
I HARRAY("totalHash")=$$GENAREF^XLFSHAN(512,"DATA",1) Q 1
D SETHASHARRAY(.HARRAY,.SHARRAY)
Q 0
;
COMPONENTS(INPUTS) ;
I INPUTS("callFrom")="editorSave" Q $$COMPONENTSAVE(.INPUTS)
I INPUTS("callFrom")="editorBuilder" Q $$COMPONENTBLD(.INPUTS)
Q "0^Call from entry point not found."
;
COMPONENTBLD(INPUTS) ;
N ARRAY,CACHESUB,CNT,DIDX,DSCHEMA,DFN,HARRAY,IDX,ITEM,MARRAY,NAME,NODE,PIDX
N SCHEMA,STR,SUB,TSCHEMA,UISCHEMA,USER
D PASSINVALUES(.INPUTS,.DSCHEMA,.DFN,.PIDX,.SCHEMA,.SUB,.UISCHEMA,.USER,.CACHESUB)
D CODE^ORIUTL(.ARRAY,101.73,1)
D CODE^ORIUTL(.MARRAY,101.734,1)
M SCHEMA("properties","components","items","properties","componentType","oneOf")=ARRAY
M SCHEMA("properties","components","items","properties","neededData","items","properties","mandatoryData","oneOf")=MARRAY
S NAME="",CNT=0 F S NAME=$O(^ORI(101.73,"B",NAME)) Q:NAME="" D
.S IDX=0 F S IDX=$O(^ORI(101.73,"B",NAME,IDX)) Q:IDX'>0 D
..K ITEM D GETITEM(.ITEM,IDX,101.73)
..D SETHASH(.HARRAY,IDX,.ITEM)
..S CNT=CNT+1 M TSCHEMA("components",CNT)=ITEM
D SETHASHTOTAL(.DSCHEMA,.HARRAY,.TSCHEMA)
M DSCHEMA=TSCHEMA
D SETFINALTMP(SUB,.SCHEMA,.UISCHEMA,.DSCHEMA)
Q 1
;
COMPONENTSAVE(INPUTS) ;
N DATA,ERROR,HARRAY,IDX,OBJ,RESULT,SHARRAY
S ERROR="",RESULT=1
I $$COMPAREANDSET(.INPUTS,.DATA,.HARRAY,"components",.SHARRAY)=1 Q 1
D BLDFDA(101.73,"^ORI(101.73)","components",.DATA,.ERROR,.SHARRAY)
I ERROR'="" S RESULT=-1_U_ERROR
Q RESULT
;
DIFF(OBJ,HARRAY,IARRAY) ;
S IARRAY(OBJ("id"))=""
I HARRAY(OBJ("id"))'=$$GENAREF^XLFSHAN(160,"OBJ",1) Q 1
Q 0
;
GETITEM(ITEM,IDX,FN) ;
N NODE,STR,TEXT,TIDX
I FN=101.75 D Q
.S NODE=$G(^OR(101.75,IDX,0))
.S ITEM("id")=IDX,ITEM("name")=$P(NODE,U)
.S ITEM("routine")=$P(NODE,U,2),ITEM("entryPoint")=$P(NODE,U,3)
.I $P(NODE,U,4)'="" S ITEM("pluginType")=$P(NODE,U,4)
.S ITEM("mandatoryParameter")=$S($P(NODE,U,5)=1:"true",1:"false")
.I $P($G(^OR(101.75,IDX,10)),U)'="" S ITEM("shortDescription")=$P($G(^OR(101.75,IDX,10)),U)
.K STR M TEXT=^OR(101.75,IDX,20) S STR=$$SETTEXT(.TEXT) I STR'="" S ITEM("description")=STR
I FN=101.73 D Q
.S NODE=$G(^ORI(101.73,IDX,0))
.S ITEM("id")=IDX,ITEM("name")=$P(NODE,U),ITEM("componentType")=$P(NODE,U,2)
.S ITEM("componentName")=$P(NODE,U,3)
.S NODE=$G(^ORI(101.73,IDX,30)) I NODE'="" S ITEM("errorMessageText")=NODE
.S NODE=$G(^ORI(101.73,IDX,"CPRS")) I $P(NODE,U)'="" S ITEM("pageId")=+NODE
.S TIDX=0 F S TIDX=$O(^ORI(101.73,IDX,40,TIDX)) Q:TIDX'>0 D
..S NODE=$G(^ORI(101.73,IDX,40,TIDX,0))
..S ITEM("neededData",TIDX,"dataId")=$P(NODE,U)
..I $P(NODE,U,2)'="" S ITEM("neededData",TIDX,"mandatoryParameter")=$P(NODE,U,2)
.K STR,TEXT M TEXT=^ORI(101.73,IDX,50) S STR=$$SETTEXT(.TEXT) I STR'="" S ITEM("itemIcon")=STR
.K STR,TEXT M TEXT=^ORI(101.73,IDX,20) S STR=$$SETTEXT(.TEXT) I STR'="" S ITEM("description")=STR
I FN=101.76 D
.S NODE=$G(^ORW(101.76,IDX,0))
.S ITEM("id")=IDX,ITEM("name")=$P(NODE,U)
.S ITEM("contentType")=$P(NODE,U,2)
.S ITEM("reservedSystem")=$S($P(NODE,U,3)=1:"true",1:"false")
.M TEXT=^ORW(101.76,IDX,1) S STR=$$SETTEXT(.TEXT) I STR'="" S ITEM("content")=STR
Q
;
FDACOMPONENT(OBJ,FDA,KSUB,IENS) ;
N DA,DIK,RCNT,REQ,TEXT,RIDX,RIENS,TMP,TSUB
S FDA(101.73,IENS,.01)=$S($G(OBJ("name"))'="":OBJ("name"),1:"@")
S FDA(101.73,IENS,1)=$S($G(OBJ("componentType"))'="":OBJ("componentType"),1:"@")
S FDA(101.73,IENS,2)=$G(OBJ("componentName"))
S FDA(101.73,IENS,30)=$G(OBJ("errorMessageText"))
S FDA(101.73,IENS,60)=$S($G(OBJ("pageId"))'="":OBJ("pageId"),1:"@")
K TEXT,TMP M TMP=OBJ("imageIcon") D PARSETEXT(.TEXT,.TMP)
I $D(TEXT) S TSUB="IMAGE "_IENS M ^TMP(TSUB,$J)=TEXT S KSUB(TSUB)="",FDA(101.73,IENS,50)=$NA(^TMP(TSUB,$J))
K TEXT,TMP M TMP=OBJ("description") D PARSETEXT(.TEXT,.TMP)
I $D(TEXT) S TSUB="DESCRIPTION "_IENS M ^TMP(TSUB,$J)=TEXT S KSUB(TSUB)="",FDA(101.73,IENS,20)=$NA(^TMP(TSUB,$J))
S DA(1)=+IENS,DIK="^ORI(101.74,"_DA(1)_",40,"
S DA=0 F S DA=$O(^ORI(101.74,DA(1),40,DA)) Q:DA'>0 D ^DIK
S RIDX=0,RCNT=800 F S RIDX=$O(OBJ("neededData",RIDX)) Q:RIDX'>0 D
.I $G(OBJ("neededData",RIDX,"dataId"))="" Q
.S RIENS="+"_$I(RCNT)_","_IENS
.S FDA(101.734,RIENS,.01)=OBJ("neededData",RIDX,"dataId")
.S FDA(101.734,RIENS,1)=$G(OBJ("neededData",RIDX,"mandatoryData"))
Q
;
FDAPLUGIN(OBJ,FDA,KSUB,IENS) ;
N TEXT,TMP,TSUB
S FDA(101.75,IENS,.01)=$S($G(OBJ("name"))'="":OBJ("name"),1:"@")
S FDA(101.75,IENS,1)=$G(OBJ("routine"))
S FDA(101.75,IENS,2)=$G(OBJ("entryPoint"))
S FDA(101.75,IENS,3)=$G(OBJ("type"))
S FDA(101.75,IENS,4)=$S($G(OBJ("manatoryParameter"))="true":1,1:0)
S FDA(101.75,IENS,10)=$G(OBJ("shortDescription"))
M TMP=OBJ("description")
K TEXT D PARSETEXT(.TEXT,.TMP)
I $D(TEXT) S TSUB="DESCRIPTION "_IENS M ^TMP($J,TSUB)=TEXT S KSUB(TSUB)="",FDA(101.75,IENS,20)=$NA(^TMP(TSUB,$J))
Q
;
FDASCHEMA(OBJ,FDA,KSUB,IENS) ;
N TEXT,TMP,TSUB
S FDA(101.76,IENS,.01)=OBJ("name")
S FDA(101.76,IENS,.02)=$S($G(OBJ("contentType"))'="":OBJ("contentType"),1:"@")
S FDA(101.76,IENS,.03)=$S($G(OBJ("reservedSystem"))="true":1,1:0)
M TMP=OBJ("content")
D PARSETEXT(.TEXT,.TMP,1)
I $D(TEXT) S TSUB="content "_IENS M ^TMP(TSUB,$J)=TEXT S KSUB(TSUB)="",FDA(101.76,IENS,1)=$NA(^TMP(TSUB,$J))
Q
;
PARSETEXT(OUTPUT,VALUE,STRIP) ;
N CNT,IDX,PIECES,HASTEXT,TEMP,TEXTIN,TEXTOUT,NOUT,NTEXT,X
S STRIP=+$G(STRIP)
I $G(VALUE)="" Q
S CNT=0
S TEMP=$S(STRIP=1:$$MAXBLANK^XMXUTIL1(VALUE),1:VALUE)
D NEWLINES(.TEXTIN,.CNT,TEMP)
S IDX=0 F S IDX=$O(VALUE("\",IDX)) Q:IDX'>0 D
. S TEMP=$S(STRIP=1:$$MAXBLANK^XMXUTIL1(VALUE("\",IDX)),1:VALUE("\",IDX))
. D NEWLINES(.TEXTIN,.CNT,TEMP)
I CNT=0 Q
;TODO: Update look at pulling the width from schema, not needed now an most likely not needed at all
D FORMAT^PXRMTEXT(1,80,CNT,.TEXTIN,.NOUT,.TEXTOUT)
F X=1:1:NOUT S OUTPUT(X,0)=TEXTOUT(X)
Q
;
NEWLINES(OUTPUT,CNT,VALUE) ;
N PIECES,X
S PIECES=$L(VALUE,$C(10))
F X=1:1:PIECES D
.S CNT=CNT+1,OUTPUT(CNT)=$P(VALUE,$C(10),X)_"\\"
Q
;
PASSINVALUES(INPUTS,DATA,DFN,PIDX,SCHEMA,SUB,UISCHEMA,USER,CACHESUB) ;
M SCHEMA=INPUTS("schema"),UISCHEMA=INPUTS("uiSchema"),DATA=INPUTS("data")
S DFN=INPUTS("sourceInputs","patient"),PIDX=INPUTS("sourceInputs","id"),USER=INPUTS("sourceInputs","connectedUser")
s SUB=INPUTS("subscript"),CACHESUB=$G(INPUTS("cacheSub"))
Q
;
PLUGIN(INPUTS) ;
I INPUTS("callFrom")="editorSave" Q $$PLGSAVE(.INPUTS)
I INPUTS("callFrom")="editorBuilder" Q $$PLGBLD(.INPUTS)
Q "0^Call from entry point not found."
;
PLGBLD(INPUTS) ;
N ARRAY,CACHESUB,CNT,DIDX,DSCHEMA,DFN,HARRAY,IDX,ITEM,NAME,NODE,PIDX
N SCHEMA,STR,SUB,TSCHEMA,UISCHEMA,USER
D PASSINVALUES(.INPUTS,.DSCHEMA,.DFN,.PIDX,.SCHEMA,.SUB,.UISCHEMA,.USER,.CACHESUB)
D CODE^ORIUTL(.ARRAY,101.75,3)
M SCHEMA("properties","plugins","items","properties","pluginType","oneOf")=ARRAY
S NAME="",CNT=0 F S NAME=$O(^OR(101.75,"B",NAME)) Q:NAME="" D
.S IDX=0 F S IDX=$O(^OR(101.75,"B",NAME,IDX)) Q:IDX'>0 D
..K ITEM D GETITEM(.ITEM,IDX,101.75)
..D SETHASH(.HARRAY,IDX,.ITEM)
..S CNT=CNT+1 M TSCHEMA("plugins",CNT)=ITEM
D SETHASHTOTAL(.DSCHEMA,.HARRAY,.TSCHEMA)
M DSCHEMA=TSCHEMA
D SETFINALTMP(SUB,.SCHEMA,.UISCHEMA,.DSCHEMA)
Q 1
;
PLGSAVE(INPUTS) ;
N CIDX,DATA,ERROR,FDA,HARRAY,IDX,MSG,NAME,NEWITEM,OLDITEM,RESULT,SHARRAY
S ERROR="",RESULT=1
I $$COMPAREANDSET(.INPUTS,.DATA,.HARRAY,"plugins",.SHARRAY)=1 Q 1
D BLDFDA(101.75,"^OR(101.75)","plugins",.DATA,.ERROR,.SHARRAY)
I ERROR'="" S RESULT=-1_U_ERROR
Q RESULT
;
SCHEMA(INPUTS) ;
I INPUTS("callFrom")="editorSave" Q $$SCHEMASAVE(.INPUTS)
I INPUTS("callFrom")="editorBuilder" Q $$SCHEMABLD(.INPUTS)
Q "0^Call from entry point not found."
;
SCHEMABLD(INPUTS) ;
N CACHESUB,CNT,CIDX,DATA,DSCHEMA,DFN,HARRAY,IDX,ITEM,NAME,NODE,PIDX
N SCHEMA,STR,SUB,UISCHEMA,USER,TSCHEMA
D PASSINVALUES(.INPUTS,.DSCHEMA,.DFN,.PIDX,.SCHEMA,.SUB,.UISCHEMA,.USER,.CACHESUB)
;build ENUM types for schema
S NAME="",CNT=0 F S NAME=$O(^ORW(101.77,"B",NAME)) Q:NAME="" D
.S IDX=0 F S IDX=$O(^ORW(101.77,"B",NAME,IDX)) Q:IDX'>0 D
..S CNT=CNT+1
..S SCHEMA("properties","schemas","items","properties","contentType","oneOf",CNT,"const")=IDX
..S SCHEMA("properties","schemas","items","properties","contentType","oneOf",CNT,"title")=NAME
;
;build data array
S CNT=0
S NAME="" F S NAME=$O(^ORW(101.76,"B",NAME)) Q:NAME="" D
.S IDX=0 F S IDX=$O(^ORW(101.76,"B",NAME,IDX)) Q:IDX'>0 D
..K ITEM D GETITEM(.ITEM,IDX,101.76)
..D SETHASH(.HARRAY,IDX,.ITEM)
..S CNT=CNT+1 M TSCHEMA("schemas",CNT)=ITEM
D SETHASHTOTAL(.DSCHEMA,.HARRAY,.TSCHEMA)
M DSCHEMA=TSCHEMA
D SETFINALTMP(SUB,.SCHEMA,.UISCHEMA,.DSCHEMA)
Q 1
;
SCHEMASAVE(INPUTS) ;
N DATA,ERROR,HARRAY,RESULT,SHARRAY
S ERROR="",RESULT=1
I $$COMPAREANDSET(.INPUTS,.DATA,.HARRAY,"schemas",.SHARRAY)=1 Q 1
D BLDFDA(101.76,"^ORW(101.76)","schemas",.DATA,.ERROR,.SHARRAY)
I $G(ERROR)'="" S RESULT=-1_U_ERROR
Q RESULT
;
SETFINALTMP(SUB,SCHEMA,UISCHEMA,DSCHEMA) ;
M ^TMP(SUB,$J,"Schema")=SCHEMA
M ^TMP(SUB,$J,"UISchema")=UISCHEMA
M ^TMP(SUB,$J,"Data")=DSCHEMA
S ^TMP(SUB,$J,"success")="true"
Q
;
SETHASHARRAY(HARRAY,SHARRAY) ;
N IDX
S IDX=0 F S IDX=$O(HARRAY("hashes",IDX)) Q:IDX'>0 D
.S SHARRAY(HARRAY("hashes",IDX,"id"))=HARRAY("hashes",IDX,"value")
Q
;
SETHASH(HARRAY,ID,OBJ) ;
N CNT
S CNT=+$O(HARRAY("A"),-1)
S CNT=$I(CNT)
S HARRAY(CNT,"id")=ID
S HARRAY(CNT,"value")=$$GENAREF^XLFSHAN(160,"OBJ",1)
Q
;
SETHASHTOTAL(DSCHEMA,HARRAY,OBJ) ;
S DSCHEMA("hashValues","totalHash")=$$GENAREF^XLFSHAN(512,"OBJ",1)
M DSCHEMA("hashValues","hashes")=HARRAY
Q
;
SETNEW(OBJ,FN,GBL,IARRAY,KSUB) ;
N ERROR,FDA,IEN,IENS,IENARRAY,RESULT
S IEN=$O(@GBL@("A"),-1)+1
S IENS="+"_IEN_","
I FN=101.73 D FDACOMPONENT(.OBJ,.FDA,.KSUB,IENS)
I FN=101.75 D FDAPLUGIN(.OBJ,.FDA,.KSUB,IENS)
I FN=101.76 D FDASCHEMA(.OBJ,.FDA,.KSUB,IENS)
D UPDATE^DIE("","FDA","IENARRAY","ERROR")
I $D(ERROR) Q 0
S IARRAY(+$G(IENARRAY(IEN)))=""
Q $G(IENARRAY(IEN))
;
SETTEXT(TEXT) ;
N IDX,LIDX,RESULT
S RESULT="",LIDX=+$O(TEXT("A"),-1)
S IDX=0 F S IDX=$O(TEXT(IDX)) Q:IDX'>0 D
.S RESULT=RESULT_$G(TEXT(IDX,0))_$S(IDX<LIDX:$C(13)_$C(10),1:"")
Q RESULT
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HOREDITOR1 11630 printed May 25, 2026@12:34:26 Page 2
OREDITOR1 ; SLC/AGP - Core Editor Forms ;Dec 03, 2025@08:41:17
+1 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**508**;Dec 17, 1997;Build 39
+2 ;
+3 ; Reference to $$MAXBLANK^XMXUTIL1 supported by ICR # 2735
+4 ; Reference to FORMAT^PXRMTEXT supported by ICR # 7459
+5 ;
+6 QUIT
+7 ;
BLDFDA(FILENUM,GBL,NAME,DATA,ERROR,SHARRAY) ;
+1 NEW ADDCNT,DIDX,DIFF,FDA,IARRAY,IDX,IENS,KSUB,MSG,NODE,OBJ,ORIMGR,SUB,TEXT,UFDA,VALUE
+2 SET ADDCNT=+$ORDER(@GBL@("A"),-1)
+3 SET DIDX=0
FOR
SET DIDX=$ORDER(DATA(NAME,DIDX))
if DIDX'>0
QUIT
Begin DoDot:1
+4 KILL OBJ
MERGE OBJ=DATA(NAME,DIDX)
+5 SET IDX=+$GET(OBJ("id"))
+6 IF IDX>0
IF '$$DIFF(.OBJ,.SHARRAY,.IARRAY)
QUIT
+7 IF IDX=0
SET IDX=$$SETNEW(.OBJ,FILENUM,GBL,.IARRAY,.KSUB)
IF IDX=0
QUIT
+8 SET IENS=IDX_","
+9 IF FILENUM=101.73
DO FDACOMPONENT(.OBJ,.FDA,.KSUB,IENS)
+10 IF FILENUM=101.75
DO FDAPLUGIN(.OBJ,.FDA,.KSUB,IENS)
+11 IF FILENUM=101.76
DO FDASCHEMA(.OBJ,.FDA,.KSUB,IENS)
End DoDot:1
BLDFDAX ;
+1 SET ORIMGR=1
+2 IF $DATA(FDA)
DO FILE^DIE("","FDA","MSG")
+3 IF $DATA(MSG)
SET ERROR="Error updating "_NAME_" file"
+4 IF $DATA(IARRAY)
DO DELETE(GBL,.IARRAY)
+5 SET SUB=""
FOR
SET SUB=$ORDER(KSUB(SUB))
if SUB=""
QUIT
KILL ^TMP(SUB,$JOB)
+6 QUIT
+7 ;
DELETE(GBL,IARRAY) ;
+1 NEW DA,DIK,ORIMGR
+2 SET DIK=$EXTRACT(GBL,1,$LENGTH(GBL)-1)_","
+3 SET DA=0
FOR
SET DA=$ORDER(@GBL@(DA))
if DA'>0
QUIT
Begin DoDot:1
+4 IF '$DATA(IARRAY(DA))
SET ORIMGR=1
DO ^DIK
End DoDot:1
+5 QUIT
+6 ;
COMPAREANDSET(INPUTS,DATA,HARRAY,SUB,SHARRAY) ;
+1 MERGE DATA=INPUTS("data")
+2 MERGE HARRAY=DATA("hashValues")
KILL DATA("hashValues")
+3 MERGE DATA=INPUTS("data",SUB),HARRAY=DATA("hashValues")
KILL DATA("hashValues")
+4 IF HARRAY("totalHash")=$$GENAREF^XLFSHAN(512,"DATA",1)
QUIT 1
+5 DO SETHASHARRAY(.HARRAY,.SHARRAY)
+6 QUIT 0
+7 ;
COMPONENTS(INPUTS) ;
+1 IF INPUTS("callFrom")="editorSave"
QUIT $$COMPONENTSAVE(.INPUTS)
+2 IF INPUTS("callFrom")="editorBuilder"
QUIT $$COMPONENTBLD(.INPUTS)
+3 QUIT "0^Call from entry point not found."
+4 ;
COMPONENTBLD(INPUTS) ;
+1 NEW ARRAY,CACHESUB,CNT,DIDX,DSCHEMA,DFN,HARRAY,IDX,ITEM,MARRAY,NAME,NODE,PIDX
+2 NEW SCHEMA,STR,SUB,TSCHEMA,UISCHEMA,USER
+3 DO PASSINVALUES(.INPUTS,.DSCHEMA,.DFN,.PIDX,.SCHEMA,.SUB,.UISCHEMA,.USER,.CACHESUB)
+4 DO CODE^ORIUTL(.ARRAY,101.73,1)
+5 DO CODE^ORIUTL(.MARRAY,101.734,1)
+6 MERGE SCHEMA("properties","components","items","properties","componentType","oneOf")=ARRAY
+7 MERGE SCHEMA("properties","components","items","properties","neededData","items","properties","mandatoryData","oneOf")=MARRAY
+8 SET NAME=""
SET CNT=0
FOR
SET NAME=$ORDER(^ORI(101.73,"B",NAME))
if NAME=""
QUIT
Begin DoDot:1
+9 SET IDX=0
FOR
SET IDX=$ORDER(^ORI(101.73,"B",NAME,IDX))
if IDX'>0
QUIT
Begin DoDot:2
+10 KILL ITEM
DO GETITEM(.ITEM,IDX,101.73)
+11 DO SETHASH(.HARRAY,IDX,.ITEM)
+12 SET CNT=CNT+1
MERGE TSCHEMA("components",CNT)=ITEM
End DoDot:2
End DoDot:1
+13 DO SETHASHTOTAL(.DSCHEMA,.HARRAY,.TSCHEMA)
+14 MERGE DSCHEMA=TSCHEMA
+15 DO SETFINALTMP(SUB,.SCHEMA,.UISCHEMA,.DSCHEMA)
+16 QUIT 1
+17 ;
COMPONENTSAVE(INPUTS) ;
+1 NEW DATA,ERROR,HARRAY,IDX,OBJ,RESULT,SHARRAY
+2 SET ERROR=""
SET RESULT=1
+3 IF $$COMPAREANDSET(.INPUTS,.DATA,.HARRAY,"components",.SHARRAY)=1
QUIT 1
+4 DO BLDFDA(101.73,"^ORI(101.73)","components",.DATA,.ERROR,.SHARRAY)
+5 IF ERROR'=""
SET RESULT=-1_U_ERROR
+6 QUIT RESULT
+7 ;
DIFF(OBJ,HARRAY,IARRAY) ;
+1 SET IARRAY(OBJ("id"))=""
+2 IF HARRAY(OBJ("id"))'=$$GENAREF^XLFSHAN(160,"OBJ",1)
QUIT 1
+3 QUIT 0
+4 ;
GETITEM(ITEM,IDX,FN) ;
+1 NEW NODE,STR,TEXT,TIDX
+2 IF FN=101.75
Begin DoDot:1
+3 SET NODE=$GET(^OR(101.75,IDX,0))
+4 SET ITEM("id")=IDX
SET ITEM("name")=$PIECE(NODE,U)
+5 SET ITEM("routine")=$PIECE(NODE,U,2)
SET ITEM("entryPoint")=$PIECE(NODE,U,3)
+6 IF $PIECE(NODE,U,4)'=""
SET ITEM("pluginType")=$PIECE(NODE,U,4)
+7 SET ITEM("mandatoryParameter")=$SELECT($PIECE(NODE,U,5)=1:"true",1:"false")
+8 IF $PIECE($GET(^OR(101.75,IDX,10)),U)'=""
SET ITEM("shortDescription")=$PIECE($GET(^OR(101.75,IDX,10)),U)
+9 KILL STR
MERGE TEXT=^OR(101.75,IDX,20)
SET STR=$$SETTEXT(.TEXT)
IF STR'=""
SET ITEM("description")=STR
End DoDot:1
QUIT
+10 IF FN=101.73
Begin DoDot:1
+11 SET NODE=$GET(^ORI(101.73,IDX,0))
+12 SET ITEM("id")=IDX
SET ITEM("name")=$PIECE(NODE,U)
SET ITEM("componentType")=$PIECE(NODE,U,2)
+13 SET ITEM("componentName")=$PIECE(NODE,U,3)
+14 SET NODE=$GET(^ORI(101.73,IDX,30))
IF NODE'=""
SET ITEM("errorMessageText")=NODE
+15 SET NODE=$GET(^ORI(101.73,IDX,"CPRS"))
IF $PIECE(NODE,U)'=""
SET ITEM("pageId")=+NODE
+16 SET TIDX=0
FOR
SET TIDX=$ORDER(^ORI(101.73,IDX,40,TIDX))
if TIDX'>0
QUIT
Begin DoDot:2
+17 SET NODE=$GET(^ORI(101.73,IDX,40,TIDX,0))
+18 SET ITEM("neededData",TIDX,"dataId")=$PIECE(NODE,U)
+19 IF $PIECE(NODE,U,2)'=""
SET ITEM("neededData",TIDX,"mandatoryParameter")=$PIECE(NODE,U,2)
End DoDot:2
+20 KILL STR,TEXT
MERGE TEXT=^ORI(101.73,IDX,50)
SET STR=$$SETTEXT(.TEXT)
IF STR'=""
SET ITEM("itemIcon")=STR
+21 KILL STR,TEXT
MERGE TEXT=^ORI(101.73,IDX,20)
SET STR=$$SETTEXT(.TEXT)
IF STR'=""
SET ITEM("description")=STR
End DoDot:1
QUIT
+22 IF FN=101.76
Begin DoDot:1
+23 SET NODE=$GET(^ORW(101.76,IDX,0))
+24 SET ITEM("id")=IDX
SET ITEM("name")=$PIECE(NODE,U)
+25 SET ITEM("contentType")=$PIECE(NODE,U,2)
+26 SET ITEM("reservedSystem")=$SELECT($PIECE(NODE,U,3)=1:"true",1:"false")
+27 MERGE TEXT=^ORW(101.76,IDX,1)
SET STR=$$SETTEXT(.TEXT)
IF STR'=""
SET ITEM("content")=STR
End DoDot:1
+28 QUIT
+29 ;
FDACOMPONENT(OBJ,FDA,KSUB,IENS) ;
+1 NEW DA,DIK,RCNT,REQ,TEXT,RIDX,RIENS,TMP,TSUB
+2 SET FDA(101.73,IENS,.01)=$SELECT($GET(OBJ("name"))'="":OBJ("name"),1:"@")
+3 SET FDA(101.73,IENS,1)=$SELECT($GET(OBJ("componentType"))'="":OBJ("componentType"),1:"@")
+4 SET FDA(101.73,IENS,2)=$GET(OBJ("componentName"))
+5 SET FDA(101.73,IENS,30)=$GET(OBJ("errorMessageText"))
+6 SET FDA(101.73,IENS,60)=$SELECT($GET(OBJ("pageId"))'="":OBJ("pageId"),1:"@")
+7 KILL TEXT,TMP
MERGE TMP=OBJ("imageIcon")
DO PARSETEXT(.TEXT,.TMP)
+8 IF $DATA(TEXT)
SET TSUB="IMAGE "_IENS
MERGE ^TMP(TSUB,$JOB)=TEXT
SET KSUB(TSUB)=""
SET FDA(101.73,IENS,50)=$NAME(^TMP(TSUB,$JOB))
+9 KILL TEXT,TMP
MERGE TMP=OBJ("description")
DO PARSETEXT(.TEXT,.TMP)
+10 IF $DATA(TEXT)
SET TSUB="DESCRIPTION "_IENS
MERGE ^TMP(TSUB,$JOB)=TEXT
SET KSUB(TSUB)=""
SET FDA(101.73,IENS,20)=$NAME(^TMP(TSUB,$JOB))
+11 SET DA(1)=+IENS
SET DIK="^ORI(101.74,"_DA(1)_",40,"
+12 SET DA=0
FOR
SET DA=$ORDER(^ORI(101.74,DA(1),40,DA))
if DA'>0
QUIT
DO ^DIK
+13 SET RIDX=0
SET RCNT=800
FOR
SET RIDX=$ORDER(OBJ("neededData",RIDX))
if RIDX'>0
QUIT
Begin DoDot:1
+14 IF $GET(OBJ("neededData",RIDX,"dataId"))=""
QUIT
+15
*** ERROR ***
SET RIENS="+"_$I(RCNT)_","_IENS
+16 SET FDA(101.734,RIENS,.01)=OBJ("neededData",RIDX,"dataId")
+17 SET FDA(101.734,RIENS,1)=$GET(OBJ("neededData",RIDX,"mandatoryData"))
End DoDot:1
+18 QUIT
+19 ;
FDAPLUGIN(OBJ,FDA,KSUB,IENS) ;
+1 NEW TEXT,TMP,TSUB
+2 SET FDA(101.75,IENS,.01)=$SELECT($GET(OBJ("name"))'="":OBJ("name"),1:"@")
+3 SET FDA(101.75,IENS,1)=$GET(OBJ("routine"))
+4 SET FDA(101.75,IENS,2)=$GET(OBJ("entryPoint"))
+5 SET FDA(101.75,IENS,3)=$GET(OBJ("type"))
+6 SET FDA(101.75,IENS,4)=$SELECT($GET(OBJ("manatoryParameter"))="true":1,1:0)
+7 SET FDA(101.75,IENS,10)=$GET(OBJ("shortDescription"))
+8 MERGE TMP=OBJ("description")
+9 KILL TEXT
DO PARSETEXT(.TEXT,.TMP)
+10 IF $DATA(TEXT)
SET TSUB="DESCRIPTION "_IENS
MERGE ^TMP($JOB,TSUB)=TEXT
SET KSUB(TSUB)=""
SET FDA(101.75,IENS,20)=$NAME(^TMP(TSUB,$JOB))
+11 QUIT
+12 ;
FDASCHEMA(OBJ,FDA,KSUB,IENS) ;
+1 NEW TEXT,TMP,TSUB
+2 SET FDA(101.76,IENS,.01)=OBJ("name")
+3 SET FDA(101.76,IENS,.02)=$SELECT($GET(OBJ("contentType"))'="":OBJ("contentType"),1:"@")
+4 SET FDA(101.76,IENS,.03)=$SELECT($GET(OBJ("reservedSystem"))="true":1,1:0)
+5 MERGE TMP=OBJ("content")
+6 DO PARSETEXT(.TEXT,.TMP,1)
+7 IF $DATA(TEXT)
SET TSUB="content "_IENS
MERGE ^TMP(TSUB,$JOB)=TEXT
SET KSUB(TSUB)=""
SET FDA(101.76,IENS,1)=$NAME(^TMP(TSUB,$JOB))
+8 QUIT
+9 ;
PARSETEXT(OUTPUT,VALUE,STRIP) ;
+1 NEW CNT,IDX,PIECES,HASTEXT,TEMP,TEXTIN,TEXTOUT,NOUT,NTEXT,X
+2 SET STRIP=+$GET(STRIP)
+3 IF $GET(VALUE)=""
QUIT
+4 SET CNT=0
+5 SET TEMP=$SELECT(STRIP=1:$$MAXBLANK^XMXUTIL1(VALUE),1:VALUE)
+6 DO NEWLINES(.TEXTIN,.CNT,TEMP)
+7 SET IDX=0
FOR
SET IDX=$ORDER(VALUE("\",IDX))
if IDX'>0
QUIT
Begin DoDot:1
+8 SET TEMP=$SELECT(STRIP=1:$$MAXBLANK^XMXUTIL1(VALUE("\",IDX)),1:VALUE("\",IDX))
+9 DO NEWLINES(.TEXTIN,.CNT,TEMP)
End DoDot:1
+10 IF CNT=0
QUIT
+11 ;TODO: Update look at pulling the width from schema, not needed now an most likely not needed at all
+12 DO FORMAT^PXRMTEXT(1,80,CNT,.TEXTIN,.NOUT,.TEXTOUT)
+13 FOR X=1:1:NOUT
SET OUTPUT(X,0)=TEXTOUT(X)
+14 QUIT
+15 ;
NEWLINES(OUTPUT,CNT,VALUE) ;
+1 NEW PIECES,X
+2 SET PIECES=$LENGTH(VALUE,$CHAR(10))
+3 FOR X=1:1:PIECES
Begin DoDot:1
+4 SET CNT=CNT+1
SET OUTPUT(CNT)=$PIECE(VALUE,$CHAR(10),X)_"\\"
End DoDot:1
+5 QUIT
+6 ;
PASSINVALUES(INPUTS,DATA,DFN,PIDX,SCHEMA,SUB,UISCHEMA,USER,CACHESUB) ;
+1 MERGE SCHEMA=INPUTS("schema"),UISCHEMA=INPUTS("uiSchema"),DATA=INPUTS("data")
+2 SET DFN=INPUTS("sourceInputs","patient")
SET PIDX=INPUTS("sourceInputs","id")
SET USER=INPUTS("sourceInputs","connectedUser")
+3 SET SUB=INPUTS("subscript")
SET CACHESUB=$GET(INPUTS("cacheSub"))
+4 QUIT
+5 ;
PLUGIN(INPUTS) ;
+1 IF INPUTS("callFrom")="editorSave"
QUIT $$PLGSAVE(.INPUTS)
+2 IF INPUTS("callFrom")="editorBuilder"
QUIT $$PLGBLD(.INPUTS)
+3 QUIT "0^Call from entry point not found."
+4 ;
PLGBLD(INPUTS) ;
+1 NEW ARRAY,CACHESUB,CNT,DIDX,DSCHEMA,DFN,HARRAY,IDX,ITEM,NAME,NODE,PIDX
+2 NEW SCHEMA,STR,SUB,TSCHEMA,UISCHEMA,USER
+3 DO PASSINVALUES(.INPUTS,.DSCHEMA,.DFN,.PIDX,.SCHEMA,.SUB,.UISCHEMA,.USER,.CACHESUB)
+4 DO CODE^ORIUTL(.ARRAY,101.75,3)
+5 MERGE SCHEMA("properties","plugins","items","properties","pluginType","oneOf")=ARRAY
+6 SET NAME=""
SET CNT=0
FOR
SET NAME=$ORDER(^OR(101.75,"B",NAME))
if NAME=""
QUIT
Begin DoDot:1
+7 SET IDX=0
FOR
SET IDX=$ORDER(^OR(101.75,"B",NAME,IDX))
if IDX'>0
QUIT
Begin DoDot:2
+8 KILL ITEM
DO GETITEM(.ITEM,IDX,101.75)
+9 DO SETHASH(.HARRAY,IDX,.ITEM)
+10 SET CNT=CNT+1
MERGE TSCHEMA("plugins",CNT)=ITEM
End DoDot:2
End DoDot:1
+11 DO SETHASHTOTAL(.DSCHEMA,.HARRAY,.TSCHEMA)
+12 MERGE DSCHEMA=TSCHEMA
+13 DO SETFINALTMP(SUB,.SCHEMA,.UISCHEMA,.DSCHEMA)
+14 QUIT 1
+15 ;
PLGSAVE(INPUTS) ;
+1 NEW CIDX,DATA,ERROR,FDA,HARRAY,IDX,MSG,NAME,NEWITEM,OLDITEM,RESULT,SHARRAY
+2 SET ERROR=""
SET RESULT=1
+3 IF $$COMPAREANDSET(.INPUTS,.DATA,.HARRAY,"plugins",.SHARRAY)=1
QUIT 1
+4 DO BLDFDA(101.75,"^OR(101.75)","plugins",.DATA,.ERROR,.SHARRAY)
+5 IF ERROR'=""
SET RESULT=-1_U_ERROR
+6 QUIT RESULT
+7 ;
SCHEMA(INPUTS) ;
+1 IF INPUTS("callFrom")="editorSave"
QUIT $$SCHEMASAVE(.INPUTS)
+2 IF INPUTS("callFrom")="editorBuilder"
QUIT $$SCHEMABLD(.INPUTS)
+3 QUIT "0^Call from entry point not found."
+4 ;
SCHEMABLD(INPUTS) ;
+1 NEW CACHESUB,CNT,CIDX,DATA,DSCHEMA,DFN,HARRAY,IDX,ITEM,NAME,NODE,PIDX
+2 NEW SCHEMA,STR,SUB,UISCHEMA,USER,TSCHEMA
+3 DO PASSINVALUES(.INPUTS,.DSCHEMA,.DFN,.PIDX,.SCHEMA,.SUB,.UISCHEMA,.USER,.CACHESUB)
+4 ;build ENUM types for schema
+5 SET NAME=""
SET CNT=0
FOR
SET NAME=$ORDER(^ORW(101.77,"B",NAME))
if NAME=""
QUIT
Begin DoDot:1
+6 SET IDX=0
FOR
SET IDX=$ORDER(^ORW(101.77,"B",NAME,IDX))
if IDX'>0
QUIT
Begin DoDot:2
+7 SET CNT=CNT+1
+8 SET SCHEMA("properties","schemas","items","properties","contentType","oneOf",CNT,"const")=IDX
+9 SET SCHEMA("properties","schemas","items","properties","contentType","oneOf",CNT,"title")=NAME
End DoDot:2
End DoDot:1
+10 ;
+11 ;build data array
+12 SET CNT=0
+13 SET NAME=""
FOR
SET NAME=$ORDER(^ORW(101.76,"B",NAME))
if NAME=""
QUIT
Begin DoDot:1
+14 SET IDX=0
FOR
SET IDX=$ORDER(^ORW(101.76,"B",NAME,IDX))
if IDX'>0
QUIT
Begin DoDot:2
+15 KILL ITEM
DO GETITEM(.ITEM,IDX,101.76)
+16 DO SETHASH(.HARRAY,IDX,.ITEM)
+17 SET CNT=CNT+1
MERGE TSCHEMA("schemas",CNT)=ITEM
End DoDot:2
End DoDot:1
+18 DO SETHASHTOTAL(.DSCHEMA,.HARRAY,.TSCHEMA)
+19 MERGE DSCHEMA=TSCHEMA
+20 DO SETFINALTMP(SUB,.SCHEMA,.UISCHEMA,.DSCHEMA)
+21 QUIT 1
+22 ;
SCHEMASAVE(INPUTS) ;
+1 NEW DATA,ERROR,HARRAY,RESULT,SHARRAY
+2 SET ERROR=""
SET RESULT=1
+3 IF $$COMPAREANDSET(.INPUTS,.DATA,.HARRAY,"schemas",.SHARRAY)=1
QUIT 1
+4 DO BLDFDA(101.76,"^ORW(101.76)","schemas",.DATA,.ERROR,.SHARRAY)
+5 IF $GET(ERROR)'=""
SET RESULT=-1_U_ERROR
+6 QUIT RESULT
+7 ;
SETFINALTMP(SUB,SCHEMA,UISCHEMA,DSCHEMA) ;
+1 MERGE ^TMP(SUB,$JOB,"Schema")=SCHEMA
+2 MERGE ^TMP(SUB,$JOB,"UISchema")=UISCHEMA
+3 MERGE ^TMP(SUB,$JOB,"Data")=DSCHEMA
+4 SET ^TMP(SUB,$JOB,"success")="true"
+5 QUIT
+6 ;
SETHASHARRAY(HARRAY,SHARRAY) ;
+1 NEW IDX
+2 SET IDX=0
FOR
SET IDX=$ORDER(HARRAY("hashes",IDX))
if IDX'>0
QUIT
Begin DoDot:1
+3 SET SHARRAY(HARRAY("hashes",IDX,"id"))=HARRAY("hashes",IDX,"value")
End DoDot:1
+4 QUIT
+5 ;
SETHASH(HARRAY,ID,OBJ) ;
+1 NEW CNT
+2 SET CNT=+$ORDER(HARRAY("A"),-1)
+3
*** ERROR ***
SET CNT=$I(CNT)
+4 SET HARRAY(CNT,"id")=ID
+5 SET HARRAY(CNT,"value")=$$GENAREF^XLFSHAN(160,"OBJ",1)
+6 QUIT
+7 ;
SETHASHTOTAL(DSCHEMA,HARRAY,OBJ) ;
+1 SET DSCHEMA("hashValues","totalHash")=$$GENAREF^XLFSHAN(512,"OBJ",1)
+2 MERGE DSCHEMA("hashValues","hashes")=HARRAY
+3 QUIT
+4 ;
SETNEW(OBJ,FN,GBL,IARRAY,KSUB) ;
+1 NEW ERROR,FDA,IEN,IENS,IENARRAY,RESULT
+2 SET IEN=$ORDER(@GBL@("A"),-1)+1
+3 SET IENS="+"_IEN_","
+4 IF FN=101.73
DO FDACOMPONENT(.OBJ,.FDA,.KSUB,IENS)
+5 IF FN=101.75
DO FDAPLUGIN(.OBJ,.FDA,.KSUB,IENS)
+6 IF FN=101.76
DO FDASCHEMA(.OBJ,.FDA,.KSUB,IENS)
+7 DO UPDATE^DIE("","FDA","IENARRAY","ERROR")
+8 IF $DATA(ERROR)
QUIT 0
+9 SET IARRAY(+$GET(IENARRAY(IEN)))=""
+10 QUIT $GET(IENARRAY(IEN))
+11 ;
SETTEXT(TEXT) ;
+1 NEW IDX,LIDX,RESULT
+2 SET RESULT=""
SET LIDX=+$ORDER(TEXT("A"),-1)
+3 SET IDX=0
FOR
SET IDX=$ORDER(TEXT(IDX))
if IDX'>0
QUIT
Begin DoDot:1
+4 SET RESULT=RESULT_$GET(TEXT(IDX,0))_$SELECT(IDX<LIDX:$CHAR(13)_$CHAR(10),1:"")
End DoDot:1
+5 QUIT RESULT