Should add, here is my code:
set pResponse = ##class(Ens.StringResponse).%New()
set pResponse.StringValue = "0"
set results = ##class(EnsLib.SQL.GatewayResultSet).%New()
$$$LOGINFO("Calling query...")
Set sql="select IDNAM Surname, IDFNAM Forename, IDCHI CHI, IDGRI HospitalNumber from p_person where isactive = -1;"
Set status = ..Adapter.ExecuteQuery(.results,sql)
quit:$$$ISERR(status) status
$$$LOGINFO("Query completed. Processing results.")
set rows = 0
if (results'="")
{
while (results.Next()'=0)
{
set rows = rows + 1
do ##class(SERPR.MPI.Patient).Add(results.Get("CHI"),results.Get("HospitalNumber"),results.Get("Surname"),results.Get("Forename"))
}
set pResponse.StringValue = rows
}
else
{
$$$LOGERROR("Unable to query from SERPR - results was empty")
}
$$$LOGINFO("Finished processing results.")
Quit status
And the SERPR.MPI.Patient methods:
ClassMethod Add(chi As %String, hospitalNumber As %String, surname As %String, forename As %String) As %Boolean
{
if (chi="")
{
$$$LOGWARNING("Unable to save as chi was blank ("_hospitalNumber_","_surname_","_forename_")")
quit 0
}
if (..ExistsByCHI(chi)=0)
{
NEW SQLCODE
&sql(INSERT INTO SERPR_MPI.Patient (HospitalNumber, CHI, Surname, Forename)
VALUES (:hospitalNumber, :chi, :surname, :forename))
if (SQLCODE'=0)
{
$$$LOGERROR("SQL error "_SQLCODE)
quit 0
}
else
{
quit 1
}
}
else
{
quit 1
}
}
ClassMethod ExistsByCHI(chi As %String) As %Boolean
{
set patients = 0
NEW SQLCODE
&sql(SELECT COUNT(*) INTO :patients FROM SERPR_MPI.Patient WHERE CHI=:chi)
if (patients="")
{
quit 0
}
else
{
if (patients>0)
{
quit 1
}
}
quit 0
}