Созданный объект с использованием плагина не имеет действительного значения Entity.Id - PullRequest
0 голосов
/ 20 апреля 2020

Мне удалось выполнить инструкцию для успешного создания объекта без каких-либо ошибок, но id объекта остается по умолчанию 00000000-0000-0000-0000-000000000000. В CRM созданная сущность тоже не появлялась.

Я не включил все поля в сущность, а только вводил 1 поле для тестирования.

Это из-за того, что некоторые обязательные поля не были заполнено, что вызывает вышеуказанный ложный положительный результат создания сущности?

Ниже приведен мой фрагмент кода:

Вызов CreateCase (строка)

foreach (DataRow row in caseTable.Rows)
{
    Entity caseEntity = helper.GetCasebyID((string)row[Excel.ID]);

    if (caseEntity == null)
    {
        caseEntity = CreateCase(row);
    }
}

CreateCase (строка):

private Entity CreateCase(DataRow row)
{
    Entity caseEntity = new Entity("new_case");

    if (!(string.IsNullOrEmpty(row[Excel.sourcename].ToString().Trim())))
    {
        caseEntity.Attributes[Case.sourcename] = row[Excel.sourcename];
    }
    helper.GetOrganizationService().Create(caseEntity);
    Logger.Info(caseEntity.LogicalName + " " + caseEntity.Id + " created. ");
    //output: case 00000000-0000-0000-0000-000000000000 created. 
}

Вспомогательный класс:

public class Helper
{
    private OrganizationServiceProxy _proxy;
    private IOrganizationService _org;

    public IOrganizationService GetOrganizationService()
    {
        if (_org == null)
        {
            var credential = new ClientCredentials();
            credential.Windows.ClientCredential.Domain = ConfigurationManager.AppSettings["Domain"];
            credential.Windows.ClientCredential.UserName = ConfigurationManager.AppSettings["Username"];
            credential.Windows.ClientCredential.Password = Decrypt(ConfigurationManager.AppSettings["Password"]);
            Uri organizationUri = new Uri(ConfigurationManager.AppSettings["OrganizationUri"]);
            Uri homeRealmUri = null;
            _proxy = new OrganizationServiceProxy(organizationUri, homeRealmUri, credential, null);
            _proxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
            _org = new OrganizationService(_proxy);
        }
        return _org;
    }
}

1 Ответ

2 голосов
/ 20 апреля 2020

Вы не должны использовать один и тот же объект, чтобы проверить, доступна ли созданная запись или guid. Ниже в вашем коде возвращается тип данных Guid, а не подмножество объекта.

helper.GetOrganizationService().Create(caseEntity);

Также, когда вы создаете запись, попробуйте добавить хотя бы значение атрибута Primary name. В вашем случае это будет new_name

Таким образом, вы должны иметь свой код как

Guid newlyCreatedCaseRecord = helper.GetOrganizationService().Create(caseEntity);
 Logger.Info(caseEntity.LogicalName + " " + newlyCreatedCaseRecord  + " created. ");

Вы также можете получить вновь созданную запись из базы данных как объект сущности.

    Guid newlyCreatedCaseRecord = helper.GetOrganizationService().Create(caseEntity);
        Entity newlyCaseEntity = helper.GetOrganizationService().Retrieve("new_case",newlyCreatedCaseRecord , new ColumnSet(true));
Logger.Info(newlyCaseEntity .LogicalName + " " + newlyCaseEntity.Id + " created. ");

Примечание: в коде может быть опечатка, попробуйте выполнить проверку в Visual studio.

...