Перейти к основному содержимому

Сущности предметной области

Свойства сущностей

Все файлы с описанием сущности (само описание сущности, описание его печатных форм, форм списка, обработчики) размещаются в директориях внутри директории src/ конфигурации. Описание сущности производится в формате xml.

Имя файла имеет вид %ИмяСущности%.Domain.xml.

Сущность данных может содержать следующие свойства:

Тип свойстваСвойствоПояснениеПример
FilePropertyAttachmentПроизвольный файл
StringPropertyStringСтрока<String Name="DocumentNumber" />
DateTimePropertyDateTimeДата и время<DateTime Name="DocumentDate" />
BoolPropertyBooleanБулево<Boolean Name="SetCustomActName" />
IntegerPropertyIntegerЦелое число<Integer Name="SheetCount" />
DoublePropertyDoubleЧисло с плавающей точкой<Double Name="Quantity" />
EnumPropertyEnumПеречисление<Enum Name="ElementName" Enum="GroundingDevicePassportElementName" />
ReferencePropertyReferenceСсылка<Reference Name="DesignDocumentId" ChildEntity="DesignDocument" BackwardDependency="false" />
ProjectPropertyProjectПроект
UserPropertyUserПользователь<User Name="WorkLogResponsibleUserId" />
ListPropertyListСписок<List Name="DesignOrganizations" ChildEntity="DesignOrganization" IndexProperty="Index" BackwardDependency="false" />
ExpressionPropertyExpressionВыражение<Expression Name="DocflowEnabled">
FileListPropertyFileListСписок файлов<FileList Name="FileAttachments" />
GuidPropertyGuidGUID<Guid Name="ExternalId" />

Для каждого свойства можно задать следующие ограничения на значение (правила валидации):

Вид ограниченияПояснениеПример
GreaterThenБольше<GreaterThen CompareTo="0">
LessThenOrEqualToМеньше или равно<LessThenOrEqualTo CompareTo="6">
NotNullНепустое значение<NotNull>
ScriptПроизвольная проверка<Script>
AfterХронологически позже<After CompareTo="model.Properties.WorkDate">
BeforeХронологически раньше<Before CompareTo="model.Properties.WorkDate">
NotAfterХронологически не позже<NotAfter CompareTo="addDays(Connector.Today, 2)">
NotBeforeХронологически не раньше<NotBefore CompareTo="model.Properties.WorkDate">

Примеры

Пример описания сущности

Пример описания сущности приведён ниже, описана простая сущность «Сотрудник» с двумя строковыми свойствами: «FullName» (есть проверка на не пустоту значения) и «LastNameAndInitials».

<!-- обязательный заголовок файла, в котором описывается сущность -->
<?xml version="1.0" encoding="utf-8"?>
<DomainFile>
<!-- секция описания сущностей -->
<Entities>
<!-- определение сущности -->
<Entity Name="Employee" SimpleBusinessObjectTypeId="9baf041a-e27b-4249-907c-b570482dc9ce">
<Properties>
<!-- секция описания свойства -->
<String Name="FullName">
<!-- пример проверки -->
<Validations>
<!-- проверка на не пустое значение с указанием сообщения об ошибке -->
<NotNull>Please provide a value</NotNull>
</Validations>
</String>

<!-- секция описания свойства (без проверок) -->
<String Name="LastNameAndInitials"/>

</Properties>

<!-- секция обработчиков событий -->
<EventHandlers>
</EventHandlers>
</Entity>
</Entities>
</DomainFile>

Пример описания нескольких сущностей в одном файле

В том же файле могут быть описаны сущности, которые использует описываемую (в данном контексте – корневой) сущность, в том числе – перечисления. Пример приведён ниже, описана сущность «Invoice».

<!-- обязательный заголовок файла, в котором описывается сущность -->
<?xml version="1.0" encoding="utf-8"?>
<DomainFile>
<!-- секция описания сущностей -->
<Entities>
<!-- определение сущности -->
<Entity Name="Invoice" SimpleBusinessObjectTypeId="cb193b05-d15c-4f51-bce6-a9bd95aee36f">
<!-- секция описания свойства -->
<Properties>
<!-- секция описания свойства -->
<!-- тип – описанный в другом каталоге сущность «BusinessEntity» -->
<!-- есть проверка на не пустое значение -->
<Reference Name="InvoiceBusinessEntity" ChildEntity="BusinessEntity">
<Validations>
<NotNull>Please provide a value</NotNull>
</Validations>
</Reference>

<!-- секция описания свойства -->
<!-- тип – описанный в другом каталоге сущность "Employee" -->
<!-- есть проверка на не пустое значение -->
<Reference Name="ResponsiblePerson" ChildEntity="Employee">
<Validations>
<NotNull>Please provide a value</NotNull>
</Validations>
</Reference>

<!-- секция описания свойства -->
<!-- тип – список значений, -->
<!-- имеющих тип описанного ниже в этом файле сущности "InvoiceItem" -->
<!-- InvoiceItem.Index декларировано как свойство, отвечающее за нумерацию списка -->
<List Name="Items" ChildEntity="InvoiceItem" IndexProperty="Index"/>

<!-- секция описания свойства -->
<!-- тип – строка -->
<String Name="InvoiceNumber"/>

<!-- секция описания свойства -->
<!-- тип – дата-время -->
<DateTime Name="InvoiceDate"/>

<!-- секция описания свойства -->
<!-- тип – число с плавающей точкой -->
<Double Name="CurrencyExchangeRate"/>

<!-- секция описания свойства -->
<!-- тип – список файлов -->
<FileList Name="SignedActScan" />

<!-- секция описания свойства -->
<!-- тип – перечисление "SupportedCurrencies", -->
<!-- описанное в другом сущностье -->
<Enum Name="Currency" Enum="SupportedCurrencies" />

<!-- секция описания свойства -->
<!-- тип – перечисление "InvoiceStatus", -->
<!-- описанное ниже в этом файле -->
<Enum Name="InvoiceStatus" Enum="InvoiceStatus" />

<!-- секция описания вычисляемого свойства -->
<!-- алгоритм вычисления свойства описан в этой же секции -->
<Expression Name="EditFormUrl">
<StringExpression>Connector.ProjectBaseUrl + '/Forms/InvoiceForm/' +
model.Id</StringExpression>
</Expression>

<!-- секция описания вычисляемого свойства -->
<!-- алгоритм вычисления свойства реализован вызовом операции "getInvoiceDueAmount" -->
<!-- операция getInvoiceDueAmount описана в файле Invoices.ts этого каталога -->
<Expression Name="DueAmount">
<DoubleExpression>Invoices.getInvoiceDueAmount(model)</DoubleExpression>
</Expression>

<!-- секция описания свойства -->
<!-- тип – GUID -->
<Guid Name="ExternalId" />
</Properties>

<!-- секция описания обработчиков событий -->
<EventHandlers>
<!-- проверка при удалении -->
<!-- операция invoiceDeleteValidation описана в файле Invoices.ts этого каталога -->
<DeleteValidation>Invoices.invoiceDeleteValidation()</DeleteValidation>
</EventHandlers>
</Entity>

<!-- секция описания сущности -->
<!-- этот сущность используется в сущностье "Invoice" -->
<Entity Name="InvoiceItem" SimpleBusinessObjectTypeId="6a1d3347-e752-45dc-b605-6c8ce7da2cf3" IsListPropertyItem="true">
<Properties>
<!-- секция описания свойства -->
<!-- тип – целое число -->
<Integer Name="Index"/>

<!-- секция описания свойства -->
<!-- тип – строка -->
<!-- есть проверка на не пустое значение -->
<!-- SureNotNull означает, что это поле гарантированно not NULL -->
<!-- для всех уже сохранённых объектов -->
<String Name="ItemName" SureNotNull="true">
<Validations>
<NotNull>Please provide a value</NotNull>
</Validations>
</String>

<!-- секция описания свойства -->
<!-- тип – строка -->
<!-- есть проверка на не пустое значение -->
<String Name="Unit" SureNotNull="true">
<Validations>
<NotNull>Please provide a value</NotNull>
</Validations>
</String>

<!-- секция описания свойства -->
<!-- тип – число с плавающей точкой -->
<!-- есть проверка на не пустое значение -->
<Double Name="Quantity" SureNotNull="true">
<Validations>
<NotNull>Please provide a value</NotNull>
</Validations>
</Double>

<!-- секция описания свойства -->
<!-- тип – число с плавающей точкой -->
<!-- есть проверка на не пустое значение -->
<Double Name="Price" SureNotNull="true">
<Validations>
<NotNull>Please provide a value</NotNull>
</Validations>
</Double>

</Properties>
</Entity>
</Entities>

<!-- секция описания перечислений -->
<Enumerations>
<!-- определение перечисления -->
<Enumeration Name="InvoiceStatus">
<Members>
<EnumerationMember Index="0" Name="Draft" />
<EnumerationMember Index="1" Name="Billed" />
<EnumerationMember Index="2" Name="Paid" />
<EnumerationMember Index="3" Name="Cancelled" />
<EnumerationMember Index="4" Name="Refunded" />
</Members>
</Enumeration>
</Enumerations>
</DomainFile>

Пример описания операции сущности

Операции сущности на языке TypeScript описываются в отдельном файле (рекомендуется располагать в той же директории). В данном случае – это файл Invoices.ts, содержащий функцию «getInvoiceDueAmount», которая используется в вычисляемом свойстве "DueAmount".

Invoices.ts
...
export function getInvoiceDueAmount(model: Models.Invoice): number | null {
return model.Properties.Items.reduce(
(acc, item) => acc += (item.Properties.Price * item.Properties.Quantity), 0
);
}
...