added LSL2 stored procedures
This commit is contained in:
123
LSL2/STPROC/COPY_RECORD_TO_SQL.txt
Normal file
123
LSL2/STPROC/COPY_RECORD_TO_SQL.txt
Normal file
@ -0,0 +1,123 @@
|
||||
Compile function Copy_Record_To_SQL(Table, Key, LogError, pKey)
|
||||
|
||||
/*****************************************************************************\
|
||||
Copies the given record to the MSSQL database. Since every table differs
|
||||
from the next, it's not really possible to use the same code base for all
|
||||
tables. Therefore, common functionality has been moved into separate
|
||||
stored procedures. Supported tables are ones that have a stored procedure
|
||||
that handles the copy request. These are called the Handlers. A Handler
|
||||
is identified by the following naming convention:
|
||||
|
||||
COPY_XYZ_RECORD_TO_SQL
|
||||
|
||||
XYZ is a placeholder for a table name. For example, the ASM_PART table has
|
||||
a handler called COPY_ASM_PART_RECORD_TO_SQL. If a table does not have a
|
||||
handler, then it is not supported by this procedure.
|
||||
|
||||
History
|
||||
-------
|
||||
03/22/2010 KRF Original Programmer
|
||||
04/05/2010 KRF Modified to lookup handler in SYSOBJ instead of using
|
||||
large Locate list
|
||||
09/23/2010 KRF Added logic to set @DICT, @ID, and @RECORD so handlers
|
||||
can use symbolics
|
||||
\*****************************************************************************/
|
||||
$insert Microsoft_Ado_Equates
|
||||
|
||||
If Assigned(LogError) else LogError = 0
|
||||
|
||||
Declare subroutine SRP_Com, Sql_Services
|
||||
Declare function SRP_Com, Environment_Services, Datetime, Sql_Services, Error_Services, Database_Services
|
||||
Ans = ""
|
||||
|
||||
// Make sure table is uppercase
|
||||
Convert @LOWER_CASE to @UPPER_CASE in Table
|
||||
|
||||
* TablesToSkip = "ANNUAL_CONTRACTS,DESIG_ERR_GRP,INVOICE,MFC_LOC,NAMES,ORDER,ORDER_CHANGE,QUOTE,RDS,REACT_ESC,SURFACE_SCAN,TW_PRIME_USAGE,TW_USAGE,VISION_LOG,VISION_ORDER"
|
||||
* TablesToSkip = "ANNUAL_CONTRACTS,DESIG_ERR_GRP,EXPORTS,INVOICE,MFC_LOC,NAMES,ORDER,ORDER_CHANGE,QUOTE,REACT_ESC,SURFACE_SCAN,TW_PRIME_USAGE,TW_USAGE,VISION_LOG,VISION_ORDER"
|
||||
TablesToSkip = Database_Services('ReadDataRow', 'APP_INFO', 'SQL_TABLES_TO_SKIP')
|
||||
Locate Table in TablesToSkip by "AL" using "," setting ListPos else
|
||||
|
||||
// The expected name of the handler
|
||||
Handler = "COPY_":Table:"_RECORD_TO_SQL"
|
||||
|
||||
// Find the stored procedure that handles this table
|
||||
Open "SYSOBJ" to hSysObj then
|
||||
Read ObjCode from hSysObj, "$":Handler:"*LSL2" then
|
||||
// Connect to the ODBC
|
||||
If SRP_Com(Connection, "CREATE", "ADODB.Connection") then
|
||||
ConnectionString = Environment_Services('GetSQLScrapeConnectionString')
|
||||
If SRP_Com(Connection, "CALL", "Open", ConnectionString) EQ "" then
|
||||
// Read the record and call the handler
|
||||
Open Table to hTable then
|
||||
Read @RECORD from hTable, Key then
|
||||
If Key NE "" then
|
||||
Open "DICT.":Table to @DICT then null
|
||||
@ID = Key
|
||||
Ans = Function(@Handler(Connection, Key, @RECORD))
|
||||
If Ans EQ '' then
|
||||
If ( Assigned(pKey) and (pKey NE '') ) then
|
||||
Open 'SQL_PENDING' to pTable then
|
||||
Delete pTable, pKey else null
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end else
|
||||
// Log the error and delete the key from the pending queue as the record doesn't exist anymore
|
||||
// or the transaction is garbage.
|
||||
* If Assigned(pKey) then
|
||||
* Open 'SQL_PENDING' to pTable then
|
||||
* Delete pTable, pKey else null
|
||||
* end
|
||||
* end
|
||||
Ans = 'Unable to read ':Key:' from ':Table:' table.'
|
||||
end
|
||||
end
|
||||
end else
|
||||
Ans = 'Unable to open connection to SQL server. SQL connection error: ':SRP_Com(Connection, "ERROR")
|
||||
end
|
||||
SRP_Com(Connection, "CALL", "Close")
|
||||
SRP_Com(Connection, "RELEASE")
|
||||
end else
|
||||
Ans = "Unable to create ADO connection."
|
||||
end
|
||||
end
|
||||
|
||||
If LogError and Len(Ans) then
|
||||
Open "SQL_ERROR" to hSqlError then
|
||||
ErrorKey = OConv(Date(), "D4-J")
|
||||
Timestamp = OConv(Datetime(), 'DT')
|
||||
Read Errors from hSqlError, ErrorKey then
|
||||
Errors := @FM:Table:@VM:Key:@VM:Timestamp:@VM:Ans
|
||||
Write Errors to hSqlError, ErrorKey
|
||||
end else
|
||||
Errors = Table:@VM:Key:@VM:Timestamp:@VM:Ans
|
||||
Write Errors to hSqlError, ErrorKey
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
If (Assigned(pKey) and (pKey NE '') ) then
|
||||
// Always log the result
|
||||
Open 'SQL_LOG' to hLog then
|
||||
If Ans EQ '' then
|
||||
Result = 'PROCESSED'
|
||||
end else
|
||||
Result = Ans
|
||||
end
|
||||
CurrDate = Date()
|
||||
Read Log from hLog, CurrDate then
|
||||
Log := @FM:pKey:@VM:Result
|
||||
end else
|
||||
Log = pKey:@VM:Result
|
||||
end
|
||||
Write Log to hLog, CurrDate
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Return Ans
|
||||
|
Reference in New Issue
Block a user