Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: BMXADOVJ

BMXADOVJ.m

Go to the documentation of this file.
  1. BMXADOVJ ; IHS/CIHA/GIS - RPC CALL: GENERATE DATA FOR AN ADO DATASET ;
  1. ;;4.0;BMX;;JUN 28, 2010
  1. ; THIS ROUTINE MANAGES THE JOINS
  1. ;
  1. ;
  1. ;
  1. ; THE FIFTH PARAMETER OF SS^BMXADO CONTAINS THE JOIN INSTRUCTIONS
  1. ; SYNTAX: DESCENDANT SCHEMA IEN (DETAILS FILE), JOIN FIELD FROM MASTER FILE
  1. ; THE FIRST "," PIECE STATES THAT THE MASTER FILE IS JOINED BY ITS .02 FIELD TO THE DETAILS FILE
  1. ; THE SECOND "," PIECE STARTES THAT THE DETAILS FILE IS DEFINED BY SCHEMA #6
  1. ; AN OPTIONAL 3RD "," PIECE MAY CONTAIN A SECONDARY VSTG TO MORE PRECISELY DEFINE JOIN ITERATION
  1. ; E.G., "...~6.,.02,AA~1/1/2004~2/1/2004~~~~~|WT|R"
  1. ; IN THIS CASE, THE SECONDARY VSTG SPECIFIES THAT THE AA INDEX BE USED TO CONTROL THE ITERATOR
  1. ; THE START AND STOP DATES ARE IN EFFECT BUT MAX IS IGNORED/IRRELEVANT
  1. ; THE 1ST "|" PIECE OF THE PARAM SECTION WILL BE AUTOMATICALLY STUFFED WITH PATEINT DFN(S) DURING ITERATION
  1. ; IF MULTIPLE JOINS ARE REQUESTED, THEY ARE SPARATED BY THE '@JOIN@' DELIMTER
  1. ; "E.G., 6,.02@JOIN@1,.03@JOIN@2,.02@JOIN@9,SUB"
  1. ; IN THIS EXAPLE THE MASTER FILE IS JOIND TO THE DETAILS FILES ASSOCIATED WITH SCHEMAS 6, 1, AND 9
  1. ; NOTE THAT THE 3RD JOIN DEINED IN THE STRING SPECIFIES A SUBFILE REALTION RATHER THAN A "POINTER" RELATION
  1. ; IF A SECOND RECORD SET IS CREATED TO FULFILL A JOIN REQUEST, IT WILL ONLY CONTAIN THE ROWS NECESSARY TO COMPLETE THE JOIN
  1. ;
  1. JOIN(SMASTER,JSTG) ;EP - APPEND ADDITIONAL ANRS TO FULFILL JOIN REQUESTS
  1. N TMP,JOIN,JINST,FMASTER
  1. I '$L($G(JSTG)) Q ; JOIN STRING MUST NOT BE NULL
  1. S FMASTER=$P($G(^BMXADO(+$G(SMASTER),0)),U,2) I 'FMASTER Q ; MASTER SCHEMA & FILE MUST EXIST
  1. S TMP=$NA(^TMP("BMX JOIN",$J)) K @TMP ; JOIN INFO TEMP STORAGE ARRAY
  1. S @TMP@(0,SMASTER)=$$RANGE ; GET DATA NODE RANGE FOR THE MASTER ANR
  1. I '$D(@TMP@(0)) Q ; DATA MUST EXIST IN THE MASTER FILE OR QUIT
  1. F JOIN=1:1 S JINST=$P(JSTG,"@JOIN@",JOIN) Q:JINST="" D J(SMASTER,JINST) ; MAIN LOOP FOR DOING JOINS
  1. K @TMP
  1. Q
  1. ;
  1. RANGE() ; GET DATA NODE RANGE FOR LAST SCHEMA ENTERED
  1. N X,FIRST,LAST,Y
  1. S (X,LAST)=$O(@OUT@(999999999),-1)
  1. F S X=$O(@OUT@(X),-1) Q:'X S Y=@OUT@(X) Q:Y'[$C(30) S FIRST=X
  1. I '$G(FIRST) Q ""
  1. S FIRST=FIRST+1
  1. Q (FIRST_U_LAST)
  1. ;
  1. J(SMASTER,JSTG) ; JOIN DETAILS FILE TO MASTER FILE
  1. ; SMASTER=MASTER SCHMA IEN, SDETAIL=DETAILS SCHEMA IEN
  1. N JARR,SEC,ERR,JIEN,SUB,IX,PARENT,JFLD,DFLD,NODE,X,STOP,VSTG2,SDETAIL,JFLD
  1. S SDETAIL=$P(JSTG,C),JFLD=$P(JSTG,C,2),DFLD=$P(JSTG,C,3),VSTG2=$P(JSTG,C,4,999)
  1. I JFLD="SUB" S JFLD=.001,DFLD=.0001
  1. I JFLD=.001,DFLD=.0001 S SUB=1,VSTG2="~~~~~SIT~BMXADOVJ~" ; MAKE SUBFILE ITERATOR VSTG
  1. D IEN(SMASTER,SDETAIL,JFLD) ; GET A LIST OF JOIN IENS FROM THE MASTER FILE
  1. I '$D(@TMP@(1)) Q ; NO MASTER FILE IENS FOR JOINS, SO QUIT
  1. N FIEN,DAS,SIEN,VSTG,JSTG
  1. S DAS="",SIEN=SDETAIL,VSTG=VSTG2
  1. S FIEN=$P($G(^BMXADO(SIEN,0)),U,2) I 'FIEN Q
  1. D JEP^BMXADO ; BUILD THE JOIN ANR
  1. Q
  1. ;
  1. IEN(SMASTER,SDETAIL,JFLD) ; GET THE MASTER FILE IENS FOR BUILDING THE JOIN DATA SET
  1. N FIEN,%,FIRST,LAST,NODE,DA,IEN
  1. I JFLD["IEN" S JFLD=+JFLD
  1. S FIEN=$P($G(^BMXADO(SMASTER,0)),U,2) I 'FIEN Q
  1. S %=$G(@TMP@(0,SMASTER)) I '$L(%) Q
  1. S FIRST=+%,LAST=$P(%,U,2),NODE=FIRST-.1
  1. F S NODE=$O(@OUT@(NODE)) Q:'NODE Q:NODE>LAST D
  1. . S DA=+@OUT@(NODE)
  1. . I 'DA Q
  1. . I JFLD=.001 S @TMP@(1,SDETAIL,DA)="" Q
  1. . S IEN=$$GET1^DIQ(FIEN,(DA_C),JFLD,"I") I 'IEN Q
  1. . S @TMP@(1,SDETAIL,IEN)=""
  1. . Q
  1. Q
  1. ;
  1. JFLD ; EP-STUFF JOIN FIELD IDS INTO THE INTRO SEGMENT OF THE SCHEMA
  1. N NODE,%
  1. S NODE=999999999999
  1. F S NODE=$O(@OUT@(NODE),-1) Q:'NODE I @OUT@(NODE)["@@@meta@@@" Q
  1. I 'NODE Q
  1. S %=$P(@OUT@(NODE),U),$P(%,"|",4)=$G(JFLD),$P(%,"|",5)=$G(DFLD)
  1. S @OUT@(NODE)=%_U
  1. Q
  1. ;