In Short: Company.GetServiceLayerConnectionContext(BaseUri); throws Exception "General Failure"
SAP B1 10.00.120 PL02 for SQL
Service Layer is installed and can be reached via Postman
My Intention: Reading the Businesspartner Object from Servicelayer in a Desktop (C#) AddOnContext
I was following the Instructions in this article: https://blogs.sap.com/2016/07/01/sap-business-one-service-layer-sso-with-ui-api/
BaseUri is set to "https://qsc-mobile:50000/b1s/v1/"
Stacktrace:
Exception thrown: 'System.Runtime.InteropServices.COMException' in VisECommerceAddOn.dll General Failure bei SAPbouiCOM.CompanyClass.GetServiceLayerConnectionContext(String inConnParam) bei VisECommerceAddOn.Logic.ServiceLayer.PrepareRequest(String method, String path, Object content) in D:\dev\VIS2\SAPAddOns\4.0\VisECommerceAddOn\VisECommerceAddOn\Logic\ServiceLayer.cs:Zeile 60. bei VisECommerceAddOn.Logic.ServiceLayer.GetBusinessPartner(String cardCode) in D:\dev\VIS2\SAPAddOns\4.0\VisECommerceAddOn\VisECommerceAddOn\Logic\ServiceLayer.cs:Zeile 32. bei VisECommerceAddOn.Logic.BPUpload.UploadShopBps(List`1 contactsToUpload, ShopModel shop) in D:\dev\VIS2\SAPAddOns\4.0\VisECommerceAddOn\VisECommerceAddOn\Logic\BPUpload.cs:Zeile 59. bei VisECommerceAddOn.Frontend.BPManagement.BPManagementForm.UploadBtn_Click(Object sender, EventArgs e) in D:\dev\VIS2\SAPAddOns\4.0\VisECommerceAddOn\VisECommerceAddOn\Frontend\BPManagement\BPManagementForm.cs:Zeile 497.
public class ServiceLayer { private Company Company; private string BaseUri; public ServiceLayer(string baseUri) { Company = SwissAddonFramework.B1Connector.GetB1Connector().Application.Company; BaseUri = baseUri; } public BusinessPartner GetBusinessPartner(string cardCode) { var path = $"BusinessPartners('{cardCode}')"; var req = PrepareRequest("GET", path); var resp = req.GetResponse() as HttpWebResponse; var result = ReadResponse<BusinessPartner>(resp); return result; } private T ReadResponse<T>(HttpWebResponse response) where T : class { T result = null; using (var stream = response.GetResponseStream()) { using (var streamReader = new StreamReader(stream)) { var content = streamReader.ReadToEnd(); if (response.ContentType != JsonContentType) { throw new WrongContentTypeException(); } result = JsonConvert.DeserializeObject<T>(content); } } response.Close(); return result; } private const string JsonContentType = "application/json"; private HttpWebRequest PrepareRequest(string method, string path, object content = null) { var cookies = Company.GetServiceLayerConnectionContext(BaseUri); path = path.StartsWith("/") ? path.Substring(1) : path; var requestUri = BaseUri + path; var request = WebRequest.Create(requestUri) as HttpWebRequest; request.Method = method; if (content != null) { request.ContentType = JsonContentType; using var stream = request.GetRequestStream(); using var streamWriter = new StreamWriter(stream); var json = JsonConvert.SerializeObject(content); streamWriter.Write(json); } request.CookieContainer = new CookieContainer(); string[] cookieItems = cookies.Split(';'); foreach (var cookieItem in cookieItems) { string[] parts = cookieItem.Split('='); if (parts.Length == 2) { request.CookieContainer.Add(request.RequestUri, new Cookie(parts[0].Trim(), parts[1].Trim())); } } return request; } }
Is there a Logfile I could consult for more information about this bug/ behaviour?
Best Regards
Quentin Schär