我正在尝试使用 Project Server 2013 REST API 从 Java 应用程序Microsoft Project Server 2013 中创建新项目,但遇到了问题。
我可以使用以下(GET)成功获取所有项目的atom + xml文件:
String url = "http://<servername>/PWA/_api/ProjectServer/Projects";
HttpDigestAuthFilter filter = new HttpDigestAuthFilter("<username>", "<password>");
Client client = ClientBuilder.newClient(new ClientConfig());
client.register(filter);
WebTarget target = client.target(url);
Builder builder = target.request();
builder.accept(MediaType.APPLICATION_ATOM_XML);
InputStream inputStream = builder.get(InputStream.class);
try {
String body = IOUtils.toString(inputStream);
System.out.println("body : " + body);
} catch (IOException e) {
e.printStackTrace();
}
但是,当我尝试使用以下方式进行 POST 时,我收到状态 = 403,原因 = 禁止:
String url = "http://<servername>/PWA/_api/ProjectServer/Projects";
HttpDigestAuthFilter filter = new HttpDigestAuthFilter("<username>", "<password>");
Client client = ClientBuilder.newClient(new ClientConfig());
client.register(filter);
WebTarget target = client.target(url);
Builder builder = target.request();
Form form = new Form();
form.param("Name", "Test Project");
form.param("Title", "Test Project");
form.param("Description", "My Test Project from Java");
builder.header("X-RequestDigest", "form digest value");
builder.header("X-HTTP-Method", "POST");
builder.accept("application/json;odata=verbose");
Response response = builder.post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE));
System.out.println(response.getStatus() + " : " + response.toString());
同一用户能够直接使用 Project Web 应用程序(项目中心)网站成功创建新项目,但我需要能够从我的 Java 应用程序以编程方式执行此操作。
我已经尝试(并失败了)使用Project Server附带的WSDL(即http ://servername/PWA/_vti_bin/psi/project.asmx?wsdl),但是当我使用Axis2生成Java代码时,生成的java代码无法处理从Project Server发回的响应。来自Project Server的响应将包括diffgr:diffgram,显然,我真正需要的一切都在其中。此外,响应还包括项目(PROJ_LAST_CHANGE_TOKEN)的一个额外元素,该元素不在WSDL中。
我还尝试了 Microsoft Project 2013 SDK 中包含的 C# 代码,但我尝试的大多数文件要么无法编译,要么无法按原样工作。我读过几个论坛,其中提到 2013 年的 Microsoft 网站帮助页面和示例代码可能是从 Project Server 2010 复制的,但是尽管实际的 API 在 2010 年和 2013 年之间发生了变化,但示例代码和 MSDN 网站尚未更新。
是否有人能够成功地创建新项目,然后能够从 Java 向 Project Server 2013 中的现有项目添加新任务?
谢谢
JSON 应如下所示:
{
'parameters' : {
'Id':'e19281cf-e8c8-4dfa-879c-75b8b3619426',
'EnterpriseProjectTypeId':'09fa52b4-059b-4527-926e-99f9be96437a',
'Name':'Test',
'Description':'Test',
'Start':'12/27/2013'
}
}
该 ID 是你自己生成的 GUID。 企业项目类型 ID 来自服务器场的项目类型 ID。