Получить идентификатор приложения 2sxc из имени приложения

Я хочу использовать данные из другого приложения, как в коде

Но я хочу получить appId из имени приложения или папки? Есть ли способ получить это?

1 ответ

Решение

Это мой рабочий код с функциями для получения AppId:

public int GetAppIdFromName(string appName){
    foreach(var app in sxApps()) if (app.Name==appName) return App.AppId;
    return -1;
}

public int GetAppIdFromFolder(string appFolder){
    foreach(var app in sxApps()) if (app.Folder==appFolder) return App.AppId;
    return -1;
}

public List<ToSic.SexyContent.App> sxApps() 
{
    var zoneId=(int)ToSic.SexyContent.Internal.ZoneHelpers.GetZoneID(Dnn.Module.PortalID);
    var eavApps = ((ToSic.Eav.DataSources.Caches.BaseCache)ToSic.Eav.DataSource.GetCache(zoneId, null)).ZoneApps[zoneId].Apps;
    var ps = DotNetNuke.Entities.Portals.PortalSettings.Current;
    return eavApps.Select<KeyValuePair<int, string>, ToSic.SexyContent.App>(eavApp => new ToSic.SexyContent.App(zoneId, eavApp.Key, ps)).ToList();
}

Это нормально или это можно сделать проще?

==================== добавлено =======================

Я обновил 2sxc с 8.7 до 9.30, и этот код больше не работает.

ошибка:

    Compiler Error Message: CS1502: The best overloaded method match for 'ToSic.SexyContent.App.App(ToSic.Eav.Apps.Interfaces.ITenant, int, ToSic.Eav.Logging.Simple.Log)' has some invalid arguments

Source Error:    
    Line 22:             return eavApps.Select<KeyValuePair<int, string>, ToSic.SexyContent.App>(eavApp => new ToSic.SexyContent.App(zoneId, eavApp.Key, ps)).ToList();

Может кто-нибудь помочь мне с преобразованием этого в новую версию? Я не понимаю, как работают новые ITenant.

============ Редактировать новое решение для 2sxc версии 9.30 =============

public static List<ToSic.SexyContent.App> sxApps(int portalID) 
{
    var zm = new ToSic.SexyContent.Environment.Dnn7.ZoneMapper();
    var zoneId = zm.GetZoneId(portalID);
    var eavApps = ((ToSic.Eav.DataSources.Caches.BaseCache)ToSic.Eav.DataSource.GetCache(zoneId, null)).ZoneApps[zoneId].Apps;
    var ps = DotNetNuke.Entities.Portals.PortalSettings.Current;
    var tenant = new ToSic.SexyContent.Environment.Dnn7.DnnTenant(ps);
    return eavApps.Select<KeyValuePair<int, string>, ToSic.SexyContent.App>(eavApp => new ToSic.SexyContent.App(tenant, eavApp.Key)).ToList();
}

====================== новое редактирование ===================

На версии 9.33 снова тормозят... (на 9.32.1 все еще работают)

Сообщение об ошибке компилятора: CS1729: "ToSic.SexyContent.App" не содержит конструктор, который принимает 2 аргумента

Строка 23: вернуть eavApps.Select, ToSic.SexyContent.App>(eavApp => new ToSic.SexyContent.App(tenant, eavApp.Key)).ToList();

Кто-нибудь знает, как это исправить?

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