> I am writing a small Perl script to become familiar with the XML-RPC
> API. I am using the RPC::XML::Client package of Perl to get a
> connection to the OGo server.
> Now, I want to create a task programmatically. But contrary to the
> documentation, the xmlrpcd does not seem to accept dates in the format
> %Y%m%dT%H%M%S.
> In xmlrpcd.log I find the following:
> Jun 27 12:32:04 ogo-xmlrpcd-1.1 [3480]: [WARN] <0x08316CE4[LSNewJobCommand]> date command argument 'startDate' is not a date (NSShortInline8BitString): 20060722T10:30:00
> Jun 27 12:32:04 ogo-xmlrpcd-1.1 [3480]: [ERROR] <0x08316CE4[LSNewJobCommand]> Could not convert key startDate (NSShortInline8BitString:20060722T10:30:00) to date, format is %Y-%m-%d %H:%M:%S
> When I try the format %Y-%m-%d %H:%M:%S, I still get the warning in
> the logs and an error on the client side, but the task is created all
> right.
I think it accepts standard dates as in PHP I can call
XML_RPC_iso8601_encode($value) to encode the date and in .NET using the
CookComputing XML-RPC assembly DateTime types are automatically
formatted and submitted without errors.
<aside>Of course, XML-RPC is a "standard" only in the loosest definition
of the word, it is really more like a "consensus". In some aspects more
like a "train wreck". The 'standard' document is really poorly done and
leaves a whole heck of allot open to interpretation.</aside>
> Can someone tell me more about this issue? Should I use %Y-%m-%d
> %H:%M:%S and ignore the warning, i.e. did the date format change since
> the documentation was written (xml-rpc-de.pdf from around 2003)?
It might be useful to look at the code of POGI (PHP) or OGoMojo (C#),
as I've gotten most things to work in both of those. There are lots of
'caveats and addendums' that xml-rpc-de doesn't include.
> Or
> is it that the xmlrpcd somehow does not properly convert date strings
> into date objects in my setup?
> The server is runing OGo-1.1.3 with sope-4.5.6.
An insertJob call on-the-wire looks like
------------------
Content-Type: text/xml
User-Agent: XML-RPC.NET
Authorization: Basic ********************
Content-Length: 24391
Connection: keep-alive
Host: gourd-amber
<?xml version="1.0"?>
<methodCall>
<methodName>person.insertJob</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>owner</name>
<value>
<struct>
<member>
<name>id</name>
<value>
<string>skyrix://gourd-amber.morrison.iserv.net/morrisonOGo/10000</string>
</value>
</member>
<member>
<name>login</name>
<value>
<string>ogo</string>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>url</name>
<value>
<string>http://www.whitemice.org</string>
</value>
</member>
<member>
<name>login</name>
<value>
<string>adam</string>
</value>
</member>
<member>
<name>gender</name>
<value>
<string>male</string>
</value>
</member>
<member>
<name>isComplete</name>
<value>
<boolean>1</boolean>
</value>
</member>
<member>
<name>addresses</name>
<value>
<struct>
<member>
<name>mailing</name>
<value>
<struct>
<member>
<name>country</name>
<value>
<string>USA</string>
</value>
</member>
<member>
<name>type</name>
<value>
<string>mailing</string>
</value>
</member>
<member>
<name>state</name>
<value>
<string>MI</string>
</value>
</member>
<member>
<name>name1</name>
<value>
<string>*********************</string>
</value>
</member>
<member>
<name>street</name>
<value>
<string>*********************</string>
</value>
</member>
<member>
<name>zip</name>
<value>
<string>*********************</string>
</value>
</member>
<member>
<name>id</name>
<value>
<string>skyrix://gourd-amber.morrison.iserv.net/morrisonOGo/10140</string>
</value>
</member>
<member>
<name>city</name>
<value>
<string>*********************</string>
</value>
</member>
<member>
<name>name2</name>
<value>
<string>CIS/IT Dept.</string>
</value>
</member>
<member>
<name>name3</name>
<value>
<string>ATTN: Adam Tauno Williams</string>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>private</name>
<value>
<struct>
<member>
<name>id</name>
<value>
<string>skyrix://gourd-amber.morrison.iserv.net/morrisonOGo/10130</string>
</value>
</member>
<member>
<name>city</name>
<value>
<string>Grand Rapids</string>
</value>
</member>
<member>
<name>name1</name>
<value>
<string>Adam Tauno Williams</string>
</value>
</member>
<member>
<name>country</name>
<value>
<string>USA</string>
</value>
</member>
<member>
<name>zip</name>
<value>
<string>*********************</string>
</value>
</member>
<member>
<name>street</name>
<value>
<string>*********************</string>
</value>
</member>
<member>
<name>state</name>
<value>
<string>MI</string>
</value>
</member>
<member>
<name>type</name>
<value>
<string>private</string>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>location</name>
<value>
<struct>
<member>
<name>country</name>
<value>
<string>USA</string>
</value>
</member>
<member>
<name>type</name>
<value>
<string>location</string>
</value>
</member>
<member>
<name>state</name>
<value>
<string>MI</string>
</value>
</member>
<member>
<name>name1</name>
<value>
<string>Morrison Industrial Equipment</string>
</value>
</member>
<member>
<name>street</name>
<value>
<string>*********************</string>
</value>
</member>
<member>
<name>zip</name>
<value>
<string>*********************</string>
</value>
</member>
<member>
<name>id</name>
<value>
<string>skyrix://gourd-amber.morrison.iserv.net/morrisonOGo/10150</string>
</value>
</member>
<member>
<name>city</name>
<value>
<string>Grand Rapids</string>
</value>
</member>
<member>
<name>name2</name>
<value>
<string>CIS/IT Dept.</string>
</value>
</member>
<member>
<name>name3</name>
<value>
<string>ATTN: Adam Tauno Williams</string>
</value>
</member>
</struct>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>keywords</name>
<value>
<string />
</value>
</member>
<member>
<name>extendedKeys</name>
<value>
<array>
<data>
<value>
<string>email1</string>
</value>
<value>
<string>email2</string>
</value>
<value>
<string>callfrequency</string>
</value>
<value>
<string>division</string>
</value>
<value>
<string>email3</string>
</value>
<value>
<string>headboy</string>
</value>
<value>
<string>job_title</string>
</value>
<value>
<string>mailmktcode</string>
</value>
<value>
<string>other_title1</string>
</value>
<value>
<string>other_title2</string>
</value>
<value>
<string>salesperson</string>
</value>
<value>
<string>territory</string>
</value>
</data>
</array>
</value>
</member>
<member>
<name>birthday</name>
<value>
<dateTime.iso8601>19271206T05:00:00</dateTime.iso8601>
</value>
</member>
<member>
<name>number</name>
<value>
<string>OGo10100</string>
</value>
</member>
<member>
<name>objectVersion</name>
<value>
<i4>183</i4>
</value>
</member>
<member>
<name>comment</name>
<value>
<string>This dude rocks!</string>
</value>
</member>
<member>
<name>firstname</name>
<value>
<string>Adam</string>
</value>
</member>
<member>
<name>phoneTypes</name>
<value>
<array>
<data>
<value>
<string>01_tel</string>
</value>
<value>
<string>02_tel</string>
</value>
<value>
<string>03_tel_funk</string>
</value>
<value>
<string>05_tel_private</string>
</value>
<value>
<string>10_fax</string>
</value>
<value>
<string>15_fax_private</string>
</value>
</data>
</array>
</value>
</member>
<member>
<name>id</name>
<value>
<string>skyrix://gourd-amber.morrison.iserv.net/morrisonOGo/10100</string>
</value>
</member>
<member>
<name>isAccount</name>
<value>
<boolean>1</boolean>
</value>
</member>
<member>
<name>extendedAttrs</name>
<value>
<struct>
<member>
<name>email1</name>
<value>
<string>adam@morrison-ind.com</string>
</value>
</member>
<member>
<name>headboy</name>
<value>
<string>no</string>
</value>
</member>
<member>
<name>email3</name>
<value>
<string>awilliam@wmmi.net</string>
</value>
</member>
<member>
<name>email2</name>
<value>
<string>awilliam@whitemice.org</string>
</value>
</member>
<member>
<name>salesperson</name>
<value>
<string>none</string>
</value>
</member>
<member>
<name>territory</name>
<value>
<string>none</string>
</value>
</member>
<member>
<name>lastChanged</name>
<value>
<dateTime.iso8601>20031128T12:17:25</dateTime.iso8601>
</value>
</member>
<member>
<name>job_title</name>
<value>
<string>System and Network Administrator</string>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>phones</name>
<value>
<struct>
<member>
<name>03_tel_funk</name>
<value>
<struct>
<member>
<name>telephoneId</name>
<value>
<i4>10180</i4>
</value>
</member>
<member>
<name>info</name>
<value>
<string />
</value>
</member>
<member>
<name>number</name>
<value>
<string>****************</string>
</value>
</member>
<member>
<name>type</name>
<value>
<string>03_tel_funk</string>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>01_tel</name>
<value>
<struct>
<member>
<name>telephoneId</name>
<value>
<i4>10160</i4>
</value>
</member>
<member>
<name>info</name>
<value>
<string />
</value>
</member>
<member>
<name>number</name>
<value>
<string>****************</string>
</value>
</member>
<member>
<name>type</name>
<value>
<string>01_tel</string>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>15_fax_private</name>
<value>
<struct>
<member>
<name>telephoneId</name>
<value>
<i4>10210</i4>
</value>
</member>
<member>
<name>info</name>
<value>
<string />
</value>
</member>
<member>
<name>number</name>
<value>
<string />
</value>
</member>
<member>
<name>type</name>
<value>
<string>15_fax_private</string>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>10_fax</name>
<value>
<struct>
<member>
<name>telephoneId</name>
<value>
<i4>10200</i4>
</value>
</member>
<member>
<name>info</name>
<value>
<string />
</value>
</member>
<member>
<name>number</name>
<value>
<string>****************</string>
</value>
</member>
<member>
<name>type</name>
<value>
<string>10_fax</string>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>02_tel</name>
<value>
<struct>
<member>
<name>telephoneId</name>
<value>
<i4>10170</i4>
</value>
</member>
<member>
<name>info</name>
<value>
<string />
</value>
</member>
<member>
<name>number</name>
<value>
<string />
</value>
</member>
<member>
<name>type</name>
<value>
<string>02_tel</string>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>05_tel_private</name>
<value>
<struct>
<member>
<name>telephoneId</name>
<value>
<i4>10190</i4>
</value>
</member>
<member>
<name>info</name>
<value>
<string />
</value>
</member>
<member>
<name>number</name>
<value>
<string />
</value>
</member>
<member>
<name>type</name>
<value>
<string>05_tel_private</string>
</value>
</member>
</struct>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>isPrivate</name>
<value>
<boolean>0</boolean>
</value>
</member>
<member>
<name>name</name>
<value>
<string>Williams</string>
</value>
</member>
<member>
<name>degree</name>
<value>
<string>UNIX System Administration</string>
</value>
</member>
<member>
<name>nickname</name>
<value>
<string>ATW</string>
</value>
</member>
<member>
<name>middlename</name>
<value>
<string>Tauno</string>
</value>
</member>
</struct>
</value>
</param>
<param>
<value>
<struct>
<member>
<name>associatedContacts</name>
<value>
<string>Associated Contacts</string>
</value>
</member>
<member>
<name>totalWork</name>
<value>
<i4>75</i4>
</value>
</member>
<member>
<name>actualWork</name>
<value>
<i4>50</i4>
</value>
</member>
<member>
<name>executor</name>
<value>
<struct>
<member>
<name>id</name>
<value>
<string>skyrix://gourd-amber.morrison.iserv.net/morrisonOGo/10100</string>
</value>
</member>
<member>
<name>login</name>
<value>
<string>adam</string>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>creator</name>
<value>
<struct>
<member>
<name>id</name>
<value>
<string>skyrix://gourd-amber.morrison.iserv.net/morrisonOGo/10100</string>
</value>
</member>
<member>
<name>login</name>
<value>
<string>adam</string>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>priority</name>
<value>
<i4>1</i4>
</value>
</member>
<member>
<name>percentComplete</name>
<value>
<i4>25</i4>
</value>
</member>
<member>
<name>keywords</name>
<value>
<string>mogi insertJob</string>
</value>
</member>
<member>
<name>sensitivity</name>
<value>
<i4>3</i4>
</value>
</member>
<member>
<name>associatedCompanies</name>
<value>
<string>Associated Companies</string>
</value>
</member>
<member>
<name>accountingInfo</name>
<value>
<string>Accounting Info</string>
</value>
</member>
<member>
<name>startDate</name>
<value>
<dateTime.iso8601>20060627T00:00:00</dateTime.iso8601>
</value>
</member>
<member>
<name>name</name>
<value>
<string>TEST JOB</string>
</value>
</member>
<member>
<name>endDate</name>
<value>
<dateTime.iso8601>20060704T00:00:00</dateTime.iso8601>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>