2017-11-17 2 views
-1

Hallo Ich habe eine Routine erstellt, um zwei Systeme zu verbinden: XXXXWIN10 das ist ein lokales System mit Acumatica. Das XXXWIN10-System muss Informationen über den Kundenauftrag an Acumatica senden. Ich verwende den Bildschirm-Webservice, um einen Kundenauftrag anzulegen. Wenn ich den Code ausprobiere, kann jedes Mal, wenn ich diese KundenID erhalte, nicht leer sein, aber ich sende alle Informationen und auch der Kunde existiert. Haben Sie etwas falsch in meinem Code zu sehen:Erstellen SO über Webservice sagt customerID existiert nicht

using System; 
using System.Net.Security; 
using System.Net; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 
using Conexionspa.apitest; 
using System.Globalization; 

namespace Conexionspa 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string CVECLI = ""; 
      string CVEORDEN = ""; 
      string FEC_ORDEN = ""; 
      string DESCUENTO = ""; 
      string CVESERVI = ""; 
      string CANTIDAD = ""; 
      decimal QTY = 0; 
      string PIEZAS = ""; 
      string CAPA_REQ = ""; 
      string CAPA_OBT = ""; 
      string KILOS = ""; 
      string TIPO_ACERO = ""; 
      string RECIPIENTE = ""; 
      string DUREZA_OBT = ""; 
      string FEC_PROMES = ""; 
      string PRECIOME = ""; 
      decimal PRECIO = 0; 
      string IMPORTE = ""; 
      string PORPIEZA = ""; 
      string MONEDA = ""; 
      string TIPOCAMBIO = ""; 
      string PLANTA = ""; 
      string conexion = @"Data Source = XXXXWIN10,2433; Initial Catalog = SYSXXXX; User ID = sa; Password = XXXYYYZZZ"; 
      string queryString = "SELECT CVECLI, CVEORDEN, FEC_ORDEN, DESCUENTO, CVESERVI, CANTIDAD, PIEZAS, CAPA_REQ, CAPA_OBT, KILOS, TIPO_ACERO, RECIPIENTE, DUREZA_OBT, FEC_PROMES, PRECIOME, IMPORTE, PORPIEZA, MONEDA, TIPOCAMBIO, PLANTA FROM [Ordenes de Trabajo] WHERE STATUS = 2"; 
      SqlConnection conection = new SqlConnection(conexion); 
      try 
      { 
       conection.Open(); 
       SqlDataReader leeordenes = null; 
       SqlCommand Command = new SqlCommand(queryString, conection); 
       leeordenes = Command.ExecuteReader(); 
       while (leeordenes.Read()) 
       { 
        CVECLI = leeordenes["CVECLI"].ToString(); 
        CVEORDEN = leeordenes["CVEORDEN"].ToString(); 
        FEC_ORDEN = leeordenes["FEC_ORDEN"].ToString(); 
        DateTime FECORDEN = DateTime.Parse(FEC_ORDEN); 
        DESCUENTO = leeordenes["DESCUENTO"].ToString(); 
        CVESERVI = leeordenes["CVESERVI"].ToString(); 
        CANTIDAD = leeordenes["CANTIDAD"].ToString(); 
        decimal.TryParse(CANTIDAD, out QTY); 
        PIEZAS = leeordenes["PIEZAS"].ToString(); 
        CAPA_REQ = leeordenes["CAPA_REQ"].ToString(); 
        CAPA_OBT = leeordenes["CAPA_OBT"].ToString(); 
        KILOS = leeordenes["KILOS"].ToString(); 
        TIPO_ACERO = leeordenes["TIPO_ACERO"].ToString(); 
        RECIPIENTE = leeordenes["RECIPIENTE"].ToString(); 
        DUREZA_OBT = leeordenes["DUREZA_OBT"].ToString(); 
        FEC_PROMES = leeordenes["FEC_PROMES"].ToString(); 
        DateTime FECPROMES = DateTime.Parse(FEC_PROMES); 
        PRECIOME = leeordenes["PRECIOME"].ToString(); 
        decimal.TryParse(PRECIOME, out PRECIO); 
        IMPORTE = leeordenes["IMPORTE"].ToString(); 
        PORPIEZA = leeordenes["PORPIEZA"].ToString(); 
        MONEDA = leeordenes["MONEDA"].ToString(); 
        TIPOCAMBIO = leeordenes["TIPOCAMBIO"].ToString(); 
        PLANTA = leeordenes["PLANTA"].ToString(); 

        apitest.Screen context = new apitest.Screen(); 
        context.CookieContainer = new CookieContainer(); 
        context.AllowAutoRedirect = true; 
        context.EnableDecompression = true; 
        context.Timeout = 1000000; 
        context.Url = "http://localhost/XXXYYY/Soap/APITEST.asmx"; 
        try 
        { 
         LoginResult result = context.Login("[email protected]:P000", "AdminXXX"); 
        } 
        catch(Exception ep) 
        { 
         Console.WriteLine("Error en las credenciales" + ep.Message); 
        } 
        try 
        { 
         SO301000Content SO301000 = context.SO301000GetSchema(); 
         context.SO301000Clear(); 

         SO301000Content[] SO301000result = context.SO301000Submit 
          (
           new Command[] 
           { 
            new Value { Value = "SO", LinkedCommand = SO301000.OrderSummary.OrderType }, 
            new Value { Value = "TADEO", LinkedCommand = SO301000.OrderSummary.Customer }, 
            new Value { Value = "0000007", LinkedCommand = SO301000.OrderSummary.OrderNbr }, 
            new Value { Value = CVEORDEN, LinkedCommand = SO301000.OrderSummary.ExternalReference }, 
            new Value { Value = FEC_ORDEN, LinkedCommand = SO301000.OrderSummary.Date }, 
            new Value { Value = CVESERVI, LinkedCommand = SO301000.DocumentDetails.InventoryID }, 
            new Value { Value = CANTIDAD, LinkedCommand = SO301000.DocumentDetails.Quantity }, 
            new Value { Value = PIEZAS, LinkedCommand = SO301000.OrderSummary.Description }, 
            new Value { Value = CAPA_REQ + " " + CAPA_OBT + " " + KILOS + " " + TIPO_ACERO + " " + RECIPIENTE + " " + DUREZA_OBT, LinkedCommand = SO301000.DocumentDetails.LineDescription }, 
            new Value { Value = FEC_ORDEN, LinkedCommand = SO301000.OrderSummary.RequestedOn }, 
            new Value { Value = PRECIOME, LinkedCommand = SO301000.DocumentDetails.UnitPrice, Commit = true }, 
            new Value { Value = "NA", LinkedCommand = SO301000.DocumentDetails.UOM }, 
            new Value { Value = "USD", LinkedCommand = SO301000.OrderSummary.Currency }, 
            new Value { Value = "AP3", LinkedCommand = SO301000.DocumentDetails.Warehouse }, 

            SO301000.Actions.Save, 
           } 
          ); 
         Console.WriteLine("Orden registrada"); 
         Thread.Sleep(9000); 
        } 
        catch(Exception ex) 
        { 
         Console.WriteLine("Error al insertar O.T en Acumatica: " + ex.Message); 
         Thread.Sleep(5000); 
        } 
       } 
      } 
      catch (Exception mensaje) 
      { 
       Console.WriteLine("Error en las credenciales del SPA ó Acumatica Web Service: " + mensaje); 
       Thread.Sleep(5000); 
      } 
     } 
    } 
} 
+0

Versuch gesetzt hinzufügen Commit = true nach Ihrer customerid. new Value {Wert = "TADEO", LinkedCommand = SO301000.OrderSummary.Customer, Commit = true}, – Hybridzz

+0

Vielen Dank für Ihren Kommentar. Ich könnte es lösen. – Clan

Antwort

0

Soweit ich weiß, sollten Sie zuerst Auftragsart und Auftragsnummer, und erst dann werden alle anderen Felder, dh

new Command[] 
{ 
    new Value { Value = "SO", LinkedCommand = SO301000.OrderSummary.OrderType }, 
    new Value { Value = "0000007", LinkedCommand = SO301000.OrderSummary.OrderNbr }, 
    new Value { Value = "TADEO", LinkedCommand = SO301000.OrderSummary.Customer }, 
    //rest of fields 
    SO301000.Actions.Save, 
} 
+0

Vielen Dank für Ihren Kommentar, Bestellung ist wichtig und ich könnte es lösen – Clan

Verwandte Themen