В настоящее время я разрабатываю MS Dynamics CRM 2013 - плагин. Когда я пытаюсь присвоить строковое значение ключу поля объекта, он дает мне исключение «keynotfound».'Данный ключ отсутствовал в словаре' - но существует ключ
Это оставляет меня невежественным, потому что я могу проверить, что ключ существует. Ключ, который я даю, также написан правильно, и типы данных также совместимы.
Вот некоторые дополнительные сведения:
- Я пытался решить вопрос с перезагрузкой сервера. Ничего.
- Удаленная отладка не является вариантом.
- Я поменял «retrieved.EntityCollection.Entities [i] [forField]» с retrieved.EntityCollection.Entities [i] ["new_name"], и все работало нормально (например, указывая на очевидное здесь, но "new_name" не является ключом, к которому я пытаюсь обратиться).
- Выполнение останавливается @ "если (retrieved.EntityCollection.Entities [я] [forField] .ToString()! = "" & &! OverwriteExisting)"
У вас есть идея, чтобы помочь мне ?
public void GenerateNumberForEntityCollection(string target)
{
try
{
// variables for number generation
bool overwriteExisting = (bool)preImageEntity["new_overwriteexisting"];
int suffixstart = (int)preImageEntity["new_suffixstart"];
string forField= preImageEntity["new_forfield"].ToString();
string prefix = preImageEntity["new_prefix"].ToString();
string postfix = preImageEntity["new_postfix"].ToString();
string separator = preImageEntity["new_separator"].ToString();
// Build query to get all the entries
RetrieveMultipleResponse retrieved;
int PageNumber = 1;
string PagingCookie = string.Empty;
int PageSize = 5000;
string[] Columns = { forField };
QueryExpression query = new QueryExpression()
{
EntityName = target,
ColumnSet = new ColumnSet(Columns),
PageInfo = new PagingInfo()
{
PageNumber = 1,
Count = PageSize
}
};
do
{
if (PageNumber != 1)
{
query.PageInfo.PageNumber = PageNumber;
query.PageInfo.PagingCookie = PagingCookie;
}
RetrieveMultipleRequest retrieve = new RetrieveMultipleRequest();
retrieve.Query = query;
retrieved = (RetrieveMultipleResponse)service.Execute(retrieve);
// Now that all entities are retrieved, iterate through them to gen. the numbers
int i = 0;
foreach (Entity entity in retrieved.EntityCollection.Entities)
{
if (retrieved.EntityCollection.Entities[i][forField].ToString() != "" && !overwriteExisting)
{
//continue;
}
else
{
retrieved.EntityCollection.Entities[i][forField] = prefix + separator + suffixstart.ToString() + separator + postfix;
}
suffixstart++;
service.Update(retrieved.EntityCollection.Entities[i]);
i++;
}
if (retrieved.EntityCollection.MoreRecords)
{
PageNumber++;
PagingCookie = retrieved.EntityCollection.PagingCookie;
}
} while (retrieved.EntityCollection.MoreRecords);
}
catch (Exception e)
{
tracing.Trace("GenerateNumberForEntityCollection: Failed: {0}", e.ToString());
}
}
Я бы не советовал проверить, действительно ли коллекция атрибутов содержит определенный член. Предпочтительным методом является использование метода GetAttribute. Кроме того, всегда присутствует символ DataCollection ', возвращаемый' IOrganizationService.RetrieveMultiple' (например, в 'retrieved.EntyCollection.Entities'), поэтому там также не нужна проверка« null ». –
Вы правы, сущности никогда не являются нулевыми. – tdgtyugdyugdrugdr