[extensionof(ClassStr(WorkflowWorkItemQueueCustomProvider))]
final class WorkflowWorkItemQueueCustomProvider_Extension
{
public Name queueIdToQueueName(WorkflowQueueId _queueId)
{
WorkflowWorkItemQueue workItemQueue;
next queueIdToQueueName(_queueId);
if(workItemQueue.FOCECaseActionOnCE == NoYes::Yes)
{
info("Reassign to new workitem que");
}
return workItemQueue.Name;
}
public Name resolve( WorkflowContext _context,
WorkflowQueueToken _queueToken)
{
WorkflowWorkItemQueueExpression queueExpression;
WorkflowWorkItemQueue workItemQueue,WorkflowWorkItemQueue_1;
WorkflowWorkItemQueueExpressionDef queueExpressionDefinition;
ExpressionTable expression;
ExpressionResultType result;
Name queueName;
SysDictWorkflowType workflowType;
className workflowDocument;
SysWorkflowTable sysWorkflowTable;
CaseDetailbase caseDetailBase,caseDetailBaseupd;
sysWorkflowTable = SysWorkflowTable::find(_context.parmWorkflowCorrelationId());
next resolve(_context,_queueToken);
select caseDetailBase where caseDetailBase.RecId == _context.parmRecId();
workflowType = SysDictWorkflowType::newTypeName(sysWorkflowTable.TemplateName);
workflowDocument = workflowType.document();
while select EvaluationOrder, Expression, WorkflowWorkItemQueue from queueExpression
order by EvaluationOrder
join Status, Name, RecId from workItemQueue
where queueExpression.WorkflowWorkItemQueue == workItemQueue.RecId
&& workItemQueue.Status == WorkflowWorkitemQueueStatus::Active
&& workItemQueue.WorkitemType == workflowDocument
join RecId, ExpressionId from expression
where queueExpression.Expression == expression.RecId
{
result = Expression::evaluate(_context.parmCompanyId(),_context.parmTableId(),
_context.parmRecId(),expression.ExpressionId);
if (result == ExpressionResultType::True)
{
queueName = workItemQueue.Name;
break;
}
}
if(queueName)
{
changecompany(curExt())
{
select WorkflowWorkItemQueue_1 where WorkflowWorkItemQueue_1.Name == queueName;
if(WorkflowWorkItemQueue_1.FOCECaseActionOnCE == NoYes::Yes && !caseDetailBase.CeCaseId)
{
//send case detil to CE and update the casedetail form action on field value to CE
FOCEOutboundIntegration FOCEOutboundIntegration = new FOCEOutboundIntegration();
FOCEOutboundIntegration.assignjsonValues(caseDetailBase,"In process");
// update action on field value to CE
ttsbegin;
select forUpdate caseDetailBaseupd where caseDetailBaseupd.RecId == _context.parmRecId();
if(caseDetailBaseupd)
{
caseDetailBaseupd.ActionOn = ActionOn::CE;
caseDetailBaseupd.update();
}
ttscommit;
}
}
}
if (!queueName)
{
select RecId, DefaultQueue from queueExpressionDefinition
where queueExpressionDefinition.WorkitemType == workflowDocument
&& queueExpressionDefinition.DefaultQueue != 0;
if (queueExpressionDefinition.RecId)
{
queueName = WorkflowWorkItemQueue::find(queueExpressionDefinition.DefaultQueue).Name;
}
}
return queueName;
}
}
Hi Girish,
Can you please tell me when WorkflowWorkItemQueueCustomProvider willl get triggered, i have followed the above steps but still it is not getting triggered,
Actually this development is a case sync integration development, so whenever a case is created in F&O and submit workflow then the earlier developer triggering the api to send this to CE in WorkflowWorkItemQueueCustomProvider class but this class itself is not calling after i'm submitting the workflow.
Basically in the above code in line number 52 they are calling api to tirigger outbound to CE but this class and resolve itself is not triggering after workflow submission.