четверг, 29 марта 2012 г.

Описание внешних C# функций и их параметров

При использовании внешних C# функций с параметрами, для каждого параметра можно задать дружеское пользователю название (label) параметра, описание параметра и значение по умолчанию.

Вплоть до последней версии 3.1 все это можно было сделать при помощи специального атрибута  FunctionParameterDescription. Начиная с будущей версии 3.2 (и уже в последних бета-версиях), этот атрибут будет уже устаревшим, а вместо него нужно будет пользоваться более удобным FunctionParameter, а также с помощью атрибута Function можно будет задать описание и самой функции.


Функция

Описание функции задается в параметре Description атрибута Function:

using System;
using Composite.Functions;

namespace Demo
{
  [Function(Description="Возвращает текущую дату в полном формате")]
  public class Functions
  {
    public static string CurrentDate()
    {
      return DateTime.Now.ToLongDateString();
    }
  }
}

Параметры

При помощи атрибута FunctionParameter можно задать дополнительную информацию для параметра внешней C# функции.

Первым параметром у него всегда будет Name, в котором указывается собственно название параметра функции.

А вторым может быть один из таких параметров:
  • Label (ярлык): дружественное пользователю название параметра
  • Help (справка): текст описания параметра
  • DefaultValue (значение по умолчанию): значение, которое следует использовать по умолчанию
  • WidgetMarkup (код-разметка виджета): код-разметка виджета, который нужно использовать вместо виджета, используемого по умолчанию для такого типа параметра.
Атрибут FunctionParameter можно добавлять несколько раз для одного параметра, комбинируя так, чтобы получились заданными нужные параметры:

using System;
using Composite.Functions;

namespace Demo
{
  public class Functions
  {
    [FunctionParameter(Name="text", Label="Text")]
    [FunctionParameter(Name="text", Help="Текст, который нужно показать")]
    [FunctionParameter(Name="text", Default="Здравствуй, мир!")]
    [FunctionParameter(Name="text", WidgetMarkup=
@"<f:widgetfunction name='Composite.Widgets.String.TextArea' xmlns:f='http://www.composite.net/ns/function/1.0' />")]
    public static string ShowText(string text)
    {
      return text;
    }
  }
}

Если первые три параметры понятны, то последний параметр требует небольшого уточнения. В этом параметре нужно указать XML-код того виджета, который хочется использовать (например TextArea, вместо TextBox) с обязательным указанием пространства имен. Если виджет поддерживает параметры, то их тоже можно включать в этот параметр.

[FunctionParameter(Name = "text", WidgetMarkup =
@"<f:widgetfunction name="Composite.Widgets.String.TextBox"  xmlns:f="http://www.composite.net/ns/function/1.0" ><f:param name="SpellCheck" value ="False" /></f:widgetfunction>")]

Если вы не уверены в XML-коде виджета, его можно подсмотреть:
  1. В разделе "Функции", раскрываем "Все виджет-функции"
  2. Раскрываем пространства имен нужного виджета, напр., Composite / Widgets / String
  3. Выбираем нужный виджет, напр. TextArea
  4. Нажимаем кнопку "Информация".
  5. В правой части смотрим под Function Markup.


Напомню, что эти атрибуты будут доступны в предстоящей новой версии 3.2, и их можно уже "пощупать", скачав последнюю сборку с CodePlex или установив последнюю бета-версию через Web Platform Installer.

2 комментария:

  1. Немного неточно, атрибут FunctionParameter нужно помещать в метод (http://docs.composite.net/ASP-NET/CSharpFunctions/Creating-External-C-Functions)

    ОтветитьУдалить