Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:


MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Веб часть "С днем рождения" для SharePoint, Часть 2
Запись от Артем Enot Грунин размещена 16.12.2009 в 09:04
Теги webpart
Данный пост - не более чем работа над ошибками к одной из прошлых статей: Веб часть "С днем рождения" для SharePoint. С приближением праздника, у моей веб части обнаружился один небольшой изъян, который я не замечал ранее: после того, как как в выборку стали попадать январские дни рождения, нарушилась сортировка именинников. Иными словами, при сортировке результатов январские дни рождения стали отображаться перед декабрьскими. В то время, как относительно "сегодня" они идут позже. Решение было найдено в виде добавления еще одного жутковатого атрибута для сортировки:
Это условие вернет -1 если день рождения пользователя после даты @startdate и + 1, если он после @startdate, что обозначает, что день рождения в январе. В итоге жутки запрос приобрел следующий вид:
Спасибо за решение моей коллеге, Переведенцевой Неониле.
Код:
SIGN(DATEPART(dy, @startdate) - DATEPART(dy, cast([5010] as datetime)) -1)
Код:
DECLARE @Interval int
SET @Interval = 1
DECLARE @startdate datetime
SET @startdate = GETDATE()
SELECT
[17] as name,
[4] as fname,
[5] as sname,
[9] as email,
[23] as ImageUri,
[22] as MySiteUri,
[5010] as bday
FROM (
select
RecordID,
PropertyID,
PropertyVal
from UserProfileValue uv
where uv.RecordID in (
select
u.RecordID
from UserProfileValue u
inner join
UserProfile_Full p
on
u.RecordID = p.RecordID
where
p.bDeleted = 0 and
p.RecordID = p.MasterRecordID and
u.PropertyID = 5010 and
(
-- случай с переходом в новый год
DATEDIFF(day, @startdate, DATEADD(year, YEAR(@startdate) - YEAR(cast(u.PropertyVal as datetime)) + 1, cast(u.PropertyVal as datetime))) < @Interval
-- стандартный случай
OR
(
DATEDIFF(day, @startdate, DATEADD(year, YEAR(@startdate) - YEAR(cast(u.PropertyVal as datetime)), cast(u.PropertyVal as datetime))) >= 0
AND
DATEDIFF(day, @startdate, DATEADD(year, YEAR(@startdate) - YEAR(cast(u.PropertyVal as datetime)), cast(u.PropertyVal as datetime))) < @Interval
)
)
)
) as bdayusers
PIVOT
(
MIN(PropertyVal)
FOR [PropertyID] IN ([17],[4],[5],[9],[23],[22],[5010])
)
as p
order by SIGN(DATEPART(dy, @startdate) - DATEPART(dy, cast([5010] as datetime)) -1), DATEPART(dy, cast([5010] as datetime))
Всего комментариев 0




