Создание рабочего объекта в строке расписания Project Server с помощью ошибки REST API - PullRequest
0 голосов
/ 13 февраля 2020

, поэтому я пытаюсь создать мобильное приложение, которое использует REST API сервера проекта 2013. Целью здесь является редактирование каждой отдельной строки в определенном расписании, включая удаление и добавление объекта. Проблема заключается в том, что я хочу создать «рабочий» объект в любой день, который не был установлен в PWA с использованием этого метода POST,

https://myweb.com/PWA/_api/ProjectServer/TimeSheetPeriods ('mytimesheetId') / Расписание / Линии ('choosenlineId') / Работа / Добавить

с этим телом,

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

Я получу это сообщение об ошибке,

{
    "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)"
        }
    }
}

Я думаю, что это имеет какое-то отношение к самому Project Server 2013, поскольку введенный в тело параметр уже соответствует запросу метода Add (). У кого-нибудь есть идеи?

Заранее спасибо

1 Ответ

0 голосов
/ 27 февраля 2020

Я нашел решение. API REST работает нормально, но чтобы вызвать его с помощью метода POST, необходимо передать все необходимые параметры, иначе он выдаст эту ошибку.

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