Мне нужно программно загрузить файлы 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);