Как создать Суб-сообщества с помощью Java API Social Business Toolkit?

В Javadoc SDK класс Community не имеет метода "setParentCommunity", но в классе CommunityList есть метод getSubCommunities, поэтому должен быть программный способ установки Uuid родительского сообщества при создании нового сообщества. В REST API упоминается элемент "rel="http://www.ibm.com/xmlns/prod/sn/parentcommunity". В поисках подсказок я проверяю узлы существующего Подкомитета XmlDataHandler и нахожу элемент ссылки. Я попытался получить XmlDataHandler для только что созданного сообщества и добавить узел ссылки с href, rel и типами узлов, аналогичными узлам в существующем сообществе, но при попытке обновить или повторно сохранить сообщество я получил ошибку неверного запроса. На самом деле, даже когда я пытался вызвать dataHandler.setData(n), где n был установлен как Node n=dataHandler.getData(); без каких-либо изменений, затем вызывая updateCommunity или save, я получил ту же ошибку, поэтому кажется, что манипулирование XML-данными dataHandler недопустимо.

Каков рекомендуемый способ указать родительское Сообщество при создании нового Сообщества, чтобы оно создавалось как Суб-сообщество?

3 ответа

Правильный способ создания подобного сообщества программно - это изменить тело запроса 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 для этого с помощью API-интерфейсов CommunityService. Нам нужно использовать низкоуровневые API-интерфейсы Java с использованием классов Endpoint и ClientService, чтобы напрямую вызывать API-интерфейсы REST с соответствующим телом запроса.

Я следовал рекомендации @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;
    }

}

Я хотел бы продолжить и расширить класс 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 Line 605 public String createCommunity (сообщество Community) выдает CommunityServiceException { if (null == сообщество){ 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.

Другие вопросы по тегам