Skip to content

Commit f168aaa

Browse files
committed
Handling params correctly for Custom API #12
1 parent 5e922d6 commit f168aaa

File tree

1 file changed

+54
-21
lines changed

1 file changed

+54
-21
lines changed

CustomActionTester/CATcode.cs

Lines changed: 54 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -160,17 +160,27 @@ private void ExecuteCA()
160160
var request = new OrganizationRequest(txtMessageName.Text);
161161
foreach (var input in gridInputParams.DataSource as IEnumerable<Entity>)
162162
{
163-
if (input.TryGetAttributeValue("name", out string name))
163+
var name = string.Empty;
164+
if (input.TryGetAttributeValue(Customapirequestparameter.UniqueName, out string capiname))
164165
{
165-
if (input.TryGetAttributeValue("rawvalue", out object value))
166-
{
167-
request[name] = value;
168-
}
169-
else if (input.TryGetAttributeValue("isoptional", out bool optional) && !optional)
170-
{
171-
MessageBox.Show($"Missing value for required parameter: {name}", "Execute Custom Action", MessageBoxButtons.OK, MessageBoxIcon.Warning);
172-
return;
173-
}
166+
name = capiname;
167+
}
168+
if (string.IsNullOrWhiteSpace(name) && input.TryGetAttributeValue("name", out string caname))
169+
{
170+
name = caname;
171+
}
172+
if (string.IsNullOrWhiteSpace(name))
173+
{
174+
continue;
175+
}
176+
if (input.TryGetAttributeValue("rawvalue", out object value))
177+
{
178+
request[name] = value;
179+
}
180+
else if (input.TryGetAttributeValue("isoptional", out bool optional) && !optional)
181+
{
182+
MessageBox.Show($"Missing value for required parameter: {name}", "Execute Custom Action", MessageBoxButtons.OK, MessageBoxIcon.Warning);
183+
return;
174184
}
175185
}
176186
WorkAsync(new WorkAsyncInfo
@@ -441,16 +451,37 @@ private void GetOutputParams(Entity ca)
441451
gridOutputParams.DataSource = null;
442452
return;
443453
}
444-
var qx = new QueryExpression("sdkmessageresponsefield");
445-
qx.Distinct = true;
446-
qx.ColumnSet.AddColumns("name", "position", "parameterbindinginformation", "formatter", "publicname");
447-
qx.AddOrder("position", OrderType.Ascending);
448-
var resp = qx.AddLink("sdkmessageresponse", "sdkmessageresponseid", "sdkmessageresponseid");
449-
var req = resp.AddLink("sdkmessagerequest", "sdkmessagerequestid", "sdkmessagerequestid");
450-
var pair = req.AddLink("sdkmessagepair", "sdkmessagepairid", "sdkmessagepairid");
451-
var msg = pair.AddLink("sdkmessage", "sdkmessageid", "sdkmessageid");
452-
var wf = msg.AddLink("workflow", "sdkmessageid", "sdkmessageid");
453-
wf.LinkCriteria.AddCondition("workflowid", ConditionOperator.Equal, ca.Id);
454+
var qx = new QueryExpression();
455+
switch (ca.LogicalName)
456+
{
457+
case "customapi":
458+
qx = new QueryExpression(Customapiresponseproperty.EntityName);
459+
qx.ColumnSet.AddColumns(
460+
Customapiresponseproperty.UniqueName,
461+
Customapiresponseproperty.PrimaryName,
462+
Customapiresponseproperty.DisplayName,
463+
Customapiresponseproperty.Description,
464+
Customapiresponseproperty.Type,
465+
Customapiresponseproperty.LogicalEntityName);
466+
qx.AddOrder(Customapiresponseproperty.PrimaryName, OrderType.Ascending);
467+
qx.Criteria.AddCondition(Customapirequestparameter.CustomapiId, ConditionOperator.Equal, ca.Id);
468+
break;
469+
case "workflow":
470+
qx = new QueryExpression("sdkmessageresponsefield");
471+
qx.Distinct = true;
472+
qx.ColumnSet.AddColumns("name", "position", "parameterbindinginformation", "formatter", "publicname");
473+
qx.AddOrder("position", OrderType.Ascending);
474+
var resp = qx.AddLink("sdkmessageresponse", "sdkmessageresponseid", "sdkmessageresponseid");
475+
var req = resp.AddLink("sdkmessagerequest", "sdkmessagerequestid", "sdkmessagerequestid");
476+
var pair = req.AddLink("sdkmessagepair", "sdkmessagepairid", "sdkmessagepairid");
477+
var msg = pair.AddLink("sdkmessage", "sdkmessageid", "sdkmessageid");
478+
var wf = msg.AddLink("workflow", "sdkmessageid", "sdkmessageid");
479+
wf.LinkCriteria.AddCondition("workflowid", ConditionOperator.Equal, ca.Id);
480+
break;
481+
default:
482+
return;
483+
}
484+
454485
WorkAsync(new WorkAsyncInfo
455486
{
456487
Message = "Loading Output Parameters",
@@ -582,7 +613,9 @@ private void PopulateOutputParamValues(ParameterCollection outputparams)
582613
foreach (var result in outputparams)
583614
{
584615
var outputs = gridOutputParams.DataSource as IEnumerable<Entity>;
585-
var output = outputs.FirstOrDefault(o => o["name"].ToString().Equals(result.Key));
616+
var output =
617+
outputs.FirstOrDefault(o => o.Contains(Customapiresponseproperty.UniqueName) && o[Customapiresponseproperty.UniqueName].ToString().Equals(result.Key)) ??
618+
outputs.FirstOrDefault(o => o.Contains("name") && o["name"].ToString().Equals(result.Key));
586619
if (output != null)
587620
{
588621
var rawvalue = result.Value;

0 commit comments

Comments
 (0)