StefanMaron / BusinessCentral.LinterCop

Community driven code linter for AL (MS Dynamics 365 Business Central)
https://stefanmaron.com
MIT License
77 stars 31 forks source link

LC0044 - False Positive on FlowFields #471

Closed Arthurvdv closed 9 months ago

Arthurvdv commented 10 months ago

I'm unsure if the rule should raised in a scenario with FlowFields.

table 50100 MyTableA
{
    fields
    {
        field(1; MyField; Integer) { }
        field(2; "MyFlowField A"; Integer)
        {
            FieldClass = FlowField;
            CalcFormula = count(Customer);
        }
    }
}

table 50101 MyTableB
{
    fields
    {
        field(1; MyField; Integer) { }
        field(2; "MyFlowField B"; Integer)
        {
            FieldClass = FlowField;
            CalcFormula = count(Customer);
        }
    }
}

procedure MyProcedure()
var
    MyTableA: Record MyTableA;
    MyTableB: Record MyTableB;
begin
    MyTableA.TransferFields(MyTableB);
end;

Can we just skip all fields where FieldClass is set to FlowFilter or FlowField? 🤔

jwikman commented 9 months ago

I don't think that FlowField to FlowField should raise this rule. They will be skipped anyway, and does not make any sense in TransferFields().

But there is also another interesting scenario, from FlowField to normal field.

table 50100 MyTableA
{
    fields
    {
        field(1; MyField; Integer) { }
        field(2; "MyField A"; Integer)
        {
        }
    }
}

table 50101 MyTableB
{
    fields
    {
        field(1; MyField; Integer) { }
        field(2; "MyFlowField B"; Integer)
        {
            FieldClass = FlowField;
            CalcFormula = count(Customer);
        }
    }
}

procedure MyProcedure()
var
    MyTableA: Record MyTableA;
    MyTableB: Record MyTableB;
begin
    MyTableB.CalcFields("MyFlowField B");
    MyTableA.TransferFields(MyTableB);
end;

In above scenario, "MyField A" would not get any value - even if "MyFlowField B" has a value. Should the rule be raised here?

Arthurvdv commented 9 months ago

FlowFields and FlowFilters are excluded in the (pre)release version of v0.30.11 of the LinterCop, whichs resolved this issue.