Page tree
Skip to end of metadata
Go to start of metadata

Bazen Ebiflow varsayılan raporları yerine özel ASP.Net raporları oluşturmak gerekebiliyor. Bu şekilde geliştirilen bir rapor içerisinden süreç başlatmak istediğimizde Ebiflow servislerini referans olarak ekleyemiyoruz. Bunun için sayfa içerisinde farklı bir yaklaşım gerekiyor. Aşağıdaki örnekte kullanım şeklini görebilirsiniz.

WebService Sınıfı
public class WebService
    {
        public string Url { get; set; }
        public string MethodName { get; set; }
        public string ProcessId { get; set; }
        public string Year { get; set; }
        public string Month { get; set; }
        public System.Xml.Linq.XDocument ResultXML;
        public string ResultString;

        public WebService()
        {

        }

        public WebService(string url, string methodName)
        {
            Url = url;
            MethodName = methodName;
        }

        /// <summary>
        /// Invokes service
        /// </summary>
        public void Invoke()
        {
            Invoke(true);
        }

        /// <summary>
        /// Invokes service
        /// </summary>
        /// <param name="encode">Added parameters will encode? (default: true)</param>
        public void Invoke(bool encode)
        {
            string soapStr =
                @"<?xml version=""1.0"" encoding=""UTF-8""?>
                    <soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:tem=""http://tempuri.org/"">
                       <soapenv:Header>
                          <tem:ValidationSoapHeader>
                             <!--Optional:-->
                             <tem:User>domain\username</tem:User>
                             <!--Optional:-->
                             <tem:Password>password</tem:Password>
                          </tem:ValidationSoapHeader>
                       </soapenv:Header>
                       <soapenv:Body>
                          <tem:Start>
                             <!--Optional:-->
                             <tem:processId>{0}</tem:processId>
                             <!--Optional:-->
                             <tem:formData><![CDATA[<Yil>{1}</Yil><Ay>{2}</Ay>]]></tem:formData>
                          </tem:Start>
                       </soapenv:Body>
                    </soapenv:Envelope>";

            System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(Url);
            req.Headers.Add("SOAPAction", "http://tempuri.org/Start");
            req.ContentType = "text/xml;charset=\"utf-8\"";
            req.Accept = "text/xml";
            req.Method = "POST";

            using (System.IO.Stream stm = req.GetRequestStream())
            {
                soapStr = string.Format(soapStr, ProcessId, Year,Month);
                using (System.IO.StreamWriter stmw = new System.IO.StreamWriter(stm))
                {
                    stmw.Write(soapStr);
                }
            }

            using (System.IO.StreamReader responseReader = new System.IO.StreamReader(req.GetResponse().GetResponseStream()))
            {
                string result = responseReader.ReadToEnd();
                ResultXML = System.Xml.Linq.XDocument.Parse(result);
                ResultString = result;
            }
        }
    }

Bu kod bloğunu özetlemek gerekirse Ebiflow StartWorkflow.asmx web servisini kullanmak için özelleştrilmiş soap stringi WebRequest ile invoke ediyoruz. SoapStr string içerisinde soapenv:Header node içerisinde  yer alan user ve password bilgileri Ebiflow bağlantı yetkisine sahip bir kullanıcı bilgisi içermelidir.

soapenv:Body içerisinde yer alan tem:Start nodu servis içerisinde yer alan metodun adını içermektedir. Burada biz süreç başlatmak için Start metodunu kullanıyoruz.

tem:processId nodu içerisine başlatmak istediğimiz sürecin process Id bilgisini veriyoruz.

tem:formData nodu içerisine süreçte kullanmak istediğimiz verileri ekliyoruz. Süreç içerisine eklenirken en üst node otomatik olarak serviceData olarak oluşturuluyor ve süreç form verisine ekleniyor. Bunun için süreç form datasını önceden süreç içerisinde tanımlamamak gerekiyor.

Örnek çıktı : 

<serviceData>
	<Yil>2018</Yil>
	<Ay>1</Ay>
</serviceData>

Servisin çağırılması

Servisi artık istediğiniz yerden parametreleri girerek çağırabilirsiniz.

 WebService ws = new WebService("http://localhost/Ebiflow/service/StartWorkflow.asmx", "Start"); // servis adresini ve metot bilgisini girerek bir instance oluşturuyoruz.
 ws.Year = ddlYil.SelectedValue; // Yıl bilgisini kullanıcıdan bir dropdownlist ile alıyoruz.
 ws.Month = ddlAy.SelectedValue; // Ay bilgisini kullanıcıdan bir dropdownlist ile alıyoruz.
 ws.ProcessId = "6BDEF9FC-4843-478F-AF54-DBCD1A8C7F5F"; //Başlatmak istediğimiz sürecin processId bilgisi. Bu bilgiyi veritabanından wflprocess tablosundan bulabiliriz.
 ws.Invoke();

Daha parametrik bir kullanım için aşağıdaki adresi ziyaret edebilirsiniz.

https://stackoverflow.com/questions/9482773/web-service-without-adding-a-reference

 

  • No labels