aahh ... <csp:class super="%CSP.Page,pkgAddressBook.cTlphones"> ... this makes it clearer!
I don't like such unattractive Super inheritings of totaly different classes you do here. I thing this is a problem and limitation of inheritance. Which class-context should be used because of the extensiv using of .. syntax.
Please don't do so ... think of the overhead ... it's not the worth only for some #server- invokes class methods out of a csp-page. Just my 2 Cents ...
Regards... Bernd!
RJH wrote:
Ok this code on the csp page works
function EditTlphone(tlphoneID,prsonID) { //#server(..DeleteTlphone(intID))#; var Result; Result=#server(pkgAddressBook.cTlphones.DeleteTlphone(intID))#; if (Result=='1') { alert('Record has been removed'); } else { alert('Unable to remove record...'); }
However, if I use <csp:class super="%CSP.Page,pkgAddressBook.cTlphones">
and then in the script section #server(..DeleteTlphone(intID))#;
the error comes back. Don't understand why, but thanks for the info. At least I see it working now...
"Bernd Mueller" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
you can change your DeleteTlphone method to this ... so you don't need to open the object before (this is the way i prefer) ...
ClassMethod DeleteTlphone(TlphoneID As %Integer) As %String { Set sc=##class(pkgAddressBook.cTlphones).%DeleteId(TlphoneID) if sc Quit 1 Quit 0 }
the error comes from the csp-page not the class.
Do you have a DeleteTlphone() method inside the page ? I think this is what you call via #server(..DeleteTlphone(intID))#;
Remove it and call the "ClassMethod" DeleteTlphone() instead via
Result=#server(pkgAddressBook.cTlphones.DeleteTlphone(intID))#; if (Result=='1') alert('Delete ok');
If this is not working please provide us with the csp-Page-Source also.
Regards... Bernd!
RJH wrote:
Ok, here is the complete class
Class pkgAddressBook.cTlphones Extends %Persistent [ ClassType =
persistent,
ProcedureBlock, SqlTableName = Tlphones ] {
Property Person As cPerson;
Property Tlphone As %String;
Property TlphoneType As cTlphoneTypes;
Index TlphoneIndex On Tlphone [ Unique ];
Query qPrsonTlphnes(PrsonID As %Integer = 0) As %SQLQuery(CONTAINID = 1) { SELECT
%ID,Person->Category->Category,Person->Category->ID,Person->Category->ID,Per
son->FirstNme,Person->ID,Person->LastNme,Tlphone,TlphoneType->ID,TlphoneType
->TlphoneType FROM Tlphones WHERE (Person = :PrsonID) ORDER BY Tlphone }
ClassMethod DeleteTlphone(TlphoneID As %Integer) { Set objTlphone = ##class(pkgAddressBook.cTlphones).%OpenId(TlphoneID) Do objTlphone.%Delete() //Do ##class(pkgAddressBook.cTlphones).%DeleteId(TlphoneID) //set
sc=$zobjclassmethod(pkgAddressBook.cTlphones,"%DeleteId",TlphoneID)
}
}
I then call it from ShowTlphones csp
<SCRIPT Language=JavaScript> <!--
function RmoveTlphone(intID) { #server(..DeleteTlphone(intID))#; } // --> </SCRIPT>
And get the following error.
csp.showtlphones.1(0) : OBJ5376 : Method or Property '%DeleteData' does
not
exist in this class. TEXT: Set sc=..%DeleteData(id,concurrency)
Errors detected during compile.
Before adding the delete method, everything was working fine. Can you explain how to get rid of the error and the proper way to add delete functionality from a csp page?
"RJH" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
I added a method to delete a record here is the code:
ClassMethod DeleteRecord(intID As %Integer) { //Set obj = ##class(ClassNamePackage.Class).%OpenId(intID) //Do obj.%Delete() //Do ##class(ClassNamePackage.Class).%DeleteId(intID) set sc=$zobjclassmethod(ClassNamePackage.Class,"%DeleteId",intID)
}
As you can see I tried 3 different versions. But I get the following
error
Method or property %DeleteData does not exists.
I removed the method, but can not re-compile. I get the same error. Can anyone help and explain what is going on?
