Я пытаюсь понять, как составить собственное представление WF4 Activity.Например, у меня есть действие с именем AssignMemberDates, которое имеет 2 аргумента IN: DataType (из List <>) и RecordType (также из List <>).У меня есть 10 разных типов DateType и 3 разных типа RecordTypes.Вместо создания 30 видов деятельности я хочу один вид деятельности.Когда я перетаскиваю его на поверхность WF и назначаю свои 2 входа, мне хотелось бы чего-то большего, чем показ общего контейнера Activity.Давайте посмотрим, смогу ли я (используя ASCII) нарисовать это ...
Что я получу сейчас:
+-------------------------------+
| [ICON] AssignMemberDates |
+-------------------------------+
Что я хочу:
+-------------------------------+
| [ICON] AssignMemberDates |
| Pending / BenefitMonth |
+-------------------------------+
Делает ли этоимеет смысл?Я знаю, что мне нужно создать XAML, но я не знаю, как захватить InArguments (перечисления) и отобразить их в виде текста.Я НЕ хочу сделать это редактором.Я просто хочу видеть InArguments в действии на поверхности проектирования.
Обновление:
Я использую перечисления на InArguments, поэтому разработчики в будущем ограниченына что они могут войти по свойствам дизайнера.Это так просто, как:
public InArgument<DateTypeList> DateType { get; set; }
public InArgument<RecordTypeList> RecordType { get; set; }
Я знаю, как получить строку из моего перечисления.Я начинающий дизайнер и прошу помощи с этим.Я не знаю, как отобразить значения свойств на поверхности конструктора, и, кажется, существует тонна отображаемых «виджетов», которые я мог бы использовать.
Я начал сследующий XAML, но не очень далеко - и похоже, что это больше похоже на вход, аналогичный тому, который вы видите на вкладке свойств:
<sap:ActivityDesigner x:Class="PSI.Workflow.Activities.SouthCarolina.SC1AssignMemberDateDesigner"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="86" d:DesignWidth="200">
<StackPanel>
<sapv:ExpressionTextBox MaxLines="1" ></sapv:ExpressionTextBox>
<sapv:ExpressionTextBox MaxLines="1"></sapv:ExpressionTextBox>
</StackPanel>
</sap:ActivityDesigner>
Я не знаю, как принять параметр ввода 2значения и отображать их.Если бы я был в HTML, я бы просто создал элемент управления и затем предоставил значение, которое я хотел во время загрузки страницы.Я также не хочу, чтобы элементы дисплея были сложены, а располагались рядом друг с другом с помощью "/".
Имеет ли это смысл?
Обновление 2:
Почему я использую перечисления?- Мы используем перечисления по всей базе кода, чтобы ограничить входные данные известными значениями.Мы не хотим использовать «магические строки», и вся наша кодовая база, 2 миллиона строк и более, зависит от использования сотен перечислений.Преобразование перечислений в строки не является проблемой.Мы также хотим ограничить входные данные для этой деятельности известными значениями (перечислениями).Например:
public InArgument<DateTypeList> DateType { get; set; }
public InArgument<RecordTypeList> RecordType { get; set; }
protected override void Execute(NativeActivityContext context)
{
// In Arguments...
var dateType = DateType.Get(context);
var recordType = RecordType.Get(context);
// Let's get what we need from the context...
var member = context.Member();
var mtd = context.MemberTransaction();
var cutoffDates = context.CutoffDates();
DateTime? startDate = null;
DateTime? endDate = null;
switch (dateType)
{
case DateTypeList.ARC:
startDate = Helpers.GetDate(cutoffDates, CutoffDateType.EnrollmentStart, mtd.assignable.ToBoolean()).AddYears(1);
break;
case DateTypeList.AutoAssignment:
startDate = Helpers.GetDate(cutoffDates, CutoffDateType.AutoAssignment, mtd.assignable.ToBoolean());
break;
}
Helpers.AssignDate(ref member, dateType, recordType, startDate.Value, endDate);
}
Нет, я никогда не пытался создать что-то подобное.У меня нет опыта XAMLX, и я начинаю с нуля.Я просто хочу просто перенести строковое представление enum на поверхность конструктора.Таким образом, когда мы просматриваем рабочий процесс с нетехническими людьми, на самой операции четко отображается, какие значения были переданы во время настройки операции.