Поиск по шаблону в фильтре экспорта Acumatica SOAP API

Я пытаюсь использовать веб-службы Acumatica для «экспорта» с экрана CR302000 (Организация> Управление клиентами> Контакты).

Используя фильтр с условием FilterCondition.Contain, я могу ограничить результаты только теми, у которых поле Phone1 содержит определенную строку.

Теперь я хочу, чтобы номер телефона, по которому я выполняю фильтрацию, содержал подстановочный знак. В веб-интерфейсе работает подстановочный знак%. Но при использовании веб-сервисов это не работает (строки не возвращаются).

Мой фильтр:

Filter[] filters = new Filter[]
{
    new Filter()
    {
        Field = new Field()
        {
            FieldName = context.DetailsContact.Phone1.FieldName,
            ObjectName = context.DetailsContact.Phone1.ObjectName
        },
        Condition = FilterCondition.Contain,
        Operator = FilterOperator.And,
        Value = "283%9534"
    }
}

Что становится таким в запросе SOAP:

<Filter>
    <Field>
        <FieldName>Phone1</FieldName>
        <ObjectName>ContactCurrent: 1</ObjectName>
    </Field>
    <Condition>Contain</Condition>
    <Value xsi:type="xsd:string">283%9534</Value>
    <OpenBrackets>0</OpenBrackets>
    <CloseBrackets>0</CloseBrackets>
    <Operator>And</Operator>
</Filter>

Кто-нибудь знает, можно ли добиться фильтрации с помощью подстановочных знаков с помощью API веб-служб?

Обновление. Подстановочный знак% почти работает, если я не добавляю команду ContactSummary.ServiceCommands.EveryContactID. Он возвращает ровно один результат, соответствующий поиску с подстановочными знаками. Но мне нужны все совпадающие результаты, поэтому я включаю EveryContactID

Обновление 2: подстановочный знак отлично подходит для экрана CR301000 (Leads) с командой LeadSummary.ServiceCommands.EveryLeadID. Это ошибка CR302000?

Обновление 3: резюмируя беседу в комментариях к принятому ответу, CR301 и CR302 должны иметь возможность фильтровать по контактному телефону с подстановочным знаком, но из-за какой-то неизвестной ошибки CR302 не может использовать подстановочные знаки. .


person tjleigh    schedule 13.04.2015    source источник


Ответы (1)


Это происходит из-за того, что вы пытаетесь отфильтровать поле, которое не является частью основного представления. В CR301000 (Leads) контакт является основным представлением, поэтому ваш фильтр работает. Подробнее об этом можно прочитать здесь: Использование фильтра с клиентом экран в Acumatica API

person Gabriel    schedule 12.06.2015
comment
Вы имеете в виду, что если фильтруемое поле не является частью основного представления, я не могу использовать подстановочные знаки? - person tjleigh; 12.06.2015
comment
Это не имеет ничего общего с подстановочными знаками; вы не можете фильтровать это поле так, как пытаетесь это сделать. Представьте себе заказ на продажу, у которого есть заголовок и подробная сетка. Вы можете установить фильтр для любого поля в заголовке, но фильтры, которые вы установили в строках деталей заказа на продажу, не будут применяться к первичному выбору; применяется только после выбора основного вида, а это не то, что вам нужно. Решение состоит в том, чтобы создать общий запрос и использовать GI через веб-службы; сделайте свой GI в таблице контактов ... - person Gabriel; 12.06.2015
comment
@tjleigh ты с QGate? Сегодня утром я ответил на аналогичный запрос по электронной почте. - person Gabriel; 12.06.2015
comment
Хорошо я понял. Странно то, что это не соответствует тому поведению, которое я видел. Как я уже сказал в вопросе, фильтр «Контейнер» работал отлично, когда не было подстановочного знака. Только при использовании подстановочного знака он сломался. Может, я ошибся ... (PS, надеюсь, в понедельник увижу твое письмо, спасибо) - person tjleigh; 13.06.2015
comment
@tjleigh у вас есть образец, который показывает работу фильтрации при использовании FilterCondition.Equals на DetailsMainContact.Phone1? В моих тестах он вернет все бизнес-аккаунты, но номер телефона будет пустым для всех, кроме того, который соответствует фильтру ... - person Gabriel; 15.06.2015
comment
@tjleigh в этом коде используется экран «Контакты» (CR302000) - здесь нет проблем, поскольку запись контакта является основным представлением. CR303000 - это проблема, на этом BAccount является основным представлением, а основной контакт - это связь 1: 1 между BAccount и контактом. - person Gabriel; 15.06.2015
comment
Мне удалось воспроизвести это локально, но на данный момент у меня нет объяснения, почему это работает в одном случае, но не работает в другом. Ясно одно: запрос, который отправляется на SQL Server, имеет двойные подстановочные знаки, что показывает, что система добавляет за вас% при использовании FilterCondition.Contain, поэтому вы никогда не должны помещать его туда вручную. - person Gabriel; 17.06.2015
comment
@tjleigh Действительно есть несоответствие / ошибка с подстановочными знаками - он работает с обычными экранами, но не с веб-службами поверх общих запросов. Мы нашли обходной путь - определите поле Parameter в GI и установите в нем значение для фильтрации. Ошибка будет зарегистрирована и решена. - person Gabriel; 30.06.2015