COMPILE FUNCTION WO_PURGE(WONo) * Removes Work Order and all information related to it from the system. DECLARE SUBROUTINE ErrMsg, Send_Dyn, Send_Info, Btree.Extract, ErrMsg, Set_Property DECLARE FUNCTION obj_WM_In, obj_WM_Out, WO_Mat_Purge, ErrMsg, Msg $INSERT WO_LOG_EQUATES $INSERT WO_MAT_EQUATES $INSERT WO_STEP_EQUATES $INSERT WM_IN_EQUATES $INSERT WM_OUT_EQUATES $INSERT RDS_EQUATES $INSERT SURFACE_SCAN_EQUATES $INSERT RDS_LAYER_EQUATES $INSERT RDS_TEST_EQUATES $INSERT TW_USE_EQUATES $INSERT NCR_EQUATES $INSERT REACT_RUN_EQUATES $INSERT CLEAN_INSP_EQUATES $INSERT MSG_EQUATES equ CRLF$ to char(13):char(10) Result = '' IF NOT(ASSIGNED(WONo)) THEN WONo = '' IF WONo = '' THEN ErrMsg('Null WONO passed to routine.') RETURN Result END Open 'WO_LOG' To WOTable Else ErrMsg('Unable to Open DICT.WO_LOG') Return END * Build KeyLists of all records "attached" to this Work Order * All Tables with WO or WO_NO Btree indexes Open 'DICT.WO_MAT' To DictWOMat Else ErrMsg('Unable to Open DICT.WO_MAT') Return End Open 'DICT.WO_MAT_QA' To DictWOMatQA Else ErrMsg('Unable to Open DICT.WO_MAT_QA') Return End Open 'DICT.WO_MAT_WFR' To DictWOMatWfr Else ErrMsg('Unable to Open DICT.WO_MAT') Return End Open 'DICT.WO_WFR' To DictWOWfr Else ErrMsg('Unable to Open DICT.WO_WFR') Return End Open 'DICT.RUN_STAGE_WFR' To DictRunStageWfr Else ErrMsg('Unable to Open DICT.RUN_STAGE_WFR') Return End Open 'DICT.WM_IN' To DictWMIn Else ErrMsg('Unable to Open DICT.WM_IN') Return End Open 'DICT.WM_OUT' To DictWMOut Else ErrMsg('Unable to Open DICT.WM_IN') Return End Open 'DICT.RDS' To DictRDS Else ErrMsg('Unable to Open DICT.RDS') Return End Open 'DICT.REACT_RUN' To DictReactRun Else ErrMsg('Unable to Open DICT.REACT_RUN') Return End Open 'DICT.CLEAN_INSP' To DictCleanInsp Else ErrMsg('Unable to Open DICT.CLEAN_INSP') Return End Open 'DICT.RDS_TEST' To DictRDSTest Else ErrMsg('Unable to Open DICT.RDS_TEST') Return End Open 'DICT.NCR' To DictNCR Else ErrMsg('Unable to Open DICT.NCR') Return End Open 'DICT.COC' To DictCOC Else ErrMsg('Unable to Open DICT.COC') Return End Open 'DICT.SCHED_DET' To DictSchedDet Else ErrMsg('Unable to Open DICT.SCHED_DET') Return End AllTables = '' AllTables<1> = 'SCHED_DET' AllTables<2> = 'TW_USE' AllTables<3> = 'NCR' AllTables<4> = 'RDS_TEST' AllTables<5> = 'RDS_LAYER' AllTables<6> = 'CLEAN_INSP' AllTables<7> = 'COC' AllTables<8> = 'REACT_RUN' AllTables<9> = 'RDS' AllTables<10> = 'COC' AllTables<11> = 'WO_WFR_WIP' AllTables<12> = 'WO_WFR' AllTables<13> = 'WO_MAT_WFR' AllTables<14> = 'WO_MAT_QA' AllTables<15> = 'WM_IN' AllTables<16> = 'WM_OUT' AllTables<17> = 'WO_MAT' AllTables<18> = 'WO_STEP' AllTables<19> = 'WO_LOG' AllKeys = '' AllTableVars = '' * * WO_MAT Table * * Search = 'WO_NO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'WO_MAT',DictWOMat,WOMatKeys,Option,Flag) IF Get_Status(errCode) THEN DEBUG If WOMatKeys NE '' Then Open 'WO_MAT' To WOMatTable Else DEBUG Return End LOCATE 'WO_MAT' IN AllTables USING @FM SETTING FPos THEN AllKeys = WOMatKeys AllTableVars = WOMatTable END End * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * WO_MAT_WFR Table * * Search = 'WO_NO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'WO_MAT_WFR',DictWOMatWfr,WOMatWfrKeys,Option,Flag) IF Get_Status(errCode) THEN DEBUG If WOMatWfrKeys NE '' Then Open 'WO_MAT_WFR' To WOMatWfrTable Else DEBUG Return End LOCATE 'WO_MAT' IN AllTables USING @FM SETTING FPos THEN AllKeys = WOMatWfrKeys AllTableVars = WOMatWfrTable END End * * WO_WFR Table * * Search = 'WO_NO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'WO_WFR',DictWOWfr,WOWfrKeys,Option,Flag) IF Get_Status(errCode) THEN DEBUG If WOWfrKeys NE '' Then Open 'WO_WFR' To WOWfrTable Else DEBUG Return End LOCATE 'WO_WFR' IN AllTables USING @FM SETTING FPos THEN AllKeys = WOWfrKeys AllTableVars = WOWfrTable END End * * RUN_STAGE_WFR Table * * Search = 'WO_NO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'RUN_STAGE_WFR',DictRunStageWfr,RunStageWfrKeys,Option,Flag) IF Get_Status(errCode) THEN DEBUG If RunStageWfrKeys NE '' Then Open 'RUN_STAGE_WFR' To RunStageWfrTable Else DEBUG Return End LOCATE 'RUN_STAGE_WFR' IN AllTables USING @FM SETTING FPos THEN AllKeys = RunStageWfrKeys AllTableVars = RunStageWfrTable END End * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * WO_MAT_QA Table * * Search = 'WO_NO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'WO_MAT_QA',DictWOMatQA,WOMatQAKeys,Option,Flag) IF Get_Status(errCode) THEN DEBUG If WOMatQAKeys NE '' Then Open 'WO_MAT_QA' To WOMatQATable Else DEBUG Return End LOCATE 'WO_MAT_QA' IN AllTables USING @FM SETTING FPos THEN AllKeys = WOMatQAKeys AllTableVars = WOMatQATable END End * * WM_IN Table * * Search = 'WO_NO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'WM_IN',DictWMIn,WMIKeys,Option,Flag) IF Get_Status(errCode) THEN DEBUG If WMIKeys NE '' Then Open 'WM_IN' To WMITable Else DEBUG Return End LOCATE 'WM_IN' IN AllTables USING @FM SETTING FPos THEN AllKeys = WMIKeys AllTableVars = WMITable END End * * WM_OUT Table * * Search = 'WO_NO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'WM_OUT',DictWMOut,WMOKeys,Option,Flag) IF Get_Status(errCode) THEN DEBUG If WMOKeys NE '' Then Open 'WM_OUT' To WMOTable Else DEBUG Return End LOCATE 'WM_OUT' IN AllTables USING @FM SETTING FPos THEN AllKeys = WMOKeys AllTableVars = WMOTable END End * RDS Table * Search = 'WO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'RDS',DictRDS,RDSKeys,Option,Flag) IF Get_Status(errCode) THEN DEBUG IF RDSKeys = '' THEN *Index broken - RDS keys not showing up in Btree.Extract WOStepKeys = XLATE('WO_LOG',WONo,WO_LOG_WO_STEP_KEY$,'X') RDSKeys = XLATE('WO_STEP',WOStepKeys,WO_STEP_RDS_KEY$,'X') END If RDSKeys NE '' Then OPEN 'RDS' TO RDSTable ELSE DEBUG RETURN End LOCATE 'RDS' IN AllTables USING @FM SETTING FPos THEN AllKeys = RDSKeys AllTableVars = RDSTable END End * RDS_TEST Table * Search = 'WO_NO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'RDS_TEST',DictRDSTest,RDSTestKeys,Option,Flag) If Get_Status(errCode) Then DEBUG If RDSTestKeys NE '' Then OPEN 'RDS_TEST' TO RDSTestTable ELSE DEBUG RETURN End LOCATE 'RDS_TEST' IN AllTables USING @FM SETTING FPos THEN AllKeys = RDSTestKeys AllTableVars = RDSTestTable END End * * REACT_RUN table * * Search = 'WO_NO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'REACT_RUN',DictReactRun,ReactRunKeys,Option,Flag) IF Get_Status(errCode) THEN DEBUG If ReactRunKeys NE '' Then OPEN 'REACT_RUN' TO ReactRunTable ELSE DEBUG RETURN Result End LOCATE 'REACT_RUN' IN AllTables USING @FM SETTING FPos THEN AllKeys = ReactRunKeys AllTableVars = ReactRunTable END End * * CLEAN_INSP * * Search = 'WO_NO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'CLEAN_INSP',DictCleanInsp,CleanInspKeys,Option,Flag) IF Get_Status(errCode) THEN DEBUG If CleanInspKeys NE '' Then OPEN 'CLEAN_INSP' TO CleanInspTable ELSE DEBUG RETURN End LOCATE 'CLEAN_INSP' IN AllTables USING @FM SETTING FPos THEN AllKeys = CleanInspKeys AllTableVars = CleanInspTable END End * * COC - Shipments * * Search = 'WO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'COC',DictCOC,COCKeys,Option,Flag) IF Get_Status(errCode) THEN DEBUG If COCKeys NE '' Then OPEN 'COC' TO COCTable ELSE DEBUG RETURN End LOCATE 'COC' IN AllTables USING @FM SETTING FPos THEN AllKeys = COCKeys AllTableVars = COCTable END END * * SCHED_DET * * Search = 'WO_NO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'SCHED_DET',DictSchedDet,SchedDetKeys,Option,Flag) IF Get_Status(errCode) THEN DEBUG If SchedDetKeys NE '' Then OPEN 'SCHED_DET' TO SchedDetTable ELSE DEBUG RETURN End LOCATE 'SCHED_DET' IN AllTables USING @FM SETTING FPos THEN AllKeys = SchedDetKeys AllTableVars = SchedDetTable END End * * NCR * * Search = 'WO_NO':@VM:WONo:@FM Option = '' Flag = '' Btree.Extract(Search,'NCR',DictNCR,NCRKeys,Option,Flag) IF Get_Status(errCode) THEN DEBUG If NCRKeys NE '' Then OPEN 'NCR' TO NCRTable ELSE DEBUG RETURN End LOCATE 'NCR' IN AllTables USING @FM SETTING FPos THEN AllKeys = NCRKeys AllTableVars = NCRTable END End * * * * * * * * * * * * * * * * Get Related from data fields * * * * * * * * * * * * * * * RDSLayerKeys = Xlate('REACT_RUN',ReactRunKeys,REACT_RUN_RDS_LAYER_KEYS$,'X') If RDSLayerKeys NE '' Then Open 'RDS_LAYER' To RDSLayerTable Else DEBUG Return END LOCATE 'RDS_LAYER' IN AllTables USING @FM SETTING FPos THEN AllKeys = RDSLayerKeys AllTableVars = RDSLayerTable END End rtCnt = Count(RDSTestKeys,@VM) + (RDSTestKeys NE '') TWUseKeys = '' For I = 1 To rtCnt ReadO MetRecord From RDSTestTable,RDSTestKeys<1,I> Then MetTWUseKeys = MetRecord If MetTWUseKeys NE '' THEN TWUseKeys<1,-1> = MetTWUseKeys END END Next I If TWUseKeys NE '' Then Open 'TW_USE' To TWUseTable Else DEBUG Return End LOCATE 'TW_USE' IN AllTables USING @FM SETTING FPos THEN AllKeys = TWUseKeys AllTableVars = TWUseTable END END Read WORec From WOTable,WONo THEN WOStepKeys = WORec End Else WOStepKeys = '' End If WOStepKeys NE '' Then Open 'WO_STEP' To WOStepTable Else DEBUG Return End LOCATE 'WO_STEP' IN AllTables USING @FM SETTING FPos THEN AllKeys = WOStepKeys AllTableVars = WOStepTable END End LOCATE 'WO_LOG' IN AllTables USING @FM SETTING FPos THEN AllKeys = WoNo AllTableVars = WOTable END Log = '' PurgeKeys = '' PurgeTables = '' PurgeTableVars = '' aCnt = COUNT(AllTables,@FM) + (AllTables NE '') pCnt = 0 FOR I = 1 TO aCnt IF AllKeys NE '' THEN RecKeys = AllKeys TableName = AllTables TableVar = AllTableVars rCnt = COUNT(RecKeys,@VM) + (RecKeys NE '') Def = "" Def = "Purging Work Order ":WONo:"..." Def = "GC" Def = 600 Def = rCnt MsgUp = Msg(@WINDOW, Def) FOR N = 1 TO rCnt RecKey = RecKeys<1,N> GOSUB DeleteRec WHILE Msg(@WINDOW, MsgUp, N, MSGINSTUPDATE$) NEXT N Msg(@window, MsgUp) ;* take down the gauge pCnt += 1 PurgeKeys = AllKeys PurgeTables = AllTables PurgeTableVars = AllTableVars END NEXT I Set_Property('BATCH_WO_PURGE.STATUSLINE','TEXT','') BAIL: CONVERT @FM TO @VM IN Log RETURN Log * * * * * * * DeleteRec: * * * * * * * *Send_Dyn('Deleting ':TableName:' ':RecKey) Set_Property('BATCH_WO_PURGE.STATUSLINE','TEXT','Deleting ':TableName:' ':RecKey ) DELETE TableVar,RecKey THEN Log<-1> = TableName:' ':RecKey:' purged.' Gone = 1 END ELSE IF @FILE_ERROR NE '' AND @FILE_ERROR<1> NE '100' THEN Log<-1> = '*** Unable to purge ':TableName:' ':RecKey:' ***' Gone = 0 END ELSE Gone = 1 END END RETURN