0

AssetCategoryLocalServiceUtilのメソッドaddCategoryを使用してAssetCategoryを作成しようとしています。ただ、ServiceContextに何を指定すればいいのかわかりません。LocalServiceUtil クラス (Group、Organizations) の他の追加メソッドとは異なり、ServiceContext を null に設定できないと推測します。私は試してみましたが、メソッドを呼び出すときに NullPointerExeption を受け取りました。メソッドに渡すためだけに作成しようとすると、AssetCategoryNameException が発生します。私はそれを次のように作成します:

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

上記の問題を解決するにはどうすればよいですか (例外なく AssetCategory を作成します)。

更新:ボキャブラリー ID も指定する必要があります。語彙 (または語彙のリスト) を取得してその ID を取得するにはどうすればよいですか? 私はコードを試しました:

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

しかし、それは例外をスローします:
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

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);

(Hibernate 例外を回避できるように、*Util の代わりに *LocalServiceUtil メソッドを呼び出すことを忘れないでください)

于 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 に答える