Добрый день, Александр.
К сожалению, пока создать новое расчетное значение в спецификацию с помощью API нельзя.
Свойство
IsCalculatedField только для чтения. Т.е. вы можете узнать, является ли существующее поле расчетным или нет.
Расчетное значение имеет тип
ScheduleField.FieldType либо
FieldType.Formula, либо
FieldType.Percentage. Изменить тип у существующего поля естественно нельзя. Есдинственный способ указать тип - указать его при создании поля с помщью метода
ScheduleDefinition.AddField(ScheduleType scheduleType).
Однако, при попытке создать новое поле с типом
FieldType.Formula или
FieldType.Percentage получим ошибку:
fieldType is not a schedulable field type. Описание ошибки намекает на то, что можно добавить только поля, которые вы видите в списке
Доступные поля (в интерфейсе).
Вот код, который я использовал для тестирования:
public Result Execute(
ExternalCommandData commandData,
ref string message,
ElementSet elements)
{
UIApplication uiapp = commandData.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
ViewSchedule viewSchedule = uidoc.ActiveView as ViewSchedule;
if (viewSchedule == null)
{
return Result.Failed;
}
var scheduleDefinition = viewSchedule.Definition;
var fieldCount = scheduleDefinition.GetFieldCount();
for (int i = 0; i < fieldCount; i++)
{
var field = scheduleDefinition.GetField(i);
var name = field.GetName();
var isCalculated = field.IsCalculatedField;
Debug.Print("{0} - {1}", name, isCalculated);
}
var newFiled = scheduleDefinition.AddField(ScheduleFieldType.Percentage);
return Result.Succeeded;
}