«Денежный счет» не может быть пустым - PullRequest
0 голосов
/ 06 февраля 2019

При попытке создать нового клиента с помощью REST API он выдает следующее исключение, когда PUT в конечной точке https://my.site/entity/Default/17.200.001/Customer

PX.Data.PXException: Error:  'Cash Account' cannot be empty.

PX.Data.PXOuterException: Error: Inserting 'Customer Payment Method' record raised at least one error. Please review the errors. 

at PX.Data.PXUIFieldAttribute.CommandPreparing(PXCache sender, PXCommandPreparingEventArgs e) 
at PX.Data.PXCache.OnCommandPreparing(String name, Object row, Object value, PXDBOperation operation, Type table, FieldDescription& description) 
at PX.Data.PXTableAttribute.PrepareParametersForInsert(PXCache sender, Object row, Type[] tables, ISqlDialect dialect, Boolean audit, List`1[] pars) 
at PX.Data.PXTableAttribute.PersistInserted(PXCache sender, Object row) 
at PX.Data.PXCache`1.PersistInserted(Object row) 
at PX.Data.PXCache`1.Persist(PXDBOperation operation) 
at PX.Data.PXGraph.Persist(Type cacheType, PXDBOperation operation) 
at PX.Data.PXGraph.Persist() 
at PX.Objects.CR.BusinessAccountGraphBase`3.Persist() 
at PX.Objects.AR.CustomerMaint.Persist() 
at PX.Data.PXSave`1.d__2.MoveNext() 
at PX.Data.PXAction`1.d__31.MoveNext() 
at PX.Data.PXAction`1.d__31.MoveNext() 
at PX.Api.SyImportProcessor.SyStep.a(Object A_0, PXFilterRow[] A_1, PXFilterRow[] A_2) 
at PX.Api.SyImportProcessor.ExportTableHelper.ExportTable()

JSON, который я использую для создания клиента:

{
    "CustomerID": {
        "value": "ABCD1234"
    },
    "CustomerName": {
        "value": "TEST CUSTOMER"
    },
    "CustomerClass": {
        "value": "01"
    },
    "StatementCycleId": {
        "value": "01"
    },
    "ShippingAddressSameAsMain": {
        "value": true
    },
    "CashAccount": {
        "value": "BANAMEXMN"
    },
    "MainContact": {
        "DisplayName": {
            "value": "TEST CUSTOMER"
        },
        "Email": {
            "value": "a@b.com"
        },
        "Address": {
            "AddressLine1": {
                "value": "Test test"
            },
            "AddressLine2": {
                "value": "Test test"
            },
            "City": {
                "value": "Monterrey"
            },
            "State": {
                "value": "NL"
            },
            "PostalCode": {
                "value": "00300"
            },
            "Country": {
                "value": "MX"
            }
        }
    }
}

Я смотрел на экран «Конечные точки», но не могу найти атрибут CashAccount в определении «Клиент».Единственное место, где я нашел его, находится под Customer Payment Method, но это было бы для создания нового метода, а не для добавления метода к клиенту.

1 Ответ

0 голосов
/ 07 февраля 2019

Для веб-служб REST:

Вам необходимо расширить конечную точку, чтобы добавить поле денежного счета: enter image description here

Затем выберитесущность PaymentInstructions в представлении дерева левой панели и щелкните «Расширить сущность», затем «Заполнить»: enter image description here

Откроется всплывающее окно, откуда можно добавить поле денежного счета: enter image description here

Наконец, когда вы вызываете веб-службу, измените имя конечной точки «По умолчанию» в URL на имя, которое вы выбрали для расширенной конечной точки: enter image description here

Пример:

http://domain/virtual_directory/entity/DefaultPlus/

вместо:

http://domain/virtual_directory/entity/Default/

Для веб-служб экрана:

Использование Help->Web Service->Service Descriptionчтобы найти поля:

enter image description here

enter image description here

Откроется описание веб-службы XML, гдеВы можете увидеть, какое поле может быть передано с помощью JSON: enter image description here

Обратите внимание, что контейнер поля называется BillingSettingsDefaultPaymentMethod, что соответствует имени вкладки и группового поля.Поле CashAccount расположено:

enter image description here

Шаблон JSON для передачи поля в группу BillingSettingsDefaultPaymentMethod такой же, как вы ужеиспользуя для MainContact.Обратите внимание, что он заполняет только MainContact, но не создает новый контакт.То же самое относится к группе способов оплаты по умолчанию, она не создает новый способ оплаты, она только заполняет поля «Настройки биллинга» в полях группы «Способ оплаты по умолчанию».

Поле CashAccount в вашем запросе находится сверхуобъект уровня (Customer / BAccount) вместо того, чтобы находиться в группе BillingSettingsDefaultPaymentMethod.Я подозреваю, что это не существует на том уровне, поэтому вы должны удалить его.Чтобы убедиться, что он не существует, посмотрите ответ JSON, в ответе следует опустить недопустимые поля.Он делает это тихо, не вызывая ошибки.

...