使用API​​获取Ektron中表单的默认值

时间:2013-02-22 06:28:17

标签: ektron

我在Ektron 8.02工作。

我正在尝试在工作区中获取与Ektron“HTML表单”相关联的数据。 我需要使用API​​获取表单字段名称及其defualt值。 我尝试使用Ektron.Cms.API.Content.Form.GetFormFieldList API。 但是我无法获得与表单字段关联的默认值。 是否有其他API提供此数据? 有人能为我提供一些见解吗?

1 个答案:

答案 0 :(得分:2)

我刚刚回答了类似的问题 - FormBlock Server Control in Ektron

使用Ektron API无法获得所需的信息(我能找到)。无论出于何种原因,API都不会为您提供默认值。但是,表单的HTML确实包含默认值。您可以使用EkItem.Html属性从FormBlock服务器控件获取HTML,也可以使用ContentAPI。我的第一个想法是使用FormAPI并获取FormData对象,但奇怪的是,FormData返回了一个空的Html属性。因此,要仅使用API​​调用执行此操作,您需要实例化两个类:HTML的Ektron.Cms.API.Content.Content和表单字段列表的Ektron.Cms.API.Content.Form

因此,总而言之,这里有一些代码可以为您提供一个字典,其中键是字段的名称,值是字段的默认值。

private Dictionary<string, string> GetFormFieldDefaults(long formId)
{
    var defaults = new Dictionary<string, string>();
    var formApi = new Ektron.Cms.API.Content.Form();
    var contentApi = new Ektron.Cms.API.Content.Content();

    var formFields = formApi.GetFormFieldList(formId);
    var formData = formApi.GetForm(formId); // Can't use FormData; have to use ContentAPI / ContentData to get the HTML
    //if (string.IsNullOrEmpty(formData.Html)) throw new Exception("FormData with empty HTML. Eeek!");

    var contentData = contentApi.GetContent(formId);
    var formXml = string.Concat("<ekForm>", contentData.Html, "</ekForm>");
    var ekForm = XElement.Parse(formXml);
    var inputs = ekForm.Descendants("input");
    foreach (var fieldDefinition in formFields.Fields)
    {
        var name = fieldDefinition.FieldName;
        var input = inputs.FirstOrDefault(i => i.Attribute("id").Value == name);
        if (input == null) continue;

        var defaultValue = input.Attribute("value").Value;
        defaults.Add(name, defaultValue);
    }
    return defaults;
}

此代码仅查找<input />字段,因此如果您想要下拉列表的默认值,可能需要额外的工作。