Ниже приведено обновление для TFS 2013 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. **
Найдите пользователя или пользователей с адресами электронной почты, которые необходимо задать.В таблице Identities
могут быть дубликаты.Я обнаружил, что самые высокие SequenceId
были активными 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>')
. Это дает список самых последних Id
(s) в форме GUID для учетных записей.что вам нужно обновить.Эти GUID должны быть переформатированы в ArtifactId
(s), который является преобразованным двоичным форматом.Это достигается путем изменения порядка следования байтов (от низкого к высокому) или каждой из первых трех частей GUID, но оставляя последние две части в порядке.Например:
Returned 'Id' GUID =01020304-0506-0708-090A-0B0C0D0E0F10
Byte Swapped GUID =04030201-0605-0807-090A-0B0C0D0E0F10
Reformatted 'ArtifacId'=0x0403020106050807090A0B0C0D0E0F10
Далее вы должны найти PropertyId
(s), используемые TFS для уведомлений по электронной почте.В TFS 2013 U5 это можно найти с помощью следующего запроса:
USE Tfs_TFSConfiguration
SELECT Name, PropertyId FROM tbl_PropertyDefinition WHERE Name LIKE '%Address%'
Это даст вам PropertyId
(s) для ConfirmedNotificationAddress
и CustomNotificationAddresses
;это два поля свойств, используемые TFS 2013 U5 для отправки уведомлений по электронной почте.
Далее необходимо найти InternalKindId
для Identity
Framework для TFS DatabaseCategory
USE Tfs_TFSConfiguration
SELECT Description, InternalKindId FROM tbl_PropertyArtifactKind
WHERE Description='Identity'
Теперь, чтобы собрать все воедино, ...
Если записи конфигурации для ваших пользователей уже существуют, вы можете обновить настройки с помощью:
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>')
Примечание: , что ArtifactId
- это двоичное значение, основанное на GUID базы данных с полубайтовой заменой, и оно не будет соответствовать указанному в кавычках значению в запросе UPDATE
.Т.е. эта часть запроса будет выглядеть примерно так:
WHERE ArtifactId=0x90D490F6BF7B31491CB894323F38A91F AND
Ниже я предполагаю, что PartitionId
равен '1';это следует проверить, прежде чем продолжить с помощью краткого сканирования записей в таблице tbl_PropertyValue
.Если вы загружаете параметры конфигурации, которые еще не были установлены:
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>')
Примечание: , что ArtifactId
должно быть двоичным значением без кавычек, преобразованным из GUID, возвращенного из tbl_Identity
как объяснено выше. Примечание: , что для каждой ArtifactId
создаются две записи, по одной для каждого PropertyId
.
** WARNING ** Getting caught editing the TFS database directly
** will void your Microsoft Support Agreement. **
** Proceed at your own risk. **
(Это работает для меня,... но у меня нет соглашения о поддержке Microsoft для аннулирования.)