a!localVariables( local!projectdata:rule!totaltimesheet(),
local!projectid, local!updateCounter: 0, local!employee: a!refreshVariable( refreshOnVarChange: local!updateCounter ), { a!dateField( label: "Date", labelPosition :"JUSTIFIED", value: ri!timeline.taskdate, saveInto:ri!timeline.taskdate,
), a!sectionLayout( label: "", contents: { a!gridLayout( /*label: "Grid view of an employee Details",*/ labelPosition: "ABOVE", totalCount: count(ri!timeline), headerCells: { /*a!gridLayoutHeaderCell(label: "Employee Name"),*/ a!gridLayoutHeaderCell(label: "Project Name"), a!gridLayoutHeaderCell(label: "Task Name"), a!gridLayoutHeaderCell(label: "Description"), a!gridLayoutHeaderCell(label: "Hours"), a!gridLayoutHeaderCell(label: "Status"), a!gridLayoutHeaderCell( label: "" )
}, columnConfigs: { /*a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight:2),*/ a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight:2), a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight:2), a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight:2), a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight:2), a!gridLayoutColumnConfig( width: "ICON" ) }, rows: a!forEach( items: ri!timeline, expression:a!gridRowLayout( contents: { /*a!textField(*//* */ /*value: loggedInUser(),*/ /*saveInto: {fv!item.employerName, a!save(ri!timeline.employerName, save!value)},*/ /*refreshAfter: "UNFOCUS",*/ /*required: true,*/ /*readOnly: true *//* *//* */ /*),*/ a!dropdownField( label: "project Name ", placeholderLabel: " ", choiceLabels: rule!CrochetDSR_Get_ProjectName().projectname, choiceValues: rule!CrochetDSR_Get_ProjectName().projectid, value: fv!item.projectid, saveInto: fv!item.projectid, required: true ), /*a!dropdownField(*/ /*label: "task",*/ /*placeholderLabel: " ",*/ /*choiceLabels: rule!CrochetDSR_Get_MilestoneTaskName(projectid:local!projectid).taskname,*/ /*choiceValues: rule!CrochetDSR_Get_MilestoneTaskName(projectid:local!projectid).taskname,*/ /*value: fv!item.taskname,*/ /*saveInto: fv!item.taskname,*//* */ /*required: true*/ /*) ,*/ a!textField( label: "Description ", value: fv!item.taskname, saveInto: fv!item.taskname, required: true ), a!textField( label: "Description ", value: fv!item.description, saveInto: fv!item.description, required: true ), /*a!dateField(*/ /*label: "task date ",*/ /*value: fv!item.taskdate,*/ /*saveInto: fv!item.taskdate,*/ /*required: true */ /*),*/ a!textField( label: "Hours ", value: fv!item.noofhours, saveInto: fv!item.noofhours, required: true ), a!dropdownField( label: "Status ", placeholderLabel: " ", choiceLabels: {"Done","Pending"}, choiceValues: {"Done","Pending"}, value: fv!item.Status, saveInto: fv!item.Status, required: true ), a!imageField( label: "delete " & fv!index, images: a!documentImage( document: a!iconIndicator( "REMOVE" ), altText: "Remove", link: a!dynamicLink( value: fv!index, saveInto: { a!save( ri!timeline, remove( ri!timeline, save!value ) ) } ) ) ) } ) ), /*selectionvalue: ri!selectedRowIndex,*/ /*selectionsaveinto: ri!selectedRowIndex,*/ /*selectable: true,*/ selectionrequired: false, addRowLink: a!dynamicLink( label: "Add Timesheet", saveInto: { a!save( target: ri!timeline, value: append( ri!timeline, 'type!{urn:com:appian:types:DSR}DSR_TimeSheetLineItem'( employerName: loggedInUser(), ) ) ) } ), height: "AUTO", spacing: "DENSE", borderstyle: "STANDARD", rowHeader: 1 ), a!columnsLayout( columns: { a!columnLayout( contents: {} ), a!columnLayout( contents: {} ), a!columnLayout( contents: { a!textField( label: "Total Hours ", labelPosition :"ADJACENT", value: sum(ri!timeline.noofhours), saveInto: {ri!timeline.Totalhours, a!save(ri!timeline.Totalhours, save!value)}, readOnly: true ), } ) } ), a!buttonLayout( primaryButtons: { a!buttonWidgetSubmit( label: "Submit", value: ri!timeline, /*saveInto: {a!save(ri!timeline.timesheetid,ri!pid),*/ /*ri!submitbutton,*/ /*a!writeToDataStoreEntity(*/ /*dataStoreEntity: cons!CROCHETDSR_GET_TIMESHEET,*/ /*valueToStore: ri!timeline,*/ /*)*//**/ /*},*/ showWhen: if( rule!APN_isEmpty1( ri!timeline ), false(), true() ), style: "PRIMARY", confirmHeader: { if( rule!APN_isEmpty1( ri!timeline ), "Please add at least one row", {} ) }, confirmMessage: { if( rule!APN_isEmpty1( ri!timeline ), "Please add at least one row", {} ) } ) }, secondaryButtons: { a!buttonWidget( label: "Cancel", value: true, saveInto: ri!cancel, submit: true, style: "NORMAL", validate: false ) } ) } ), }
)
Discussion posts and replies are publicly visible
I don't think this has anything to do with the sum function. The error above says that it cannot index "taskdate" within the variable ri!timeline. What is the type of your rule input for timeline? Does it have a field called "taskdate"?
its displaying sum functions too
The error here is the same though - it's saying that the property "noofhours" doesn't existing in your rule input. My guess is that your CDT "DSR_TimeSheetLineItem" doesn't have those properties (or maybe they're spelled differently).
no peter i have configured noofhours into the cdt
a!columnsLayout( columns: { a!columnLayout( contents: { a!textField( label: "Total Hours ", labelPosition :"ADJACENT", value: sum(ri!timeline.noofhours), saveInto: {ri!timeline.Totalhours, a!save(ri!timeline.Totalhours, save!value)}, readOnly: true ), } ) } ),
FYI, the "noofhours" field in your CDT is type Text, which is not a valid parameter for the Sum() function.
Ok I think the issue then is that it seems you are trying to directly save a single value into an empty list. In general, you should try to save values one-to-one - if you have a single field where you enter data, it should also save into a single field.
However, what you're doing is saving a single item into a list, so the error is essentially telling you that you can't save it that way.
In general I'm a bit confused as to how your data is set up here. Your date field and the sum fields are both single values, but the other items in the grid are saving multiple values. How do you plan to resolve this? For instance, if you have 3 rows in your grid, what do you expect to be saved for the taskdate and noofhours fields? Would you duplicate the same value for all 3 rows? Or should you have a separate variable that contains only these values?
If your plan is to duplicate the taskdate and noofhours across all rows, I'd suggest a different strategy. You can set up a local variable to initially save the single value for each of those fields. Then, on submission of the form, you can set up a save in the saveInto button that performs a save for each of those fields.
i need to save the task date and noofhours into the total hours and moreover need to display in multiple record as one record with the name of loggeduser
For editable grid i gave cdt in terms of list but i need to save the date and total hours as single item.
Again - on your interface showing the error above, what is the current value of ri!timeline? You didn't include it in your screenshot (or any of the previous screenshots).
error is not removed but value is not saved into cdt
Well, one thing at a time.
ri!timeline is an array - but you're trying to add up all the total hours and save it to one(?) spot. This doesn't exactly line up.
yes i am using array for editable grid
I'm still not clear what your desired outcome is - are you expecting the calculated TotalHours value to be duplicated across all rows of ri!timeline?
Also: as has been explained in a few other threads here recently, the saveInto in a text field will not execute without some user interaction. So there is no reason to believe that having the text field's saveInto set this way would cause the total hours to be saved to any particular location.
actually i need to display in a record type as a how many hours that we spend on each task, so total hours will be must display recordtype.in that case do we need any other cdt?
If it were up to me, I would structure your CDTs differently. You have some values that correspond to the timesheet only, while other values correspond to a row within your grid. I'd suggest splitting up your data into multiple CDTs like this:
Timesheet
id
date
totalHours
TimesheetItem
timesheetId
projectName
taskName
description
status
This allows you to have a 1:M relationship where each timesheet has multiple timesheet items, and it will be easier to maintain the data and save the information correctly on your interface.