public ILogicEvaluationResult Evaluate(IProcessExecutionContext executionContext, ISerializedParameters parameters, Platform.ITransaction transaction) { throw new NotImplementedException(); }
public override ILogicEvaluationResult Evaluate(IProcessExecutionContext executionContext, ISerializedParameters parameters, Platform.ITransaction transaction) { try { _ = executionContext ?? throw new ArgumentNullException("executionContext"); _ = parameters ?? throw new ArgumentNullException("parameters"); _ = transaction ?? throw new ArgumentNullException("transaction"); if (!(transaction is ITransaction)) { throw new ArgumentException("transaction does not represent a valid Process Transaction type."); } ValidateParameters(executionContext, parameters); var customer = (transaction as ITransaction).Customer ?? throw new Exception("Transaction is missing required Customer reference."); OrganizationRequest req = null; if (customer.RecordType == "contact") { req = new OrganizationRequest(parameters["ContactActionName"]); } else { req = new OrganizationRequest(parameters["AccountActionName"]); } if (req is null) { throw new Exception("Unsupported customer type."); } req["Target"] = new EntityReference(customer.RecordType, customer.Id); req["Transaction"] = transaction.ToEntityReference(); //process any additional parameter data passed in from the configuration. if (parameters.Count > 1) { foreach (var key in parameters.Keys) { if (key != "AccountActionName" && key != "ContactActionName" && !string.IsNullOrEmpty(parameters[key])) { req[key] = parameters[key]; } } } var response = executionContext.DataService.ToOrgService().Execute(req); if (!response.Results.ContainsKey("IsTrue")) { throw new Exception("Action did not return the required IsTrue output parameter."); } bool isTrue = (bool)response["IsTrue"]; string message = null; // capture optional message if it exits if (response.Results.ContainsKey("Message") && response["Message"] is string) { message = response["Message"] as string; } return(new LogicEvaluationResult(isTrue, message)); } catch (Exception ex) { throw new Exception(ex.Message, ex); } }
public ILogicEvaluationResult Evaluate(IProcessExecutionContext executionContext, Platform.ITransaction transaction) { return(Type.Evaluate(executionContext, Parameters, transaction)); }
public override ILogicEvaluationResult Evaluate(IProcessExecutionContext executionContext, ISerializedParameters parameters, Platform.ITransaction transaction) { executionContext.Trace("DataRecordQueryMatchEvaluator is Evaluating."); if (executionContext is null) { throw new ArgumentNullException("executionContext"); } if (executionContext.Container is null) { throw new ArgumentException("executionContext must provide a Container."); } if (parameters is null) { throw new ArgumentNullException("parameters"); } if (transaction is null) { throw new ArgumentNullException("transaction"); } if (!(transaction is ITransaction)) { throw new ArgumentException("transaction does not represent a valid Process Transaction."); } ValidateParameters(executionContext, parameters); var dataRecord = (transaction as ITransaction).DataRecord; var orgService = executionContext.DataService.ToOrgService(); var fetchXml = parameters["FetchXml"]; //convert the fetchxml to a query expression var req = new FetchXmlToQueryExpressionRequest { FetchXml = fetchXml }; var resp = (FetchXmlToQueryExpressionResponse)orgService.Execute(req); var qry = resp.Query; qry.NoLock = true; // Wrap the existing filter criteria with an AND clause where record id is equal to the current record. When // the query is run it will either return one record indicating that the current data record matches the filter // criteria or it will return zero record indicating that the current record does not match the filter criteria. var idFieldName = qry.EntityName + "id"; FilterExpression wrapperFilter = new FilterExpression { FilterOperator = LogicalOperator.And, Conditions = { new ConditionExpression { AttributeName = idFieldName, Operator = ConditionOperator.Equal, Values = { dataRecord.Id } } } }; if (qry.Criteria != null) { wrapperFilter.Filters.Add(qry.Criteria); } qry.Criteria = wrapperFilter; // Execute the query to see if a record is returned or not var results = orgService.RetrieveMultiple(qry); executionContext.Trace("DataRecordQueryMatchEvaluator found {0} matching records", results.Entities.Count); if (results.Entities.Count == 1) { return(new LogicEvaluationResult(true, null)); } return(new LogicEvaluationResult(false, null)); }