I just discovered several functions available through FootPrints' web services API that aren't mentioned in the product documentation anywhere. There's actualy just 1 additional entry point, called invokeHelper, and you can send this service the name of a FootPrints subroutine to have it invoke that subroutine on your behalf.
There is a limited number of subroutines you can call through invokeHelper. They are:
|Fix_Fields||Converts a string to the FootPrints-encoded version. Could be useful if needing to know the name of a database column for a field, as a field such as "First Name" would use a column with the encoded name of "First__bName". Could be useful if needing to write SQL that checks values of a dropdown or multi-select field as these values are all in the encoded format.|
|Fix_String_HTML||Encodes characters into HTML entities such as > into <. Not sure why you would need this though, since any programming language you're writing your client in probably has its own libraries for doing these conversions.|
|FixStatus||Converts the viewable name of a status (e.g., "Solved") to the value actually stored in the database ("_PUBLIC_SOLUTION_")|
|IsInternalUser||Given a user id and a workspace id, tells you if that user has agent-or-higher-level access.|
The way to use this invokeHelper web service is to pass parameters for authentication and then the name of the subroutine you want called as well as the argument(s) for that subroutine. Here are a couple of examples of Web Service client code written in Perl:
Find the "fixed" value for "Windows Server 2008R2"
$soap->uri( 'http://localhost/MRWebServices' ); $soap->proxy( 'http://localhost/MRcgi/MRWebServices.pl' ); my $soapenv = $soap->MRWebServices__invokeHelper( 'ws_user', 'p@ssw0rd', undef, 'Fix_Fields', 'Windows Server 2008R2' ); "Chocolate Smarties!" );
Check whether "rob" is an agent in workspace 5
$soap->uri( 'http://localhost/MRWebServices' ); $soap->proxy( 'http://localhost/MRcgi/MRWebServices.pl' ); my $soapenv = $soap->MRWebServices__invokeHelper( 'ws_user', 'p@ssw0rd', undef, 'IsInternalUser', ['rob', 5] );
Thanks, Rob, that's useful.