how to add to the RecordMap Batch
Morning guys I have a SQL operation that I use to read data and results to a record map. But seems to have trouble saving the objects to a record map as I get this message
ERROR ErrException: zInsertObject+2^%Library.RelationshipObject.1 -- logged as '-' number - @''
please help here is my code let me know if I missing anything thank you in advance
Method OnRequest(pRequest As DQToolsSet.PrimaryMessageREQ, Output pResponse As HSCIC.DBS.RequestRBAT) As %Status
{
#dim status as %Status=$$$OK
#dim resultSet as %SQL.StatementResult
set pobject=##class(%FileCharacterStream).%New()
set preq=##class(HSCIC.DBS.RequestRBAT).%New()
set status=..Adapter.ExecuteQuery(.resultSet,..GetTheSubmissionData(pRequest.pMonth, pRequest.pApp, pRequest.pRef, pRequest.pInPat))
nbsp;if ($$$ISOK(status))
{
While (resultSet.%Next(.status) && $$$ISOK(status))
{
set ppResponse=##class(HSCIC.DBS.RequestRMAP.Record).%New()
set ppResponse.RequestCode=resultSet.Get("recType")
set ppResponse.PatientID=resultSet.Get("ClientID")
set ppResponse.DOB=resultSet.Get("DOB")
set ppResponse.Property4=resultSet.Get("u1")
set ppResponse.Property5=resultSet.Get("u2")
set ppResponse.NHSNumber=resultSet.Get("NNN")
set ppResponse.Surname=resultSet.Get("Surname")
set ppResponse.AltSurname=resultSet.Get("u3")
set ppResponse.GivenName=resultSet.Get("GivenName1")
set ppResponse.AltGivenName=resultSet.Get("u4")
set ppResponse.SpineGender=resultSet.Get("Gender")
set ppResponse.Address1=resultSet.Get("a1")
set ppResponse.Address2=resultSet.Get("a2")
set ppResponse.Address3=resultSet.Get("a3")
set ppResponse.Address4=resultSet.Get("a4")
set ppResponse.Address5=resultSet.Get("a5")
set ppResponse.PostCode=resultSet.Get("Postcode")
set ppResponse.AltAddress1=resultSet.Get("p1")
set ppResponse.AltAddress2=resultSet.Get("p2")
set ppResponse.AltAddress3=resultSet.Get("p3")
set ppResponse.AltAddress4=resultSet.Get("p4")
set ppResponse.AltAddress5=resultSet.Get("p5")
set ppResponse.AltPostCode=resultSet.Get("p6")
set ppResponse.GPCode=resultSet.Get("GPCode")
set ppResponse.GPPracticeCode=resultSet.Get("PracticeCode")
set ppResponse.NewField3=resultSet.Get("u5")
set ppResponse.NewFiel23=resultSet.Get("u6")
set status=ppResponse.%Save()
set pobject=ppResponse
set pResponse=##class(HSCIC.DBS.RequestRBAT).%New()
if ($$$ISOK(status))
{
set status=pResponse.Records.InsertObject(pobject)
set status=pResponse.Records.%Save()
}
}
}
}
My best guess is that the pResponse.Records object does not exist yet, since you have just created pResponse.
I would guess that pResponse.Records is a null reference at this point.
So, you are unable to insert anything because there is nothing to insert into.
I believe you will need to instantiate a new pResponse.Records object, whatever type of class that is, before you call the InsertObject method.
The concept is about relationships the batch needs to be instantiated outside the loop and the record created and inserted in the loop. The batch has many records so every time we loop we add to records and then save records to a batch which was created only once
Method OnRequest(pRequest As DQToolsSet.PrimaryMessageREQ, Output pResponse As HSCIC.DBS.RequestRBAT) As %Status { #dim status as %Status=$$$OK #dim resultSet as %SQL.StatementResult set pResponse=##class(HSCIC.DBS.RequestRBAT).%New() set status=..Adapter.ExecuteQuery(.resultSet,..GetTheSubmissionData(pRequest.pMonth, pRequest.pApp, pRequest.pRef, pRequest.pInPat)) nbsp;if ($$$ISOK(status)) { While (resultSet.%Next(.status) && $$$ISOK(status)) { set ppResponse=##class(HSCIC.DBS.RequestRMAP.Record).%New() set ppResponse.RequestCode=resultSet.Get("recType") set ppResponse.PatientID=resultSet.Get("ClientID") set ppResponse.DOB=resultSet.Get("DOB") set ppResponse.Property4=resultSet.Get("u1") set ppResponse.Property5=resultSet.Get("u2") set ppResponse.NHSNumber=resultSet.Get("NNN") set ppResponse.Surname=resultSet.Get("Surname") set ppResponse.AltSurname=resultSet.Get("u3") set ppResponse.GivenName=resultSet.Get("GivenName1") set ppResponse.AltGivenName=resultSet.Get("u4") set ppResponse.SpineGender=resultSet.Get("Gender") set ppResponse.Address1=resultSet.Get("a1") set ppResponse.Address2=resultSet.Get("a2") set ppResponse.Address3=resultSet.Get("a3") set ppResponse.Address4=resultSet.Get("a4") set ppResponse.Address5=resultSet.Get("a5") set ppResponse.PostCode=resultSet.Get("Postcode") set ppResponse.AltAddress1=resultSet.Get("p1") set ppResponse.AltAddress2=resultSet.Get("p2") set ppResponse.AltAddress3=resultSet.Get("p3") set ppResponse.AltAddress4=resultSet.Get("p4") set ppResponse.AltAddress5=resultSet.Get("p5") set ppResponse.AltPostCode=resultSet.Get("p6") set ppResponse.GPCode=resultSet.Get("GPCode") set ppResponse.GPPracticeCode=resultSet.Get("PracticeCode") set ppResponse.NewField3=resultSet.Get("u5") set ppResponse.NewFiel23=resultSet.Get("u6") set status=ppResponse.%Save() if ($$$ISOK(status)) { set status=pResponse.Records.InsertObject(pobject) } } } set status=pResponse.Records.%Save() }