Hello,
I have a basic script that I think would probably be easier and faster to
modify using Python. It's pretty simple, it involves a MySQL database and a
base form.
I suppose the confusing bit would be where the UNO components come in, how
are these handled in Python?
And just for reference here is the basic macro I'm toying around with:
' TODO Move this RSR stuff to the
' library RSR Commons, as it
' is duplicate code.
Type RSR
DatabaseContext As Object
DataSource As Object
Connection As Object
InteractionHandler As Object
Statement As Object
ResultSet As Object
Query As String
End Type
Function RecordSetRetrievorFactrory()
DIM registered_db_name As String
Dim recSetRet As RSR
registered_db_name = "DESP"
recSetRet.DatabaseContext =
createUnoService("com.sun.star.sdb.DatabaseContext")
recSetRet.DataSource =
recSetRet.DatabaseContext.getByName(registered_db_name)
If Not recSetRet.DataSource.IsPasswordRequired Then
recSetRet.Connection = recSetRet.DataSource.GetConnection("","")
Else
recSetRet.InteractionHandler =
createUnoService("com.sun.star.sdb.InteractionHandler")
recSetRet.Connection =
recSetRet.DataSource.ConnectWithCompletion(recSetRet.InteractionHandler)
End If
RecordSetRetrievorFactrory = recSetRet
End Function
' Inputs
Global featureName As String ' The Feature Name to Update
Global despName As String ' The DESP to Update
Global setToState As Integer ' The state to set it to:
' 5 Awaiting
Response
' 6 Supports It
' 7 Will
Support It
' 8 Does NOT
Support It
' UI Document and Form
Global Doc As Object
Global TheForm As Object
' UI Components
Global CbBoxFeature As Object
Global CbBoxDESPName As Object
Global cbUpdateToState As Object
Global txtDetails As Object
Global lblStatus As Object
Global formReady As Boolean
' This method gets run when the page is loaded.
Sub Init(oEv)
formReady = False
' Doc = ThisComponent
' TheForm = Doc.DrawPage.Forms.GetByName("Form")
TheForm = oEv.Source
CbBoxFeature = TheForm.getByName("CbBoxFeature")
CbBoxDESPName = TheForm.getByName("CbBoxDESPName")
cbUpdateToState = TheForm.getByName("cbUpdateToState")
txtDetails = TheForm.getByName("txtDetails")
lblStatus = TheForm.getByName("lblStatus")
formReady = True
End Sub
Sub Main
' Init()
Dim tempStateName As String
' Get Input Fields
featureName = CbBoxFeature.text
despName = CbBoxDESPName.text
tempStateName = cbUpdateToState.text
setToState = getStateId(tempStateName)
If setToState = -1 Then
MsgBox "Error Retrieving Requestd Update State."
Exit Sub
End If
Dim fk_desp_id AS Integer
Dim fk_dfws_id As Integer
Dim Feature_f_id As Integer
IF getRecordForUpdate(fk_desp_id, fk_dfws_id, Feature_f_id) THEN
'MsgBox "Got Record for Update: fk_desp_id: " & fk_desp_id & ",
fk_dfws_id: " & fk_dfws_id & ", Feature_f_id: " & Feature_f_id
IF updateTheRecord(fk_desp_id, fk_dfws_id, Feature_f_id) THEN
lblStatus.label = "Update Successful"
Else
lblStatus.label = "Update Failed"
End If
ELSE
lblStatus.label = "Error retrieving record for Update:
fk_desp_id: " &
fk_desp_id & ", fk_dfws_id: " & fk_dfws_id & ", Feature_f_id: " &
Feature_f_id
' Missing Record? Add missing record?
If fk_desp_id = 0 AND fk_dfws_id = 0 AND Feature_f_id = 0 THEN
End If
End If
End Sub
Function getStateId(stateName As String) As Integer
Dim rsr As Object
listLength = 0
rsr = RecordSetRetrievorFactrory()
rsr.Query = "SELECT dfws_id FROM DESP_Feature_Weak_State WHERE name=?"
rsr.Statement = rsr.Connection.prepareStatement(rsr.Query)
rsr.Statement.setString(1, stateName)
rsr.ResultSet = rsr.Statement.executeQuery()
Dim loopIterations As Integer
loopIterations = 0
If Not isNULL(rsr.ResultSet) Then
While rsr.ResultSet.next()
getStateId = rsr.ResultSet.getShort(1)
loopIterations = loopIterations + 1
Wend
Else
MsgBox "No Records were returned for stateName: " & stateName
getStateId = -1
End If
rsr.Connection.Close()
if loopIterations > 1 Then
MsgBox "Error more than one record returned: stateName: " &
stateName
getStateId = -1
Else
IF loopIterations = 1 THEN
End If
End If
End Function
Function getRecordForUpdate(ByRef fk_desp_id AS Integer, _
ByRef fk_dfws_id As Integer, _
ByRef Feature_f_id As Integer) _
As Boolean
Dim rsr As Object
listLength = 0
rsr = RecordSetRetrievorFactrory()
rsr.Query ="SELECT dfw.fk_desp_id, dfw.fk_dfws_id, dfw.Features_f_id,
desp.name AS DESP_Name, f.name AS FeatureName, dfws.name As ResponseState "
& _
"FROM " & _
"DESP_Feature_Weak_State dfws INNER JOIN (DigitalEditionsSolutionProvider
desp INNER JOIN (Features f INNER JOIN DESP_Features_Weak dfw ON f.f_id =
dfw.Features_f_id) ON desp.desp_id = dfw.fk_desp_id) ON dfws.dfws_id =
dfw.fk_dfws_id " & _
"WHERE f.name=? AND desp.name=? " & _
"ORDER BY fk_desp_id;"
'MsgBox featureName & featureName
rsr.Statement = rsr.Connection.prepareStatement(rsr.Query)
rsr.Statement.setString(1, featureName)
rsr.Statement.setString(2, despName)
rsr.ResultSet = rsr.Statement.executeQuery()
Dim loopIterations As Integer
loopIterations = 0
If Not isNULL(rsr.ResultSet) Then
While rsr.ResultSet.next()
fk_desp_id = rsr.ResultSet.getShort(1)
fk_dfws_id = rsr.ResultSet.getShort(2)
Feature_f_id = rsr.ResultSet.getShort(3)
loopIterations = loopIterations + 1
Wend
Else
MsgBox "No Records were returned for featureName: " &
featureName & ",
despName: " & despName
getRecordForUpdate = False
End If
rsr.Connection.Close()
if loopIterations > 1 Then
MsgBox "Error more than one record returned: featureName: " &
featureName
& ", despName: " & despName
getRecordForUpdate = False
Else
IF loopIterations = 1 THEN
getRecordForUpdate = True
End If
End If
End Function
Function updateTheRecord(fk_desp_id AS Integer, _
fk_dfws_id As Integer, _
Feature_f_id As Integer) As Boolean
Dim rsr As Object
rsr = RecordSetRetrievorFactrory()
rsr.Query = "UPDATE DESP_Features_Weak SET fk_dfws_id=?, details=? WHERE
fk_desp_id=? AND fk_dfws_id=? AND Features_f_id=?"
rsr.Statement = rsr.Connection.prepareStatement(rsr.Query)
rsr.Statement.setShort(1, setToState)
rsr.Statement.setString(2, txtDetails.text)
rsr.Statement.setShort(3, fk_desp_id)
rsr.Statement.setShort(4, fk_dfws_id)
rsr.Statement.setShort(5, Feature_f_id)
updateTheRecord = rsr.Statement.executeUpdate()
rsr.Connection.close()
End Function
Sub clearResults
'IF formReady THEN
lblStatus.label = ""
'End IF
End Sub
Thank you,
Andrew J. Leer
--
View this message in context:
http://nabble.documentfoundation.org/How-to-convert-a-basic-script-into-Python-tp3986621.html
Sent from the Users mailing list archive at Nabble.com.
--
For unsubscribe instructions e-mail to: [email protected]
Problems? http://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/global/users/
All messages sent to this list will be publicly archived and cannot be deleted