У меня задача – при добавлении контагента в целевую аудитории, в модуле 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. Где я ошиблась?
Нравится
Наталия, не так:
[csharp]
esqActivity.AddColumn("AccountId");
esqActivity.AddColumn("CampaignId");
[/csharp]
а так:
[csharp]
esqActivity.AddColumn("Account.Id");
esqActivity.AddColumn("Campaign.Id");
[/csharp]
Не так:
[csharp]
esqActivity.AddColumn("AccountId");
esqActivity.AddColumn("CampaignId");
[/csharp]
а так:
[csharp]
var AccoutnColumn = esqActivity.AddColumn("AccountId");
var CampaignColumn = esqActivity.AddColumn("CampaignId");
[/csharp]
плюс добавить:
[csharp]
var Id = esqActivity.AddColumn("Id");
[/csharp]
[csharp]
if (entities == null)
[/csharp] >>>>> [csharp]
if (entities.Count == 0)
[/csharp]
[csharp]
Guid ActivityId = entities[0].GetTypedColumnValue("Id");
[/csharp]
>>>>
[csharp]
Guid ActivityId = entities[0].GetTypedColumnValue(Id);
[/csharp]
А где я потом буду использовать AccoutnColumn, CampaignColumn и Id?
[csharp]
var AccoutnColumn = esqActivity.AddColumn("AccountId");
var CampaignColumn = esqActivity.AddColumn("CampaignId");
var Id = esqActivity.AddColumn("Id");
[/csharp]
Вот такой код у меня вообще не компилируется :
[csharp]
Guid accountId = Entity.GetTypedColumnValue("AccountId");
Guid campaignId = Entity.GetTypedColumnValue("CampaignId");
var campaignESQ = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Campaign");
campaignESQ.AddAllSchemaColumns();
var campaign = campaignESQ.GetEntity(UserConnection, campaignId);
if (campaign != null) {
var campaignType = campaign.GetTypedColumnValue("TypeId").ToString();
if (campaignType == "c755b13f-dbac-445e-b74b-33221b8ce6da") {
var ownerId = campaign.GetTypedColumnValue("OwnerId").ToString();
DateTime StartDate = campaign.GetTypedColumnValue("StartDate");
DateTime DueDate = campaign.GetTypedColumnValue("DueDate");
var Title = campaign.GetTypedColumnValue("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(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;
[/csharp]
Как я понимаю, ругается именно на строку
[csharp]
Guid ActivityId = entities[0].GetTypedColumnValue(Id);
[/csharp]
Если я хочу взять значение колонки Id, разве это не должно выглядеть так :
[csharp]
Guid ActivityId = entities[0].GetTypedColumnValue("Id");
[/csharp]
?
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 только что созданной записи, если запись создается так:
[csharp]
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;
[/csharp]
?
Как вариант - явно задать значение колонки.
[csharp]
Guid g = Guid.NewGuid();
entity.SetColumnValue("Id", g);
[/csharp]