2012-02-09 25 views
10

Trong Team Foundation Server của tôi, tôi có một bộ sưu tập chứa một Team Project. Dự án nhóm này có một số cộng tác viên. Các dòng mã sau đây có được tất cả những người đóng góp của dự án:Tôi nên quản lý địa chỉ email của người dùng TFS ở đâu?

TfsTeamProjectCollection collection = new TfsTeamProjectCollection(new Uri("http://tfs:8080/tfs/CollectionName")); 

IGroupSecurityService groupSecurityService = collection.GetService<IGroupSecurityService>(); 

Identity contributors = groupSecurityService.ReadIdentity(SearchFactor.AccountName, "[ProjectName]\\Contributors", QueryMembership.Expanded); 

Identity[] members = groupSecurityService.ReadIdentities(SearchFactor.Sid, contributors.Members, QueryMembership.None); 

Mỗi bản sắc trong thành viên có một tài sản MailAddress, mà trong trường hợp của tôi là bằng string.Empty.

Tôi quản lý các địa chỉ email đó ở đâu?

ý tưởng đầu tiên của tôi là để có một cái nhìn tại người dùng trong Start-> Administrative Tools-> Computer Management-> Người dùng

tôi đã chọn một trong những người sử dụng và mở thuộc tính của mình. Tôi nghĩ rằng có thể có một tài sản email mà TFS sẽ mất. Nhưng tôi không thể tìm được.

Sau đó, tôi mở Bảng điều khiển quản trị TFS, tìm kiếm tư cách thành viên nhóm và điều hướng đến một trong những người dùng. Cũng không có cách nào để chỉnh sửa thuộc tính.

Có ai biết vị trí đặt địa chỉ email đó không?

Trả lời

9

Câu hỏi hay! Có một công việc TFS được lập lịch để chạy mỗi giờ để cập nhật thông tin về các định danh bảo mật được lưu trữ trong TFS dựa vào các chi tiết trong Active Directory. Một số thông tin này bao gồm tên hiển thị, số nhận dạng bảo mật (SID), tên phân biệt AD và địa chỉ e-mail, cùng với các chi tiết khác. Bạn có thể tìm hiểu bộ nhớ cache chi tiết này bằng cách xem bảng tbl_security_identity_cache trong cơ sở dữ liệu cấu hình.

Cảnh báo: Truy vấn hoặc thay đổi cơ sở dữ liệu sẽ đưa bạn vào vị trí mà bạn có thể không nhận được sự hỗ trợ từ Microsoft. Đó là thông báo rằng bạn không làm điều này trừ khi được hướng dẫn bởi một đại diện hỗ trợ của Microsoft trong bối cảnh của một trường hợp hỗ trợ tích cực. Bạn đã thực sự làm điều đó ngay bằng cách sử dụng SDK TFS để nhận thông tin này.

Nếu môi trường TFS của bạn không có trong môi trường Active Directory, thì nó sẽ cố gắng đồng bộ hóa thông tin từ máy cục bộ nơi TFS đang chạy. Nó sẽ không có thông tin chi tiết về địa chỉ email để sử dụng nên nó sẽ được để trống.

Bắt đầu từ phiên bản tiếp theo của TFS sau TFS 2010, mỗi người dùng sẽ có thể cập nhật địa chỉ email thông báo của họ trong hồ sơ của họ bằng cách sử dụng Team Web Access.

+0

Cảm ơn cho câu trả lời chi tiết. Đây là những tin tức tuyệt vời. Vì vậy, bây giờ tôi có thể tự động gửi email cho mỗi thành viên trong nhóm bất cứ khi nào một bản dựng được phát hành. :) – Christian

+0

Có thực sự không có cách nào để quản lý địa chỉ email của người dùng nếu TFS không được kết nối với AD? Bất kỳ plugin, API hoặc tương tự nào có thể làm một điều như vậy? – Xorandor

+0

Đúng - trong TFS 2005, TFS 2008 và TFS 2010.Người dùng sẽ có thể cập nhật địa chỉ email thông báo của họ trong phiên bản tiếp theo của TFS thông qua Quản lý hồ sơ trong Team Web Access nhưng tôi không chắc chắn liệu sẽ có một UI tiếp xúc với quản trị viên để cập nhật chúng hay không. Phiên bản tiếp theo của TFS vẫn chưa được thực hiện, vì vậy chúng ta sẽ thấy! Nếu nó được lưu trữ theo cách có thể được chỉnh sửa thông qua API, thì ai đó cũng có khả năng xây dựng một công cụ tùy chỉnh để thực hiện nó. –

1

Tôi tin rằng điều này được lưu giữ trong Active Directory.

2

Nếu Active Directory không được đồng bộ hóa với TFS và giả sử mục tiêu của bạn là giữ địa chỉ email là gửi thông báo, bạn có thể sử dụng phương thức IEventService.GetEventSubscriptions().

var eventService = (IEventService)collection.GetService(typeof(IEventService)); 

foreach (var member in members) 
{ 
    var subscription = eventService.GetEventSubscriptions(member.DisplayName).First(); 
    { 
     if (subscription != null && string.IsNullOrEmpty(member.MailAddress)) 
      member.MailAddress = subscription.DeliveryPreference.Address; 
    } 
} 
+0

Bài tập 'member.MailAddress = ...' không liên tục, có chức năng Lưu/Cập nhật cần được gọi sau đó không? – mhu

2

Sau đây là dành cho TFS 2013 Cập nhật 5

** WARNING ** Getting caught editing the TFS database directly 
** will void your Microsoft Support Agreement. ** 
What follows is not for the uninitiated. ** Proceed at your own risk. ** 

Xác định vị trí người dùng hoặc người sử dụng với địa chỉ email cần phải được thiết lập. Có thể trùng lặp trong bảng Identities. Tôi thấy rằng những người có số lượng cao nhất SequenceId là hoạt động Identities.

Use Tfs_TFSConfiguration 
SELECT i1.AccountName, i1.Id FROM tbl_Identity AS i1 
LEFT OUTER JOIN tbl_Identity AS i2 
    ON (i1.AccountName=i2.AccountName AND i1.SequenceId<i2.SequenceId) 
WHERE i2.AccountName IS NULL 
    AND i1.AccountName in ('<your first user>','<another user>','<and so on>') 

này đưa ra một danh sách gần đây nhất Id (s), ở dạng GUID, cho các tài khoản mà bạn cần phải cập nhật. Các GUID này phải được định dạng lại thành ArtifactId, là định dạng nhị phân được chuyển đổi. Điều này được thực hiện bằng cách đảo ngược thứ tự byte (từ thấp đến cao) hoặc mỗi phần trong ba phần đầu của GUID, nhưng để lại hai phần cuối cùng theo thứ tự. Ví dụ:

Returned 'Id' GUID  =01020304-0506-0708-090A-0B0C0D0E0F10 
Byte Swapped GUID  =04030201-0605-0807-090A-0B0C0D0E0F10 
Reformatted 'ArtifacId'=0x0403020106050807090A0B0C0D0E0F10 

Tiếp theo, bạn phải tìm thấy PropertyId (s) được TFS sử dụng cho thông báo qua email. Trong TFS 2013 U5, điều này có thể được tìm thấy với các truy vấn sau đây:

USE Tfs_TFSConfiguration 
SELECT Name, PropertyId FROM tbl_PropertyDefinition WHERE Name LIKE '%Address%' 

này sẽ cung cấp cho bạn PropertyId (s) cho ConfirmedNotificationAddressCustomNotificationAddresses; đó là hai trường thuộc tính được TFS 2013 U5 sử dụng để gửi email thông báo.

Tiếp theo, bạn cần phải tìm ra InternalKindId cho khung Identity cho TFS DatabaseCategory

USE Tfs_TFSConfiguration 
SELECT Description, InternalKindId FROM tbl_PropertyArtifactKind 
WHERE Description='Identity' 

Bây giờ để đặt nó tất cả cùng nhau, ...

Nếu hồ sơ cấu hình cho người dùng của bạn (s) đã tồn tại, bạn có thể cập nhật cài đặt với:

USE Tfs_TFSConfiguration 
UPDATE tbl_PropertyValue SET LeadingStringValue='<user's notification email address>' 
WHERE ArtifactId=<ArtifactId, reformatted from tbl_Identity query> 
AND PropertyId IN ('<first PropertyId from tbl_PropertyDefinition>', '<second id>') 

Lưu ý: rằng ArtifactId là giá trị nhị phân, dựa trên cơ sở dữ liệu GUID bán từng byte và sẽ không khớp với giá trị được trích dẫn trong truy vấn UPDATE.   I.e. phần này của truy vấn sẽ trông giống như sau:

WHERE ArtifactId=0x90D490F6BF7B31491CB894323F38A91F AND 

Dưới đây tôi giả định rằng PartitionId là '1'; điều này cần được xác minh trước khi bạn tiếp tục bằng một bản quét ngắn gọn các bản ghi trong bảng tbl_PropertyValue.
Nếu bạn đang tải các thiết lập cấu hình vẫn chưa được thiết lập:

USE Tfs_TFSConfiguration 
INSERT INTO tbl_PropertyValue 
    (PartitionId, ArtifactId, InternalKindId, Version, PropertyId, LeadingStringValue) 
VALUES ('1', <ArtifactId, reformatted from tbl_Identity query>, 
    '<InternalKindId from tbl_PropertyArtifactKind>', 
    '0', 
    '<first PropertyId from tbl_PropertyDefinition>', 
    '<user's notification email address>'), 

    ('1', <ArtifactId, reformatted from tbl_Identity query>, 
    '<InternalKindId from tbl_PropertyArtifactKind>', 
    '0', 
    '<second PropertyId from tbl_PropertyDefinition>', 
    '<user's notification email address>') 

Lưu ý: rằng ArtifactId phải là một giá trị nhị phân không thể viện chứng, chuyển đổi từ GUID trở về từ các tbl_Identity như đã giải thích ở trên.
Lưu ý: hai bản ghi được tạo cho mỗi ArtifactId, một cho mỗi PropertyId.

** WARNING ** Getting caught editing the TFS database directly 
** will void your Microsoft Support Agreement. ** 
** Proceed at your own risk. ** 

(này làm việc cho tôi, ...   nhưng, tôi không có một thỏa thuận hỗ trợ của Microsoft để làm mất hiệu lực.)

Các vấn đề liên quan