1

在 SDK Javadoc 中,Community 类没有“setParentCommunity”方法,但 CommunityList 类有 getSubCommunities 方法,因此必须有一种编程方式来设置父 Community 的 Uuid 以创建新的 Community。REST API 提到了“rel="http://www.ibm.com/xmlns/prod/sn/parentcommunity" 元素”。在寻找线索时,我检查了现有子社区的 XmlDataHandler 节点并找到了一个链接元素。我尝试为新创建的社区获取 XmlDataHandler,并添加一个链接节点,其中包含类似于现有社区中的 href、rel 和类型节点,但是在尝试更新或重新保存社区时,我收到了错误的请求错误。实际上,即使我尝试调用 dataHandler.setData(n) ,其中 n 设置为 Node n=dataHandler.getData(); 没有任何改变,

在创建新社区时指定父社区的推荐方法是什么,以便将其创建为子社区?

4

3 回答 3

0

以编程方式创建子社区的正确方法是修改 POST 请求正文以创建社区 - 这是 Connections 45 信息中心的链接 - http://www-10.lotus.com/ldd/appdevwiki.nsf/xpDocViewer .xsp?lookupName=IBM+Connections+4.5+API+Documentation#action=openDocument&res_title=Creating_subcommunities_programmatically_ic45&content=pdcontent 我们在 SBT SDK 中不支持使用 CommunityService API 执行此操作。我们需要使用 Endpoint 和 ClientService 类的低级 Java API 来使用适当的请求正文直接调用 REST API。

于 2013-10-18T13:07:35.760 回答
0

我按照@PaulBastide 的建议创建了一个 SubCommunityService 类,目前只包含一个创建方法。它包装了 CommunityService 而不是继承它,因为我发现这样更可取。如果您想重用它,这是代码:

public class SubCommunityService {

    private final CommunityService communityService;

    public SubCommunityService(CommunityService communityService) {
         this.communityService = communityService;
    }

    public Community createCommunity(Community community, String superCommunityId) throws ClientServicesException {
        Object constructCreateRequestBody = community.constructCreateRequestBody();
        ClientService clientService = communityService.getEndpoint().getClientService();

        String entityType = CommunityEntity.COMMUNITY.getCommunityEntityType();
        Map<String, String> params = new HashMap<>();
        params.put("communityUuid", superCommunityId);

        String postUrl = communityService.resolveCommunityUrl(entityType,
        CommunityType.SUBCOMMUNITIES.getCommunityType(), params);

        String newCommunityUrl = (String) clientService.post(postUrl, null,  constructCreateRequestBody,
            ClientService.FORMAT_CONNECTIONS_OUTPUT);
        String communityId = newCommunityUrl.substring(newCommunityUrl.indexOf("communityUuid=")
            + "communityUuid=".length());

        community.setCommunityUuid(communityId);
        return community;
    }

}

于 2013-10-23T12:43:41.667 回答
0

我会继续扩展 CommunityService 类,然后继续添加 CommunityService

https://github.com/OpenNTF/SocialSDK/blob/master/src/eclipse/plugins/com.ibm.sbt.core/src/com/ibm/sbt/services/client/connections/communities/CommunityService.java 行605 public String createCommunity(Community community) throws CommunityServiceException { if (null == community){ throw new CommunityServiceException(null, Messages.NullCommunityObjectException); }

            try {
                    Object communityPayload;
                    try {
                            communityPayload = community.constructCreateRequestBody();
                    } catch (TransformerException e) {
                            throw new CommunityServiceException(e, Messages.CreateCommunityPayloadException);
                    }
                    String communityPostUrl = resolveCommunityUrl(CommunityEntity.COMMUNITIES.getCommunityEntityType(),CommunityType.MY.getCommunityType());
                    Response requestData = createData(communityPostUrl, null, communityPayload,ClientService.FORMAT_CONNECTIONS_OUTPUT);
                    community.clearFieldsMap();
                    return extractCommunityIdFromHeaders(requestData);
            } catch (ClientServicesException e) {
                    throw new CommunityServiceException(e, Messages.CreateCommunityException);
            } catch (IOException e) {
                    throw new CommunityServiceException(e, Messages.CreateCommunityException);
            }
    }

您需要更改 communityPostUrl 以匹配... https://greenhouse.lotus.com/communities/service/atom/community/subcommunities?communityUuid=2fba29fd-adfa-4d28-98cc-05cab12a7c43

并且这里的 Uuid 是父 uuid。

于 2013-10-21T16:06:46.060 回答