У меня задача – при добавлении контагента в целевую аудитории, в модуле Campaign, создавать для этого контагента активность. При условии отпределенного типа записи модуля Campaign.
Я добавила этот скрипт к методу CampaignTargetSaved
Вот такой код у меня работает :
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 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. Где я ошиблась?
Нравится
Наталия, не так:
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);