Adding a dialog child workflow to an on-demand workflow - dynamics-crm

I was wondering if anybody ran into the same issue as I am facing now.
What I'm trying to do is have a workflow that checks the condition of a field (optionset) of a form. If the field has option 1, 2 or 3 then create new record with certain shared attributes, otherwise start a child workflow. The child workflow is a "Dialog" process, not a "workflow" process which informs the user that the record was not created and why. For some reason I cannot select the dialog workflow from the dropdown list of available child workflows...
Both the parent workflow and the "dialog" workflow process are based on the same entity.
If anybody has any ideas on how I could debug this or any clues in general I would greatly appreciate your feedback.
Thanks for taking the time to read this post!

It is not possible to call a dialog from a workflow (see here).
Workflows are generally triggered by events.
Imagine the ramifications - which user would receive the dialog and what if no-one was logged in?
One option is to drive everything with JavaScript
Trigger on change of the option set
Create the records
Start the workflow
Start the dialog
See the section under the heading "Opening a Dialog Process by Using a URL" on MSDN here
Rather use the URL than showModalDialog or showModelessDialog.
What might work even better is to call an Action from JavaScript. The Action can run synchronously and create all records, start child workflows and dialogs.
A synchronous workflow can stop an event and return an error message to the user, but cannot return success messages - it look like this will not meet your requirements, but Gareth Tucker has an example here.

Related

Change of Status in Dynamics CRM 2016 8.1

I have written code that is supposed to help us automate some specific cases. It will create a addresstag for the customer and change the status of the case to "Address Tag Sent".
All this works as intended, but for some reason the status of the case is changed back to "New".
As you can see here there is an event called "Activate" that changes the status.
I haven't found what this event is or why it occurs. I have gone through all the Workflows we got, all processes, all code (As good as I can) and spent a good amount of time trying to google it but I still come out empty handed.
Is there someone who might know what this event is? Or maybe got any idea how to access/modify it?
'Activate' will essentially re-activate any record and put the statuscode back to the default statuscode\status reason - I am guessing your default is set to 'New'.
I would investigate in these directions:
Since “changed by” showing as “CRM migration account”, this maybe an ETL job like SSIS, or Scribe which is syncing data changes from outside integration
Maybe the same service account is used by plugin, to reset the StateCode and StatusCode on some business logic
Is there some Business process flow stages available in your form, as I see “Service stage” attribute in audit before that, there may be logics coupled with that
Verify the dependencies of statecode attribute in customizations to see any SDK steps or workflows referencing that. Check in your code repos and check with any long timers in your project for any business logics implemented in the past.

Adding feedback to chatbot in Bot Composer

I'm creating a chatbot using Bot Composer and want to add a feedback dialog at the end of the conversation.
I was wondering how this feedback would be triggered? I've taken a look and there is a activities trigger called 'Conversation ended (EndOfConversation activity)' that I've tried out but struggling to get it working. I can't find a lot of information/documentation on the use of this trigger. Could it be used to infer the end of a conversation and then send a feedback dialog?
Has anyone managed to add a feedback dialog triggered by the end of a conversation to their chatbot using Bot Composer?
I was wondering how this feedback would be triggered?
Where do you want to trigger it? After the entire dialog has been done, or multiple places in multiple dialogs? One feedback for everything or do you need multiple?
I've taken a look and there is a activities trigger called 'Conversation ended (EndOfConversation activity)' that I've tried out but struggling to get it working. I can't find a lot of information/documentation on the use of this trigger. Could it be used to infer the end of a conversation and then send a feedback dialog?
EndOfConversation happens after everything is done. You won't be able to utilize this to trigger feedback as feedback is part of the conversation and if this event happens, then that is already done.
By default, dialogs automatically end after they complete.
"autoEndDialog": true,
You should add an action to the end (or any appropriate location) of your other dialogs to call (Begin a new dialog) the feedback dialog . You could keep track of whether certain feedback dialogs had been set and check for that value in your dialog to see if it should run again (if using a prompt, you can utilize the "alwaysPrompt" property). There is quite a bit of flexibility and it really depends on your need. But at the simplest scneario; you would make your feedback dialog, and make that the last action in your main dialog.
I hope that helped. If not, please let me know where I can clarify. Feel free to share any code/json/repo if appropriate.
This seems to be an old post but can we have some example to show how this is impleemented. I ammusing the bit framework sdk 4 and this should worked out of the box.x
Somestimes this works

Modify Apache Airflow UI base code- Action buttons like Rerun, Success etc

Can someone please tell me if we can modify Airflow UI base code. I want to modify "Trigger Dag"(play button), Success button etc.
My requirement is to stop someone from marking a job to success or from running a task from UI without any approval from my Manager. Currently I have the access to trigger a DAG on adhoc basis. I can also mark a task to success without any approval. I do not want to do that without any approval. We have to show approval mechanism to the audit team. Appreciate your help.
You need to set RBAC and DAG level acces
https://airflow.apache.org/docs/stable/security.html?highlight=ldap#rbac-ui-security
https://airflow.apache.org/docs/stable/security.html?highlight=ldap#dag-level-role

Dynamics 365 - A check to ensure that all tasks have been complete

I have a scenario where the user wants a check in place to ensure that all tasks have been completed before moving onto next stage on the Business Process Flow.
Is there anyway to do this?
2 ways to achieve it.
Option 1: Create a bool field - Tasks closed? & keep that in BPF step, if it’s true then platform will also users to move forward. Otherwise not.
You can mark this as read-only, write a plugin on Task completion to update this as yes, when there is no more open tasks.
Read more
Option 2: Can have a js validation onStageChange or onSave to retrieve open child tasks, check the count, show notification & preventDefault.
Read more
You can do the same in pre-update plugin, throw InvalidPluginExecutionException if there are open tasks.

Handling Action errors/output inside out-of-the-box Workflows

I am working on designing a lengthy approval system in CRM using a combination of OOB workflows (designed using CRM UI Workflow Designer) and custom actions (actions written using .NET code). Idea is to keep the entire branching/simpler logic in OOB workflow and call custom Actions wherever necessary. However I have few questions with this approach:
How can I handle run-time errors generated in the action code?
For example, one of my Actions contain the code to push data to an external system via web service. In case this web service call fails, I need to perform some steps in the parent workflow.
How can I handle 'if conditions' which can't be handled by 'Check Condition' step? For example, suppose that before performing a certain workflow step I need to check some data which can't be queried within CRM. I can create an Action which will return true/false based on the custom logic which can then be checked in parent workflow.
An alternate approach would be to use plugins but I am inclined towards using OOB functionalities as much as possible. Any inputs would be helpful.
First of all let's clear the semantics, because I'm not sure if you understand what are you talking about - there are Actions (you can refer to them as custom actions, but then you should refer to every workflow you create as custom and I figured out of your post that you are describing them as OOB, which also is semantically wrong - every workflow you create is a custom workflow, maybe it's using OOB steps, but that's a different story) and Custom Workflow Activities. I'm assuming that you want to use Custom Workflow Activities, because the are more suited for what you are trying to achieve here. Also you tagged your question as CRM 2011 and CRM 2013 - not sure what you meant, because Actions were not available for CRM 2011.
So basically Custom Workflow Activities can have Input and Output parameters. Output parameters are answer to both your questions, because you can use them to get the error message after your custom processing or use then in conditional statements later in your workflow. Output parameters can be defined like that:
[Output("Error message")]
public OutArgument<string> ErrorMessage { get; set; }
You can find more examples here:
https://technet.microsoft.com/en-us/library/gg327842.aspx
You can of course set this properties simply by calling
ErrorMessage.Set(executionContext, messageText)
So now when you define your workflow, wherever you need something not configurable in OOB blocks, you can put your Custom block, after it's done simply check it's output for the error (this is just an example, you can pimp it up by adding additional output parameters, to make it more generic), if it's empty then do something, if not then do something else for example send email with the error message. It all depends on what are you trying to achieve.
Actions are serving different purposes, they are useful to create a logic that can be easily called through plugin or javascript (webAPI) and allows you to also put a plugin on it alongside doing everything within one transaction. Maybe it will be useful somewhere in your workflow, but as far as I remember in CRM 2013 actions could not be called from a workflow...
UPDATE:
Ok so if we are dealing with CRM 2016, we can call Action from a workflow. What is best in this situation really depends on the scenario and what we are trying to achieve, but to make it easier to decide let me highlight main differences:
1) Activities are simply a blocks of code that can be put inside your workflow. Actions by themself are not code, they are custom Messages that you can call. Of course you can register a plugin on this custom Message and do there any custom logic you want, but this is another step to take
2) Actions can be run in transaction, Activities not (but you can run Activities inside Actions, so in this case they can run in transaction)
3) Actions can be called directly from Javascript, plugins and workflows. It's a great thing, but if you will make let's say 10 custom Actions which you will be using ONLY inside you one workflow, they will be visible when you will be registering plugins (and also any js developer will be able to call them with JS)
So basically Actions are a big, fat feature that can serve many purposes (including running Activities on their own!), Activities are much simpler but in your case they will also do their job. So you should ask yourself questions:
Do I need my logic to run inside transaction?
And
Do I need to call this logic somewhere else than my workflow?
If you have any "Yes" then go for Actions, of no, then go for Activities, because you will be overcomplicating things without any good reason.

Resources