Run TFS query in the past? - tfs

I've some simple queries in my Team Foundation Server 2015, .e.g,. to count the open WorkItems. Now I want to track this in history and want to know, how many WorkItems were open one week or one month ago?
So, can I run a query in the past to a date x? Or is the only way to get such historical data to start today and write down all values from now on to have the history in the future?

This will only work in VSO or TFS 2015+
You can use the queries in new REST API's with the ASOF operator.
You would do an HTTP POST with content like below
{
"query": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.AssignedTo] = #Me AND [State] <> 'Closed' AND [State] <> 'Done' AND [State] <> 'Removed' ASOF '01 Sep 2015' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc"
}
to the url
http://[Server]/[Collection]/[TeamProject]/_apis/wit/wiql?api-version=1.0
and then you will get a response back with each work item Id that that query returns and then you can get the details for those work items using the other Rest API that takes in a list of work item Ids (look for _apis/wit/WorkItems on the Rest API link below).
So you would need to use code and not just the UI but you shouldn't need to use the object model to do this.
Rest API Queries - http://r3f.co/1g5cYIw
ASOF - http://r3f.co/1g5cSRg

It is impossible to use TFS work item queries to get historical work items. You need to work with TFS API.
Please check this blog for the details on how to get work item histories via API.
http://geekswithblogs.net/TarunArora/archive/2011/08/21/tfs-sdk-work-item-history-visualizer-using-tfs-api.aspx

Related

How to receive messages in ascending by received date order in graph api

I am trying to receive email messages via Microsoft Graph API:
requestBuilder
.Delta()
.Request()
.Expand("attachments")
.GetAsync(ChildCancellationToken.Token);
but messages come in descending order by ReceivedDateTime. For example we have 15 new messages with ReceivedDateTime = n, where n represents date time.
In first part will come:
[15,14,13,12,11,10,9,8,7,6 (deltaHash="someValue")]
in second:
[5,4,3,2,1 (deltaHash=NULL)]
So, the oldest email will come the latest (LIFO, not FIFO).
But I expect to get:
[1,2,3,4,5,6,7,8,9,10 (deltaHash="someValue")]
[11,23,13,14,15 (deltaHash=NULL)]
What I tried: I tried OrderBy(string value).
For these two I get exceptions:
.OrderBy("ReceivedDateTime asc")
.OrderBy("ReceivedDateTime")
This is working fine:
.OrderBy("ReceivedDateTime desc")
but this is the same as default behavior and I think this is a bug actually. So there is no way to sort emails in ASC order.
How to solve on first look very simple and common requirement?
Looks like this is a known issue as specified in the documentation.
The only supported $orderby expression is
$orderby=receivedDateTime+desc. If you do not include an $orderby
expression, the return order is not guaranteed.
So for now you need to sort them on your end by writing your own code.
I can confirm that .OrderBy("ReceivedDateTime asc") is now working as of the version of the microsoft-graph API I am using which is 5.36.0

Get commits without review

I have a list of JIRA issues that have one or many commits:
J1 (c11, c12, ..., c1n)
J2 (c21, c22, ..., c2m)
...
Jk (ck1, ck2, ..., cky)
where n,m,y >= 1
Using Crucible I'm trying to create reviews for J1,..., Jk (or for c11, ..., cky - because it's ok if the number of Crucible reviews is bigger than the number of JIRA issues).
In order to achieve this, I want to see using EyeQL which are the commits without a created review (not necessarily closed).
If I run the following query:
select ...
from ...
where
...
and not reviewed
group by ...
return ...
it returns only the commits that don't have a "complete" review. But I want to see only the commits that don't have a "review" (regardless of its state).
How can I achieve this behavior?
I want something like and doesn't have any created review instead of and not reviewed.
Using the clause not in any review should work, i.e.:
select revisions from dir "/" where (not in any review) order by date desc group by changeset return path, revision, author, date, csid
See the EyeQL reference for the full grammar description with examples.

How to get the list of ChangesetIDs in an iteration path from source control?

I want to get the list of changes (i.e. the ChangeSetID's) associated with an iteration path.
Is there a way we can get the list of them ?
As long as you link your changesets to your work items!
There is no direct relationship between a check-in and an iteration except where it is created. When your developers check-in they get the option to relate their check-in to one or more work items within the work item tracking system. so:
Iteration -> Work Item -> Changeset
So in order to retrieve your list of changesets associated with your iteration you:
User the API to query for all work items where [System.Iteration] Under "[project]\Release 1\Sprint 1"
Loop through each work item returned and return all changeset links
I hope this helps you...
Code paraphrased:
To get Work item Store
_store = collection.GetService<WorkItemStore>();
To get Query Results
_store.Query("SELECT [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State] FROM WorkItems WHERE [System.TeamProject] = #project AND [System.IterationPath] UNDER 'TfsExtensions\TfsFieldAnnotate\Release 1' ORDER BY [System.Id] ")
Each work item then contains "wi.Links" and you should be able to find the Changeset Lin Type easily...

TFS Query - History section - comments added by date

How do I write a query in TFS to show me users that have added comments in the history section of a work item in the past 2 days?
Team Project = # Project
And Work Item Type = [Any]
And History Contains MY_KEY_PHRASE
And Changed Date >= #Today - 2
Since Contains cannot be null we have to add a value to the History search.
MY_KEY_PHRASE = Whatever you want to put in your comments field, as a standard, to identify changes (such as "comments" or "cc" or "." etcetera).
The easiest solution is to use prefix before any comments, so any one need to write comments just write "Comments:" keyword followed by carriage return before his comments and then
Edit the query
Add new criteria as the following:
(And/Or)--> And
(Field)---> History
(Operator)--> Contains
(Value)--> Comments
Thanks
M.Radwan

How to find issues that at some point has been assigned to you?

We use Jira extensively in our project, but I often have a hard time finding issues, that I know, I have been working on earlier. Usually, if some case is reported, that seems familiar to something I have been working on in the past, but I don't remember exactly what and when.
Usually, an issue is reported, then our scrum master assigns it to the developer, the developer fixes it (hopefully) and then passes it to the tester (yay, it works!). But then it is no longer assigned to me, and I have a hard finding old issues, that I remember vaguely.
I thought, perhaps it is possible to see the assigned history of an issue, there might be a way to form an advanced search/filter, that finds all issues, that at some time has been assigned to me.
Has anyone done this?
This is meanwhile possible by means of the JIRA Query Language (JQL) operator 'WAS', which has been introduced in JIRA 4.3 and extended in JIRA 4.4 to cover assignees and reporters as well, for example:
project = "Angry Nerds" and (assignee was 'johnsmith' or reporter was 'johnsmith')
General-purpose query for whichever 'current user':
assignee was currentUser()
This filter can be conveniently shared & anybody can put it on their dashboard, etc and it will return results specific to them.. Not supported on all old JIRA versions though.
This was my most-requested JIRA feature ever.
Check out JIRA Toolkit plugin - Participants custom field
https://studio.plugins.atlassian.com/wiki/display/JTOOL/JIRA+Toolkit+Plugin
This field allows you to easily track issues that you've "participated in". These are defined to be any issues you've commented on, raised or are the current assignee. See also the [JIRA Extended Participants] plugin.
Update
This works without plugins:
assignee was currentUser() OR reporter was currentUser() ORDER BY updated DESC
The original answer
This query worked for me:
Participants = currentUser()
try "assignee was username". it would get all tickets been assigned to the user before.
You can find issues by worklog entries directly in the database:
select distinct ji.pkey from jiraissue ji inner join worklog wl on ji.id=wl.issueid where wl.author='some_username';
I agree this should be implemented in the UI though.
For those that will be using JIRA 5+, there is also CHANGED operator that looks at the field changing to specific value within specific time range.
assignee CHANGED TO currentUser() AFTER startOfYear() BEFORE now()
More here: https://confluence.atlassian.com/display/JIRA052/Advanced+Searching#AdvancedSearching-CHANGED
Just another way how to achieve the same result, but might be useful for other cases.
was is not supported to assignee field when I tried recently. You must use CHANGED, FROM, TO keywords to filter.
I'm using something like this:
project = MindBlowingProject AND (assignee in (currentUser()) OR assignee CHANGED from (currentUser()) OR reporter in (currentUser())) ORDER BY updated DESC
So there are 3 scenarios:
1 - I changed it in some way - assignee changed by [UserName],
2 - I changed the status ( closed it, whatever) - OR status changed by [UserName],
3 - I still have it - OR assignee = [UserName]
So the whole query (assuming that the changed statement is allowed is:
assignee changed by [UserName] OR status changed by [UserName] OR assignee = [UserName]
I think the most sensible approach is to search the issue-history. The only thing, that is not logged there, is who accessed the issue (just watching, without changing anything).
But you can't search the ticket-history without database access (as far as I know, please correct me if I'm wrong)
So, to search all issues with "someUserName" in the issuehistory, you have to inner join the table changegroup (and maybe the table changeitem from there).
Example:
select ji.id,issuenum,summary,creator,assignee,ji.created,updated,c.id as histid,c.author from jiraissue ji inner join changegroup c on ji.id=c.issueid where c.author like 'someUserName';
c.id as histid ==> this is the number/id of the entry in the (issue-)"History" tab
Meaning: if there ever was a change by the user "someUserName" it is logged in the History and it will be listet with this query
The following example will just list every disting issue, where the "myusername" was found in the History after the date 20180501:
select distinct ji.id,issuenum,summary,creator,assignee,ji.created,updated,c.author from jiraissue ji inner join changegroup c on ji.id=c.issueid where c.author like 'myusername' and ji.created > '2018-05-01T00:00:00.000';
I annotated the necessary relation here:
From menu select Tempo->Reports
Select date-range
and you should see report.
I tried the below SQL query and it gives data of all the issues and all the assignees that were ever assigned to an issue. Any change in the assignee for any issue is captured by below query:
select distinct
p.pkey +'-'+cast(ji.issuenum as varchar(max)),
ji.SUMMARY,
cast(ci.OLDSTRING as nvarchar(max)) as 'Old value',
cast(ci.NEWSTRING as nvarchar(max)) as 'New value'
from
jiraissue ji
join project p on p.id = ji.PROJECT
join changegroup cg on cg.issueid = ji.id
join changeitem ci on ci.groupid = cg.id and FIELD = 'assignee'
Anyone looking for the query would find this useful : )
-Neha 'D' Pal

Resources