Добрый день. Вопрос - можно ли добавить несколько фильтров accountEsq.Filters.LogicalOperation = LogicalOperationStrict.Or;
var accountIdNumberEsqFilter = accountEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "PsIdNumber", request.IdNumber);
var accountIdFixEsqFilter = accountEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "PsIdFix", request.IdNumber);
var accountServiceCrmIdEsqFilter = accountEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "PsServiceCrmId", request.IdNumber);
accountEsq.Filters.Add(accountIdNumberEsqFilter);
accountEsq.Filters.Add(accountIdFixEsqFilter);
accountEsq.Filters.Add(accountServiceCrmIdEsqFilter);
в
CreateEntity(UserConnection)
так как в
UserConnection.EntitySchemaManager.GetInstanceByName,
или только использовать FetchFromDB ?
Нравится
Функция CreateEntity создаёт новую запись с пустыми полями, фильтры тут не имеют смысла:
var contactCareerSchema = UserConnection.EntitySchemaManager.GetInstanceByName("ContactCareer");
var contactCareerEntity = contactCareerSchema.CreateEntity(UserConnection);
contactCareerEntity.SetDefColumnValues();
contactCareerEntity.SetColumnValue("Id", Guid.NewGuid());
contactCareerEntity.SetColumnValue("ContactId", NewMainContact);
contactCareerEntity.SetColumnValue("AccountId", EntityPrimaryColumnValue);
contactCareerEntity.SetColumnValue("Current", true);
contactCareerEntity.Save();Другой её способ использования вместе с FetchFromDB, вытягивание записи по Id:
var schema = UserConnection.EntitySchemaManager.FindInstanceByName("SysAdminUnit");
var sysAdminUnit = schema.CreateEntity(UserConnection);
if (sysAdminUnit.FetchFromDB(recordId)) {
var p = new Dictionary<string, string>();
p.Add("LDAPEntryId", sysAdminUnit.GetTypedColumnValue<string>("LDAPEntryId"));
...Наконец, вытягивать можно не только по Id, но и по другим условиям, как тут:
Dictionary<string, object> conditions = new Dictionary<string, object>();
var userId = (context.ThrowEventArgs as List<object>)[0].ToString();
var roleId = new Guid("A29A3BA5-4B0D-DE11-9A51-005056C00008");
conditions["SysUser"] = userId;
var sysUserInRoleSchema = Page.UserConnection.EntitySchemaManager.GetInstanceByName("SysUserInRole");
conditions["SysRole"] = roleId;
var sysUserInRole = sysUserInRoleSchema.CreateEntity(Page.UserConnection);
if (sysUserInRole.FetchFromDB(conditions)) {
return true;
}Возможно, Вам нужно сделать похожее на последний вариант. Но если из-за Or условие слишком сложное, проще будет использовать обычное получение коллекции после наложения фильтров:
var couponESQ = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Coupon");
couponESQ.AddColumn("BonusesPayedAmount");
couponESQ.AddColumn("CouponCard");
couponESQ.Filters.Add(couponESQ.CreateFilterWithParameters(FilterComparisonType.Equal, "Purchase", purchaseId));
var cardFilters = new EntitySchemaQueryFilterCollection(couponESQ, LogicalOperationStrict.Or);
var permanentCardIdfilter = couponESQ.CreateFilterWithParameters(FilterComparisonType.Equal, "CouponCard.Type", Terrasoft.Configuration.CardConsts.PermanentTypeUId);
cardFilters.Add(permanentCardIdfilter);
var temporaryCardIdfilter = couponESQ.CreateFilterWithParameters(FilterComparisonType.Equal, "CouponCard.Type", Terrasoft.Configuration.CardConsts.TemporaryTypeUId);
cardFilters.Add(temporaryCardIdfilter);
var certificateCardIdfilter = couponESQ.CreateFilterWithParameters(FilterComparisonType.Equal, "CouponCard.Type", Terrasoft.Configuration.CardConsts.SertificateTypeUId);
cardFilters.Add(certificateCardIdfilter);
couponESQ.Filters.Add(cardFilters);
var couponEntities = couponESQ.GetEntityCollection(UserConnection);
if (couponEntities.Count > 0) {
foreach (var coupon in couponEntities) {
var bonusesPayedAmount = coupon.GetTypedColumnValue<decimal>("BonusesPayedAmount");
...