Index: ccr/trunk/p/C0CMXP.m
===================================================================
--- ccr/trunk/p/C0CMXP.m	(revision 727)
+++ ccr/trunk/p/C0CMXP.m	(revision 728)
@@ -102,4 +102,36 @@
  I $$GET1^DIQ(C0CXPF,TEMPID_",",C0CXTFLD,,OUTXML)'=OUTXML D  Q  ;
  . W "ERROR RETRIEVING TEMPLATE",!
+ Q
+ ;
+COPYWP(ZFLD,ZSRCREC,ZDESTREC,ZSRCF,ZDESTF) ; COPIES A WORD PROCESSING FIELD
+ ; FROM ONE RECORD TO ANOTHER RECORD 
+ ; ZFLD IS EITHER A NUMBERIC FIELD OR A NAME IN ZSRCF
+ ; ZSRCF IS THE SOURCE FILE, IN FILE REDIRECT FORMAT
+ ; IF ZSRCF IS OMMITED, THE DEFAULT C0C XML MISC FILE WILL BE ASSUMED
+ ; ZDESTF IS DESTINATION FILE. IF OMMITED, IS ASSUMED TO BE THE SAME
+ ; A ZSRCF
+ I '$D(ZSRCF) D  ;
+ . S ZSRCF="ZSRCF"
+ . D INITFARY^C0CSOAP(ZSRCF)
+ I '$D(ZDESTF) D  ;
+ . S ZDESTF="ZDESTF"
+ . M @ZDESTF=@ZSRCF
+ N ZSF,ZDF,ZSFREF,ZDFREF
+ S ZSF=@ZSRCF@("XML FILE NUMBER")
+ S ZSFREF=$$FILEREF^C0CRNF(ZSF)
+ S ZDF=@ZDESTF@("XML FILE NUMBER")
+ S ZDFREF=$$FILEREF^C0CRNF(ZDF)
+ N ZSIEN,ZDIEN
+ S ZSIEN=$O(@ZSFREF@("B",ZSRCREC,""))
+ I ZSIEN="" W !,"ERROR SOURCE RECORD NOT FOUND" Q  ;
+ S ZDIEN=$O(@ZDFREF@("B",ZDESTREC,""))
+ I ZDIEN="" W !,"ERROR DESTINATION RECORD NOT FOUND" Q  ;
+ N ZFLDNUM
+ I +ZFLD=0 S ZFLDNUM=@ZSRCF@(ZFLD) ; IF FIELD IS PASSED BY NAME
+ E  S ZFLDNUM=ZFLD ; IF FIELD IS PASSED BY NUMBER
+ N ZWP,ZWPN
+ S ZWPN=$$GET1^DIQ(ZSF,ZSIEN_",",ZFLDNUM,,"ZWP") ; GET WP FROM SOURCE
+ I ZWPN'="ZWP" W !,"ERROR SOURCE FIELD EMPTY" Q  ;
+ D WP^DIE(ZDF,ZDIEN_",",ZFLDNUM,,"ZWP") ; PUT WP FIELD TO DEST
  Q
  ;
Index: ccr/trunk/p/C0CSOAP.m
===================================================================
--- ccr/trunk/p/C0CSOAP.m	(revision 727)
+++ ccr/trunk/p/C0CSOAP.m	(revision 728)
@@ -68,5 +68,5 @@
  Q
  ;
-SOAP(C0CRTN,C0CTID,C0CVA,C0CVOR,ALTXML) ; MAKES A SOAP CALL FOR 
+SOAP(C0CRTN,C0CTID,C0CVA,C0CVOR,ALTXML,IFARY) ; MAKES A SOAP CALL FOR 
  ; TEMPLATE ID C0CTID
  ; RETURNS THE XML RESULT IN C0CRTN, PASSED BY NAME
@@ -110,5 +110,8 @@
  ; END ARTIFACTS
  ;
- D INITFARY("C0CF") ; SET FILE NUMBER AND PARAMATERS 
+ I '$D(IFARY) D INITFARY("C0CF") ; SET FILE NUMBER AND PARAMATERS 
+ E  D  ; 
+ . K C0CF
+ . M C0CF=@IFARY
  S C0CXF=C0CF("XML FILE NUMBER") ; FILE NUMBER FOR THE XML TEMPLATE FILE
  I +C0CTID=0 D  ; A STRING WAS PASSED FOR THE TEMPLATE NAME
@@ -139,8 +142,9 @@
  I $G(C0CPROXY) S C0CURL=C0CPURL
  K C0CRSLT,C0CRHDR
+ B
  S ok=$$httpPOST^%zewdGTM(C0CURL,.XML,C0CMIME,.C0CRSLT,.HEADER,"",.gpl5,.C0CRHDR)
  K C0CRXML
  D NORMAL("C0CRXML","C0CRSLT(1)") ;RETURN XML IN AN ARRAY
- N C0CFR S C0CFR=C0CF("REPLY TEMPLATE")
+ N C0CFR S C0CFR=$G(C0CF("REPLY TEMPLATE"))
  S C0CR=$$GET1^DIQ(C0CXF,C0CUTID_",",C0CFR,"I") ; REPLY TEMPLATE
  ; reply templates are optional and are specified by populating a
Index: ccr/trunk/p/C0CXPATH.m
===================================================================
--- ccr/trunk/p/C0CXPATH.m	(revision 727)
+++ ccr/trunk/p/C0CXPATH.m	(revision 728)
@@ -340,4 +340,6 @@
  N TMP,I,J,QXPATH
  S FIRST=1
+ I '$D(@IARY@(0)) D  ; LINE COUNT NOT IN ZERO NODE
+ . S @IARY@(0)=$O(@IARY@("//"),-1) ; THIS SHOULD USUALLY WORK
  S LAST=@IARY@(0) ; FIRST AND LAST DEFAULT TO ROOT
  I XPATH'="//" D  ; NOT A ROOT QUERY
@@ -461,7 +463,8 @@
  I $G(DEBUG) W "DOING INSERT ",INSXML,INSNEW,INSXPATH,!
  I $G(DEBUG) F G1=1:1:@INSXML@(0) W @INSXML@(G1),!
- I '$D(@INSXML@(0)) D  ; INSERT INTO AN EMPTY ARRAY
+ I '$D(@INSXML@(1)) D  ; INSERT INTO AN EMPTY ARRAY
  . D CP^C0CXPATH(INSNEW,INSXML) ; JUST COPY INTO THE OUTPUT
- I $D(@INSXML@(0)) D  ; IF ORIGINAL ARRAY IS NOT EMPTY
+ I $D(@INSXML@(1)) D  ; IF ORIGINAL ARRAY IS NOT EMPTY
+ . I '$D(@INSXML@(0)) S @INSXML@(0)=$O(@INSXML@(""),-1) ;SET LENGTH
  . I $D(INSXPATH) D  ; XPATH PROVIDED
  . . D QOPEN("INSBLD",INSXML,INSXPATH) ; COPY THE BEFORE
@@ -469,4 +472,5 @@
  . I '$D(INSXPATH) D  ; NO XPATH PROVIDED, OPEN AT ROOT
  . . D QOPEN("INSBLD",INSXML,"//") ; OPEN WITH ROOT XPATH
+ . I '$D(@INSNEW@(0)) S @INSNEW@(0)=$O(@INSNEW@(""),-1) ;SIZE OF XML
  . D QUEUE("INSBLD",INSNEW,1,@INSNEW@(0)) ; COPY IN NEW XML
  . I $D(INSXPATH) D  ; XPATH PROVIDED
@@ -527,4 +531,20 @@
  . D QUEUE("REBLD",REXML,XLAST+1,@REXML@(0)) ; THE REST
  I $G(DEBUG) W "REPLACE PREBUILD",!
+ I $G(DEBUG) D PARY("REBLD")
+ D BUILD("REBLD","RTMP")
+ K @REXML ; KILL WHAT WAS THERE
+ D CP("RTMP",REXML) ; COPY IN THE RESULT
+ Q
+ ;
+DELETE(REXML,REXPATH)	   ; DELETE THE XML AT THE XPATH POINT
+ ; REXML IS PASSED BY NAME XPATH IS A VALUE
+ N REBLD,XFIRST,XLAST,OLD,XNODE,RETMP
+ S OLD=$NA(^TMP($J,"REPLACE_OLD"))
+ D QUERY(REXML,REXPATH,OLD) ; CREATE INDEX, TEST XPATH, MAKE OLD
+ S XNODE=@REXML@(REXPATH) ; PULL OUT FIRST AND LAST LINE PTRS
+ S XFIRST=$P(XNODE,"^",1)
+ S XLAST=$P(XNODE,"^",2)
+ D QUEUE("REBLD",REXML,1,XFIRST-1) ; THE BEFORE
+ D QUEUE("REBLD",REXML,XLAST+1,@REXML@(0)) ; THE REST
  I $G(DEBUG) D PARY("REBLD")
  D BUILD("REBLD","RTMP")
