Acumatica REST API SalesInvoice

时间:2017-08-01 13:05:02

标签: c# webforms acumatica

我正在尝试通过Acumatica ERP的REST API创建销售订单和发票。 出于某种原因,我只是因为我使用几乎相同的JSON来创建发票而出现错误:

这是我的RestService:

public class RestService : IDisposable
{
    private readonly HttpClient _httpClient;

    private readonly string _acumaticaBaseUrl;

    #region Ctor
    public RestService(string acumaticaBaseUrl, string userName, string password, string company, string branch, string locale)
    {
        _acumaticaBaseUrl = acumaticaBaseUrl;
        _httpClient = new HttpClient(
            new HttpClientHandler
            {
                UseCookies = true,
                CookieContainer = new CookieContainer()
            })
        {
            BaseAddress = new Uri(acumaticaBaseUrl + "/entity/Default/6.00.001/"),
            DefaultRequestHeaders =
            {
                Accept = {MediaTypeWithQualityHeaderValue.Parse("text/json") }
            }
        };

        //Log in to Acumatica ERP
        _httpClient.PostAsJsonAsync(
          acumaticaBaseUrl + "/entity/auth/login", new
          {
              name = userName,
              password = password,
              company = company,
              branch = branch,
              locale = locale
          }).Result
            .EnsureSuccessStatusCode();
    }



    void IDisposable.Dispose()
    {
        _httpClient.PostAsync(_acumaticaBaseUrl + "/entity/auth/logout",
          new ByteArrayContent(new byte[0])).Wait();
        _httpClient.Dispose();
    }
    #endregion
    //Data submission
    public string Put(string entityName, string parameters, string entity)
    {
        var res = _httpClient.PutAsync(_acumaticaBaseUrl + "/entity/Default/6.00.001/" + entityName + "?" + parameters, new StringContent(entity, Encoding.UTF8, "application/json")).Result
            .EnsureSuccessStatusCode();
        return res.Content.ReadAsStringAsync().Result;
    }
}

这是主要代码:

using (RestService service = new RestService(ACUMATICA_INSTANCE_URL, USERNAME,PASSWORD,COMPANY, "", "EN-US"))
{
    Console.WriteLine("Login successful");

    string order = @"{  
        ""OrderNbr"":{ value: ""000204"" },
        ""CustomerID"":{ value: ""TESTCST005""},
        ""Details"": [ 
        {
            ""InventoryID"": { value: ""301CMPST02"" },
            ""Quantity"": { value: 10 }
        }]
    }";
    string invoice = @"{  
        ""ReferenceNbr"":{ value: ""001032"" },
        ""CustomerID"":{ value: ""TESTCST005""},
        ""Details"": [ 
        {
            ""InventoryID"": { value: ""DESIGN"" },
            ""Quantity"": { value: 10 }
        }]
    }";

    try
    {
        Console.WriteLine("Trying to create the following Order");
        Console.WriteLine(order);
        string updatedOrder = service.Put("SalesOrder", null, order);
        Console.WriteLine("Order created successful");
        Console.WriteLine(updatedOrder);

        Console.WriteLine("Trying to create the following Invoice");
        Console.WriteLine(invoice);
        string updatedInvoice = service.Put("SalesInvoice", null, invoice);
        Console.WriteLine("Invoice created successful");
        Console.WriteLine(updatedInvoice);
    }
    catch(Exception exc)
    {
        Console.WriteLine(exc.Message);
    }
    Console.ReadLine();
}

我无法找出问题所在。我得到的回应总是如下:

  

“StatusCode:500,ReasonPhrase:'内部服务器错误',版本:1.1,内容:System.Net.Http.StreamContent,标题:\ r \ n {\ r \ n X-Handled-By:Acumatica-PX .Export / AuthenticationManagerModule \ r \ n Cache-Control:private \ r \ n Set-Cookie:Locale = TimeZone = GMTM0500G& Culture = en-US; path = / \ r \ n Set-Cookie:UserBranch = 5; path = / \ r \ n服务器:Microsoft-IIS / 8.5 \ r \ n X-Powered-By:ASP.NET \ r \ n日期:2017年8月2日星期三13:02:49 GMT \ r \ n内容长度: 36 \ r \ n Content-Type:text / json; charset = utf-8 \ r \ n}“

我可以使用这些相同的值添加屏幕发票。 以下是使用Acumatica ERP REST API创建客户的示例 Creation of a Record

2 个答案:

答案 0 :(得分:0)

我没有你的" PostAsJsonAsync"函数,所以我不得不恢复到Acumatica提供的文档中使用的方法,并使用以下内容:

string credentialsAsString = JsonConvert.SerializeObject(new
{
    name = userName,
    password = password,
    //company = Properties.Settings.Default.CompanyName,
    //branch = Properties.Settings.Default.Branch
});

var response = _httpClient.PostAsync(acumaticaBaseUrl + "/entity/auth/login", new StringContent(credentialsAsString, Encoding.UTF8, "application/json")).Result;

但是,一旦我这样做,我发现的唯一错误是JSON结构错误。 您忘记将值关键字放在双引号之间。

这:

string order = @"{  
    ""OrderNbr"":{ value: ""000204"" },
    ""CustomerID"":{ value: ""TESTCST005""},
    ""Details"": [ 
    {
        ""InventoryID"": { value: ""301CMPST02"" },
        ""Quantity"": { value: 10 }
    }]
}";

应该由此纠正:

string order = @"{  
    ""OrderNbr"":{ ""value"": ""000204"" },
    ""CustomerID"":{ ""value"": ""TESTCST005""},
    ""Details"": [ 
    {
        ""InventoryID"": { ""value"": ""301CMPST02"" },
        ""Quantity"": { ""value"": 10 }
    }]
}";

答案 1 :(得分:0)

我遇到了同样的问题并解决了。

问题是客户“ TESTCST005”在系统中不存在。 您需要创建一个新客户:)