When constructing constraints using the method GetFunction
argument to this method depending on the type of applied functions may be passed a description of the variable:
- when setting limits with SQLWhereLanguageDef class is used
VariableDef
, - when imposing restrictions on detail with ExternalLangDef to describe the variable-detail used class
DetailVariableDef
.
VariableDef
Class VariableDef
is used to define the variable in the restriction (usually indicates an attribute object). Used together with SQLWhereLanguageDef.
Defined in namespace: ICSSoft.STORMNET.FunctionalLanguage
.
Build: ICSSoft.STORMNET.FunctionalLanguage.dll
.
The most common constructor that is used when building constraints:
public VariableDef(ObjectType objType, string objStringedView)
He is passed the parameters:
objType
- ObjectType-the type of the variable (for example,langdef.StringType
),objStringedView
- the property name of the object on which the plan limitation.
Examples of design VariableDef
when specifying constraints, see SQLWhereLanguageDef.
VariableDef to PrimaryKey
When building restrictions on primary keys deducted objects (private keys) it is worth considering that SQLWhereLanguageDef ignores constant PrimaryKey
. Instead of a constant PrimaryKey
better to use StormMainObjectKey
(determined by the corresponding constant).
Wrong:
var ld = SQLWhereLanguageDef.LanguageDef;
ld.GetFunction(ld.funcEQ, new VariableDef(ld.GuidType, "PrimaryKey"), "64F45BC3-339B-4FBA-A036-C5E9FE9EAE53");
True:
var ld = SQLWhereLanguageDef.LanguageDef;
ld.GetFunction(ld.funcEQ, new VariableDef(ld.GuidType, SQLWhereLanguageDef.StormMainObjectKey), "64F45BC3-339B-4FBA-A036-C5E9FE9EAE53");
It should be noted that the restriction on primary key masters is imposed as follows:
var ld = SQLWhereLanguageDef.LanguageDef;
ld.GetFunction(ld.funcEQ, new VariableDef(ld.GuidType, Information.ExtractPropertyPath<СамОбъект>(x => x.СсылкаНаМастера)), "84F456C1-312F-30C0-A238-11E3FE68E852");
where “Silentmaster” - a reference to the master.
DetailVariableDef
Class DetailVariableDef
is used to determine the variable restrictions, to describe detailov. Used in conjunction with ExternalLangDef.
Defined in namespace: ICSSoft.STORMNET.Windows.Forms
.
Build: ExternalLangDef.dll
.
When designing DetailVariableDef
specify the settings:
Type
- ObjectType-the type (you can getldef.GetObjectType("Details")
),View
- the view name of detail,ConnectMasterProp
- way from detail (see description below)OwnerConnectProp
- detalu from the object (see the description later).
Examples of design DetailVariableDef
when setting restrictions is available in the article:
Job OwnerConnectProp and ConnectMasterProp
Problems often arise in determining what to specify as ConnectMasterProp
and OwnerConnectProp
.
ConnectMasterProp
specifies the path from detail and OwnerConnectProp
- detalu from the object.
The bundle is as follows: Detail.ConnectMasterProp = Object.OwnerConnectProp.
It is worth noting that the property OwnerConnectProp
determines what objects are detaily. If the property is not specified (i.e., specified null
), the conjunction occurs on the primary key(i.e. StormMainObjectKey
).
Examples of usage
Example 1
It is necessary to filter Odottamattomasti for Salenatural.
When setting DetailVariableDef
should specify: OwnerConnectProp
= Person, ConnectMasterProp
= Identity.
Example 2
It is necessary to filter Obrazovatelnogo for Stroyrekonstruksiya.
When setting DetailVariableDef
should specify: OwnerConnectProp
= Zaveniaghina.Personality ConnectMasterProp
= Identity.
It is necessary to filter Obrazovatelnogo for Stroyrekonstruksiya.
When setting DetailVariableDef
should specify: OwnerConnectProp
= Zaveniaghina.Personality ConnectMasterProp
= Identity.
setting limits on pseudometal
For example, the entity “Customer” and “Credit” are connected shown in the image.
You need to restrict clients by setting the limit to reference them loans.
It is obvious that from the point of view of storage of this object model in the database in accordance with existing rules, there is no distinction between aggregation and simple Association. However, restricting the sample according to the criteria of the child table do not differ in the case of aggregation and Association. Therefore to build restrictions in the case of pseudometal you must use DetailVariableDef
together with ExternalLangDef.
If in the above example, it is necessary to select customers that have loans for more than 15 years, the code will look as follows:
ExternalLangDef ldef = ExternalLangDef.LanguageDef;
LoadingCustomizationStruct lcsДолгосрочныеКлиенты = LoadingCustomizationStruct.GetSimpleStruct(typeof(Клиент), "Client");
lcsДолгосрочныеКлиенты.LoadingTypes = new[) { typeof(Клиент) };
var view = Information.GetView("Loan", typeof(Кредит));
var dvd = new DetailVariableDef
{
ConnectMasterPorp = "Client",
OwnerConnectProp = new[) { SQLWhereLanguageDef.StormMainObjectKey },
View = view,
Type = ldef.GetObjectType("Details")
};
lcsДолгосрочныеКлиенты.LimitFunction = ldef.GetFunction(ldef.funcExist, dvd,
ldef.GetFunction(ldef.funcGEQ,
new VariableDef(ldef.GuidType, "Loanyears"), 15));
ICSSoft.STORMNET.DataObject[) dobjsДолгосрочныеКлиенты = DataServiceProvider.DataService.LoadObjects(lcsДолгосрочныеКлиенты);