cancel
Showing results for 
Search instead for 
Did you mean: 

MS Project Server & SAP WSDL-Compatibility

0 Kudos

Hello everyone,

I recently encountered a quite interesting problem when trying to consume a Microsoft Project Server 2007 Webservice with ABAP (Netweaver 700 EP16).

Project Server does offer a variety of 19 differently complex web services. Consuming services and calling methods that use simple data types does work just fine.

But digging deeper to the real interesting methods, there is the method ReadProjectList, offered by the "Project"-web service. It uses the complex data type ProjectDataSet, which would fill about 14 pages if you printed out the corresponding WSDL-part. The problem is, when you create the ABAP-proxyclass, ABAP does not create the correct data structures which you need to call the web service properly in a program. It seems that the ProjectDataSet gets just overjumped.

In the warnings-tab, there is a suitable warning: "<any>,<anyAttribute> are not supported"

There is a SAP note that contains the helpful document Proxy_WSDL_XSD_Restrictions.xls, which says "Ignored with warning" for "any" and just a "planned" for a later release.

So there seems to exist a incompatibility issue, which I would like to solve before 2013.

You can download the Project-wsdl-document here: http://studentisches.com/Project_SDN.xml

Now the question: Does anyone have experience in solving this problem? Is editing of the WSDL a good solution? How does the edited WSDL have to look like to get the complex data type ProjectDataSet properly generated in the proxyclass?

Thank you for reading! Your thoughts are enourmously appreciated.

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

hi,

this is not a trivial thing you're asking.

you might want to read this on [using Project Server DataSets|http://msdn.microsoft.com/en-us/library/ms489542.aspx].

Now, you're probably not using each and every query possible in the Project Server Webservices, but usually you have only a few well-defined queries with a few well-defined responses.

by analyzing the service's responses you might find out that (the part of) your response (at the position of the any tag) to some certain query always looks like


<ProjectDataSet xmlns="http://lucernepublishing.com/ProjectDataSet.xsd">
  <Project disclaimer="example code from MSDN; see above">
    <PROJ_UID>3b91f68b-de5a-4dcf-8a42-78bfea542e52</PROJ_UID>
    <PROJ_NAME>Test Project 1</PROJ_NAME>
    <PROJ_TYPE>0</PROJ_TYPE>
  </Project>
</ProjectDataSet>

if this is the case, than you can replace the any tag in the original WSDL by your own fragment describing above said structure (only) in XML schema and using that "personalized" WSDL to create your own client in ABAP.

Since you didn't manipulate the request in this example, the called service never knows that you built the client based on some other WSDL, and the client is "prepared" for a certain answer. Of course, this leads to an immediate run time error on the client side if the server suddenly sends another ProjectDataSet. It would be upt to you to first analyze the possible outcomes in details and manage later changes (of the service's implementation) carefully.

my 2 cents,

anton

0 Kudos

Hello Mr. Wenzelhuemer,

thank you very much for empathizing with this problem. I am happy that you agree with my suggestion to adjust the WSDL file. Like you said, the SOAP-reply to the ReadProjectList-query does always have the same form.

Unfortunately the response does not look as tight as your code example. First, Project Server sends the whole xml schema for the ProjectDataSet, after that there is a "Diffgram"-tag which I don't know how to handle in ABAP.

So here the real ReadProjectListResponse: [Link|http://www.studentisches.com/sdn_ReadProjectList_soap_response.xml]

And here one can find additional information to Microsoft Diffgrams: [Link|http://msdn.microsoft.com/en-us/library/ms172088(VS.71).aspx]

In short (with the ProjectDataSet left out), the answer looks like this:


 <ReadProjectListResponse 
xmlns="http://schemas.microsoft.com/office/project/server/webservices/Project/">
         <ReadProjectListResult>
<xs:schema ....>
<!--  Insert the complete ProjectDataSet xml schema here -->
</xs:schema>
            <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
 xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
               <ProjectDataSet 
xmlns="http://schemas.microsoft.com/office/project/server/webservices/ProjectDataSet/">
                  <Project diffgr:id="Project1" msdata:rowOrder="0" 
diffgr:hasChanges="inserted">
                     <PROJ_UID>261f8418-41bb-4483-a5b6-34f1f551498a</PROJ_UID>
                     <PROJ_NAME>Test Project SAP SDN</PROJ_NAME>
                  </Project>
               </ProjectDataSet>
            </diffgr:diffgram>
         </ReadProjectListResult>
      </ReadProjectListResponse>

And my problem is that I don't get these tags, the xml-schema and the diffgr-tag, properly handled in ABAP. Either I get soap failures which result in cx_ai_system_faults, or nothing happens and the data structures just do not get filled with data.

One of my proposals of a modified wsdl: [Link|http://www.studentisches.com/sapsdn-Project-wsdl-modification.txt]

A little push into the right direction would be great. But thank you very much so far!

Have a nice day!

Edited by: CoreKeeper on Jun 9, 2009 5:50 PM

Answers (1)

Answers (1)

0 Kudos

Manually editing a WSDL-File to fix the automatic creation of the Consumer proxy does work technically, but is complicated to develop, because testing of the wsdl does take a while (regenerating and activating the consumer proxy) and it's basically trial and error while not getting any useful information from abap except of warnings ("does not support XML schema tag any, anytype, etc.").

Furthermore, every embedded wsdl-file with the unsupported Tags has to be edited manually. It is definitely no long-term-solution, so a short/midterm support for the appropriate xml schema and wsdl-tags would be welcome.