Acumatica REST API - Получить массив ролей от Contact / ContactUserInfo - PullRequest
1 голос
/ 04 ноября 2019

Я пытаюсь получить список контактов, которым назначена определенная роль. Если у моего контакта есть роль пользователя «Торговый представитель», то я хотел бы получить все контакты, для которых «Торговый представитель» входит в число их ролей.

Для контекста модель контакта выглядит следующим образом:

{
   id: "7e87d8fc-6d18-4g95-8334-e54b69e2803t",
   ... // additional fields

   UserInfo: { // <-- ContactUserInfo entity
       id: "da1b408e-571c-4896-be61-a02c5f99b1ec",
       ... // additional fields,
       Roles: [] // <-- Roles are stored here as ContactRole entities
   }
} 

Снимок экрана модели контакта в документах API

Что я пробовал такfar:

  1. Согласно Руководству по развитию интеграции (стр. 65) , связанные и подробные сущности должны быть явно указаны в параметре раскрытия, так что я получаюследующее:

    {{site}}/entity/Default/18.200.001/Contact?$expand=UserInfo/Roles

    Однако, это дает мне ошибку:

    Optimization cannot be performed.The following fields cause the error: UserInfo.Roles.RoleDescription: View Roles has BQL delegate.


Итак, я посмотрел на эту проблему BQL Delegate. В соответствии с Acumatica wiki (прокрутите вниз, «Замечания по использованию для конечных точек с версией контракта 3»), есть два решения:

2a. Не используйте эти поля ( не вариант )

2b. Получите проблемные поля по одному. НО я не могу этого сделать, потому что ни конечные точки ContactUserInfo, ни ContactRole не являются объектами верхнего уровня, то есть я не могу сделать HTTP-запрос к этим конечным точкам, даже если у меня есть их идентификаторы,


Поэтому я подумал, что, возможно, я смогу связать массив Roles с объектом Contact вместо объекта ContactUserInfo. Я выполнил действия , описанные здесь в разделе «Добавить связанный объект или объект подробностей к другому объекту» , но когда я перехожу к шагу 4, моя кнопка «Вставить» отключена, и я не могупродолжение.

Я видел где-то поток, который указывал, что, возможно, если бы я выбирал Контакты по одному, а не в виде списка, процесс оптимизации был бы проще, и массив Roles был бы видимым. Поэтому я поймал идентификатор контакта и изменил свой запрос на получение одного контакта вместо списка:

{{site}}/entity/Default/18.200.001/Contact/7e87d8fc-6d18-4g95-8334-e54b69e2803t?$expand=UserInfo

, но теперь по какой-то причине значение UserInfo равно null. Остальные поля такие же, как когда этот Контакт был в списке, поэтому он определенно получает правильные данные, но теперь поле UserInfo имеет значение null?

Спасибо

Надеюсь, одна из моих попыток оказалась на правильном пути. С удовольствием предоставим любую дополнительную информацию по запросу.

1 Ответ

0 голосов
/ 05 ноября 2019

Если вам нужно получить конкретные данные, недоступные на экране, например проблему, с которой вы столкнулись, вы можете создать общий запрос в Acumatica и открыть его через веб-службы.

Мне удалось создатьGI присоединяется к PX.Objects.CR.Contact, PX.SM.Users и PX.SM.UsersInRoles, а затем фильтруется по RoleName, равному Sales Reps (если вы проверяете из схемы, вы можете перейти к роли). Затем добавьте все столбцы, которые вы хотите, в GI, который вы хотите на вашем веб-сервисе. Обязательно установите флажок Видимый в пользовательском интерфейсе общего запроса и проверьте свои данные, посетив созданный ГИ.

Оттуда вы можете следить за блогом Дайаны Коули о том, как разоблачить ГИ через веб-сервисы.

https://www.acumatica.com/blog/contract-based-apis-in-generic-inquiries/

...