07 January 2005 Understanding why a NOFILE enquiry is to be created Steps to create a NOFILE enquiry NOFILE Enquiry An example Analysis of the example Algorithm for the routine Writing the routine Setting up the STANDARD SELECTION record Setting up the ENQUIRY application Executing the enquiry Agenda 07 January 2005 Knowledge on the working of the ENQUIRY application Info BASIC programming skills Prerequisites 07 January 2005 When information is required for more than one T24 application (which cannot be linked in the ENQUIRY application) When complex calculations and conditions are required and involves more than one T24 application Why NOFILE Enquiry ? File 1 File 2 File 3 File 4 Routine No connection between Files cannot be linked in ENQUIRY Complex calculations that are not supported by the ENQUIRY application 07 January 2005 Setting up the ENQUIRY Application ENQUIRY : FILE.NAME Field - Mandatory This case - Requires more than one Application Use logical file name Define it in STANDARD.SELECTION No FILE.CONTROL Validation Error in SS Start STANDARD.SELECTION ID with NOFILE (Will not check for FILE.CONTROL record) Now use in Enquiry FILE.NAME 07 January 2005 Setting up the ENQUIRY Application STANDARD.SELECTION record requires a field Create a logical field How does the field get data? Write a routine and attach it to the logical field User need selection fields ? Define Selection type fields 07 January 2005 Components of a NOFILE Enquiry are Info BASIC routine STANDARD.SELECTION record ENQUIRY record Setting up a NOFILE Enquiry 07 January 2005 A bank requires a report in the following format. Customer Report Date : <Todays date> User : <User Id of the user executing the enquiry> Customer Number : <Customer ID> Account No Total Fwd Cr Total Fwd Dr Total Cr Int Total Dr Int XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX A customer, at any point in time, may want to know the total of his Forward credit movements (Money that is due to the customer at a future date) Forward debit movements (Money that the customer is liable to pay at a future date) Accrued interest that is due to the customer (total) Accrued interest that the customer is liable to pay (total) NOFILE Enquiry Example 07 January 2005 CUSTOMER.ACCOUNT To obtain the list of accounts for a particular customer ACCT.ENT.FWD To obtain the forward STMT.ENTRY Ids for an account of a customer STMT.ENTRY To obtain the details of the STMT.ENTRY record ACCR.ACCT.CR To obtain accrued credit interest ACCR.ACCT.DR - To obtain accrued credit interest Files To Be Used 07 January 2005 Solution 1 - Algorithm For the customer number supplied, extract record from CUSTOMER.ACCOUNT AC1FMAC2FMAC3FMAC4 Read ACCT.ENT.FWD with the Account ID FST1FMFST2FMFST3 Read STMT.ENTRY with the STMT.ENTRY ID AcIdFMCoCodeFMLCYAmtFMTranCodeFMCusIDFM. Extract the local currency amount and check if > than 0 If > 0 then Future Cr Mov += Future Cr Mov else Future Dr Mov += Future Dr Mov Extract the next ID and process All F STMT entries have been processed 07 January 2005 Solution 1 - Algorithm Read the ACCR.ACCT.CR file with the Account ID CrIntDateFMCrNoOfDaysFMCrIntRateFMCrIntAmtFMCrIntCategFM..TotalInterest Total Credit Interest += Total Interest Read the ACCR.ACCT.DR file with the Account ID PrFstDateFMPrLstDtFMDrIntDateFMDrNoOfDaysFM..TotalInterest Total Debit Interest += Total Interest Get back to next account Concatenate values in return parameter: Account ID,Tot Fwd Dr,Tot Fwd Cr,Total Dr Int,Tot Cr Int 07 January 2005 SUBROUTINE E.NOF.CUS.AC.DET(AC.DET.ARR) $INCLUDE GLOBUS.BP I_COMMON $INCLUDE GLOBUS.BP I_EQUATE $INCLUDE GLOBUS.BP I_F.ACCOUNT $INCLUDE GLOBUS.BP I_F.CUSTOMER $INCLUDE GLOBUS.BP I_F.CUSTOMER.ACCOUNT $INCLUDE GLOBUS.BP I_F.STMT.ENTRY $INCLUDE GLOBUS.BP I_F.ACCR.ACCT.CR $INCLUDE GLOBUS.BP I_F.ACCR.ACCT.DR $INCLUDE GLOBUS.BP I_ENQUIRY.COMMON GOSUB INITIALISATION GOSUB OPEN.FILES GOSUB PROCESS RETURN Routine for the NOFILE Enquiry 07 January 2005 *--------------* INITIALISATION: *--------------* FN.CUSTOMER.ACCOUNT = 'F.CUSTOMER.ACCOUNT' FV.CUSTOMER.ACCOUNT = '' FN.ACCT.ENT.FWD = 'F.ACCT.ENT.FWD' FV.ACCT.ENT.FWD = '' FN.STMT.ENTRY = 'F.STMT.ENTRY' FV.STMT.ENTRY = '' FN.ACCR.ACCT.CR = 'F.ACCR.ACCT.CR' FV.ACCR.ACCT.CR = '' FN.ACCR.ACCT.DR = 'F.ACCR.ACCT.DR' FV.ACCR.ACCT.DR = '' RETURN Routine for the NOFILE Enquiry 07 January 2005 *----------* OPEN.FILES: *----------* CALL OPF(FN.CUSTOMER.ACCOUNT,FV.CUSTOMER.ACCOUNT) CALL OPF(FN.ACCT.ENT.FWD,FV.ACCT.ENT.FWD) CALL OPF(FN.ACCR.ACCT.CR,FV.ACCR.ACCT.CR) CALL OPF(FN.STMT.ENTRY,FV.STMT.ENTRY) CALL OPF(FN.ACCR.ACCT.DR,FV.ACCR.ACCT.DR) RETURN *-------* PROCESS: *-------* LOCATE "CUSTOMER.ID" IN D.FIELDS<1> SETTING CUS.POS THEN CUSTOMER.ID = D.RANGE.AND.VALUE<CUS.POS> END CALL F.READ(FN.CUSTOMER.ACCOUNT,CUSTOMER.ID,CUS.ACC.REC,FV.CUSTOMER.ACCOUNT,CUS.ACC .R.ERR) Routine for the NOFILE Enquiry 07 January 2005 LOOP REMOVE AC.ID FROM CUS.ACC.REC SETTING AC.POS WHILE AC.ID:AC.POS GOSUB CALC.ENT.FWD GOSUB CALC.ACCR.INT AC.DET.ARR<-1> = AC.ID:"*":CR.AMT:"*":DR.AMT:"*":CR.TOT.INT:"*":DR.TOT.INT REPEAT RETURN Routine for the NOFILE Enquiry 07 January 2005 *------------* CALC.ENT.FWD: *------------* DR.AMT = '' ; CR.AMT = '' CALL F.READ(FN.ACCT.ENT.FWD,AC.ID,ACCT.ENT.REC,FV.ACCT.ENT.FWD,ACCT.ENT.R.ERR) LOOP REMOVE ACCT.ENT.ID FROM ACCT.ENT.REC SETTING ACCT.ENT.POS WHILE ACCT.ENT.ID:ACCT.ENT.POS CALL F.READ(FN.STMT.ENTRY,ACCT.ENT.ID,STMT.ENTRY.REC,FV.STMT.ENTRY,STMT.ENTRY.R.ERR) ACCT.ENT.AMT = STMT.ENTRY.REC<AC.STE.AMOUNT.LCY> IF ACCT.ENT.AMT LT 0 THEN DR.AMT += ABS(ACCT.ENT.AMT) END ELSE CR.AMT += ACCT.ENT.AMT END Routine for the NOFILE Enquiry 07 January 2005 REPEAT RETURN *-------------* CALC.ACCR.INT: *-------------* CR.TOT.INT = '' ; DR.TOT.INT = '' CALL F.READ(FN.ACCR.ACCT.CR,AC.ID,AC.CR.REC,FV.ACCR.ACCT.CR,ACCT.CR.R.ERR) CR.TOT.INT = AC.CR.REC<IC.ACRCR.TOTAL.INTEREST> CALL F.READ(FN.ACCR.ACCT.DR,AC.ID,AC.DR.REC,FV.ACCR.ACCT.DR,ACCT.DR.R.ERR) DR.TOT.INT = AC.DR.REC<IC.ACRDR.TOTAL.INTEREST> RETURN END Routine for the NOFILE Enquiry 07 January 2005 STANDARD SELECTION Record ID must start with NOFILE.xxxxx to eliminate FILE.CONTROL validation error Must have ROUTINE type user field defined SELECTION type fields can be defined so that the user can decide exactly what information he wants filtered out and displayed 07 January 2005 STANDARD SELECTION Record Routine Type Selection Type 07 January 2005 Enquiry Set Up Must be a valid record from STANDARD.SELECTION Application. In this case, must start with NOFILE. 07 January 2005 ENQUIRY Record Using this we can access each line of information stored in the return variable. The values are separated by * and each set is separated by an FM This is the method used to extract the values returned from the routine The format is F <delim>,<start pos>,<num of pos> 07 January 2005 Executing The Enquiry Before the Enquiry results are displayed, since we have defined a selection field, this appears for the user to input the CUSTOMER ID to be manipulated 07 January 2005 Sample Output 07 January 2005 Summary A NOFILE enquiry uses a routine to access more than one application to display information required by the user. A STANDARD.SELECTION record must be created, with an ID NOFILE.xxxxxxx for NOFILE enquiry to eliminate the FILE.CONTROL validation error in T24 A STANDARD.SELECTION record created for NOFILE enquiry purposes can have logical fields defined in it. Routine type fields These fields will have user type R Selection type fields These fields will have user typeS 07 January 2005 Summary (Cont.) Selection fields defined, can be used within the routine using the COMMON variables D.FIELDS and D.RANGE.AND.VALUES defined in I_ENQUIRY.COMMON A routine written for NOFILE enquiry purposes should return one parameter The ENQUIRY application uses the ID of the STANDARD. SELECTION in the FILE.NAME field F <delim>,<start pos>,<no. of pos> - is used to extract the data in the ENQUIRY