Как создать Суб-сообщества с помощью 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.