[OGo-XML-RPC] Re: questions regardingZOGi,WAS:[OGo-Users]custom fields and synchronizing ogo
Sebastian Reitenbach
xmlrpc@opengroupware.org
Fri, 28 Mar 2008 12:28:43 +0100
xmlrpc@opengroupware.org wrote:
> > > One moment while I check the code....
> > > Nope, zOGI doesn't support retrieving the contact_id (as contactId).
> > > But it should support writing it, just set "contactId: 10160" for
> > > example. Since "contactId" is an attribute known to OGo Logic it
should
> > > just set it.
> > > That should be corrected in zOGI r951 (Google Code version).
> > I don't need to retrieve this information, but writing it, works great!!
> > So creation of new companies works great. But still, as mentioned, I get
the
> > python backtrace when I try updating a company. I have to retrieve the
old
> > object_version from the database, and then add 1. When I then update the
> > company, with the new version, then updating works well too.
> > Maybe as an enhancement, zOGI could figure out the old object version,
and
> > creating a new one, when it is updating a record?
>
> That's not a bug, its a feature! :) You can specify the "ignoreVersion"
> flag when you do the putObject and it will disable version checking and
> just-do-the-$*@(*&$(*-write! Version detection is there for
> applications that operate online and then come back and want to commit
> their changes; version checking prevents them from updating a
> contact/enterprise that was updated on the server while they were gone.
> It is entirely intended that you need to getObject in order to putObject
> when doing an update.
>
ok, id did not a getObject, as I find the information otherwise, the
ignoreVersion is just the hint I needed.
> You shouldn't need to bump the version number, the version number needs
> to be equal to the version on the server.
I added 1 to the object_version I found in the database, and that did not
worked, I had the assumption, that I need to specify the next version, when
I do an update, and not the version that I want to update. I ran into an
python exception, when I tried to update with this:
Updating Enterprise
/usr/lib64/python2.4/xmllib.py:9: DeprecationWarning: The xmllib module is
obsolete. Use xml.sax instead.
warnings.warn("The xmllib module is obsolete. Use xml.sax instead.",
DeprecationWarning)
Traceback (most recent call last):
File "./create_or_update_company.py", line 105, in ?
enterprise = server.zogi.putObject(
File "/usr/lib64/python2.4/xmlrpclib.py", line 1096, in __call__
return self.__send(self.__name, args)
File "/usr/lib64/python2.4/xmlrpclib.py", line 1383, in __request
verbose=self.__verbose
File "/usr/lib64/python2.4/xmlrpclib.py", line 1147, in request
return self._parse_response(h.getfile(), sock)
File "/usr/lib64/python2.4/xmlrpclib.py", line 1286, in _parse_response
return u.close()
File "/usr/lib64/python2.4/xmlrpclib.py", line 744, in close
raise Fault(**self._stack[0])
xmlrpclib.Fault: <Fault 0: 'HTTP 500: Client object is out of date'>
specifying the flag, "fixes" the problem for me.
>
> <quote>
> /* Object version check is not performed if ignoreVersion flag
> was provided by the client. But this is generally a bad idea
> and clients should ONLY use this to offer an explicit force-
> overwrite option. */
> if (!([_flags containsObject:@"ignoreVersion"])) {
> if ([_company objectForKey:@"version"] == nil)
> return [NSException exceptionWithHTTPStatus:500
> reason:@"No version supplied on company update"];
> if ([[_company objectForKey:@"version"] intValue] !=
> [[eo objectForKey:@"objectVersion"] intValue]) {
> if ([self isDebug]) {
> [self warnWithFormat:@"Client object version: %@",
> [_company objectForKey:@"version"]];
> [self warnWithFormat:@"Server object version: %@",
> [eo objectForKey:@"objectVersion"]];
> }
> return [NSException exceptionWithHTTPStatus:500
> reason:@"Client object is out of date"];
> }
> } /* If ignoreVersion-not-specified */
> </quote>
thanks a lot
Sebastian