added LSL2 stored procedures
This commit is contained in:
420
LSL2/STPROC/OBJ_RDS_AUDIT.txt
Normal file
420
LSL2/STPROC/OBJ_RDS_AUDIT.txt
Normal file
@ -0,0 +1,420 @@
|
||||
COMPILE FUNCTION obj_RDS_Audit(Method,Parms)
|
||||
|
||||
/*
|
||||
Methods for RDS_AUDIT table
|
||||
|
||||
01/12/2005 JCH - Initial Coding
|
||||
|
||||
Properties:
|
||||
|
||||
Methods:
|
||||
|
||||
Update(RDS,UserName,FieldNos) ;* Create/Update UserName and DTM fields
|
||||
Delete(RDS) ;* Delete RDS Audit Record when RDS record goes away
|
||||
Display(RDS,WindowName) ;* Displays just the fields found in the CtrlMap of the window
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Get_Property, Dialog_Box
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, obj_WO_Step
|
||||
|
||||
$INSERT DICT_EQUATES
|
||||
$INSERT MSG_EQUATES
|
||||
$INSERT RDS_AUDIT_EQUATES
|
||||
|
||||
$INSERT RDS_EQU
|
||||
|
||||
|
||||
ErrTitle = 'Error in Stored Procedure "obj_RDS_Audit"'
|
||||
ErrorMsg = ''
|
||||
|
||||
IF NOT(ASSIGNED(Method)) THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine'
|
||||
IF NOT(ASSIGNED(Parms)) THEN Parms = ''
|
||||
|
||||
IF ErrorMsg NE '' THEN
|
||||
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
|
||||
RETURN ''
|
||||
END
|
||||
|
||||
Result = ''
|
||||
|
||||
BEGIN CASE
|
||||
CASE Method = 'Update' ; GOSUB Update
|
||||
CASE Method = 'Delete' ; GOSUB Delete
|
||||
CASE Method = 'FieldNames' ; GOSUB FieldNames
|
||||
CASE Method = 'Display' ; GOSUB Display
|
||||
CASE Method = 'Convert' ; GOSUB Convert
|
||||
CASE 1
|
||||
|
||||
END CASE
|
||||
|
||||
IF ErrorMsg NE '' THEN
|
||||
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
|
||||
END
|
||||
|
||||
RETURN Result
|
||||
|
||||
|
||||
|
||||
* * * * * * *
|
||||
Update:
|
||||
* * * * * * *
|
||||
|
||||
RDSNo = Parms[1,@RM]
|
||||
ModIDs = Parms[COL2()+1,@RM]
|
||||
ModFields = Parms[COL2()+1,@RM]
|
||||
|
||||
IF RDSNo = '' THEN RETURN
|
||||
|
||||
atParms = 'RDS_AUDIT':@RM:RDSNo
|
||||
AuditRecord = obj_Tables('ReadRec',atParms)
|
||||
|
||||
IF Get_Status(errCode) THEN RETURN
|
||||
|
||||
|
||||
LastDtm = IConv(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS'), "DT")
|
||||
|
||||
CurrWindow = @WINDOW
|
||||
|
||||
IF @USERNAME = 'BRYCE_BARB' THEN
|
||||
|
||||
NewRec = Get_Property(@WINDOW,'ATRECORD')
|
||||
OrgRec = XLATE('RDS',RDSNo,'','X')
|
||||
|
||||
NewCnt = COUNT(NewRec,@FM) + (NewRec NE '')
|
||||
OrgCnt = COUNT(OrgRec,@FM) + (OrgRec NE '')
|
||||
|
||||
IF NewCnt > OrgCnt THEN
|
||||
rfCnt = NewCnt
|
||||
END ELSE
|
||||
rfCnt = OrgCnt
|
||||
END
|
||||
|
||||
ModFields = ''
|
||||
CurrDTM = ICONV(OCONV(Date(),'D4'):' ':OCONV(Time(),'MTS'),'DT')
|
||||
|
||||
DictLayout = XLATE('DICT.RDS','%FIELDS%','','X')
|
||||
|
||||
ModCnt = COUNT(AuditRecord<RDS_AUDIT_MOD_DTM$>,@VM) + (AuditRecord<RDS_AUDIT_MOD_DTM$> NE '')
|
||||
|
||||
|
||||
FOR I = 1 to rfCnt
|
||||
IF NewRec<I> NE OrgRec<I> THEN
|
||||
ModCnt += 1
|
||||
LOCATE I IN DictLayout<FIELDS_FIELD_NO$> USING @VM SETTING DPos THEN
|
||||
|
||||
NewVal = NewRec<I>
|
||||
OrgVal = OrgRec<I>
|
||||
|
||||
FieldConv = DictLayout<FIELDS_CONV$,DPos>
|
||||
FieldName = DictLayout<FIELDS_NAME$,DPos>
|
||||
|
||||
IF FieldConv NE '' THEN
|
||||
NewVal = OCONV(NewVal,FieldConv)
|
||||
OrgVal = OCONV(OrgVal,FieldConv)
|
||||
END
|
||||
|
||||
AuditRecord<RDS_AUDIT_MOD_DTM$,ModCnt> = CurrDTM
|
||||
AuditRecord<RDS_AUDIT_MOD_FIELD$,ModCnt> = FieldName
|
||||
AuditRecord<RDS_AUDIT_MOD_USER$,ModCnt> = @USER4
|
||||
AuditRecord<RDS_AUDIT_ORG_VAL$,ModCnt> = OrgVal
|
||||
AuditRecord<RDS_AUDIT_NEW_VAL$,ModCnt> = NewVal
|
||||
END ;* End of locate
|
||||
END ;* End of check for changed field
|
||||
NEXT I
|
||||
|
||||
END
|
||||
|
||||
IF CurrWindow = 'RDS' THEN CurrWindow = 'RDS_FIRST_WAFER'
|
||||
|
||||
DictLayout = XLATE('DICT.RDS','%FIELDS%','','X')
|
||||
|
||||
FOR N = 1 TO COUNT(ModFields,@VM) + (ModFields NE '')
|
||||
UserName = ModIDs<1,N>
|
||||
FieldName = ModFields<1,N>
|
||||
|
||||
GOSUB LoadAuditRec
|
||||
|
||||
NEXT N
|
||||
|
||||
|
||||
atParms = FIELDSTORE(atParms,@RM,4,0,AuditRecord)
|
||||
obj_Tables('WriteRec',atParms)
|
||||
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrorMsg = 'Unable to WRITE RDS_Audit Record'
|
||||
END
|
||||
|
||||
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
* * * * * * *
|
||||
Display:
|
||||
* * * * * * *
|
||||
|
||||
RDSNo = Parms[1,@RM]
|
||||
CurrWindow = Parms[COL2()+1,@RM]
|
||||
|
||||
IF RDSNo = '' THEN RETURN
|
||||
|
||||
IF CurrWindow NE '' THEN
|
||||
WindowColumns = Get_Property(CurrWindow,'CTRLMAP') ;* Limits results to the controls on the window
|
||||
END ELSE
|
||||
WindowColumns = ''
|
||||
END
|
||||
|
||||
CONVERT @FM TO @RM IN WindowColumns
|
||||
|
||||
WinFieldNames = Get_Property(WindowColumns,'COLUMN')
|
||||
|
||||
CONVERT @RM TO @FM IN WinFieldNames
|
||||
CONVERT @VM:@SVM TO @FM:@FM IN WinFieldNames
|
||||
|
||||
AuditRec = XLATE('RDS_AUDIT',RDSNo,'','X') ;* RDS_AUDIT record @VM:@SVM by UserName/FieldNos
|
||||
AllColNames = XLATE('RDS_AUDIT',RDSNo,'FIELD_NAME','X') ;* Dictionary field names logged in audit record @VM:@SVM by UserName/FieldNos
|
||||
|
||||
ResColNames = ''
|
||||
ResDispTexts = ''
|
||||
ResUserNames = ''
|
||||
ResLastDTMs = ''
|
||||
ResLastWindows = ''
|
||||
|
||||
FOR I = 1 TO COUNT(AuditRec<RDS_AUDIT_FIELD_NO$>,@VM) + (AuditRec<RDS_AUDIT_FIELD_NO$> NE '')
|
||||
UserName = AuditRec<RDS_AUDIT_USER_NAME$,I>
|
||||
LastDTM = OCONV(AuditRec<RDS_AUDIT_LAST_DTM$,I>,'DT4/^HS')
|
||||
LastWindow = AuditRec<RDS_AUDIT_WINDOW$,I>
|
||||
NameFieldNos = AuditRec<RDS_AUDIT_FIELD_NO$,I>
|
||||
|
||||
FieldCnt = COUNT(NameFieldNos,@SVM) + (NameFieldNos NE '')
|
||||
|
||||
FOR N = 1 TO FieldCnt
|
||||
ResColName = AllColNames<1,I,N>
|
||||
ResUserName = UserName
|
||||
ResLastDTM = LastDTM
|
||||
ResLastWindow = LastWindow
|
||||
|
||||
ResDispText = XLATE('DICT.RDS',ResColName,DICT_DISPLAY$,'X')
|
||||
CONVERT @VM TO ' ' IN ResDispText
|
||||
|
||||
IF WindowColumns = '' THEN
|
||||
LOCATE ResDispText IN ResDispTexts BY 'AL' USING @FM SETTING NPos ELSE
|
||||
ResUserNames = INSERT(ResUserNames,NPos,0,0,ResUserName)
|
||||
ResColNames = INSERT(ResColNames,NPos,0,0,ResColName)
|
||||
ResDispTexts = INSERT(ResDispTexts,NPos,0,0,ResDispText)
|
||||
ResLastDTMs = INSERT(ResLastDTMs,NPos,0,0,ResLastDTM)
|
||||
ResLastWindows = INSERT(ResLastWindows,NPos,0,0,ResLastWindow)
|
||||
END
|
||||
END ELSE
|
||||
LOCATE ResColName IN WinFieldNames USING @FM SETTING Pos THEN
|
||||
LOCATE ResDispText IN ResDispTexts BY 'AL' USING @FM SETTING NPos ELSE
|
||||
ResUserNames = INSERT(ResUserNames,NPos,0,0,ResUserName)
|
||||
ResColNames = INSERT(ResColNames,NPos,0,0,ResColName)
|
||||
ResDispTexts = INSERT(ResDispTexts,NPos,0,0,ResDispText)
|
||||
ResLastDTMs = INSERT(ResLastDTMs,NPos,0,0,ResLastDTM)
|
||||
ResLastWindows = INSERT(ResLastWindows,NPos,0,0,ResLastWindow)
|
||||
END
|
||||
END
|
||||
END
|
||||
|
||||
NEXT N
|
||||
NEXT I
|
||||
|
||||
IF ResColNames NE '' AND ResUserNames NE '' THEN
|
||||
Result = ResDispTexts:@RM:ResUserNames:@RM:ResLastDTMs:@RM:ResLastWindows
|
||||
END
|
||||
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
Convert:
|
||||
* * * * * * *
|
||||
|
||||
RDSNo = Parms[1,@RM]
|
||||
RDSRec = Parms[COL2()+1,@RM]
|
||||
|
||||
IF RDSNo = '' THEN RETURN
|
||||
IF RDSRec = '' THEN RDSRec = XLATE('RDS',RDSNo,'','X')
|
||||
|
||||
RDSOrgLen = LEN(RDSRec)
|
||||
|
||||
atParms = 'RDS_AUDIT':@RM:RDSNo
|
||||
AuditRecord = obj_Tables('ReadRec',atParms)
|
||||
|
||||
DictLayout = XLATE('DICT.RDS','%FIELDS%','','X')
|
||||
|
||||
FOR N = 1 TO COUNT(RDSRec<RDS_PRE_EPI_MOD_FIELD$>,@VM) + (RDSRec<RDS_PRE_EPI_MOD_FIELD$> NE '')
|
||||
UserName = RDSRec<RDS_PRE_EPI_MOD_ID$,N>
|
||||
FieldName = RDSRec<RDS_PRE_EPI_MOD_FIELD$,N>
|
||||
|
||||
GOSUB LoadAuditRec
|
||||
|
||||
NEXT N
|
||||
|
||||
RDSRec<RDS_PRE_EPI_MOD_ID$> = ''
|
||||
RDSRec<RDS_PRE_EPI_MOD_FIELD$> = ''
|
||||
|
||||
FOR N = 1 TO COUNT(RDSRec<RDS_POST_EPI_MOD_FIELD$>,@VM) + (RDSRec<RDS_POST_EPI_MOD_FIELD$> NE '')
|
||||
UserName = RDSRec<RDS_POST_EPI_MOD_ID$,N>
|
||||
FieldName = RDSRec<RDS_POST_EPI_MOD_FIELD$,N>
|
||||
|
||||
GOSUB LoadAuditRec
|
||||
|
||||
NEXT N
|
||||
|
||||
RDSRec<RDS_POST_EPI_MOD_ID$> = ''
|
||||
RDSRec<RDS_POST_EPI_MOD_FIELD$> = ''
|
||||
|
||||
|
||||
FOR N = 1 TO COUNT(RDSRec<RDS_FIRST_WAFER_MOD_FIELD$>,@VM) + (RDSRec<RDS_FIRST_WAFER_MOD_FIELD$> NE '')
|
||||
UserName = RDSRec<RDS_FIRST_WAFER_MOD_ID$,N>
|
||||
FieldName = RDSRec<RDS_FIRST_WAFER_MOD_FIELD$,N>
|
||||
|
||||
GOSUB LoadAuditRec
|
||||
|
||||
NEXT N
|
||||
|
||||
RDSRec<RDS_FIRST_WAFER_MOD_ID$> = ''
|
||||
RDSRec<RDS_FIRST_WAFER_MOD_FIELD$> = ''
|
||||
|
||||
|
||||
FOR N = 1 TO COUNT(RDSRec<RDS_UNLOAD_MOD_FIELD$>,@VM) + (RDSRec<RDS_UNLOAD_MOD_FIELD$> NE '')
|
||||
UserName = RDSRec<RDS_UNLOAD_MOD_ID$,N>
|
||||
FieldName = RDSRec<RDS_UNLOAD_MOD_FIELD$,N>
|
||||
|
||||
GOSUB LoadAuditRec
|
||||
|
||||
NEXT N
|
||||
|
||||
RDSRec<RDS_UNLOAD_MOD_ID$> = ''
|
||||
RDSRec<RDS_UNLOAD_MOD_FIELD$> = ''
|
||||
|
||||
RDSNewLen = LEN(RDSRec)
|
||||
|
||||
RecLen = LEN(AuditRecord)
|
||||
*Result = 'Len Audit: ':FMT(RecLen,"R#6"):' RDS Org: ':FMT(RDSOrgLen,'R#6'):' RDS New: ':FMT(RDSNewLen,'R#5'):' Delta: ':RDSOrgLen - RDSNewLen
|
||||
|
||||
|
||||
IF RecLen = 0 THEN
|
||||
obj_Tables('UnlockRec',atParms)
|
||||
END ELSE
|
||||
atParms = FIELDSTORE(atParms,@RM,4,0,AuditRecord)
|
||||
obj_Tables('WriteRec',atParms)
|
||||
|
||||
IF Get_Status(errCode) THEN DEBUG
|
||||
|
||||
END
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
LoadAuditRec:
|
||||
* * * * * * *
|
||||
|
||||
* Local Subroutine
|
||||
|
||||
LOCATE FieldName IN DictLayout<FIELDS_NAME$> USING @VM SETTING DPos THEN
|
||||
FieldNo = DictLayout<FIELDS_FIELD_NO$,DPos>
|
||||
IF FieldNo = '' THEN RETURN
|
||||
END
|
||||
|
||||
|
||||
Done = 0
|
||||
|
||||
NameCnt = COUNT(AuditRecord<RDS_AUDIT_USER_NAME$>,@VM) + (AuditRecord<RDS_AUDIT_USER_NAME$> NE '')
|
||||
FOR X = 1 TO NameCnt
|
||||
|
||||
FNCnt = COUNT(AuditRecord<RDS_AUDIT_FIELD_NO$,X>,@SVM) + (AuditRecord<RDS_AUDIT_FIELD_NO$,X> NE '')
|
||||
FOR Y = 1 TO FNCnt
|
||||
|
||||
IF AuditRecord<RDS_AUDIT_FIELD_NO$,X,Y> = FieldNo THEN
|
||||
|
||||
AuditRecord = DELETE(AuditRecord,RDS_AUDIT_FIELD_NO$,X,Y) ;* Remove the field no. sub-value if it's here
|
||||
|
||||
IF AuditRecord<RDS_AUDIT_FIELD_NO$,X> = '' THEN
|
||||
AuditRecord = DELETE(AuditRecord,RDS_AUDIT_USER_NAME$,X,0) ;* If the user name field is empty -> remove it
|
||||
AuditRecord = DELETE(AuditRecord,RDS_AUDIT_FIELD_NO$,X,0) ;* Remove the associated sub-value field
|
||||
AuditRecord = DELETE(AuditRecord,RDS_AUDIT_LAST_DTM$,X,0)
|
||||
AuditRecord = DELETE(AuditRecord,RDS_AUDIT_WINDOW$,X,0)
|
||||
END
|
||||
Done = 1
|
||||
END
|
||||
UNTIL Done
|
||||
NEXT Y
|
||||
UNTIL Done
|
||||
NEXT X
|
||||
|
||||
LOCATE UserName IN AuditRecord<RDS_AUDIT_USER_NAME$> USING @VM SETTING NPos THEN
|
||||
LineItemFNos = AuditRecord<RDS_AUDIT_FIELD_NO$,NPos>
|
||||
|
||||
LOCATE FieldNo IN LineItemFNos BY 'AR' USING @SVM SETTING FNPos ELSE
|
||||
AuditRecord = INSERT(AuditRecord,RDS_AUDIT_FIELD_NO$,NPos,FNPos,FieldNo) ;* Username already in record - add the field no sub-value
|
||||
END
|
||||
AuditRecord<RDS_AUDIT_LAST_DTM$,NPos> = LastDTM ;* Update last DTM for this user
|
||||
AuditRecord<RDS_AUDIT_WINDOW$,NPos> = CurrWindow
|
||||
END ELSE
|
||||
AuditRecord = INSERT(AuditRecord,RDS_AUDIT_USER_NAME$,NPos,0,UserName) ;* New user name - add to list
|
||||
AuditRecord = INSERT(AuditRecord,RDS_AUDIT_FIELD_NO$,NPos,1,FieldNo) ;* Put field no. sub-value in associated list
|
||||
AuditRecord = INSERT(AuditRecord,RDS_AUDIT_LAST_DTM$,NPos,0,LastDTM) ;* Put current date and time on user name
|
||||
AuditRecord = INSERT(AuditRecord,RDS_AUDIT_WINDOW$,NPos,0,CurrWindow) ;* Put the window name with the initial use of the name
|
||||
END
|
||||
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
FieldNames:
|
||||
* * * * * * *
|
||||
|
||||
|
||||
RDSNo = Parms[1,@RM]
|
||||
RDSAuditRec = Parms[COL2()+1,@RM]
|
||||
|
||||
IF RDSNo = '' THEN RETURN
|
||||
IF RDSAuditRec = '' THEN RDSAuditRec = XLATE('RDS_AUDIT',RDSNo,'','X')
|
||||
|
||||
|
||||
DictLayout = XLATE('DICT.RDS','%FIELDS%','','X')
|
||||
|
||||
AuditFieldNos = RDSAuditRec<RDS_AUDIT_FIELD_NO$>
|
||||
|
||||
|
||||
VMCnt = COUNT(AuditFieldNos,@VM) + (AuditFieldNos NE '')
|
||||
FOR I = 1 TO VMCnt
|
||||
ItemFieldNos = AuditFieldNos<1,I>
|
||||
SVMCnt = COUNT(ItemFieldNos,@SVM) + (ItemFieldNos NE '')
|
||||
|
||||
FOR N = 1 TO SVMCnt
|
||||
FieldNo = ItemFieldNos<1,1,N>
|
||||
LOCATE FieldNo IN DictLayout<FIELDS_FIELD_NO$> USING @VM SETTING DPos THEN
|
||||
Result<1,I,N> = DictLayout<FIELDS_NAME$,DPos>
|
||||
END
|
||||
NEXT N
|
||||
NEXT I
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
* * * * * * *
|
||||
Delete:
|
||||
* * * * * * *
|
||||
|
||||
RdsNos = Parms[1,@RM]
|
||||
|
||||
IF RdsNos = '' THEN RETURN
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user