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