Загрузка вложения в Salesforce с использованием SOAP API C # - PullRequest
1 голос
/ 09 апреля 2019

Мне нужно программно загрузить файлы PDF в существующие записи Salesforce с помощью API C # SOAP.

Я видел этот вопрос , а также множество других, но все, что я нашел, либо не решило мою проблему, либо связано с другим языком или API REST. Вся информация по API CAP SOAP, которую я могу найти, использует объект Attachment , которого, похоже, нет в API. Я использую партнерский WSDL и правильно добавил его в качестве веб-ссылки на свой проект.

Существует объект EmailFileAttachment , но его невозможно преобразовать в sObject для сохранения в записи Salesforce.

Это код, который у меня есть на данный момент, и я могу очень просто обновлять поля данных.

// Login
var Binding = new SforceService();
var loginResult = Binding.login("Username", "Password");
Binding.Url = loginResult.serverUrl;
Binding.SessionHeaderValue = new SessionHeader();
Binding.SessionHeaderValue.sessionId = loginResult.sessionId;

// Create sObject, update data
var obj = new sObject();
obj.type = "tableName";
obj.Id = "objId";

var document = new XmlDocument();
var nodeList = new List<XmlElement>();

var dataNode = document.CreateElement("fieldName");
dataNode.InnerText = "fieldValue";
nodeList.Add(dataNode);

obj.Any = nodeList.ToArray();

// Save data
sObject[] objArray = { obj };
var saveResults = Binding.update(objArray);

Однако я не могу использовать Вложение или EmailFileAttachment . Вложение не существует в известном мне пространстве имен Salesforce API. EmailFileAttachment имеет все правильные поля, которые мне нужны, но не может быть преобразован в sObject , поэтому я предполагаю, что это неправильный объект, который я использую, или что я использовать его неправильно.

// The type or namespace 'Attachment' could not be found.
//var attachment = new Attachment;

var attachment = new EmailFileAttachment();
attachment.id = "objId";
attachment.fileName = "filename.pdf";
attachment.body = fileData; // fileData is byte[]

// Cannot implicitely convert EmailFileAttachment to sObject.
var objArray = new sObject[] { attachment };

Я что-то упустил, чтобы можно было использовать Вложение , или есть другой способ сделать это?

Редактировать: я использую Salesforce C # SOAP API v45.0

<ч />

РЕДАКТИРОВАТЬ: В соответствии с ответом superfell я загрузил файл как sObject, который работал отлично. Единственное условие состоит в том, что вложение должно быть создано как новый объект Salesforce и связано с исходным объектом через поле ParentId . Вот рабочий код ниже

var atObj = new sObject();

// Set type as "Attachment"
atObj.type = "Attachment";

var document = new XmlDocument();
var nodeList = new List<XmlElement>();

// Set Filename
var nameNode = document.CreateElement("Name");
nameNode.InnerText = "testfile.pdf";
nodeList.Add(nameNode);

// Set ParentId - this is the object id you want to link the attachment to
var idNode = document.CreateElement("ParentId");
idNode.InnerText = "objId";
nodeList.Add(idNode);

// Set File Data - use Base64 string conversion
string encoded = Convert.ToBase64String(fileData); // fileData is byte[]
var dataNode = document.CreateElement("Body");
dataNode.InnerText = encoded;
nodeList.Add(dataNode);

atObj.Any = nodeList.ToArray();
sObject[] objArray = { atObj };

// Use create(), not update()
var saveResults = Binding.create(objArray);

1 Ответ

1 голос
/ 09 апреля 2019

Партнерский API включает только общее определение SObject, ни один из конкретных типов SObject.(поскольку ожидается, что партнеры захотят написать код один раз и динамически адаптировать его к схеме пользователя).Вам нужно будет либо создать экземпляр SObject партнера для своего вложения, либо переключиться на корпоративный WSDL, который будет иметь конкретный класс Attachment, который вы ищете.Смотрите [1] для получения подробной информации о том, как SObjects выглядят в партнерском API.В C # есть пример для партнерского API для создания экземпляра SObject в [2]. Вы должны иметь возможность изменить это для создания вложения вместо контакта.

[1] https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_partner_objects.htm

[2] https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sample_create_call.htm#topic-title

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...