2sxc: как получить поля ContentType / тип ввода / значение свойства

Я пытаюсь получить значение «RowCount» для поля Content-Type.

  • С моим кодом я могу перечислить все типы содержимого приложений
  • Затем я могу перечислить все поля с основными атрибутами (имя, метка, значение по умолчанию...)

Но теперь я почти весь день пытаюсь получить доступ к дополнительным значениям, специфичным для типа ввода, но безуспешно...

Это мой текущий код с комментариями, где мне нравится получать дополнительные значения.

public string GetTablesAndFields(){
    var cache = ToSic.Eav.DataSource.GetCache(null, App.AppId) as ToSic.Eav.DataSources.Caches.BaseCache;
    var allTypes = cache.GetContentTypes().Select(t => t.Value);
    var appTypes = allTypes.Where(t => t.Scope == "2SexyContent").ToList();

    var zoneId=(int)ToSic.SexyContent.Internal.ZoneHelpers.GetZoneID(Dnn.Module.PortalID);
    var metaDataSource = ToSic.Eav.DataSource.GetMetaDataSource(zoneId, App.AppId);

    var code ="";
    foreach(ToSic.Eav.Data.ContentType t in appTypes){
        code = code + t.Name + " | " + t.Scope + " | fields : " + t.AttributeDefinitions.Count + "<br/>";
        foreach(var a in t.AttributeDefinitions){
            var f = GetFieldMetadata(metaDataSource, a.Key);

            code += "<hr><pre>";
            code += "# Name               #" + a.Value.Name + "<br/>";
            code += "# Name Label         #" + f.Title[0] + "<br/>";
            code += "# Visible in Edit UI #" + f.Attributes["VisibleInEditUI"][0] + "<br/>";
            code += "# Default value      #" + f.Attributes["DefaultValue"][0] + "<br/>";
            code += "# Required           #" + f.Attributes["Required"][0] + "<br/>";
            code += "# Disabled           #" + f.Attributes["Disabled"][0] + "<br/>";
            code += "# Input Type         #" + f.Attributes["InputType"][0] + "<br/>";
            code += "# Notes              #" + f.Attributes["Notes"][0] + "<br/>";
            code += "# Validation         #" + f.Attributes["ValidationRegExJavaScript"][0] + "<br/>";
            code += "</pre><hr>";

            // How to access "RowCount" or other InputType specific values?
        }
    }
    return code;
}

person Jernej Pirc    schedule 03.08.2016    source источник


Ответы (1)


Если вы не используете foreach для AttributeDefinitions, вы можете получить все данные следующим образом:

        ToSic.Eav.WebApi.ContentTypeController eavCtc;
        eavCtc = new ToSic.Eav.WebApi.ContentTypeController();
        eavCtc.SetUser(ToSic.SexyContent.Environment.Dnn7.UserIdentity.CurrentUserIdentityToken);
        var fields = eavCtc.GetFields(App.AppId, staticName);

Вы можете получить staticName из рассматриваемого кода:

t.StaticName
person Jernej Pirc    schedule 04.08.2016