How to customize workflow in Azure DevOps Service (VSTS online)? - azure-devops

I've read all the MSDN docs, but cannot find a way to edit the work item transitions in Azure DevOps Service (VSTS online).
I'm trying to:
Add a custom Reason to a State of a work item. (e.g. "resolved", "won't fix")
See/edit all the existing rules about how states transition.

This is possible if you are on the Hosted XML Process model in VSTS.
Hosted XML process model concept - VSTS
When are you on the Hosted XML Process model you ask??
Well after lots of reading I found the following note on the page explaining Hosted XML customization which states
Feature availability: Import process supports the Hosted XML process model which allows you to manage customizations through updating select XML definition files of a process template. This feature is only available for accounts that have been migrated to VSTS using the TFS Database Import Service.
But since I didn't import my VSTS I'm on the Inheritance Process model.
Which does NOT currently support this feature as confirmed here in comments
#RohanDaniel #ehofman#MSFT #DevMarTechOps You are correct. Advanced workflow management, which includes restricting transitions and customizing the reasons of a transition is not yet possible in the Inheritance model. It is on our backlog to add though.
Also, if you indeed used a high fidelity migration tool and you have a Hosted XML process model, you are stuck on it. You cannot move to the inheritance model as seen in this link.
In summary then. On the Inheritance Process model in VSTS this is not a feature that is available currently but is on the backlog as confirmed by MS. However it is not planned for delivery in the next few months and a year or more from now is more likely.
In my case I also had to add addition fields and a new state on the BUG WIT (Work Item Type). This was accomplished on VSTS by customizing a process which is done by inheriting from one of the standard processes ( Agile, CMMI, Scrum ) which you can then customize.
You can add customized rules to a WIT and you can base a rule on changes to the state.... however the rules seems too limited to restrict transitions and the options to set fields doesn't have the "Reason" field available.

In fact, I came up with a solution! Which I admit is not clean as I would like, but it works.
I created three new fields: "Rules error" (Text single line), "Rules broken" (Text single line) and "Rules activated" (Boolean).
"Rules error" I put it on the main tab so I can see the error and the two others I created a tab named "Useless" in which I put them.
Now, add a rule making the reset:
Name: Reset rules
Condition: The value of equals ==> "Rules activated" ==> true
Action: Clear the value ==> "Rules error"
And then one rule per not wanted transition of states:
Name: State change - Approved to Deployed QA
Condition: A work item state changes from ==> Approved ==> Deployed QA
Action: Make required ==> "Rules broken"
Action: Set the value of ==> "Rules activated" ==> true
Action: Set the value of ==> "Rules error" ==> "Can't change from Approved to Deployed QA"
I know, entering something in the field "Rules broken" breaks this enforcement, but as this functionality doesn't exist, it is the only way I came up with when you don't have access to Hosted XML.

Neither of those things appear to be possible at the moment.
The VSTS process customisation is very different to TFS and is still evolving. #1 seems like something that might be added in a future update. But #2 doesn't seem like it would appear, as Microsoft have relaxed most of the transition rules on all the templates on VSTS by default.

This is currently not possible when using inheritance process.
You can vote for this feature request in the community: Allow specifying state transitions when using inheritance process

It's possible by creating our own custom extensions and creating some rules that disable state changes from one state to another state
I have implemented this for my org but haven't published it online..will do it soon

Here is a workaround for denying any users who are not a member of group "HighLevelManagement" to change state from Approved to Committed for PBI:
Create a new Field Called "Unlocked".
create a new rule to "Hide the Field" when the user is not part of "HighLevelManagement" as below
Create a new rule with action "Make Read Only" set to "State" when
Unlocked is False and workitem change from Approved to Commited as
below:
Now whenever a user from HighLevelManagement wants to change state from Approved to Committed he simply tick Unlocked change state and then tick back Unlocked, that way anyone from outside HighLevelManagement will be restricted to change state from Approved to Committed.

Related

qlik sense error in published dashboard that does not appear in edit mode

I built a dashboard in Qlik Sense and after I published it I noticed the following error -
"Invalid sort order in properties".
When I duplicate the dashboard in order to edit it, the error drops and the data is shown correctly.
What could be the issue?
Had similar issue some time back. In my case the object was an extension and it was trying to modify (apply some patches) to the underlying object. As in your case it was working fine if the app is not published. The reason was that once the app is published you don't have the permission to modify objects that are published.
Modify objects on published apps is forbidden by default. It can be overwritten by changing one of the default security rules but personally I will not advise you to change the security rule because it will be applied to all published apps (unless you change the security rule to target only set of apps)

How to generate system alias in /iwfnd/maint_service?

I have following problem:
I created an app and the according oData in frontend system. Everything worked fine. Then I was taught, that this was not correct and I have to create the oData in backend system.
So I made this. I created just the same oData in backend system, created another service for the new oData in transaction /iwfnd/maint_service in frontend system, changed the data source in the manifest of my app, and everything seemed to work fine. To add the app to the launchpad I needed one (or two?) more services in transaction SICF (paths sap/bc/bsp/sap and sap/bc/ui5_ui5/sap). Those were generated automatically for my "frontend-oData". As those weren't generated automatically in frontend system for my new "backend-oData", I added them manually. This seemed to work as well. So I transported everything into quality system (the app from WebIDE to SAP was transported as "updating an already existing application").
And now my problem:
Yesterday after transporting my app ran perfectly in just updated version. Today I get an error in quality system, that says:
"No systemalias for service 'ZEXAMPLE_SRV_0001' and user 'USER1234' found" (I translated this error message from german). This error is new to me and I did not have this before. The settings for my "frontend-oData" were different ones (no systemalias & service processing mode = "Co-deployed only") and they were generated automatically.
Now for my "backend-oData" in development system there is the setting "Routing-based" and the correct systemalias is maintained and the app runs perfectly there. But in quality system there is no systemalias maintained. So I transported the systemalias from development system to quality system, but that didn't work, because the systemalias has to be a different one in quality system.
I tried to make exact the same settings in quality system for my "backend-oData" as the "frontend-oData" has, but then in /IWFND/ERROR_LOG I get the message "No service for namenspace /SAP/, Name ZEXAMPLE_SRV, Version 0001 found."
So can anyone tell me the secret which step I need to do, that everything runs correctly again? I am desperated by now.
Many thanks and best regards
In your dev system open transaction /IWFND/MAINT_SERVICE and select the service in the service catalogue.
You should see the system aliases in the bottom right:
Press on Customizing and in the following view switch to edit mode:
As soon as you are in edit mode, you can select Table view > Transport. It will ask you to select an existing transport or to create a new one.
Two buttons will appear in the customizing view. Add to transport and Remove from transport.
Select the system alias row from the table and press Add to transport.
Now press save!!! Otherwise the alias will not be part of the transport. It's only "put on hold" when you press "Add to transport". Press save!!!
Move the transport to your next system (and eventually into production) if you want to use your OData service in other systems.

Manage versions with Azure DevOps

I currently use these tools :
Azure DevOps - Only for Git repositories
Jira - To manage tasks / bugs / versions / customer requests / ...
TeamCity - Continuous integration (build and deploy versions )
I would like to replace Jira with Azure Devops (but continue to use TeamCity for builds for now.)
I already created some teams / areas / user stories / bugs.
But I would like a simple way to handle versions. For example, I fix some bugs and release a new version using TeamCity (ex. : v3.1.1.1234 ). How can I update my user stories / bugs to say that it is fix in this version ? There is no "Fix version" field like in Jira...
Should I use "Iterations" or just "tags" ?
If I want to generate release notes for the new version (for internal use), do I have to use Azure DevOps queries ?
You can create a customized field (ie.Fix version) for User Stories in azure devops. You can follow below steps:
1, Create an inherited process. (only an inherited process is allowed to create custom field)
Organization Setting--> Process under Boards--> Select the Process--> Click 3dots(...)-->Click Create inherit process.
2, Create customized Field for the inherited processs which created above
Choose your inherited process, and then choose the Work Item Type (ie, User Story)you want to customize.
Click New field, type in the new field's name (ie. Fix Version) in the Definition section. (you can decide where the new field should locate in Layout section or keep the default layout).
3, Change your project process to above inherited process.
Choose the process that contains you project. Click Projects-->Choose your Project-->Click the 3dots-->Click Change Process
You can check the document here for more information.
After you finish above steps, you will see the new field Fix Version in User Stories edit page.
If you find above steps complicated, you can just use tags.
#Levi Lu-MSFT, This only lets you create field in one workitem type if you want same field in Bugs, Features, Stories it wouldn't allow, it'll throw 'Field already exists" error.

SAPUI5 chart not visible...when running from within the portal

I have a really bizarre one here...I have developed and deployed to my back end system a launchpad application that currently works OK. Part of this application is a report that, based on certain filters, returns a table and a chart (see snapshot below).
After finishing deployment next step is configuring the app so it runs from the launchpad within the SAP portal. Not familiar with the portal, another colleague undertook the task, application is now running from within the portal as well. With one exception - the chart above is not visible (see 2nd snapshot below).
Noticing the "No Data" message and NO exception in the Chrome debugger, thought as a good idea to debug the OData methods in the back end. To my big surprise, found out that while filters pass to the method just fine both for table and chart (two different entities but almost identical and accepting exactly the same parameters) when running outside portal, when running from within (the portal) parameters "get lost" on their way to the chart entity - no parameters for the chart method. See snapshots below and pay attention to the IT_FILTER_SELECT_OPTIONS at the bottom right.
Outside portal (parameter table filled)
Within Portal (parameter table empty)
Furthermore, the filter table passed to both OData tables is common, you can see the code underneath - just two lines: one for table and one for chart binding.
Closing with a clarification. Mentioned above that there are no errors in the debugger when calling the back end methods. There are actually a couple of them but they take place during the initialization of the app and do not seem to affect anything else in the app, which aside a set of reports has a lot of data operations (dialogs, tables etc), everything else works fine. These errors can be seen below.
Does this situation ring any bells to anyone?
Thanks in advance
Issue solved, it was a deployment issue...

How to set the Assigned To when state changes in VSTS/Azure DevOps

I have an inherited process from an Agile process. The base process had the following states New, Active, Resolved, Completed. I added several new states, so now it goes New, Triaged, Active, Development Dont, IT Testing Done, Resolved, Confirmed, Completed to better match how it flows through different people.
The process has some built in State change rules, so when it goes from New to Resolved or Active to Resolved the Assigned To changes back to the Created By person. Also when it goes from Resolved back to Active it switches the assigned to back to the Resolved By user. This works fine, the problem that I have is that these state change rules only happen for these specific states.
In VSTS online I have setup some custom rules to do different things as it moves between different states, but what I can't find a way to do is to set the Assigned To field to some other person field on the Work Item. I can set it to a hard coded person, but that is not what I want. I want to do the same state change rules that already exist for the built in states on my new states.
Here is an example of some of the rules that I have set, but I cannot find a way to set the Assigned to field to another field, i.e. Created By or Resolved By.
Use the copy value from to assign the value of one field to another:
I've just been doing a similar thing and found there's also an action setting to 'Use the current user to set the value of...'
Example of this below: