2016-03-18 4 views
1

Ich versuche, die Acumatica API zu verwenden, um ein Geschäftskonto zu einem Kunden auf Acumatica 5.20.2067 zu konvertieren. Der Code, den ich verwende, basiert auf converting a Lead to a Business Account. Das Konvertieren eines Geschäftskontos in einen Kunden scheint einfacher zu sein als das Konvertieren eines Leads, da beim Konvertieren eines Geschäftskontos kein Dialogfeld angezeigt wird. Ich habe es jedoch auf zwei Arten versucht, und einer erzeugt einen Fehler und der andere erstellt einen vollständig separaten Kundendatensatz, anstatt das bestehende Geschäftskonto zu konvertieren.Acumatica API: CR303000.Actions.ConverToCustomer

Basierend auf den Code in den anderen Post über einen Lead-Konvertierung, hier ist der Code, den ich denke, funktionieren sollte:

Public Function ConvertBusinessAccountToCustomer(ByVal baID As String, ByVal firstName As String, ByVal LastName As String) 
    Dim CR303000 As CR303000Content = m_context.CR303000GetSchema() 
    m_context.CR303000Clear() 
    Dim AR303000 As AR303000Content = m_context.AR303000GetSchema() 
    m_context.AR303000Clear() 

    ' call the Action to convert the BA to a Customer 
    Dim baKeyVal As Value = CreateValue(CR303000.AccountSummary.BusinessAccount, baID) 
    Dim updateBACommands As Command() = {baKeyVal, CR303000.Actions.ConverToCustomer} 
    Dim updateBaResult As CR303000Content() = m_context.CR303000Submit(updateBACommands) 

    ' just like with Lead, the Customer record now needs to be saved 
    ' add other fields required for Customer 
    Dim customerNameVal As Value = CreateValue(AR303000.CustomerSummary.CustomerName, CreateCustomerFullName(firstName, LastName)) 
    Dim classVal As Value = CreateValue(AR303000.GeneralInfoFinancialSettings.CustomerClass, "DEFAULT") 
    Dim statementCycleVal As Value = CreateValue(AR303000.GeneralInfoFinancialSettings.StatementCycleID, "ENDOFMONTH") 
    Dim statementTypeVal As Value = CreateValue(AR303000.BillingSettingsPrintAndEmailSettings.StatementType, "Open Item") 
    Dim cashDiscountAccountVal As Value = CreateValue(AR303000.GLAccountsCashDiscountAccount.CashDiscountAccount, "10103") 
    Dim creditVerificationVal As Value = CreateValue(AR303000.GeneralInfoCreditVerificationRulesCreditVerification.CreditVerification, "Disabled") 
    Dim commandsCustomer As Command() = 
     { 
      customerNameVal, classVal, statementCycleVal, statementTypeVal, cashDiscountAccountVal, creditVerificationVal, 
      AR303000.Actions.Save, 
      AR303000.CustomerSummary.CustomerID 
     } 
    Dim newCustomerContent As AR303000Content() = m_context.AR303000Submit(commandsCustomer) 
    Dim newCustomerID As String = "" 
    If newCustomerContent.Length > 0 Then 
     ' this should be exact same as the newBAID, this is just for debugging 
     newCustomerID = newCustomerContent(0).CustomerSummary.CustomerID.Value 
    End If 
    Return newCustomerID 
End Function 

Das Ergebnis ist aber, dass, wenn CR303000Submit mit dem ConverToCustomer Aktion aufgerufen wird, bekomme ich der folgende Fehler in dem Standardverzeichnis Wert verweisen:

[SoapException: System.Web.Services.Protocols.SoapException: Server was unable to process request. 
---> PX.Data.PXFieldValueProcessingException: Error: An error occurred while processing the field Default Location value 15497 Error: Default Location '15497' cannot be found in the system.. --->  PX.Data.PXSetPropertyException: Error: DefLocationID '15497' cannot be found in the system. 
at PX.Data.PXSelectorAttribute.throwNoItem(String[] restricted, Boolean external, Object value) 
at PX.Data.PXSelectorAttribute.FieldVerifying(PXCache sender, PXFieldVerifyingEventArgs e) 
at PX.Data.PXCache.OnFieldVerifying(String name, Object row, Object& newValue, Boolean externalCall) 
at PX.Data.PXCache`1.a(TNode& A_0) 
--- End of inner exception stack trace --- 
at PX.Data.PXCache`1.Insert(Object data, Boolean bypassinterceptor) 
at PX.Data.PXCache`1.Insert(Object data, Boolean bypassinterceptor) 
at PX.Data.PXCache`1.Insert(Object data) 
at PX.Data.PXCache`1.Extend[Parent](Parent item) 
at PX.Objects.CR.BusinessAccountMaint.ConverToCustomer(PXAdapter adapter) 
at PX.Data.PXAction`1.a(PXAdapter A_0) 
at PX.Data.PXAction`1.<Press>d__c.MoveNext() 
at PX.Data.PXAction`1.<Press>d__c.MoveNext() 
at PX.Api.SyImportProcessor.SyStep.CommitChanges(Object itemToBypass, PXFilterRow[] targetConditions, PXFilterRow[] filtersForAction) 
at PX.Api.SyImportProcessor.ExportTableHelper.ExportTable() 
at PX.Api.ScreenUtils.Submit(String screenId, Command[] commands, SchemaMode schemaMode, PXGraph& graph, String& redirectContainerView, String& redirectScreen, Boolean mobile, Dictionary`2 viewFilters) 
at PX.Api.Services.ScreenService.Submit(String id, IEnumerable`1 commands, SchemaMode schemaMode, Boolean mobile, PXGraph& forceGraph, String& redirectContainerView, String& redirectScreen, Dictionary`2 viewFilters) 
at PX.Api.Services.ScreenService.Submit(String id, IEnumerable`1 commands, SchemaMode schemaMode) 
at PX.Api.Soap.Screen.ScreenGate.Submit(Command[] commands) 
--- End of inner exception stack trace ---] 
      System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724 

Source Error 
Line 1555:  <System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.acumatica.com/generic/CR303000/Submit", RequestNamespace:="http://www.acumatica.com/generic/", ResponseNamespace:="http://www.acumatica.com/generic/", Use:=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)> _ 
Line 1556:  Public Function CR303000Submit(ByVal commands() As Command) As <System.Xml.Serialization.XmlArrayAttribute("SubmitResult"), System.Xml.Serialization.XmlArrayItemAttribute("Content")> CR303000Content() 
Line 1557:   Dim results() As Object = Me.Invoke("CR303000Submit", New Object() {commands}) 
Line 1558:   Return CType(results(0),CR303000Content()) 
Line 1559:  End Function 

die andere Sache, ich war versucht, die Befehle zu ändern, für die CR303000Submit einer Save Aktion hinzuzufügen: Dim updateBACommands Als Befehl() = {baKeyVal, CR303000.Actions .Co nverToCustomer, CR303000.Actions.Save}

Das bringt mich über diese Zeile ohne einen Fehler, aber dann, wenn ich das AR303000Submit aufrufen, erstellt es nur einen separaten Kundendatensatz mit einer anderen Customer/Business Account ID als das vorhandene Business konvertieren Konto.

Antwort

0

Es gibt zwei Probleme:

An error occurred while processing the field Default Location value 15497 Error: Default Location '15497' cannot be found in the system.

Ich denke, das Ihre Daten Problem. Loggen Sie sich mit dem Browser ein und überprüfen Sie dieses Business-Konto manuell. Ich denke, Sie werden denselben Fehler erhalten.

Convert To Customer action problem

Diese Aktion erzeugt Redirect. Es ist ein Problem. Aber es gibt eine Lösung:

  • Neue Anpassung Projekt
  • erstellen GraphExtension für Grapth "BusinessAccountMaint"
  • Insert nächster Code

    using Systems; mit System.Collections; mit Avalara.AvaTax.Adapter.AvaCert2Service; mit PX.Common; mit PX.Data; mit PX.Data.EP; mit PX.Objects.AP; mit PX.Objects.CS; mit PX.Objects.CT; mit PX.Objects.SO; mit PX.SM; mit System.Collections.Generic; mit PX.Objects; mit PX.Objects.CR;

    Namespace PX.Objects.CR { public class BusinessAccountMaint_Extension: PXGraphExtension {

    public PXAction<BAccount> convertToCustomerAndSave; 
    
        // hidden action. Used in API calls 
        [PXUIField(DisplayName = "Convert To Customer And Save", Visible = false, MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)] 
        [PXButton(ImageKey = PX.Web.UI.Sprite.Main.Process)] 
        public virtual IEnumerable ConvertToCustomerAndSave(PXAdapter adapter) 
        { 
         try 
         { 
          return Base.ConverToCustomer(adapter); 
         } 
         catch (PXRedirectRequiredException e) // catch redirect exception 
         { 
          (e.Graph as AR.CustomerMaint).Save.Press(); // Save our new customer 
    
          return adapter.Get(); 
         } 
        } 
    } 
    

    }

  • Speichern und Veröffentlichen

  • Regenerieren Service Referenzen (WSDL)
  • Verwenden Sie neue Aktion in Ihrem Cade

    static void Main(string[] args) 
    { 
        var client = new ScreenSoapClient(); 
    
        client.Login("admin", "123"); 
    
        var baSchema = client.CR303000GetSchema(); 
    
        var commands = new Command[] 
        { 
         new Value 
         { 
          Value = "MAURICES", 
          LinkedCommand = baSchema.AccountSummary.BusinessAccount 
         }, 
         baSchema.Actions.ConvertToCustomerAndSave // use our new action instead of default 
        }; 
    
        client.CR303000Submit(commands); 
    } 
    
  • Mit diesem Code wird das Geschäftskonto in den Kunden konvertiert und sofort gespeichert.