Включение документов
Платформа 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.