私はEktron8.02で働いています。
ワークエリアでEktronの「HTMLフォーム」に関連付けられたデータを取得しようとしています。APIを使用してフォームフィールド名とそのデフォルト値を取得する必要があります。Ektron.Cms.API.Content.Form.GetFormFieldListAPIを使用してみました。しかし、フォームフィールドに関連付けられたデフォルト値を取得できません。このデータを提供する他のAPIはありますか?誰かが私にこれについての洞察を提供できますか?
私はEktron8.02で働いています。
ワークエリアでEktronの「HTMLフォーム」に関連付けられたデータを取得しようとしています。APIを使用してフォームフィールド名とそのデフォルト値を取得する必要があります。Ektron.Cms.API.Content.Form.GetFormFieldListAPIを使用してみました。しかし、フォームフィールドに関連付けられたデフォルト値を取得できません。このデータを提供する他のAPIはありますか?誰かが私にこれについての洞察を提供できますか?
私はちょうど同様の質問に答えました-EktronのFormBlockサーバー制御
Ektron APIを使用して必要なものを取得する方法はありません(私が見つけることができました)。何らかの理由で、APIはデフォルト値を提供しません。ただし、フォームのHTMLにはデフォルト値が含まれています。プロパティを使用してFormBlockサーバーコントロールからHTMLを取得するEkItem.Html
か、ContentAPIを使用できます。私が最初に考えたのは、FormAPIを使用してFormDataオブジェクトを取得することでしたが、奇妙なことに、FormDataは空のHtmlプロパティで返されます。Ektron.Cms.API.Content.Content
したがって、API呼び出しのみでこれを行うには、HTMLEktron.Cms.API.Content.Form
用とフォームフィールドのリスト用の2つのクラスをインスタンス化する必要があり ます。
したがって、簡単に言うと、キーがフィールドの名前で、値がフィールドのデフォルト値である辞書を提供するコードを次に示します。
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 />
フィールドのみを検索するため、ドロップダウンリストのデフォルト値が必要な場合は、追加の作業が必要になる場合があります。