Вопрос

Проблемы из созданием новой записи на сервере

Добрый день. У меня есть такая задача просуммировать все количество по продуктам на одной детали(там продуктов с одним названием может быть несколько) и в случае если там продукт с таким названием есть изменить запись, если нет создать новую. Проблем с изменением нет, а вот с созданием есть. Вот фрагмент моего кода:



bool flagInPoints = true;

Guid ourId = new Guid();

var sysUserConn = UserConnection.AppConnection.SystemUserConnection;

var manager = sysUserConn.EntitySchemaManager.GetInstanceByName("CHPoints");

var app = manager.CreateEntity(UserConnection);

for(int l = 0; l < idResult.Count; l++)

{

    var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "CHPoints");

    EntitySchemaQueryColumn id = esq.AddColumn("Id");

    esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "CHProduct", idResult[l].ToString()));

    var summaryEntity = esq.GetEntityCollection(UserConnection);

    foreach (var entity in summaryEntity)

    {

        

    if (entity !=null)

    {

        ourId = entity.GetTypedColumnValue(id.Name);

    }

    else

    {

        flagInPoints = false; 

    }

    if(flagInPoints)

    {

        app.FetchFromDB(ourId);

        app.SetColumnValue("CHProductId", idResult[l]);

        app.SetColumnValue("CHAmount", countResult[l]);

        app.Save(false);

    }

    else

    {

        app.SetDefColumnValues();

        app.SetColumnValue("CHProductId", idResult[l]);

        app.SetColumnValue("CHAmount", countResult[l]);

        flagInPoints = true;

        app.Save(false);

    }

    }

}

Создание я пытаюсь сделать в последнем else. Буду очень благодарен за помощь.

Нравится

3 комментария
Лучший ответ

Я не вполне понимаю задачу, но например (под рукой только Service-сборка). Есть "Сервисы", в сервисах деталь, там повторяются значения "Уровень поддержки".

Пишем примерно следующее в скриптаске:

var esqMain = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "ServiceEngineer");
var supLvlColumn = esqMain.AddColumn("SupportLevel.Id");
var supLvlColumnName = esqMain.AddColumn("SupportLevel.Name");
esqMain.IsDistinct=true;
esqMain.Filters.Add(esqMain.CreateFilterWithParameters(FilterComparisonType.Equal, "ServiceItem", new Guid("9cd38a93-2835-46fa-8c55-d3c7f4684824"))); //Id страницы "сервисы"
var col = esqMain.GetEntityCollection(UserConnection);
 
foreach (var item in col) {
	var id = item.GetTypedColumnValue&lt;Guid&gt;(supLvlColumn.Name);
 
	var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "ServiceEngineer");
	EntitySchemaQueryColumn engineers = esq.AddColumn("Engineer");
	engineers.SummaryType = AggregationType.Count;
	esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "SupportLevel", id));
	esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ServiceItem", new Guid("9cd38a93-2835-46fa-8c55-d3c7f4684824")));
	Entity summaryEntity = esq.GetSummaryEntity(UserConnection);
 
	var supLvl = item.GetTypedColumnValue&lt;string&gt;(supLvlColumnName.Name);
	var engCount = summaryEntity.GetTypedColumnValue&lt;int&gt;(engineers.Name);
}
 
return true;

ну и в отладчике:

Т.е. можно определить какое именно значение повторяется и сколько раз. 

Нет, ну foreach никогда не выдаст null у entity(только если в коллекцию запихнут пустую entity при формировании результатов esq, что сомнительно). Если коллекция будет 0 размера, то он тупо не отработает. Соответственно ourId - всегда guid из базы, flagInPoints - всегда true. Логика работает именно так, как описана. Всё ок.

Варфоломеев Данила,

А чем можно заменить данную проверку?

Я не вполне понимаю задачу, но например (под рукой только Service-сборка). Есть "Сервисы", в сервисах деталь, там повторяются значения "Уровень поддержки".

Пишем примерно следующее в скриптаске:

var esqMain = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "ServiceEngineer");
var supLvlColumn = esqMain.AddColumn("SupportLevel.Id");
var supLvlColumnName = esqMain.AddColumn("SupportLevel.Name");
esqMain.IsDistinct=true;
esqMain.Filters.Add(esqMain.CreateFilterWithParameters(FilterComparisonType.Equal, "ServiceItem", new Guid("9cd38a93-2835-46fa-8c55-d3c7f4684824"))); //Id страницы "сервисы"
var col = esqMain.GetEntityCollection(UserConnection);
 
foreach (var item in col) {
	var id = item.GetTypedColumnValue&lt;Guid&gt;(supLvlColumn.Name);
 
	var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "ServiceEngineer");
	EntitySchemaQueryColumn engineers = esq.AddColumn("Engineer");
	engineers.SummaryType = AggregationType.Count;
	esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "SupportLevel", id));
	esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ServiceItem", new Guid("9cd38a93-2835-46fa-8c55-d3c7f4684824")));
	Entity summaryEntity = esq.GetSummaryEntity(UserConnection);
 
	var supLvl = item.GetTypedColumnValue&lt;string&gt;(supLvlColumnName.Name);
	var engCount = summaryEntity.GetTypedColumnValue&lt;int&gt;(engineers.Name);
}
 
return true;

ну и в отладчике:

Т.е. можно определить какое именно значение повторяется и сколько раз. 

Показать все комментарии