2016-03-18 8 views
1

私はAcumatica APIを使用して、Acumatica 5.20.2067でビジネスアカウントを顧客に変換しようとしています。私が使用しているコードはconverting a Lead to a Business Accountに基づいています。ビジネスアカウントを変換するとダイアログボックスが表示されないため、ビジネスアカウントを顧客に変換する方がリードの変換より簡単です。しかし、私は2つの方法で試しましたが、1つはエラーを生成し、もう1つは既存のビジネスアカウントを変換するのではなく、完全に別の顧客レコードを作成します。ここでは、リードの変換について他のポスト内のコードに基づいてAcumatica API:CR303000.Actions.ConverToCustomerを使用

は私が動作するはずだと思うのコードです:

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 

結果かかわらCR303000SubmitがConverToCustomerアクションで呼び出されたときに、私が得るということですデフォルトの場所の値を参照する次のエラー:)コマンドとして 薄暗いupdateBACommands(= {baKeyVal、CR303000.Actions:

[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 

は、私が試した他の事はCR303000Submit保存アクションを追加するためのコマンドを変更しました.Co nberToCustomer、CR303000.Actions.Save}

これはエラーなしで私にその行を渡しますが、AR303000Submitを呼び出すと、既存のビジネスを変換するのではなく、異なる顧客/ビジネスアカウントIDを持つ個別の顧客レコードが作成されますアカウント。

答えて

0

ここでは二つの問題があります。

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

私は、これはあなたのデータの問題だと思うが。ブラウザでログインし、このビジネスアカウントを手動で確認してください。私はあなたが同じエラーを受け取ると思います。

Convert To Customer action problem

この操作によってリダイレクトが生成されます。それは問題です。しかし、解決策があります:

  • は、新しいカスタマイズプロジェクト
  • を作成
  • Grapth "BusinessAccountMaint" システムを使用して
  • を挿入し、次のコード

    ためGraphExtensionを作成します。 using System.Collections; using Avalara.AvaTax.Adapter.AvaCert2Service; PX.Commonを使用しています。 PX.Dataを使用しています。 PX.Data.EPを使用しています。 PX.Objects.APを使用しています。 PX.Objects.CSを使用しています。 PX.Objects.CTを使用しています。 PX.Objects.SOを使用しています。 PX.SMを使用する ; using System.Collections.Generic; PX.Objectsを使用しています。 PX.Objects.CRを使用しています。

    名前空間PX.Objects。CR { パブリッククラス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(); 
         } 
        } 
    } 
    

    }

  • 保存と公開

  • 再生成サービス参照(WSDL)あなたの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); 
    } 
    
  • このコードはビジネスアカウントをお客様に変換してすぐに保存します