0

我正在尝试使用AssetCategoryLocalServiceUtiladdCategory方法创建AssetCategory。但是,我不知道应该指定什么作为 ServiceContext。与 LocalServiceUtil 类(Group、Organizations)的其他添加方法不同,我推断我不能将 ServiceContext 设置为 null。我已经尝试过,并且在调用该方法时收到了 NullPointerExeption。如果我尝试创建一个,只是为了在方法中传递它,我会收到一个 AssetCategoryNameException。我将其创建为:

ServiceContext serviceContext = new ServiceContext();
serviceContext.setScopeGroupId(180);   

我怎样才能解决上述问题(无一例外地创建 AssetCategory)?

更新:我还需要指定一个词汇表。我怎样才能获得一个词汇(或词汇列表)才能获得它的 id?我试过代码:

List<AssetVocabulary> vl = AssetVocabularyUtil.findAll();.
int VocabId = vl.get(0).getVocabularyId();

但它抛出异常:
org.hibernate.HibernateException: No Hibernate Session bound to thread,并且配置不允许在这里创建非事务性会话

我该怎么做才能获得 VocabularyId?

4

2 回答 2

1

看看这段代码,希望对你有帮助:

// you can particularise your serviceContext as @Jonas Fonseca says
ServiceContext serviceContext = new ServiceContext();
Map<Locale,String> titleMap = new HashMap<Locale, String>();
titleMap.put(Locale.getDefault(), "categoryName");
// vocabularyID needs to point to an existing vocabulary
AssetCategoryLocalServiceUtil.addCategory(userId, parentCategoryId, titleMap, new HashMap<Locale,String>(), vocabularyID, new String[]{}, serviceContext);

当然是关于如何创建一个最简单的例子AssetCategory,但它工作正常。

更新:

如果你需要词汇,你可以这样:

// in case you have vocabulary id
AssetVocabularyLocalServiceUtil.getVocabulary(vocabularyId);
// in case you have the vocabulary name
AssetVocabularyLocalServiceUtil.getGroupVocabulary(groupId, vocabularyName);
// you can get all vocabularies in group
AssetVocabularyLocalServiceUtil.getGroupVocabularies(groupId);
// ...or all vocabularies in portal
int count = AssetVocabularyLocalServiceUtil.getAssetVocabulariesCount();
AssetVocabularyLocalServiceUtil.getAssetVocabularies(0, count);

(记得调用 *LocalServiceUtil 方法而不是 *Util 这样你就可以避免 Hibernate 异常)

于 2013-03-14T10:12:11.990 回答
0

如果你得到AssetCategoryNameException它意味着名称是无效的,例如 null。

您需要设置的信息ServiceContext取决于您调用的服务。作为最低要求,您应该设置 userId(将设置为所有者)、站点的 groupId 和 companyId。此外,还应设置权限属性,控制谁可以查看资产类别,特别是如果该类别将与资产发布者一起使用,则可以根据查看权限过滤内容。

ServiceContext createServiceContext(ThemeDisplay themeDisplay) {
    ServiceContext serviceContext = new ServiceContext();
    serviceContext.setCompanyId(themeDisplay.getCompanyId());
    serviceContext.setScopeGroupId(themeDisplay.getScopeGroupId());
    serviceContext.setUserId(themeDisplay.getUserId());
    serviceContext.setAddCommunityPermissions(true);
    serviceContext.setAddGuestPermissions(true);
    return serviceContext;
}
于 2013-03-12T21:38:21.663 回答