Ответ от Acumatica:
API S-b (Screen-base) позволяет легко загружать отчет, сгенерированный в виде файла. C-b (Contract-base) просто не добавляет эту функцию. Я предлагаю вам оставить отзыв здесь: feedback.acumatica.com (РЕДАКТИРОВАТЬ: Готово! https://feedback.acumatica.com/ideas/ACU-I-1852)
Я думаю, что есть несколько обходных путей:
1) использовать s-b, используя логин c-b, чтобы сгенерировать отчет и получить его в виде файла (см. Пример ниже), или
2) создать другой способ удаления файла после загрузки необходимого файла отчета. Для этого вам нужно будет вернуть FileID или что-то еще, чтобы идентифицировать его для удаления.
пример # 1
using (DefaultSoapClient sc = new DefaultSoapClient("DefaultSoap1"))
{
string sharedCookie;
using (new OperationContextScope(sc.InnerChannel))
{
sc.Login("admin", "123", "Company", null, null);
var responseMessageProperty = (HttpResponseMessageProperty)
OperationContext.Current.IncomingMessageProperties[HttpResponseMessageProperty.Name];
sharedCookie = responseMessageProperty.Headers.Get("Set-Cookie");
}
try
{
Screen scr = new Screen(); // add reference to report e.g. http://localhost/Demo2018R2/Soap/SO641010.asmx
scr.CookieContainer = new System.Net.CookieContainer();
scr.CookieContainer.SetCookies(new Uri(scr.Url), sharedCookie);
var schema = scr.GetSchema();
var commands = new Command[]
{
new Value { LinkedCommand = schema.Parameters.OrderType, Value = "SO" },
new Value { LinkedCommand = schema.Parameters.OrderNumber, Value = "SO004425" },
schema.ReportResults.PdfContent
};
var data = scr.Submit(commands);
if(data != null && data.Length > 0)
{
System.IO.File.WriteAllBytes(@"c:\Temp\SalesOrder.pdf",
Convert.FromBase64String(data[0].ReportResults.PdfContent.Value));
}
}
finally
{
sc.Logout();
}
}
Надеюсь, это поможет. Кроме того, было бы неплохо, если бы вы обновили пост-стек на основе этих предложений.
Спасибо
Наян Мансинья
Lead - Поддержка разработчиков | Acumatica