//protected void Page_Load(object sender, EventArgs e)
        //{
        //    //try
        //    //{
        //    //    //if (IsPostBack == false)
        //    //    //{
        //    //        Ctx ctx = Session["ctx"] as Ctx;
        //    //        string title = Convert.ToString(Request.QueryString["title"]);
        //    //        int AD_Process_ID = Convert.ToInt32(Request.QueryString["pid"]);
        //    //        int AD_Table_ID = Convert.ToInt32(Request.QueryString["tid"]);
        //    //        int Record_ID = Convert.ToInt32(Request.QueryString["rid"]);
        //    //        int AD_PInstance_ID = Convert.ToInt32(Request.QueryString["aid"]);
        //    //        VAdvantage.ProcessEngine.ProcessInfo pi = new VAdvantage.ProcessEngine.ProcessInfo(title, AD_Process_ID, AD_Table_ID, Record_ID);
        //    //        pi.SetAD_PInstance_ID(AD_PInstance_ID);
        //    //        CrystalReportEngine cr = new CrystalReportEngine(ctx, pi);
        //    //        rd = cr.GetReportDocument();
        //    //        CrystalReportViewer1.ReportSource = rd;
        //    //    //}
        //    //    //else {
        //    //    //    CrystalReportViewer1.ReportSource = (ReportDocument)Session["Repr"];
        //    //    //}
        //    //}
        //    //catch (Exception ex)
        //    //{
        //    //    log.SaveError("", ex.Message);
        //    //}

        //}

        protected void Page_Init(object sender, EventArgs e)
        {
            try
            {
                //if (IsPostBack == false)
                //{
                Ctx    ctx             = Session["ctx"] as Ctx;
                string title           = Convert.ToString(Request.QueryString["title"]);
                int    AD_Process_ID   = Convert.ToInt32(Request.QueryString["pid"]);
                int    AD_Table_ID     = Convert.ToInt32(Request.QueryString["tid"]);
                int    Record_ID       = Convert.ToInt32(Request.QueryString["rid"]);
                int    AD_PInstance_ID = Convert.ToInt32(Request.QueryString["aid"]);
                VAdvantage.ProcessEngine.ProcessInfo pi = new VAdvantage.ProcessEngine.ProcessInfo(title, AD_Process_ID, AD_Table_ID, Record_ID);
                pi.SetAD_PInstance_ID(AD_PInstance_ID);
                CrystalReportEngine cr = new CrystalReportEngine(ctx, pi);
                rd = cr.GetReportDocument();
                CrystalReportViewer1.ReportSource = rd;
                //}
                //else {
                //    CrystalReportViewer1.ReportSource = (ReportDocument)Session["Repr"];
                //}
            }
            catch (Exception ex)
            {
                log.SaveError("", ex.Message);
            }
        }
        /// <summary>
        /// Load report parameter string from VA039 module.
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="reportID"></param>
        /// <param name="AD_PInstance_ID"></param>
        /// <param name="pi"></param>
        /// <returns></returns>
        public string GetReportParameters(Ctx ctx, int reportID, int AD_PInstance_ID, VAdvantage.ProcessEngine.ProcessInfo pi)
        {
            object result = null;

            Assembly assem = Assembly.Load("VA039");
            Type     type  = assem.GetType("VA039.Classes.Common");

            if (type != null)
            {
                var        o          = Activator.CreateInstance(type);
                MethodInfo methodInfo = type.GetMethod("GetReportParameterString", new Type[] { typeof(Ctx), typeof(int), typeof(int), typeof(VAdvantage.ProcessEngine.ProcessInfo) });
                object[]   param      = new object[4];
                param[0] = ctx;
                param[1] = reportID;
                param[2] = AD_PInstance_ID;
                param[3] = pi;
                result   = methodInfo.Invoke(o, param);
            }
            return(result.ToString());
        }
        /// <summary>
        /// Generates a url of report with parameters.
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="log"></param>
        /// <param name="pi"></param>
        /// <returns></returns>
        public string GetReportString(Ctx ctx, VLogger log, VAdvantage.ProcessEngine.ProcessInfo pi)
        {
            string        reportFilePath = "";
            List <string> result         = GetUserBILogin(ctx, log);
            int           outvalue       = 0;

            // check if return result returned by login is token or interger. If int value then show respective message.
            if (!int.TryParse(result[0], out outvalue))
            {
                object biRepID = DB.ExecuteScalar("SELECT VA039_BIREPORTID FROM AD_PRocess where AD_Process_ID=" + pi.GetAD_Process_ID());

                int rID = GetReportID(ctx, biRepID.ToString());

                string filters = GetReportParameters(ctx, rID, pi.GetAD_PInstance_ID(), pi);
                reportFilePath = result[1] + "JsAPI?clientOrg=" + MClient.Get(ctx).GetValue() + "&reportUUID=" + biRepID + "&token=" + result[0] + "&showFilters=false&showInfo=false" + filters;
            }
            else
            {
                if (outvalue == 1)
                {
                    reportFilePath = Msg.GetMsg(ctx, "VA037_BIToolMembership");
                }
                else if (outvalue == 2)
                {
                    reportFilePath = Msg.GetMsg(ctx, "VA037_BIUrlNotFound");
                }
                else if (outvalue == 3)
                {
                    reportFilePath = Msg.GetMsg(ctx, "VA037_NotBIUser");
                }
                else if (outvalue == 4)
                {
                    reportFilePath = Msg.GetMsg(ctx, "VA037_BICallingError");
                }
            }
            return(reportFilePath);
        }