//@include lib_Class.js //@include lib_sol.common.ObjectFormatter.js importPackage(Packages.de.elo.ix.client.feed); importPackage(Packages.de.elo.ix.client); /** * Subscription utilities * * @author PZ, ELO Digital Office GmbH * @version 1.03.000 * * @eloix */ sol.define("sol.common.ix.SubscriptionUtils", { singleton: true, initialize: function () { var me = this; me.logger = sol.create("sol.Logger", { scope: me.$className }); }, /** * Retrieve the feed guid of an element * @param {String} objId * @return {String} */ getFeedGuid: function (objId) { var fai, fr, feed; fai = new FindActionsInfo(); fai.objId = objId; fr = ixConnect.feedService.findFirstActions(fai, 1, ActionC.mbMin); feed = (fr && fr.actions && fr.actions.length > 0) ? fr.feeds.get(fr.actions[0].feedGuid) : null; return (feed) ? feed.guid : null; }, /** * Checks, if the user has subscribed to an elements feed. * @param {String} objId * @return {Boolean} */ hasSubscription: function (objId) { var fai, fr; fai = new FindActionsInfo(); fai.objId = objId; fai.findSubscriptions = true; fr = ixConnect.feedService.findFirstActions(fai, 1, ActionC.mbMin); return fr && fr.subscriptions && (fr.subscriptions.size() > 0); }, /** * Gets all subscriptions for the current ixConnect user * @return {Array} */ getAllPersonalSubscriptions: function () { var findSubscriptionInfo, findResult, feed, objGuid, watchGuid, subscriptionIterator, findSord, findSordList = [], idx = 0; try { findSubscriptionInfo = new FindSubscriptionInfo(); findSubscriptionInfo.feedZ = FeedC.mbAll; findResult = ixConnect.ix().findFirstSubscriptions(findSubscriptionInfo, 1000, SubscriptionC.mbAll); while (true) { subscriptionIterator = findResult.subscriptions.keySet().iterator(); while (subscriptionIterator.hasNext()) { watchGuid = subscriptionIterator.next(); feed = findResult.feeds.get(watchGuid); objGuid = feed.objGuid; findSord = ixConnect.ix().checkoutSord(objGuid, SordC.mbAll, LockC.NO); findSordList.push(findSord); } if (!findResult.moreResults) { break; } idx += findResult.subscriptions.size(); findResult = ixConnect.ix().findNextSubscriptions(findResult.searchId, idx, 1000, SubscriptionC.mbAll); } } catch (ex) { me.logger.error("Error while trying to find subscriptions for user: " + ixConnect.userId, ex); } return findSordList; }, /** * Subscribe to a feed. * @param {String} feedGuid */ subscribe: function (feedGuid) { var subscription; if (!feedGuid) { return; } subscription = ixConnect.ix().createSubscription(feedGuid); ixConnect.ix().checkinSubscription(subscription, SubscriptionC.mbAll); }, /** * Subscribe to an elements feed. * @param {String} objId */ subscribeToElement: function (objId) { var me = this; me.subscribe(me.getFeedGuid(objId)); }, /** * Unsubscribe from a feed. * @param {String} feedGuid */ unsubscribe: function (feedGuid) { var subscription; subscription = ixConnect.ix().createSubscription(feedGuid); ixConnect.ix().deleteSubscription(subscription); }, /** * Unsubscribe from an elements feed. * @param {String} objId */ unsubscribeFromElement: function (objId) { var me = this; me.unsubscribe(me.getFeedGuid(objId)); } });