Проверка условий, фильтрация и создание новой записи (BPM7)

У меня задача – при добавлении контагента в целевую аудитории, в модуле Campaign, создавать для этого контагента активность. При условии отпределенного типа записи модуля Campaign.
Я добавила этот скрипт к методу CampaignTargetSaved

Вот такой код у меня работает :

Guid accountId = Entity.GetTypedColumnValueGuid>("AccountId");
Guid campaignId = Entity.GetTypedColumnValueGuid>("CampaignId");

var campaignESQ = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Campaign");
campaignESQ.AddAllSchemaColumns();
var campaign = campaignESQ.GetEntity(UserConnection, campaignId);

if (campaign != null) {
      var campaignType = campaign.GetTypedColumnValueGuid>("TypeId").ToString();
      if (campaignType == "c755b13f-dbac-445e-b74b-33221b8ce6da") {
            var ownerId = campaign.GetTypedColumnValueGuid>("OwnerId").ToString();
            DateTime StartDate = campaign.GetTypedColumnValueDateTime>("StartDate");
            DateTime DueDate = campaign.GetTypedColumnValueDateTime>("DueDate");
            var Title = campaign.GetTypedColumnValuestring>("Title");
     
            var schema = UserConnection.EntitySchemaManager.GetInstanceByName("Activity");
            var entity = schema.CreateEntity(UserConnection);
            entity.SetDefColumnValues();
            entity.SetColumnValue("AccountId", accountId);
            entity.SetColumnValue("OwnerId", ownerId);
            entity.SetColumnValue("CampaignId", campaignId);
            entity.SetColumnValue("Title", Title);
            entity.SetColumnValue("StartDate", StartDate);
            entity.SetColumnValue("DueDate", DueDate);
            Guid category = new Guid("9D7EF44F-8E46-481D-9300-0A2E6559263F");
            entity.SetColumnValue("ActivityCategoryId", category);
            entity.Save();
      }
}
return true;

Но мне надо проверить – не существует ли уже в активностях запись для этого контагента и этой кампании. И если такая запись есть, то ее следует исправить – пересохранить определенные поля. Если записи нет – создать ее.
Потому я переписала код :

Guid accountId = Entity.GetTypedColumnValueGuid>("AccountId");
Guid campaignId = Entity.GetTypedColumnValueGuid>("CampaignId");

var campaignESQ = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Campaign");
campaignESQ.AddAllSchemaColumns();
var campaign = campaignESQ.GetEntity(UserConnection, campaignId);

if (campaign != null) {
      var campaignType = campaign.GetTypedColumnValueGuid>("TypeId").ToString();
      if (campaignType == "c755b13f-dbac-445e-b74b-33221b8ce6da") {
            var ownerId = campaign.GetTypedColumnValueGuid>("OwnerId").ToString();
            DateTime StartDate = campaign.GetTypedColumnValueDateTime>("StartDate");
            DateTime DueDate = campaign.GetTypedColumnValueDateTime>("DueDate");
            var Title = campaign.GetTypedColumnValuestring>("Title");  
                       
            var esqActivity = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Activity");
            esqActivity.AddColumn("AccountId");
            esqActivity.AddColumn("CampaignId");
            var esqFirstFilter = esqActivity.CreateFilterWithParameters(FilterComparisonType.Equal, "AccountId", accountId);
            var esqSecondFilter = esqActivity.CreateFilterWithParameters(FilterComparisonType.Equal, "CampaignId", campaignId);
            esqActivity.Filters.LogicalOperation = LogicalOperationStrict.And;
            esqActivity.Filters.Add(esqFirstFilter);
            esqActivity.Filters.Add(esqSecondFilter);
            var entities = esqActivity.GetEntityCollection(UserConnection);
            if (entities == null) {
                  var schema = UserConnection.EntitySchemaManager.GetInstanceByName("Activity");
                  var entity = schema.CreateEntity(UserConnection);
                  entity.SetDefColumnValues();
                  entity.SetColumnValue("AccountId", accountId);
                  entity.SetColumnValue("OwnerId", ownerId);
                  entity.SetColumnValue("CampaignId", campaignId);
                  entity.SetColumnValue("Title", Title);
                  entity.SetColumnValue("StartDate", StartDate);
                  entity.SetColumnValue("DueDate", DueDate);
                  Guid categoryId = new Guid("9D7EF44F-8E46-481D-9300-0A2E6559263F");
                  entity.SetColumnValue("ActivityCategoryId", categoryId);
                  entity.Save();
            }
else {
                  Guid ActivityId = entities[0].GetTypedColumnValueGuid>("Id");
var update = new Update(UserConnection, "Activity").Set("Title", Column.Parameter(Title)).Set("StartDate", Column.Parameter(StartDate)).Set("DueDate", Column.Parameter(DueDate)).Set("OwnerId", Column.Parameter(ownerId)).Where("Id").IsEqual(Column.Parameter(ActivityId));
                  update.Execute();
            }
      }
}
return true;

И этот метод уже не работает. Причем даже не сохраняет изменения в модуле CampaignTarget. Где я ошиблась?

Нравится

10 комментариев

Наталия, не так:

esqActivity.AddColumn("AccountId");
esqActivity.AddColumn("CampaignId");

а так:

esqActivity.AddColumn("Account.Id");
esqActivity.AddColumn("Campaign.Id");

Не так:

esqActivity.AddColumn("AccountId");
esqActivity.AddColumn("CampaignId");

а так:

var AccoutnColumn = esqActivity.AddColumn("AccountId");
var CampaignColumn = esqActivity.AddColumn("CampaignId");

плюс добавить:

var Id = esqActivity.AddColumn("Id");
 if (entities == null)

>>>>>

 if (entities.Count == 0)
Guid ActivityId = entities[0].GetTypedColumnValue<Guid>("Id");

>>>>

Guid ActivityId = entities[0].GetTypedColumnValue<Guid>(Id);

А где я потом буду использовать AccoutnColumn, CampaignColumn и Id?

var AccoutnColumn = esqActivity.AddColumn("AccountId");
var CampaignColumn = esqActivity.AddColumn("CampaignId");
var Id = esqActivity.AddColumn("Id");

Вот такой код у меня вообще не компилируется :

Guid accountId = Entity.GetTypedColumnValue<Guid>("AccountId");
Guid campaignId = Entity.GetTypedColumnValue<Guid>("CampaignId");
 
var campaignESQ = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Campaign");
campaignESQ.AddAllSchemaColumns();
var campaign = campaignESQ.GetEntity(UserConnection, campaignId);
 
if (campaign != null) {
	var campaignType = campaign.GetTypedColumnValue<Guid>("TypeId").ToString();
	if (campaignType == "c755b13f-dbac-445e-b74b-33221b8ce6da") {
		var ownerId = campaign.GetTypedColumnValue<Guid>("OwnerId").ToString(); 
		DateTime StartDate = campaign.GetTypedColumnValue<DateTime>("StartDate");
		DateTime DueDate = campaign.GetTypedColumnValue<DateTime>("DueDate");
		var Title = campaign.GetTypedColumnValue<string>("Title");	
 
		var Id = esqActivity.AddColumn("Id");
		var AccoutnColumn = esqActivity.AddColumn("AccountId");
		var CampaignColumn = esqActivity.AddColumn("CampaignId");		
		var esqFirstFilter = esqActivity.CreateFilterWithParameters(FilterComparisonType.Equal, "Account.Id", accountId);
		var esqSecondFilter = esqActivity.CreateFilterWithParameters(FilterComparisonType.Equal, "Campaign.Id", campaignId);		
		esqActivity.Filters.Add(esqFirstFilter);
		esqActivity.Filters.Add(esqSecondFilter);
		var entities = esqActivity.GetEntityCollection(UserConnection);
		if (entities.Count == 0) {
			var schema = UserConnection.EntitySchemaManager.GetInstanceByName("Activity");
			var entity = schema.CreateEntity(UserConnection);
			entity.SetDefColumnValues();
			entity.SetColumnValue("AccountId", accountId);
			entity.SetColumnValue("OwnerId", ownerId);
			entity.SetColumnValue("CampaignId", campaignId);
			entity.SetColumnValue("Title", Title);
			entity.SetColumnValue("StartDate", StartDate);
			entity.SetColumnValue("DueDate", DueDate);
			Guid categoryId = new Guid("9D7EF44F-8E46-481D-9300-0A2E6559263F");
			entity.SetColumnValue("ActivityCategoryId", categoryId);
			entity.Save();
		}
		else {
			Guid ActivityId = entities[0].GetTypedColumnValue<Guid>(Id);
			var update = new Update(UserConnection, "Activity").Set("Title", Column.Parameter(Title)).Set("StartDate", Column.Parameter(StartDate)).Set("DueDate", Column.Parameter(DueDate)).Set("OwnerId", Column.Parameter(ownerId)).Where("Id").IsEqual(Column.Parameter(ActivityId));
			update.Execute();
		}		
	}
}
return true;

Вот ошибка :

Как я понимаю, ругается именно на строку

Guid ActivityId = entities[0].GetTypedColumnValue<Guid>(Id);

Если я хочу взять значение колонки Id, разве это не должно выглядеть так :

Guid ActivityId = entities[0].GetTypedColumnValue<Guid>("Id");

?

var accountPhone = query.AddColumn("Phone").Name;
var queryResult = query.GetEntityCollection(UserConnection);
string PPhone = queryResult[0].GetTypedColumnValue(accountPhone));

Просто колонки в EntitySchemaQuery именуются произвольно. Поэтому нужно определять её имя в коде, и обращаться по нему.

Такой вопрос этот код Вы пишете в процессе объекта ? или где ?. Или как-то можна С# связать с траницей ?

"Ильюша Сергей Николаевич" написал:Такой вопрос этот код Вы пишете в процессе объекта ? или где ?

В процессе объекта CampaignTarget (Целевая аудитория воздействия).

"Ильюша Сергей Николаевич" написал:Или как-то можна С# связать с траницей ?

Не понятен вопрос.

Спасибо.

"Бондарь Наталия" написал:Не понятен вопрос.

как можна вызвать код C#(методы/объекты) из страницы ? Например зделать постбэк выполнить чтото и передать назад какое-то значение

Сергей, нужно написать web-сервис и вызывать его. Пример можно посмотреть в схеме ColumnHelper, function applyChange (вызов происходит в строке callServiceMethod.call(scope, ajaxProvider, 'ApplyChanges', function(responce)...). Обратите внимание на реализацию function callServiceMethod.

Такой вопрос - как получить ID только что созданной записи, если запись создается так:

var schema = UserConnection.EntitySchemaManager.GetInstanceByName("Contact");
var entity = schema.CreateEntity(UserConnection);
entity.SetDefColumnValues();
entity.SetColumnValue("Name", ContactName);
entity.SetColumnValue("Phone", ContactPhone);
entity.Save();
return true;

?

Как вариант - явно задать значение колонки.

Guid g = Guid.NewGuid();
entity.SetColumnValue("Id", g);
Показать все комментарии