Изменение WSDL для добавления параметров в существующий вызов API SOAP - PullRequest
0 голосов
/ 07 января 2020

Я работаю над приложением, использующим Zeep и WSDL для вызова API SOAP. В wsdl есть функция, которая извлекает ~ 15 полей из salesforce, которые позже записываются в файл csv (через python). Мне нужно добавить несколько полей к этому запросу.

Есть ли способ проверить все доступные поля из API? Соответствующий комплексный тип выглядит примерно так:

 <xsd:complexType name="All_Fields">
  <xsd:sequence>
   <xsd:element name="FIELD_1" minOccurs="0" type="xsd:string" nillable="true"/>
   <xsd:element name="FIELD_2" minOccurs="0" type="xsd:string" nillable="true"/>
   <xsd:element name="FIELD_3" minOccurs="0" type="xsd:string" nillable="true"/>
   ...     

Выходной CSV имеет эти 3 поля. Если я добавлю эту строку в мой wsdl под Field_3, в моем csv появится новый столбец с именем Field_4, но это пустой столбец

<xsd:element name="FIELD_4" minOccurs="0" type="xsd:string" nillable="true"/>

На данный момент я не знаю точных имен обязательные поля Нужно ли мне это знать или есть способ получить список всех полей, возвращаемых в ответе API? На данный момент мне сказали, что в Salesforce существуют новые поля (хотя я не вижу их в WSDL)

Если я полностью на неправильном пути, пожалуйста, сообщите, можно ли это сделать с моей стороны - изменение файлов python / xml, или, если нужно изменить api salesforce.

У меня есть targetNamespace в верхней части файла и soap: адрес в конце

targetNamespace="http://soap.sforce.com/schemas/class/MY_API_NAME" 
soap:address location="https://MYPROJECT.my.salesforce.com/services/Soap/class/MY_API_NAME"

Можно ли использовать эти ссылки для поиска возвращаемых данных? Точно так же можно использовать эти ссылки для просмотра всех доступных параметров и т. Д. c.?

1 Ответ

0 голосов
/ 10 января 2020

Это не настоящий ответ, слишком много кусочков для комментария ...

Администратор Salesforce может просто дать вам новый документ WSDL с новыми полями. Вы можете отредактировать его самостоятельно, но это работает, и для них достаточно всего лишь нескольких кликов для создания нового. Вам нужно имя поля, true - но также и тип;)

Здесь есть 2-й уровень, SF API работают на основе "необходимости знать". Вы, вероятно, получили имя пользователя и пароль для подключения к SF. «Профиль» этого пользователя должен позволять вам просматривать / редактировать таблицы и столбцы базы данных, в противном случае вы получите ошибки, даже если угадаете правильное имя поля.

Я не знаю, что именно вы делаете. Вы вызываете стандартный API-интерфейс salesforce (создаете запрос самостоятельно) или они предоставили вам пользовательский веб-сервис (вы упомянули, что в этом файле WSDL есть класс?).

Если вы вызываете стандартные API-интерфейсы (необработанный запрос, Создайте, удалите и т.д. c вызовы), тогда, безусловно, есть вызовы " описать ", которые дадут вам информацию о том, какие таблицы и столбцы вы видите. Они должны быть перечислены в том WSDL или, может быть, ваша библиотека Python уже реализовала их, что сэкономило бы вам XML крафт. Я ничего не знаю о Zeep, извините. Я слышал, что https://pypi.org/project/simple-salesforce/ хорошо документирован и прост в использовании, имеет встроенные описания вызовов, но использует REST API, а не SOAP ...

(файлы Salesforce WSDL входят в «Enterprise» и «Partner». Enterprise означает, что все таблицы и столбцы перечислены, но вы хотите увидеть новое поле, которое вам нужно, чтобы сгенерировать fre sh WSDL и снова использовать его в своем приложении. «Partner» содержит только эти общие c вызывает, так что во время выполнения вы проверяете, какие есть таблицы, какие поля, типы ... Хорошо подходит для написания универсальных решений для резервного копирования c или приложений, которые могут подключаться к любому SF в мире. Похоже, вы получили корпоративный WSDL - но он по-прежнему будет содержать эти вызовы generi c, вы можете использовать их при необходимости)

Если вы вызываете пользовательский класс Apex, предоставляемый в качестве веб-службы, тогда хорошо - люди SF должны изменить этот код, чтобы вы могли увидеть больше полей в ответе. Не так много, что вы можете сделать со своей стороны. Если вы решите, что маршрут REST намного проще для вас, тогда пользовательский SF-код должен быть представлен немного по-другому, им придется прочитать о this

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

...