AnsweredAssumed Answered

Adding Element with ElementTemplate

Question asked by norman_soriano on Mar 22, 2018
Latest reply on Mar 22, 2018 by norman_soriano

Hi to all!


I am just a newbie in PI Web API. I just want to ask how can I add new Elements with Element template? I am trying to make it with my code below but i always get

The remote server returned an error: (409) Conflict. error.


public JsonResult CreateElement()


            var url = "https://" + serverName + "/piwebapi/elements/" + GetReportsWebID() + "/elements";

            string postData = "{ 'Name': 'Report 2','Description': 'System Insert Report','TemplateName': 'Report Template','CategoryNames': ['Report Components']}";

            int statusCode = -1;


            MakePostRequest(url, postData, out statusCode);

            return Json(statusCode, JsonRequestBehavior.AllowGet);




internal static void MakePostRequest(string url, string postData, out int statusCode)


            ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

            WebRequest request = WebRequest.Create(url);



            //Kerberos Authentication Only

            //request.UseDefaultCredentials = true;



            //Basic and Kerberos Authentication

            request.Credentials = new NetworkCredential(userName, password);


            ((HttpWebRequest)request).UserAgent = ".NET Framework Example Client";


            //The method is "GET" by default.

            request.Method = "POST";


            //If the content-type is not specified as application/json, your post request won't work.

            request.ContentType = "application/json";


            //The content length should be present on the request header.

            byte[] byteArray = Encoding.UTF8.GetBytes(postData);

            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();

            dataStream.Write(byteArray, 0, byteArray.Length);



            //Get the response to make sure the value was sent.

            WebResponse response = request.GetResponse();


            //The StatusCode property is available only if the WebRequest object is converted to HttpWebRequest

            //The StatusCode will confirm that the operation was executed successfully.

            statusCode = Convert.ToInt32(((System.Net.HttpWebResponse)(response)).StatusCode);



Hoping for your positive response.

Thank you very Much!