Как вставить номер билета (поле поиска) в продукты утверждения цены MS Dynamics CRM (пользовательский объект) с помощью компонента сценария ssis
Мне нужно создать или обновить поле поиска номера билета в продуктах утверждения цен. Этот номер тикета (поле поиска) связан с тикетом (текстовое поле) в другом объекте, который называется Билет подтверждения цен.
Это мой код в компоненте скрипта.
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
Entity ApprovalProductEnt = new Entity("new_ticketproduct");
ColumnSet columns = new ColumnSet(true);
columns = new ColumnSet(new String[] { "new_ticket",
"new_productgroup",
"new_producttype",
"new_productitem" });
Guid TicketNumberId = new Guid();
TicketNumberId = getTicketNumber(Row.OppportunityID, ref organizationservice);
//update
if (TicketNumberId != Guid.Empty)
{
ApprovalProductEnt["new_ticket"] = new EntityReference("new_pricingapprovalticket", TicketNumberId);
}
else
//create
if (TicketNumberId != Guid.Empty)
{
ApprovalProductEnt["new_ticket"] = new EntityReference("new_pricingapprovalticket", TicketNumberId);
}
}
public Guid getTicketNumber(string ticketnumber, ref IOrganizationService service)
{
Guid TicketNumberGuid = Guid.Empty;
QueryExpression TicketNumberQuery = new QueryExpression { EntityName = "new_pricingapprovalticket", ColumnSet = new ColumnSet(true) };
TicketNumberQuery.Criteria.AddCondition("new_ticketnumber", ConditionOperator.Equal, ticketnumber);
EntityCollection TicketNumberQueryRetrieve = service.RetrieveMultiple(TicketNumberQuery);
for (var i = 0; i <TicketNumberQueryRetrieve.Entities.Count; i++)
{
TicketNumberGuid = TicketNumberQueryRetrieve.Entities[0].GetAttributeValue<Guid>("new_ticket");
}
return TicketNumberGuid;
}
Когда я запускаю пакет служб SSIS, он запускается без ошибок. Но как-то не вставлено никаких данных.
У меня нет проблем, чтобы создать нормальное текстовое поле. Но когда дело доходит до области поиска, интернет-решения предлагают использовать EntityReference согласно моему коду, но я понятия не имею, что не так. Так что я немного потерян здесь.
1 ответ
Lookup - это столбец отношения (внешний ключ) связанной сущности. Вы должны проверить, есть ли основная запись, доступная для сопоставления ключа или создания записи этого типа для сопоставления.
ColumnSet не требуется в первом методе при создании записи объекта. Но вы должны сопоставить столбцы из строк исходного файла / таблицы. ColumnSet полезен, как и во втором методе, при получении набора данных.
Цикл for не нужен во втором методе.
Просто поместите недостающие фрагменты в свой фрагмент, чтобы вы могли понять, что это может быть импровизировано.
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
Entity ApprovalProductEnt = new Entity("new_ticketproduct");
ApprovalProductEnt["new_productgroup"] = Row.ProductGroup;
ApprovalProductEnt["new_producttype"] = Row.ProductType;
ApprovalProductEnt["new_productitem"] = Row.ProductItem;
Guid TicketNumberId = new Guid();
TicketNumberId = getTicketNumber(Row.OppportunityID, ref organizationservice);
//update
if (TicketNumberId != Guid.Empty)
{
ApprovalProductEnt["new_ticket"] = new EntityReference("new_pricingapprovalticket", TicketNumberId);
}
else
//create
{
Entity TicketEnt = new Entity("new_pricingapprovalticket");
TicketEnt["new_name"] = Row.OppportunityID;
TicketNumberId = organizationservice.Create(TicketEnt);
ApprovalProductEnt["new_ticket"] = new EntityReference("new_pricingapprovalticket", TicketNumberId);
}
organizationservice.Create(ApprovalProductEnt);
}
public Guid getTicketNumber(string ticketnumber, ref IOrganizationService service)
{
Guid TicketNumberGuid = Guid.Empty;
QueryExpression TicketNumberQuery = new QueryExpression { EntityName = "new_pricingapprovalticket", ColumnSet = new ColumnSet(true) };
TicketNumberQuery.Criteria.AddCondition("new_ticketnumber", ConditionOperator.Equal, ticketnumber);
EntityCollection TicketNumberQueryRetrieve = service.RetrieveMultiple(TicketNumberQuery);
if (TicketNumberQueryRetrieve.Entities.Count > 0)
TicketNumberGuid = TicketNumberQueryRetrieve.Entities[0].GetAttributeValue<Guid>("new_ticket");
return TicketNumberGuid;
}