Включение документов
Платформа Workflow Technology поддерживает механизм разделения формы на несколько файлов. Для этого используется тэг <Includes> , который описывается в основном файле и содержит ссылку на дополнительный xml-файл.
Copy < Includes >
< Include Path = "IncludeDocument.xml" />
</ Includes >
В момент открытия формы платформа парсит xml-файл и загружает включаемые документы, копируя их содержимое в экземпляр класса WorkflowForm, созданный для формы из основного файла. Сами файлы при этом никак не изменяются.
Механизм включения документов поддерживает любой уровень вложенности. Если в цепочке вложений файл будет упоминаться несколько раз, то он все равно будет загружен только один раз.
Подстановка текста из файлов строковых ресурсов (ru.wxlf и en.wxlf) будет производиться после загрузки включаемых файлов. Следовательно, используемые во включаемых файлах строки должны быть описаны либо в контексте основного файла, либо в общем контексте.
Разбиение формы на несколько файлов можно использовать в разных случаях. Например:
создание файла стилей, чтобы не дублировать тэг <Appearance>
во всех файлах форм;
вынесение общих условий или команд. Например, можно вынести условия и команды, связанные с паттерном onClose .
Файл стилей
Создадим файл формы _TemplateAppearance.xml, который будет выступать в качестве источника стилей и цветов для остальных форм. Добавим в него только описание тэга <Appearance>
. Полный код файла будет иметь вид:
Copy <? xml version = "1.0" ?>
< Form Name = "NewForm" Title = "FormTitle" Width = "800" Height = "600" StartPosition = "CenterScreen" FontStyle = "TitleFont" ForeColor = "Black" StatusBar = "True" MaximizeBox = "False" >
< Appearance >
< Colors >
< Color Name = "ThemeForeColor" Red = "0" Green = "0" Blue = "0" Alpha = "255" />
< Color Name = "ThemeBackgroundColor" Red = "255" Green = "255" Blue = "255" Alpha = "255" />
< Color Name = "ThemeFlatColor" Red = "255" Green = "0" Blue = "0" Alpha = "255" />
< Color Name = "ThemeSeparateBackgroundColor" Red = "225" Green = "225" Blue = "225" Alpha = "255" />
< Color Name = "HeadBackgroundColor" Red = "221" Green = "232" Blue = "246" Alpha = "255" />
< Color Name = "HeadForeColor" Red = "70" Green = "70" Blue = "70" Alpha = "255" />
< Color Name = "LabelForeColor" Red = "100" Green = "100" Blue = "100" Alpha = "255" />
< Color Name = "TableBackgroundColor" Red = "200" Green = "200" Blue = "200" Alpha = "255" />
< Color Name = "TableArchiveColor" Red = "230" Green = "230" Blue = "230" Alpha = "255" />
<!-- Стили кнопок -->
< Color Name = "ButtonFlatBorderColor" Red = "225" Green = "225" Blue = "225" Alpha = "255" />
< Color Name = "ButtonFlatMouseDownBackColor" Red = "201" Green = "219" Blue = "241" Alpha = "255" />
< Color Name = "ButtonFlatMouseOverBackColor" Red = "228" Green = "237" Blue = "248" Alpha = "255" />
</ Colors >
< FontStyles >
< FontStyle Name = "ThemeFontStyle" Font = "Segoe UI" Size = "9" />
< FontStyle Name = "HeadFontStyle" Font = "Segoe UI" Size = "15" />
< FontStyle Name = "LabelFontStyle" Font = "Segoe UI" Size = "9" Italic = "True" />
< FontStyle Name = "ButtonFontStyle" Font = "Segoe UI" Size = "10" />
</ FontStyles >
</ Appearance >
</ Form >
Значения атрибутов тэга <Form> не будут играть никакой роли, так как файл будет выступать источником вложенных тэгов.
Перейдем в файл формы настроек пользователя (TemplateUserSettings.xml), в котором удалим тэг <Appearance>
и вместо него добавим тэг <Includes>
:
Copy <Includes>
<Include Path="_TemplateAppearance.xml" />
</Includes>
В качестве значения атрибута Path
тэга <Include>
укажем имя нашего файла стилей.
Запустите приложение и проверьте отображение формы пользовательских настроек.
Вынесение общих условий или команд
Создадим файл _TemplateOnClose.xml, в который из файла TemplateUserSettings.xml перенесем:
условия FormClosingCondition, EscapeKeyDownCondition, FormChangedEqualCondition и MandatoryFieldsAreFilledEqualCondition;
команды FormCloseCommand, SaveOnCloseMessageBoxCommand и CloseOnCloseMessageBoxCommand;
а также весь тэг <Executions>
, так как все Execution связаны с паттерном onClose.
Полный код файла _TemplateOnCloseCopy <?xml version="1.0"?>
<Form Name="NewForm" Title="FormTitle" Width="800" Height="600" StartPosition="CenterScreen" FontStyle="TitleFont" ForeColor="Black" StatusBar="True" MaximizeBox="False">
<Conditions>
<Condition Name="FormClosingCondition" Type="FormClosingCondition" Assembly="Conditions" />
<Condition Name="EscapeKeyDownCondition" Type="KeyDownCondition" Assembly="Conditions">
<Key Value="Escape" />
</Condition>
<Condition Name="FormChangedEqualCondition" Type="EqualCondition" Assembly="Conditions">
<Items>
<Item>
<Form>
<Property Name="FormChanged" />
</Form>
</Item>
<Item>True</Item>
</Items>
<DataType Type="BooleanDataType" />
</Condition>
<Condition Name="MandatoryFieldsAreFilledEqualCondition" Type="EqualCondition" Assembly="Conditions">
<Items>
<Item>
<Form>
<Property Name="CheckingFired" />
</Form>
</Item>
<Item>False</Item>
</Items>
<DataType Type="BooleanDataType" />
</Condition>
</Conditions>
<Commands>
<Command Name="FormCloseCommand" Type="FormCloseCommand" Assembly="Commands" />
<Command Name="SaveOnCloseMessageBoxCommand" Type="MessageBoxCommand" Assembly="Commands">
<Caption>
<Text Id="SaveOnCloseMessageBox.Caption">Сохранение</Text>
</Caption>
<Text>
<Text Id="SaveOnCloseMessageBox.Text">Форма содержит несохраненные изменения.\rСохранить их перед закрытием?</Text>
</Text>
<Icon Type="Question" />
<Buttons Type="YesNoCancel" />
</Command>
<Command Name="CloseOnCloseMessageBoxCommand" Type="MessageBoxCommand" Assembly="Commands">
<Caption>
<Text Id="CloseOnCloseMessageBox.Caption">Закрытие</Text>
</Caption>
<Text>
<Text Id="CloseOnCloseMessageBox.Text">При закрытии все несохраненные изменения будут утеряны.\rВы уверены, что хотите закрыть форму?</Text>
</Text>
<Icon Type="Question" />
<Buttons Type="YesNo" />
</Command>
</Commands>
<Executions>
<Execution>
<ConditionExpression>
<Or>
<And>
<Or>
<Condition Name="FormClosingCondition" />
<Condition Name="EscapeKeyDownCondition" />
</Or>
<Not>
<Condition Name="FormChangedEqualCondition" />
</Not>
</And>
<Command Name="SaveOnCloseMessageBoxCommand" Parameter="No" />
<Command Name="CloseOnCloseMessageBoxCommand" Parameter="Yes" />
</Or>
</ConditionExpression>
<Commands>
<Command Name="FormCloseCommand" />
</Commands>
</Execution>
<Execution>
<ConditionExpression>
<And>
<Or>
<Condition Name="FormClosingCondition" />
<Condition Name="EscapeKeyDownCondition" />
</Or>
<Condition Name="FormChangedEqualCondition" />
</And>
</ConditionExpression>
<Commands>
<If>
<When>
<Condition Name="MandatoryFieldsAreFilledEqualCondition" />
</When>
<Then>
<Command Name="SaveOnCloseMessageBoxCommand" />
</Then>
<Else>
<Command Name="CloseOnCloseMessageBoxCommand" />
</Else>
</If>
</Commands>
</Execution>
<Execution>
<ConditionExpression>
<Command Name="SaveOnCloseMessageBoxCommand" Parameter="Yes" />
</ConditionExpression>
<Commands>
<Command Name="SaveSequentialCommand" />
</Commands>
</Execution>
</Executions>
</Form>
Вернемся в файл TemplateUserSettings.xml и добавим тэг <Include>
с именем нового файла:
Copy <Includes>
<Include Path="_TemplateAppearance.xml" />
<Include Path="_TemplateOnClose.xml" />
</Includes>
Запустите приложение и проверьте отображение формы пользовательских настроек.
Переделайте файл настроек (TemplateSettings.xml) таким же образом. Не забудьте в файл _TemplateAppearance.xml добавить цвет TabMouseOverBackColor.