खोज…


परिचय

यह विषय अनुबंध-आधारित एपीआई का उपयोग करके एक्यूमैटिक ईआरपी के अंदर एक विस्तार इकाई से जुड़ी फाइलों को डाउनलोड करने का तरीका प्रदर्शित करेगा।

टिप्पणियों

ऊपर कोड स्निपेट Json.NET फ्रेमवर्क ( Newtonsoft.Json.dll ) का उपयोग करके बनाया गया था।

SOAP प्रतिक्रिया से HTTP कुकी हेडर प्राप्त करने के लिए, .Net फ्रेमवर्क System.ServiceModel और System.ServiceModel.Web असेंबली और निम्न 2 के संदर्भ को अपनी कोड फ़ाइल में निर्देशों का उपयोग करके जोड़ें:

using System.ServiceModel;
using System.ServiceModel.Web;

HTTP कुकी हैडर SOAP रिस्पॉन्स से SOAP और REST क्लाइंट द्वारा साझा किया गया

Acumatica के SOAP अनुबंध-आधारित API में एक सीमा है जो केवल एक शीर्ष-स्तरीय इकाई के लिए संलग्नक डाउनलोड करने की अनुमति देता है। GetFiles () विधि का उपयोग करने का कोई भी प्रयास एक विस्तार इकाई के अनुलग्नकों को प्राप्त करने के लिए होगा, दुर्भाग्य से, त्रुटि " स्क्रीन बाइंडिंग के बिना इकाई को शीर्ष स्तर इकाई के रूप में उपयोग नहीं किया जा सकता है। " वेब सेवा समापन बिंदु में परिभाषित स्तर इकाई।

GetFiles () विधि के साथ एक और सीमा यह है कि यह हमेशा एक इकाई से जुड़ी सभी फाइलों की सामग्री को लौटाता है। पहले केवल फ़ाइल नामों को पुनर्प्राप्त करने का कोई विकल्प नहीं है और फिर एक्यूमैटिक से डाउनलोड करने के लिए क्या विशेष फ़ाइल (एस) तय करें।

शुक्र है, अनुबंध-आधारित रीस्ट एपीआई के साथ प्रदान किए गए अनुलग्नकों के साथ काम करने का एक बेहतर और अधिक नियंत्रणीय तरीका है। अनुबंध-आधारित REST API द्वारा निर्यात की गई प्रत्येक इकाई के हिस्से के रूप में लौटाई गई files सरणी में केवल शामिल हैं:

  • फ़ाइल नाम (फ़ाइल नाम संपत्ति)
  • फ़ाइल पहचानकर्ता ( आईडी संपत्ति)
  • हाइपरटेक्स्ट संदर्भ ( href प्रॉपर्टी), जिसका उपयोग बाद में फ़ाइल सामग्री को डाउनलोड करने के लिए किया जा सकता है

वेब सर्विस एंडपॉइंट से किसी भी इकाई से जुड़ी फाइलों की एक सूची प्राप्त करने और कॉन्ट्रैक्ट-बेस्ड रीस्ट एपीआई के लिए विशेष फ़ाइल सामग्री प्राप्त करने के उदाहरण के लिए, कृपया एक्यूमैटिक उत्पाद सहायता की जाँच करें

यदि संपूर्ण एकीकरण परियोजना को SOAP अनुबंध-आधारित API के साथ विकसित किया गया था, तो एक विस्तार इकाई से जुड़ी फ़ाइलों को कैसे डाउनलोड किया जा सकता है? जैसा कि नीचे दिए गए कोड स्निपेट में दिखाया गया है, HTTP कुकी हेडर को SOAP रिस्पॉन्स से REST API क्लाइंट में विशेष रूप से अनुलग्नकों के साथ काम करने के लिए पास करना संभव है:

using (var soapClient = new DefaultSoapClient())
{
    var address = new Uri("http://localhost/AcumaticaERP/entity/Default/6.00.001/");
    CookieContainer cookieContainer;
    using (new OperationContextScope(soapClient.InnerChannel))
    {
        soapClient.Login(login, password, null, null, null);
        string sharedCookie = WebOperationContext.Current.IncomingResponse.Headers["Set-Cookie"];
        cookieContainer = new CookieContainer();
        cookieContainer.SetCookies(address, sharedCookie);
    }
    try
    {
        var shipment = new Shipment()
        {
            ShipmentNbr = new StringSearch { Value = "001301" },
            ReturnBehavior = ReturnBehavior.OnlySpecified
        };
        shipment = soapClient.Get(shipment) as Shipment;

        var restClient = new HttpClient(
            new HttpClientHandler
            {
                UseCookies = true,
                CookieContainer = cookieContainer
            });
        restClient.BaseAddress = address;// new Uri("http://localhost/059678/entity/Default/6.00.001/");

        var res = restClient.GetAsync("Shipment/" + shipment.ID + "?$expand=Packages")
            .Result.EnsureSuccessStatusCode();
        var shipmentWithPackages = res.Content.ReadAsStringAsync().Result;

        JObject jShipment = JObject.Parse(shipmentWithPackages);
        JArray jPackages = jShipment.Value<JArray>("Packages");
        foreach (var jPackage in jPackages)
        {
            JArray jFiles = jPackage.Value<JArray>("files");
            string outputDirectory = ".\\Output\\";
            if (!Directory.Exists(outputDirectory))
            {
                Directory.CreateDirectory(outputDirectory);
            }

            foreach (var jFile in jFiles)
            {
                string fullFileName = jFile.Value<string>("filename");
                string fileName = Path.GetFileName(fullFileName);
                string href = jFile.Value<string>("href");

                res = restClient.GetAsync(href).Result.EnsureSuccessStatusCode();
                byte[] file = res.Content.ReadAsByteArrayAsync().Result;
                System.IO.File.WriteAllBytes(outputDirectory + fileName, file);
            }
        }
    }
    finally
    {
        soapClient.Logout();
    }
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow