Это будет очень короткий пост. Я использую пример объекта запросов на обслуживание из облака взаимодействия с оракулом, где для получения SR вы должны сделать запрос REST, например

https://my-server/crmRestApi/resources/latest/serviceRequests

Что генерирует ответ вроде

{
 "items": [
  {
   "Title": "Green Server 1000 : I/O issue",
   "StatusCd": "ORA_SVC_NEW"
  },
  {
   "Title": "Server response very slow",
   "StatusCd": "SVC_ESCALATE"
  },
  {
   "Title": "Monthly Server maintenance ",
   "StatusCd": "ORA_SVC_RESOLVED"
  },
  {
   "Title": "Ultra Z Series accessories needed",
   "StatusCd": "ORA_SVC_INPROGRESS"
  },
  {
   "Title": "Quarterly Server backup",
   "StatusCd": "ORA_SVC_INPROGRESS"
  },
...

Если вы заметили выше, StatusCd на самом деле является поиском. Для ваших мобильных приложений или других пользовательских интерфейсов вам понадобится фактическая метка для этих полей StatusCd. Я видел, как разработчики часто в конечном итоге делают отдельные вызовы дочерней VO-ссылки, что очень плохо сказывается на производительности. Проще говоря, если есть 5 записей, вы в конечном итоге сделаете 1 вызов для всех данных и еще 5 для каждой записи, в результате чего всего 6 вызовов REST только для одного представления. Вот уловка, чтобы справиться с этим. Вместо этого вы можете позвонить, как показано ниже:

https://my-server/crmRestApi/resources/latest/serviceRequests?fields=Title,StatusCd;SrStatusCdLookup:LookupCode,Meaning&onlyData=true

Теперь к вызову добавлено другое поле SrStatusCdLookup:LookupCode,Meaning, которое делает всю магию. Он извлекает всю таблицу поиска в этом ответе, и теперь ваш ответ будет выглядеть так:

{
 "items": [
  {
   "Title": "Green Server 1000 : I/O issue",
   "StatusCd": "ORA_SVC_NEW",
   "SrStatusCdLookup": [
    {
     "LookupCode": "ORA_SVC_NEW",
     "Meaning": "New"
    },
    {
     "LookupCode": "ORA_SVC_INPROGRESS",
     "Meaning": "In Progress"
    },
    {
     "LookupCode": "ORA_SVC_WAITING",
     "Meaning": "Waiting"
    },
    {
     "LookupCode": "ORA_SVC_RESOLVED",
     "Meaning": "Resolved"
    },
    {
     "LookupCode": "SVC_SAVED",
     "Meaning": "Saved"
    },
    {
     "LookupCode": "ORA_SVC_CLOSED",
     "Meaning": "Closed"
    },
    {
     "LookupCode": "SVC_ESCALATE",
     "Meaning": "Escalate"
    }
   ]
  },
  {
   "Title": "Server response very slow",
   "StatusCd": "SVC_ESCALATE",
   "SrStatusCdLookup": [
    {
     "LookupCode": "ORA_SVC_NEW",
     "Meaning": "New"
    },
...

Полезная нагрузка является подробной, но теперь в одном вызове вы также получаете таблицу поиска. На стороне клиента теперь очень просто понять смысл вашего кода.

Следует отметить синтаксис такого вызова. Вы должны убедиться, что каждое из дочерних полей разделено точкой с запятой, а поля одного уровня — запятой. В противном случае это выдаст странные ошибки.