Creating Calendar for Timesheet

Hi,

I need to create an interface for timesheet entry.  In the interface when I select the month and year the calendar for that month should be displayed in a grid with days (1, 2 ,3 etc) as links so that I can click the link to enter the number of hours worked on that day.  How can I acheive this?  I need to create this interface in 18.1 version.  Thanks in advance.

  Discussion posts and replies are publicly visible

Parents
  • 0
    Certified Lead Developer
    Hi,

    First you need to find out the no. of days in your month. You can do that by using daysinmonth() funtion.
    After you have the no. of days in the selected month, use the function weekday() to create a dictionary object for all the dates that fall under a particular day..for that month..for eg.{monday:{1,7,14},tuesday{2,8,15}..so on}.
    Once you have the dictionary objects, use that in a pagingGrid and provide links that will call a section to enter the no. of hours.
    Your pagingGrid columns will be monday,tuesday,,,,,upto sunday and the values will be the ones from the dictionary object.
  • 0
    Certified Senior Developer
    in reply to Aditya

    Can you tell me the code for this asap

  • 0
    Certified Senior Developer
    in reply to shikhab0003

    Below is my code . Using this expression i want to display calendar . I am facing problem in displaying .

     If you can correct my code ...I will be very thank full . 

    a!localVariables(
    local!s:weekday(date(ri!y,ri!m,1),1),
    local!t:daysinmonth(ri!m,ri!y),
    choose(local!s,
    if(local!s=1,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Sunday",
    {
    sun:if(fv!item+1<local!t+1,fv!item+1,{}),
    mon:if(fv!item+2<local!t+1,fv!item+2,{}),
    tues:if(fv!item+3<local!t+1,fv!item+3,{}),
    wed:if(fv!item+4<local!t+1,fv!item+4,{}),
    thurs:if(fv!item+5<local!t+1,fv!item+5,{}),
    fri:if(fv!item+6<local!t+1,fv!item+6,{}),
    sat:if(fv!item+7<local!t+1,fv!item+7,{})
    }
    ,{})}
    ),{}),
    if(local!s=2,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Monday",
    {
    mon:if(fv!item+1<local!t+1,fv!item+1,{}),
    tues:if(fv!item+2<local!t+1,fv!item+2,{}),
    wed:if(fv!item+3<local!t+1,fv!item+3,{}),
    thurs:if(fv!item+4<local!t+1,fv!item+4,{}),
    fri:if(fv!item+5<local!t+1,fv!item+5,{}),
    sat:if(fv!item+6<local!t+1,fv!item+6,{}),
    sun:if(fv!item+7<local!t+1,fv!item+7,{}),
    }
    ,{})}
    ),{}),
    if(local!s=3,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Tuesday",
    {
    tues:if(fv!item+1<local!t+1,fv!item+1,{}),
    wed:if(fv!item+2<local!t+1,fv!item+2,{}),
    thurs:if(fv!item+3<local!t+1,fv!item+3,{}),
    fri:if(fv!item+4<local!t+1,fv!item+4,{}),
    sat:if(fv!item+5<local!t+1,fv!item+5,{}),
    sun:if(fv!item+6<local!t+1,fv!item+6,{}),
    mon:if(fv!item+7<local!t+1,fv!item+7,{}),
    }
    ,{})}
    ),{}),
    if(local!s=4,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Wednesday",
    {
    wed:if(fv!item+1<local!t+1,fv!item+1,{}),
    thurs:if(fv!item+2<local!t+1,fv!item+2,{}),
    fri:if(fv!item+3<local!t+1,fv!item+3,{}),
    sat:if(fv!item+4<local!t+1,fv!item+4,{}),
    sun:if(fv!item+5<local!t+1,fv!item+5,{}),
    mon:if(fv!item+6<local!t+1,fv!item+6,{}),
    tues:if(fv!item+7<local!t+1,fv!item+7,{})
    }
    ,{})}
    ),{}),
    if(local!s=5,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Thursday",
    {
    thurs:if(fv!item+1<local!t+1,fv!item+1,{}),
    fri:if(fv!item+2<local!t+1,fv!item+2,{}),
    sat:if(fv!item+3<local!t+1,fv!item+3,{}),
    sun:if(fv!item+4<local!t+1,fv!item+4,{}),
    mon:if(fv!item+5<local!t+1,fv!item+5,{}),
    tues:if(fv!item+6<local!t+1,fv!item+6,{}),
    wed:if(fv!item+7<local!t+1,fv!item+7,{}),
    }
    ,{})}
    ),{}),
    if(local!s=6,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Friday",
    {
    fri:if(fv!item+1<local!t+1,fv!item+1,{}),
    sat:if(fv!item+2<local!t+1,fv!item+2,{}),
    sun:if(fv!item+3<local!t+1,fv!item+3,{}),
    mon:if(fv!item+4<local!t+1,fv!item+4,{}),
    tues:if(fv!item+5<local!t+1,fv!item+5,{}),
    wed:if(fv!item+6<local!t+1,fv!item+6,{}),
    thurs:if(fv!item+7<local!t+1,fv!item+7,{})
    }
    ,{})}
    ),{}),
    if(local!s=7,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Saturday",
    {
    sat:if(fv!item+1<local!t+1,fv!item+1,{}),
    sun:if(fv!item+2<local!t+1,fv!item+2,{}),
    mon:if(fv!item+3<local!t+1,fv!item+3,{}),
    tues:if(fv!item+4<local!t+1,fv!item+4,{}),
    wed:if(fv!item+5<local!t+1,fv!item+5,{}),
    thurs:if(fv!item+6<local!t+1,fv!item+6,{}),
    fri:if(fv!item+7<local!t+1,fv!item+7,{}),
    }
    ,{})}
    ),{}),))

  • 0
    Certified Senior Developer
    in reply to ajhick

     According to my code dates are displaying like this. I am not able to improve my code . how can i? 

    a!localVariables(
    local!s:weekday(date(ri!y,ri!m,1),1),
    local!t:daysinmonth(ri!m,ri!y),
    choose(local!s,
    if(local!s=1,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Sunday",
    {
    sun:if(fv!item+1<local!t+1,fv!item+1,{}),
    mon:if(fv!item+2<local!t+1,fv!item+2,{}),
    tues:if(fv!item+3<local!t+1,fv!item+3,{}),
    wed:if(fv!item+4<local!t+1,fv!item+4,{}),
    thurs:if(fv!item+5<local!t+1,fv!item+5,{}),
    fri:if(fv!item+6<local!t+1,fv!item+6,{}),
    sat:if(fv!item+7<local!t+1,fv!item+7,{})
    }
    ,{})}
    ),{}),
    if(local!s=2,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Monday",
    {
    mon:if(fv!item+1<local!t+1,fv!item+1,{}),
    tues:if(fv!item+2<local!t+1,fv!item+2,{}),
    wed:if(fv!item+3<local!t+1,fv!item+3,{}),
    thurs:if(fv!item+4<local!t+1,fv!item+4,{}),
    fri:if(fv!item+5<local!t+1,fv!item+5,{}),
    sat:if(fv!item+6<local!t+1,fv!item+6,{}),
    sun:if(fv!item+7<local!t+1,fv!item+7,{}),
    }
    ,{})}
    ),{}),
    if(local!s=3,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Tuesday",
    {
    tues:if(fv!item+1<local!t+1,fv!item+1,{}),
    wed:if(fv!item+2<local!t+1,fv!item+2,{}),
    thurs:if(fv!item+3<local!t+1,fv!item+3,{}),
    fri:if(fv!item+4<local!t+1,fv!item+4,{}),
    sat:if(fv!item+5<local!t+1,fv!item+5,{}),
    sun:if(fv!item+6<local!t+1,fv!item+6,{}),
    mon:if(fv!item+7<local!t+1,fv!item+7,{}),
    }
    ,{})}
    ),{}),
    if(local!s=4,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Wednesday",
    {
    wed:if(fv!item+1<local!t+1,fv!item+1,{}),
    thurs:if(fv!item+2<local!t+1,fv!item+2,{}),
    fri:if(fv!item+3<local!t+1,fv!item+3,{}),
    sat:if(fv!item+4<local!t+1,fv!item+4,{}),
    sun:if(fv!item+5<local!t+1,fv!item+5,{}),
    mon:if(fv!item+6<local!t+1,fv!item+6,{}),
    tues:if(fv!item+7<local!t+1,fv!item+7,{})
    }
    ,{})}
    ),{}),
    if(local!s=5,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Thursday",
    {
    thurs:if(fv!item+1<local!t+1,fv!item+1,{}),
    fri:if(fv!item+2<local!t+1,fv!item+2,{}),
    sat:if(fv!item+3<local!t+1,fv!item+3,{}),
    sun:if(fv!item+4<local!t+1,fv!item+4,{}),
    mon:if(fv!item+5<local!t+1,fv!item+5,{}),
    tues:if(fv!item+6<local!t+1,fv!item+6,{}),
    wed:if(fv!item+7<local!t+1,fv!item+7,{}),
    }
    ,{})}
    ),{}),
    if(local!s=6,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Friday",
    {
    fri:if(fv!item+1<local!t+1,fv!item+1,{}),
    sat:if(fv!item+2<local!t+1,fv!item+2,{}),
    sun:if(fv!item+3<local!t+1,fv!item+3,{}),
    mon:if(fv!item+4<local!t+1,fv!item+4,{}),
    tues:if(fv!item+5<local!t+1,fv!item+5,{}),
    wed:if(fv!item+6<local!t+1,fv!item+6,{}),
    thurs:if(fv!item+7<local!t+1,fv!item+7,{})
    }
    ,{})}
    ),{}),
    if(local!s=7,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Saturday",
    {
    sat:if(fv!item+1<local!t+1,fv!item+1,{}),
    sun:if(fv!item+2<local!t+1,fv!item+2,{}),
    mon:if(fv!item+3<local!t+1,fv!item+3,{}),
    tues:if(fv!item+4<local!t+1,fv!item+4,{}),
    wed:if(fv!item+5<local!t+1,fv!item+5,{}),
    thurs:if(fv!item+6<local!t+1,fv!item+6,{}),
    fri:if(fv!item+7<local!t+1,fv!item+7,{}),
    }
    ,{})}
    ),{}),))

  • 0
    Certified Senior Developer
    in reply to ajhick

    a!localVariables(
    local!s:weekday(date(ri!y,ri!m,1),1),
    local!t:daysinmonth(ri!m,ri!y),

    choose(local!s,
    if(local!s=1,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Sunday",
    {
    sun:if(fv!item+1<local!t+1,fv!item+1,{}),
    mon:if(fv!item+2<local!t+1,fv!item+2,{}),
    tues:if(fv!item+3<local!t+1,fv!item+3,{}),
    wed:if(fv!item+4<local!t+1,fv!item+4,{}),
    thurs:if(fv!item+5<local!t+1,fv!item+5,{}),
    fri:if(fv!item+6<local!t+1,fv!item+6,{}),
    sat:if(fv!item+7<local!t+1,fv!item+7,{})
    }
    ,{})}
    ),{}),
    if(local!s=2,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Monday",
    {
    mon:if(fv!item+1<local!t+1,fv!item+1,{}),
    tues:if(fv!item+2<local!t+1,fv!item+2,{}),
    wed:if(fv!item+3<local!t+1,fv!item+3,{}),
    thurs:if(fv!item+4<local!t+1,fv!item+4,{}),
    fri:if(fv!item+5<local!t+1,fv!item+5,{}),
    sat:if(fv!item+6<local!t+1,fv!item+6,{}),
    sun:if(fv!item+7<local!t+1,fv!item+7,{}),
    }
    ,{})}
    ),{}),
    if(local!s=3,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Tuesday",
    {
    tues:if(fv!item+1<local!t+1,fv!item+1,{}),
    wed:if(fv!item+2<local!t+1,fv!item+2,{}),
    thurs:if(fv!item+3<local!t+1,fv!item+3,{}),
    fri:if(fv!item+4<local!t+1,fv!item+4,{}),
    sat:if(fv!item+5<local!t+1,fv!item+5,{}),
    sun:if(fv!item+6<local!t+1,fv!item+6,{}),
    mon:if(fv!item+7<local!t+1,fv!item+7,{}),
    }
    ,{})}
    ),{}),
    if(local!s=4,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Wednesday",
    {
    wed:if(fv!item+1<local!t+1,fv!item+1,{}),
    thurs:if(fv!item+2<local!t+1,fv!item+2,{}),
    fri:if(fv!item+3<local!t+1,fv!item+3,{}),
    sat:if(fv!item+4<local!t+1,fv!item+4,{}),
    sun:if(fv!item+5<local!t+1,fv!item+5,{}),
    mon:if(fv!item+6<local!t+1,fv!item+6,{}),
    tues:if(fv!item+7<local!t+1,fv!item+7,{})
    }
    ,{})}
    ),{}),
    if(local!s=5,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Thursday",
    {
    thurs:if(fv!item+1<local!t+1,fv!item+1,{}),
    fri:if(fv!item+2<local!t+1,fv!item+2,{}),
    sat:if(fv!item+3<local!t+1,fv!item+3,{}),
    sun:if(fv!item+4<local!t+1,fv!item+4,{}),
    mon:if(fv!item+5<local!t+1,fv!item+5,{}),
    tues:if(fv!item+6<local!t+1,fv!item+6,{}),
    wed:if(fv!item+7<local!t+1,fv!item+7,{}),
    }
    ,{})}
    ),{}),
    if(local!s=6,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Friday",
    {
    fri:if(fv!item+1<local!t+1,fv!item+1,{}),
    sat:if(fv!item+2<local!t+1,fv!item+2,{}),
    sun:if(fv!item+3<local!t+1,fv!item+3,{}),
    mon:if(fv!item+4<local!t+1,fv!item+4,{}),
    tues:if(fv!item+5<local!t+1,fv!item+5,{}),
    wed:if(fv!item+6<local!t+1,fv!item+6,{}),
    thurs:if(fv!item+7<local!t+1,fv!item+7,{})
    }
    ,{})}
    ),{}),
    if(local!s=7,
    a!forEach(
    items:enumerate(daysinmonth(ri!m,ri!y)),
    expression:{if(text(date(ri!y,ri!m,fv!item+1),"dddd")="Saturday",
    {
    sat:if(fv!item+1<local!t+1,fv!item+1,{}),
    sun:if(fv!item+2<local!t+1,fv!item+2,{}),
    mon:if(fv!item+3<local!t+1,fv!item+3,{}),
    tues:if(fv!item+4<local!t+1,fv!item+4,{}),
    wed:if(fv!item+5<local!t+1,fv!item+5,{}),
    thurs:if(fv!item+6<local!t+1,fv!item+6,{}),
    fri:if(fv!item+7<local!t+1,fv!item+7,{}),
    }
    ,{})}
    ),{}),))

    Want to display the result in read only grid

  • Had a bit of a play and came up with a few options. I ended up re-working the data to make more sense in how a grid would want the data. Again I have avoided using expression rules, CDTs and plugins.

    1. Read only grid using a!gridField() - Annoying that the number of items HAS to show at the bottom
    2. Editable grid using a!gridLayout() - Number of items no longer shows at the bottom
    3. Manually created grid using columns and card layouts - Very customizable!
      1. The whole card can be a link making it easier to click the day you want
      2. Colors/Text/Spacing/Margins can be whatever you want!
      3. Could play around with condensing the calendar so it isn't the full width of a screen

    a!localVariables(
      local!namesOfDaysInWeek: touniformstring(
        "monday",
        "tuesday",
        "wednesday",
        "thursday",
        "friday",
        "saturday",
        "sunday"
      ),
      local!today: todate(local(now())),
      local!month: month(local!today),
      local!year: year(local!today),
      local!daysInMonth: daysinmonth(
        local!month,
        local!year
      ),
      local!unsortedMonthData: a!forEach(
        items: 1 + enumerate(local!daysInMonth),
        expression: a!localVariables(
          local!date: date(
            local!year,
            local!month,
            fv!item
          ),
          {
            date: local!date,
            dayNumberInMonth: fv!item,
            dayNumberInWeek: weekday(
              local!date,
              2
            ),
            dayName: text(local!date, "dddd"),
            inThisMonth: true
          }
        )
      ),
      local!firstDayOfMonthData: index(
        local!unsortedMonthData,
        1,
        {}
      ),
      local!firstDayOfMonthOccursOnDayNumber: tointeger(
        index(
          local!firstDayOfMonthData,
          "dayNumberInWeek",
          {}
        )
      ),
      local!firstDayOfMonthDate: todate(
        index(
          local!firstDayOfMonthData,
          "date",
          {}
        )
      ),
      local!lastDayOfMonthData: index(
        reverse(local!unsortedMonthData),
        1,
        {}
      ),
      local!lastDayOfMonthOccursOnDayNumber: tointeger(
        index(
          local!lastDayOfMonthData,
          "dayNumberInWeek",
          {}
        )
      ),
      local!lastDayOfMonthDate: todate(
        index(
          local!lastDayOfMonthData,
          "date",
          {}
        )
      ),
      local!numberOfLastMonthDaysToAddToStart: local!firstDayOfMonthOccursOnDayNumber - 1,
      local!numberOfNextMonthDaysToAddToEnd: 7 - local!lastDayOfMonthOccursOnDayNumber,
      local!lastMonthDaysToAddToStart: if(
        local!numberOfLastMonthDaysToAddToStart = 0,
        {},
        reverse(
          a!forEach(
            items: 1 + enumerate(local!numberOfLastMonthDaysToAddToStart),
            expression: a!localVariables(
              local!date: local!firstDayOfMonthDate - fv!item,
              {
                date: local!date,
                dayNumberInMonth: day(local!date),
                dayNumberInWeek: weekday(
                  local!date,
                  2
                ),
                dayName: text(local!date, "dddd"),
                inThisMonth: false
              }
            )
          )
        )
      ),
      local!nextMonthDaysToAddToEnd: if(
        local!numberOfNextMonthDaysToAddToEnd = 0,
        {},
        a!forEach(
          items: 1 + enumerate(local!numberOfNextMonthDaysToAddToEnd),
          expression: a!localVariables(
            local!date: local!lastDayOfMonthDate + fv!item,
            {
              date: local!date,
              dayNumberInMonth: day(local!date),
              dayNumberInWeek: weekday(
                local!date,
                2
              ),
              dayName: text(local!date, "dddd"),
              inThisMonth: false
            }
          )
        )
      ),
      local!fullCalendarListOfDays: a!flatten(
        {
          local!lastMonthDaysToAddToStart,
          local!unsortedMonthData,
          local!nextMonthDaysToAddToEnd
        }
      ),
      local!lengthOfFullCalendarListOfDays: if(
        rule!CMN_IsEmpty(local!fullCalendarListOfDays),
        0,
        length(local!fullCalendarListOfDays)
      ),
      local!numberOfCalendarRows: tointeger(local!lengthOfFullCalendarListOfDays/7),
      local!fullCalendarAsArray: a!forEach(
        items: 1 + enumerate(local!numberOfCalendarRows),
        expression: a!localVariables(
          local!calendarRow: index(
            local!fullCalendarListOfDays,
            1 + product(fv!item - 1, 7) + enumerate(7),
            {}
          ),
          a!map(
            monday: index(
              local!calendarRow,
              1,
              {}
            ),
            tuesday: index(
              local!calendarRow,
              2,
              {}
            ),
            wednesday: index(
              local!calendarRow,
              3,
              {}
            ),
            thursday: index(
              local!calendarRow,
              4,
              {}
            ),
            friday: index(
              local!calendarRow,
              5,
              {}
            ),
            saturday: index(
              local!calendarRow,
              6,
              {}
            ),
            sunday: index(
              local!calendarRow,
              7,
              {}
            )
          )
        )
      ),
      {
        /*Read only grid using a!gridField() - Annoying that the number of items HAS to show at the bottom*/
        a!gridField(
          label: concat(
            text(local!today, "mmmm"),
            " ",
            local!year
          ),
          data: local!fullCalendarAsArray,
          columns: a!forEach(
            items: local!namesOfDaysInWeek,
            expression: a!gridColumn(
              label: left(proper(fv!item), 2),
              value: a!localVariables(
                local!dayData: index(
                  fv!row,
                  fv!item,
                  {}
                ),
                local!dayInMonth: index(
                  local!dayData,
                  "dayNumberInMonth",
                  {}
                ),
                local!isInThisMonth: toboolean(
                  index(
                    local!dayData,
                    "inThisMonth",
                    {}
                  )
                ),
                a!richTextDisplayField(
                  value: a!richTextItem(
                    text: local!dayInMonth,
                    style: if(
                      local!isInThisMonth,
                      "STRONG",
                      {
                        "PLAIN",
                        "EMPHASIS"
                      }
                    )
                  )
                )
              ),
              align: "CENTER",
              width: "ICON"
            )
          ),
          spacing: "DENSE"
        ),
        /*Editable grid using a!gridLayout() - Number of items no longer shows at the bottom*/
        a!gridLayout(
          label: concat(
            text(local!today, "mmmm"),
            " ",
            local!year
          ),
          headerCells: a!forEach(
            items: local!namesOfDaysInWeek,
            expression: a!gridLayoutHeaderCell(
              label: left(proper(fv!item), 2),
              align: "CENTER"
            )
          ),
          columnConfigs: a!forEach(
            items: local!namesOfDaysInWeek,
            expression: a!gridLayoutColumnConfig(
              width: "NARROW"
            )
          ),
          rows: a!forEach(
            items: local!fullCalendarAsArray,
            expression: a!localVariables(
              local!calendarRowData: fv!item,
              a!gridRowLayout(
                contents: {
                  a!forEach(
                    items: local!namesOfDaysInWeek,
                    expression: a!localVariables(
                      local!dayData: index(
                        local!calendarRowData,
                        fv!item,
                        {}
                      ),
                      local!dayInMonth: index(
                        local!dayData,
                        "dayNumberInMonth",
                        {}
                      ),
                      local!isInThisMonth: toboolean(
                        index(
                          local!dayData,
                          "inThisMonth",
                          {}
                        )
                      ),
                      a!richTextDisplayField(
                        value: a!richTextItem(
                          text: local!dayInMonth,
                          style: if(
                            local!isInThisMonth,
                            "STRONG",
                            {
                              "PLAIN",
                              "EMPHASIS"
                            }
                          )
                        ),
                        align: "CENTER"
                      )
                    )
                  )
                }
              )
            )
          ),
          /*
          data: local!fullCalendarAsArray,
          columns: a!forEach(
            items: local!namesOfDaysInWeek,
            expression: a!gridColumn(
              label: left(proper(fv!item), 2),
              value: a!localVariables(
                local!dayData: index(
                  fv!row,
                  fv!item,
                  {}
                ),
                local!dayInMonth: index(
                  local!dayData,
                  "dayNumberInMonth",
                  {}
                ),
                local!isInThisMonth: toboolean(
                  index(
                    local!dayData,
                    "inThisMonth",
                    {}
                  )
                ),
                a!richTextDisplayField(
                  value: a!richTextItem(
                    text: local!dayInMonth,
                    style: if(
                      local!isInThisMonth,
                      "STRONG",
                      {
                        "PLAIN",
                        "EMPHASIS"
                      }
                    )
                  )
                )
              ),
              align: "CENTER",
              width: "ICON"
            )
          ),
          */
          spacing: "DENSE"
        ),
        /*Manually created grid using columns and card layouts - Very customizable! Also if using the calendar day as a link you can use the whole card layout as the button*/
        a!localVariables(
          local!headerColor: "#1d3557",
          local!inMonthColor: "#a8dadc",
          local!outOfMonthColor: "#f1faee",
          {
            a!richTextDisplayField(
              labelPosition: "COLLAPSED",
              value: a!richTextItem(
                text: concat(
                  text(local!today, "mmmm"),
                  " ",
                  local!year
                ),
                style: "STRONG"
              ),
              align: "CENTER"
            ),
            a!columnsLayout(
              columns: {
                a!forEach(
                  items: local!namesOfDaysInWeek,
                  expression: a!localVariables(
                    local!labelOfColumn: fv!item,
                    local!columnContents: index(
                      local!fullCalendarAsArray,
                      local!labelOfColumn,
                      {}
                    ),
                    a!columnLayout(
                      contents: {
                        a!cardLayout(
                          contents: {
                            a!richTextDisplayField(
                              labelPosition: "COLLAPSED",
                              value: a!richTextItem(
                                text: left(proper(local!labelOfColumn), 2),
                                style: "STRONG"
                              ),
                              align: "CENTER"
                            )
                          },
                          shape: "ROUNDED",
                          marginBelow: "EVEN_LESS",
                          style: local!headerColor
                        ),
                        a!forEach(
                          items: local!columnContents,
                          expression: a!localVariables(
                            local!dayData: fv!item,
                            local!dayInMonth: index(
                              local!dayData,
                              "dayNumberInMonth",
                              {}
                            ),
                            local!isInThisMonth: toboolean(
                              index(
                                local!dayData,
                                "inThisMonth",
                                {}
                              )
                            ),
                            a!cardLayout(
                              contents: {
                                a!richTextDisplayField(
                                  labelPosition: "COLLAPSED",
                                  value: a!richTextItem(
                                    text: local!dayInMonth,
                                    style: if(
                                      local!isInThisMonth,
                                      "STRONG",
                                      {
                                        "PLAIN",
                                        "EMPHASIS"
                                      }
                                    )
                                  ),
                                  align: "CENTER"
                                )
                              },
                              shape: "ROUNDED",
                              marginBelow: "EVEN_LESS",
                              style: if(
                                local!isInThisMonth,
                                local!inMonthColor,
                                local!outOfMonthColor
                              )
                            )
                          )
                        )
                      },
                      width: "NARROW"
                    )
                  )
                )
              },
              spacing: "DENSE"
            )
          }
        )
      }
    )

  • Hi @ajhick

    May I know what is the content of rule!CMN_IsEmpty(local!fullCalendarListOfDays) in line 128.

    thank you very much

  • Hi @ajhick

    May I know what is the content of rule!CMN_IsEmpty(local!fullCalendarListOfDays) in line 128.

    thank you very much

    Note, this is an older thread so you may not receive a response from the initial participants.

    However, I would guess that this is a simple empty check, hence the 0 return if so.  Try rule!APN_isEmpty() instead.

  • 0
    Certified Lead Developer
    in reply to Chris
    Try rule!APN_isEmpty() instead.

    or these days, a!isNullOrEmpty() will usually be sufficient.

  • or these days, a!isNullOrEmpty() will usually be sufficient.

    For anyone on 21.4+, yep! Slight smile

    ..we gotta get this upgrade rolling.

Reply Children
No Data