AXForum  
Вернуться   AXForum > Блоги > CRM, SharePoint и Черная Магия
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

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


MVP 2010, 2011
Рейтинг: 5.00. Голосов: 2.

Веб часть "С днем рождения" для SharePoint, Часть 2

Запись от Артем Enot Грунин размещена 16.12.2009 в 09:04
Теги webpart

Данный пост - не более чем работа над ошибками к одной из прошлых статей: Веб часть "С днем рождения" для SharePoint. С приближением праздника, у моей веб части обнаружился один небольшой изъян, который я не замечал ранее: после того, как как в выборку стали попадать январские дни рождения, нарушилась сортировка именинников. Иными словами, при сортировке результатов январские дни рождения стали отображаться перед декабрьскими. В то время, как относительно "сегодня" они идут позже. Решение было найдено в виде добавления еще одного жутковатого атрибута для сортировки:
Код:
SIGN(DATEPART(dy, @startdate) - DATEPART(dy, cast([5010] as datetime)) -1)
Это условие вернет -1 если день рождения пользователя после даты @startdate и + 1, если он после @startdate, что обозначает, что день рождения в январе. В итоге жутки запрос приобрел следующий вид:
Код:
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))
Спасибо за решение моей коллеге, Переведенцевой Неониле.
Размещено в SharePoint
Просмотров 45030 Комментарии 0
Всего комментариев 0

Комментарии

 


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:02.