Skip to content

Commit 259ac79

Browse files
Florian KrönertFlorian Krönert
authored andcommitted
Fixed crash which occured when fetchXml parameter evaluated to null (even when fetch was not executed)
1 parent c09c5c6 commit 259ac79

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

src/lib/Xrm.Oss.XTL.Interpreter/FunctionHandlers.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -626,10 +626,10 @@ private static int Compare(List<ValueExpression> parameters)
626626

627627
if (referenceNumber >= references.Count)
628628
{
629-
throw new InvalidPluginExecutionException($"You tried using reference {referenceNumber} in fetch, but there are less reference inputs than that. You should probably wrap this fetch inside an if condition and only execute it, if your reference is non-null.");
629+
throw new InvalidPluginExecutionException($"You tried using reference {referenceNumber} in fetch, but there are less reference inputs than that. Please check your reference number or your reference input array.");
630630
}
631631

632-
return references[referenceNumber].ToString();
632+
return references[referenceNumber]?.ToString();
633633
});
634634

635635
tracing.Trace("References replaced");

src/test/Xrm.Oss.XTL.Interpreter.Tests/XTLInterpreterTests.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,41 @@ public void It_Should_Parse_Dictionaries()
693693
Assert.That(result, Is.EqualTo("retrieveLabels: True, returnOptionSetValue: False"));
694694
}
695695

696+
[Test]
697+
public void It_Should_Not_Fail_On_Complex_Template_Field()
698+
{
699+
var context = new XrmFakedContext();
700+
var service = context.GetFakedOrganizationService();
701+
var tracing = context.GetFakeTracingService();
702+
703+
var formula = @"If (
704+
IsNull(Value(""oss_htmltemplate"")),
705+
Value(""oss_subject"", { explicitTarget: First(Fetch(""<fetch no-lock='true'><entity name='oss_htmltemplate'><attribute name='oss_subject' /><filter><condition attribute='oss_uniquename' operator='eq' value='{1}' /></filter></entity></fetch>"", [Value(""oss_htmltemplateuniquename"")])) }),
706+
Value(""oss_htmltemplate.oss_subject"")
707+
)";
708+
709+
var template = new Entity
710+
{
711+
Id = Guid.NewGuid(),
712+
LogicalName = "oss_htmltemplate",
713+
["oss_uniquename"] = "tst",
714+
["oss_subject"] = "Test",
715+
["oss_html"] = "<html />"
716+
};
717+
718+
var email = new Entity
719+
{
720+
LogicalName = "email",
721+
["oss_htmltemplate"] = template.ToEntityReference()
722+
};
723+
724+
context.Initialize(template);
725+
726+
var result = new XTLInterpreter(formula, email, null, service, tracing).Produce();
727+
728+
Assert.That(result, Is.EqualTo("Test"));
729+
}
730+
696731
[Test]
697732
public void First_Should_Work_On_Entity_Collection()
698733
{

0 commit comments

Comments
 (0)