Добро пожаловать в мой блог! Изначально он не задумывался как блог 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