3

我正在尝试使用 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 时,我收到 status=403, reason=FORBIDDEN :

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 App(项目中心)网站成功创建新项目,但我需要能够从我的 Java 应用程序以编程方式执行此操作。

我已经尝试(但失败了)使用 Project Server 附带的 WSDL(即 http://servername/PWA/_vti_bin/psi/project.asmx?wsdl),但是当我使用 Axis2 生成 Java 代码时,生成的java 代码无法处理从 Project Server 发回的响应。来自 Project Server 的响应将包括 diffgr:diffgram,显然,我真正需要的一切都在其中。此外,响应包括一个不在 WSDL 中的 Project (PROJ_LAST_CHANGE_TOKEN) 的额外元素。

我还尝试了 Microsoft Project 2013 SDK 中包含的 C# 代码,但我尝试的大多数文件要么无法编译,要么无法按原样工作。我读过几个论坛,其中提到 2013 年的 Microsoft 网站帮助页面和示例代码可能是从 Project Server 2010 复制的,但尽管实际 API 在 2010 年和 2013 年之间发生了变化,但示例代码和 MSDN 网站尚未更新。

有没有人能够成功地创建新项目,然后能够从 Java 向 Project Server 2013 中的现有项目添加新任务?

谢谢

4

1 回答 1

2

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。

于 2013-12-27T23:41:31.937 回答