Skip to content
This repository was archived by the owner on Jun 16, 2024. It is now read-only.
This repository was archived by the owner on Jun 16, 2024. It is now read-only.

Linked Entity Query with a mixture of null and not null values returns wrong value #324

Closed
@daveb84

Description

@daveb84

I have a query that returns columns from a linked entity. When the value of one of the fields of the linked entity is null, it being returned as the value of the previous entity when it should be being returned as null.

e.g.
I have forked the repo and added a unit test - see this commit:
daveb84@b17605d

Full test code:

[Fact]
public void TestRetriveMultipleWithLinkEntityWithAlternateNullField()
{
    // ARRANGE

    List<Entity> initialEntities = new List<Entity>();

    Entity parentEntity = new Entity("parent");
    parentEntity["parentname"] = "parent name";
    parentEntity.Id = Guid.NewGuid();
    initialEntities.Add(parentEntity);

    // create the first child which has the "myvalue" field set to "value"
    Entity childEntity1 = new Entity("child");
    childEntity1["parent"] = parentEntity.ToEntityReference();
    childEntity1["name"] = "entity1";
    childEntity1["myvalue"] = "value";
    childEntity1.Id = Guid.NewGuid();
    initialEntities.Add(childEntity1);

    // create the second child which has the "myvalue" field set to null
    Entity childEntity2 = new Entity("child");
    childEntity2["parent"] = parentEntity.ToEntityReference();
    childEntity2["name"] = "entity2";
    childEntity2["myvalue"] = null;
    childEntity2.Id = Guid.NewGuid();
    initialEntities.Add(childEntity2);

    XrmFakedContext context = new XrmFakedContext();
    IOrganizationService service = context.GetOrganizationService();

    context.Initialize(initialEntities);

    // the query selects the "parent" entity, and joins to the "child" entities
    QueryExpression query = new QueryExpression("parent");
    query.ColumnSet = new ColumnSet("parentname");

    LinkEntity link = new LinkEntity("parent", "child", "parentid", "parent", JoinOperator.Inner);
    link.EntityAlias = "c";
    link.Columns = new ColumnSet("name", "myvalue");

    query.LinkEntities.Add(link);

    // ACT

    DataCollection<Entity> results = service.RetrieveMultiple(query).Entities;

    // ASSERT

    // fields for the first entity work as expected...
    string entity1Name = results[0].GetAttributeValue<AliasedValue>("c.name").Value as string;
    string entity1Value = results[0].GetAttributeValue<AliasedValue>("c.myvalue").Value as string;
        
    Assert.Equal("entity1", entity1Name);
    Assert.Equal("value", entity1Value);

    // fields for the second entity do not.  
    // The child "name" field is correct, but the "myvalue" field is returning the value of the previous
    // entity when it should be returning null
    string entity2Name = results[1].GetAttributeValue<AliasedValue>("c.name").Value as string;
    string entity2Value = results[1].GetAttributeValue<AliasedValue>("c.myvalue").Value as string;

    // this works fine:
    Assert.Equal("entity2", entity2Name);

    // this fails (entity2Value is "value")
    Assert.Equal(null, entity2Value);
}

Metadata

Metadata

Labels

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions