ms-projectms-project-server-2013ms-project-server-2010

Create Work Object in Project Server Timesheet Line using REST API Error


so I try to build mobile app that consumes project server 2013 REST API. The goal here is to edit each individual line in a certain timesheet, including delete and add an object. The problem is if I want to make a 'work' object at any day that hasn't been set in PWA using this POST Method,

https://myweb.com/PWA/_api/ProjectServer/TimeSheetPeriods('mytimesheetId')/TimeSheet/Lines('choosenlineId')/Work/Add

with this body,

{
    "parameters": {
        "End":"2020-02-10T23:59:59",
        "Start":"2020-02-11T00:00:00",
        "ActualWork": "8h",
                "Comment": null,
                "NonBillableWork": "0h",
                "OvertimeWork": "0h",
                "PlannedWork": "0h"
        }
}

I will get this error message,

{
    "error": {
        "code": "42, Microsoft.ProjectServer.PJClientCallableException",
        "message": {
            "lang": "en-US",
            "value": "PJClientCallableException: GeneralUnhandledException\r\nGeneralUnhandledException\r\nException = System.InvalidCastException: Cannot cast DBNull.Value to type 'System.Decimal'. Please use a nullable type.\r\n   at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value)\r\n   at Microsoft.Office.Project.Server.BusinessLayer.Timesheet.<ApplyChanges>b__c0(ActualsRow actualsRow)\r\n   at Microsoft.Office.Project.Server.Library.PSUtility.Apply[T](IEnumerable`1 enumerable, Action`1 fn)\r\n   at Microsoft.Office.Project.Server.BusinessLayer.Timesheet.ApplyChanges(TimesheetDataSet changes)\r\n   at Microsoft.Office.Project.Server.BusinessLayer.TimeSheet.UpdateTimesheet(Guid tsUID, TimesheetDataSet timesheetDS)\r\n   at Microsoft.Office.Project.Server.BusinessLayer.TimeSheet.QueueUpdateTimesheet(Guid jobUID, Guid tsUID, TimesheetDataSet dsDelta)\r\n   at Microsoft.Office.Project.Server.Wcf.Implementation.TimeSheetImpl.<>c__DisplayClass31.<QueueUpdateTimesheet>b__30()\r\n   at Microsoft.Office.Project.Server.Wcf.Implementation.WcfMethodInvocation.InvokeBusinessObjectMethod(String businessObjectName, String methodName, IEnumerable`1 actions)"
        }
    }
}

I think this has something to do with the Project Server 2013 itself since the parameter I input in the body is already as requested by Add() method. Does anyone have an idea?

Thank you in advance


Solution

  • I found the solution. The REST API works fine, but in order to call it using POST Method you have to pass all of the parameters needed or it will give you those error.

    'parameters': {
            'ActualWork':'value', 
            'Comment':'value', 
            'End':'value', 
            'NonBillableOvertimeWork':'value', 
            'NonBillableWork':'value', 
            'OvertimeWork':'value', 
            'PlannedWork':'value', 
            'Start':'value'     
        }