|
@@ -451,7 +451,7 @@ namespace wispro.sp.utility
|
|
return retObject;
|
|
return retObject;
|
|
}
|
|
}
|
|
|
|
|
|
- public static dynamic GetPerformanceRecord(string caseNo, List<string> doItemNames, string caseStage = null)
|
|
|
|
|
|
+ public static dynamic GetPerformanceRecord(string caseNo, List<string> doItemNames)
|
|
{
|
|
{
|
|
string strFileSavePath = ConfigHelper.GetSectionValue("IPEasySetting:DownloadFileSavePath");
|
|
string strFileSavePath = ConfigHelper.GetSectionValue("IPEasySetting:DownloadFileSavePath");
|
|
bool isheadless = (ConfigHelper.GetSectionValue("IPEasySetting:isHeadless") == "true");
|
|
bool isheadless = (ConfigHelper.GetSectionValue("IPEasySetting:isHeadless") == "true");
|
|
@@ -564,61 +564,51 @@ namespace wispro.sp.utility
|
|
|
|
|
|
driver.SwitchTo().ParentFrame().SwitchTo().Frame(2);
|
|
driver.SwitchTo().ParentFrame().SwitchTo().Frame(2);
|
|
IWebElement temDoItemLink = null;
|
|
IWebElement temDoItemLink = null;
|
|
|
|
+ string temFinishedDate = "";
|
|
foreach (string doItemName in doItemNames)
|
|
foreach (string doItemName in doItemNames)
|
|
{
|
|
{
|
|
var DoItemLinks = driver.FindElements(By.XPath($"//td[@colname='ctrl_proc'][normalize-space()='{doItemName}']"));
|
|
var DoItemLinks = driver.FindElements(By.XPath($"//td[@colname='ctrl_proc'][normalize-space()='{doItemName}']"));
|
|
if (DoItemLinks.Count > 0)
|
|
if (DoItemLinks.Count > 0)
|
|
{
|
|
{
|
|
- if (!string.IsNullOrEmpty(caseStage))
|
|
|
|
|
|
+
|
|
|
|
+ var DoItemLink = DoItemLinks[DoItemLinks.Count - 1];
|
|
|
|
+
|
|
|
|
+ if (string.IsNullOrEmpty(temFinishedDate))
|
|
{
|
|
{
|
|
- foreach (var DoItemLink in DoItemLinks)
|
|
|
|
- {
|
|
|
|
- var temCaseStage = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text;
|
|
|
|
- if (temCaseStage == caseStage)
|
|
|
|
- {
|
|
|
|
- retObject.CaseStage = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text; //案件阶段
|
|
|
|
- retObject.DoItemState = DoItemLink.FindElement(By.XPath("following-sibling::td[2]")).Text; //处理事项处理状态
|
|
|
|
- retObject.InternalDate = DoItemLink.FindElement(By.XPath("following-sibling::td[4]")).Text; //内部期限
|
|
|
|
- retObject.CustomerLimitDate = DoItemLink.FindElement(By.XPath("following-sibling::td[5]")).Text; //客户期限
|
|
|
|
- retObject.FinishedDate = DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text; //处理事项完成日
|
|
|
|
- retObject.DoPersons = DoItemLink.FindElement(By.XPath("following-sibling::td[8]")).Text; //处理人
|
|
|
|
- retObject.DoItemMemo = DoItemLink.FindElement(By.XPath("following-sibling::td[9]")).Text; //处理事项备注
|
|
|
|
- retObject.Reviewer = DoItemLink.FindElement(By.XPath("following-sibling::td[10]")).Text; //核稿人
|
|
|
|
-
|
|
|
|
- System.Threading.Thread.Sleep(4000);
|
|
|
|
- temDoItemLink = DoItemLink;
|
|
|
|
- //driver.ExecuteJavaScript("$(arguments[0]).click()", DoItemLink);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ temFinishedDate = DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text;
|
|
|
|
+ temDoItemLink = DoItemLink;
|
|
|
|
+
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- var DoItemLink = DoItemLinks[DoItemLinks.Count - 1];
|
|
|
|
- retObject.CaseStage = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text; //案件阶段
|
|
|
|
- retObject.DoItemState = DoItemLink.FindElement(By.XPath("following-sibling::td[2]")).Text; //处理事项处理状态
|
|
|
|
- retObject.InternalDate = DoItemLink.FindElement(By.XPath("following-sibling::td[4]")).Text; //内部期限
|
|
|
|
- retObject.CustomerLimitDate = DoItemLink.FindElement(By.XPath("following-sibling::td[5]")).Text; //客户期限
|
|
|
|
- retObject.FinishedDate = DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text; //处理事项完成日
|
|
|
|
- retObject.DoPersons = DoItemLink.FindElement(By.XPath("following-sibling::td[8]")).Text; //处理人
|
|
|
|
- retObject.DoItemMemo = DoItemLink.FindElement(By.XPath("following-sibling::td[9]")).Text; //处理事项备注
|
|
|
|
- retObject.Reviewer = DoItemLink.FindElement(By.XPath("following-sibling::td[10]")).Text; //核稿人
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+ if (DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text.CompareTo(temFinishedDate) > 0)
|
|
|
|
+ {
|
|
|
|
+ temFinishedDate = DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text;
|
|
|
|
+ temDoItemLink = DoItemLink;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- temDoItemLink = DoItemLink;
|
|
|
|
- //new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(DoItemLink)).Click();
|
|
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ //new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(DoItemLink)).Click();
|
|
|
|
|
|
- retObject.DoItem = doItemName;
|
|
|
|
- break;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if(temDoItemLink != null)
|
|
if(temDoItemLink != null)
|
|
{
|
|
{
|
|
|
|
+ retObject.CaseStage = temDoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text; //案件阶段
|
|
|
|
+ retObject.DoItemState = temDoItemLink.FindElement(By.XPath("following-sibling::td[2]")).Text; //处理事项处理状态
|
|
|
|
+ retObject.InternalDate = temDoItemLink.FindElement(By.XPath("following-sibling::td[4]")).Text; //内部期限
|
|
|
|
+ retObject.CustomerLimitDate = temDoItemLink.FindElement(By.XPath("following-sibling::td[5]")).Text; //客户期限
|
|
|
|
+ retObject.FinishedDate = temDoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text; //处理事项完成日
|
|
|
|
+ retObject.DoPersons = temDoItemLink.FindElement(By.XPath("following-sibling::td[8]")).Text; //处理人
|
|
|
|
+ retObject.DoItemMemo = temDoItemLink.FindElement(By.XPath("following-sibling::td[9]")).Text; //处理事项备注
|
|
|
|
+ retObject.Reviewer = temDoItemLink.FindElement(By.XPath("following-sibling::td[10]")).Text; //核稿人
|
|
|
|
+
|
|
|
|
+ retObject.DoItem = temDoItemLink.Text;
|
|
|
|
+
|
|
|
|
+ //temDoItemLink = DoItemLink;
|
|
System.Threading.Thread.Sleep(4000);
|
|
System.Threading.Thread.Sleep(4000);
|
|
temDoItemLink.Click();
|
|
temDoItemLink.Click();
|
|
}
|
|
}
|
|
@@ -709,6 +699,10 @@ namespace wispro.sp.utility
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
public static dynamic GetPerformanceRecord(string caseNo,string doItemName,string caseStage=null)
|
|
public static dynamic GetPerformanceRecord(string caseNo,string doItemName,string caseStage=null)
|
|
{
|
|
{
|
|
|
|
+ if (caseNo.StartsWith("APCN"))
|
|
|
|
+ {
|
|
|
|
+ return GetAPCNPerformanceRecord(caseNo, doItemName, caseStage);
|
|
|
|
+ }
|
|
string strFileSavePath = ConfigHelper.GetSectionValue("IPEasySetting:DownloadFileSavePath");
|
|
string strFileSavePath = ConfigHelper.GetSectionValue("IPEasySetting:DownloadFileSavePath");
|
|
bool isheadless = (ConfigHelper.GetSectionValue("IPEasySetting:isHeadless") == "true");
|
|
bool isheadless = (ConfigHelper.GetSectionValue("IPEasySetting:isHeadless") == "true");
|
|
string Account = ConfigHelper.GetSectionValue("IPEasySetting:Account");
|
|
string Account = ConfigHelper.GetSectionValue("IPEasySetting:Account");
|
|
@@ -939,6 +933,238 @@ namespace wispro.sp.utility
|
|
return retObject;
|
|
return retObject;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private static dynamic GetAPCNPerformanceRecord(string caseNo, string doItemName, string caseStage = null)
|
|
|
|
+ {
|
|
|
|
+ string strFileSavePath = ConfigHelper.GetSectionValue("IPEasySetting:DownloadFileSavePath");
|
|
|
|
+ bool isheadless = (ConfigHelper.GetSectionValue("IPEasySetting:isHeadless") == "true");
|
|
|
|
+ string Account = ConfigHelper.GetSectionValue("IPEasySetting:Account");
|
|
|
|
+ string Password = ConfigHelper.GetSectionValue("IPEasySetting:Password");
|
|
|
|
+
|
|
|
|
+ OpenQA.Selenium.Chrome.ChromeOptions options = new OpenQA.Selenium.Chrome.ChromeOptions();
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ options.AddUserProfilePreference("download.default_directory", strFileSavePath);
|
|
|
|
+ options.AddUserProfilePreference("intl.accept_languages", "nl");
|
|
|
|
+ options.AddUserProfilePreference("disable-popup-blocking", "true");
|
|
|
|
+ options.AddUserProfilePreference("profile", new { default_content_setting_values = new { images = 2 } });
|
|
|
|
+
|
|
|
|
+ if (isheadless)
|
|
|
|
+ {
|
|
|
|
+ options.AddArgument("headless");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ dynamic retObject = new ExpandoObject();
|
|
|
|
+
|
|
|
|
+ retObject.CaseNo = caseNo.Trim();
|
|
|
|
+ retObject.DoItem = doItemName;
|
|
|
|
+
|
|
|
|
+ using (var Service = ChromeDriverService.CreateDefaultService(ConfigHelper.GetSectionValue("IPEasySetting:ChormeDriverPath")))
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ Service.Start();
|
|
|
|
+ using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(Service, options))
|
|
|
|
+ {
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20);
|
|
|
|
+ driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(100);
|
|
|
|
+ //driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(100);
|
|
|
|
+ WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
|
|
|
|
+
|
|
|
|
+ //进入登录界面
|
|
|
|
+ driver.Navigate().GoToUrl(ConfigHelper.GetSectionValue("IPEasySetting:IPEasyWeb"));
|
|
|
|
+
|
|
|
|
+ //输入用户名和密码
|
|
|
|
+ driver.FindElement(By.Id("txtUser")).SendKeys(Account);
|
|
|
|
+ driver.FindElement(By.Id("txtPwd")).SendKeys(Password);
|
|
|
|
+
|
|
|
|
+ //点击登录按钮
|
|
|
|
+ driver.FindElement(By.Id("btnLogin")).Click();
|
|
|
|
+
|
|
|
|
+ //关闭提示遮罩层
|
|
|
|
+ driver.FindElement(By.Id("jpwClose")).Click();
|
|
|
|
+
|
|
|
|
+ //try
|
|
|
|
+ //{
|
|
|
|
+ // var okBtn = driver.FindElement(By.ClassName("ui_state_highlight"));
|
|
|
|
+ // if (okBtn != null && okBtn.TagName == "input")
|
|
|
|
+ // {
|
|
|
|
+ // okBtn.Click();
|
|
|
|
+ // }
|
|
|
|
+ //}
|
|
|
|
+ //catch { }
|
|
|
|
+
|
|
|
|
+ //点击顶部菜单栏中的案件管理菜单
|
|
|
|
+ driver.FindElement(By.Name("71A7CC35-F597-40E1-9FEF-BE622A3A3B63")).Click();
|
|
|
|
+ System.Threading.Thread.Sleep(500);
|
|
|
|
+
|
|
|
|
+ //点击左侧 查询 菜单
|
|
|
|
+ driver.FindElement(By.Name("FF4E1FF9-FE36-4F0F-99DF-81E60817722E")).Click();
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //System.Threading.Thread.Sleep(500);
|
|
|
|
+ var inputSearch = wait.Until((d) =>
|
|
|
|
+ {
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ //切换到自定义报表Frame
|
|
|
|
+ d.SwitchTo().Frame(1);
|
|
|
|
+ return d.FindElement(By.Id("case_volume"));
|
|
|
|
+ }
|
|
|
|
+ catch
|
|
|
|
+ {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ });
|
|
|
|
+ //切换到自定义报表Frame
|
|
|
|
+ //driver.SwitchTo().Frame(1);
|
|
|
|
+
|
|
|
|
+ //var inputSearch = driver.FindElement(By.Id("case_volume"));
|
|
|
|
+ inputSearch.SendKeys(caseNo.Trim());
|
|
|
|
+
|
|
|
|
+ var btnSearch = driver.FindElement(By.Id("btn_Search"));
|
|
|
|
+ btnSearch.Click();
|
|
|
|
+
|
|
|
|
+ var caseLink = wait.Until((d) =>
|
|
|
|
+ {
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ return d.FindElement(By.XPath($"//a[normalize-space()='{caseNo.Trim()}']"));
|
|
|
|
+ }
|
|
|
|
+ catch
|
|
|
|
+ {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ });
|
|
|
|
+ //System.Threading.Thread.Sleep(500);
|
|
|
|
+
|
|
|
|
+ //var caseLink = driver.FindElement(By.XPath($"//a[normalize-space()='{caseNo.Trim()}']"));
|
|
|
|
+ caseLink.Click();
|
|
|
|
+ System.Threading.Thread.Sleep(500);
|
|
|
|
+
|
|
|
|
+ driver.SwitchTo().ParentFrame().SwitchTo().Frame(2);
|
|
|
|
+ var DoItemLinks = driver.FindElements(By.XPath($"//td[@colname='ctrl_proc'][normalize-space()='{doItemName}']"));
|
|
|
|
+ if (DoItemLinks.Count > 0)
|
|
|
|
+ {
|
|
|
|
+ if (!string.IsNullOrEmpty(caseStage))
|
|
|
|
+ {
|
|
|
|
+ foreach (var DoItemLink in DoItemLinks)
|
|
|
|
+ {
|
|
|
|
+ var temCaseStage = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text;
|
|
|
|
+ if (temCaseStage == caseStage)
|
|
|
|
+ {
|
|
|
|
+ retObject.CaseStage = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text; //案件阶段
|
|
|
|
+ retObject.DoItemState = DoItemLink.FindElement(By.XPath("following-sibling::td[2]")).Text; //处理事项处理状态
|
|
|
|
+ retObject.InternalDate = DoItemLink.FindElement(By.XPath("following-sibling::td[4]")).Text; //内部期限
|
|
|
|
+ retObject.CustomerLimitDate = DoItemLink.FindElement(By.XPath("following-sibling::td[5]")).Text; //客户期限
|
|
|
|
+ retObject.FinishedDate = DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text; //处理事项完成日
|
|
|
|
+ retObject.DoPersons = DoItemLink.FindElement(By.XPath("following-sibling::td[8]")).Text; //处理人
|
|
|
|
+ retObject.DoItemMemo = DoItemLink.FindElement(By.XPath("following-sibling::td[9]")).Text; //处理事项备注
|
|
|
|
+ retObject.Reviewer = DoItemLink.FindElement(By.XPath("following-sibling::td[10]")).Text; //核稿人
|
|
|
|
+
|
|
|
|
+ System.Threading.Thread.Sleep(4000);
|
|
|
|
+ DoItemLink.Click();
|
|
|
|
+ //driver.ExecuteJavaScript("$(arguments[0]).click()", DoItemLink);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ var DoItemLink = DoItemLinks[DoItemLinks.Count - 1];
|
|
|
|
+ //retObject.CaseStage = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text; //案件阶段
|
|
|
|
+ retObject.DoItemState = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text; //处理事项处理状态
|
|
|
|
+ retObject.InternalDate = DoItemLink.FindElement(By.XPath("following-sibling::td[3]")).Text; //内部期限
|
|
|
|
+ retObject.CustomerLimitDate = DoItemLink.FindElement(By.XPath("following-sibling::td[4]")).Text; //客户期限
|
|
|
|
+ retObject.FinishedDate = DoItemLink.FindElement(By.XPath("following-sibling::td[6]")).Text; //处理事项完成日
|
|
|
|
+ retObject.DoPersons = DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text; //处理人
|
|
|
|
+ retObject.DoItemMemo = DoItemLink.FindElement(By.XPath("following-sibling::td[10]")).Text; //处理事项备注
|
|
|
|
+ //retObject.Reviewer = DoItemLink.FindElement(By.XPath("following-sibling::td[10]")).Text; //核稿人
|
|
|
|
+
|
|
|
|
+ System.Threading.Thread.Sleep(4000);
|
|
|
|
+
|
|
|
|
+ DoItemLink.Click();
|
|
|
|
+ //new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(DoItemLink)).Click();
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var p_proc_finish_doc_date = wait.Until((d) =>
|
|
|
|
+ {
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ return d.FindElement(By.Id("p_proc_info__finish_doc_date"));
|
|
|
|
+ }
|
|
|
|
+ catch
|
|
|
|
+ {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ });
|
|
|
|
+ //System.Threading.Thread.Sleep(500);
|
|
|
|
+
|
|
|
|
+ retObject.FinalizationDate = p_proc_finish_doc_date.GetAttribute("value"); //定稿日
|
|
|
|
+ retObject.ReturnDate = driver.FindElement(By.Id("p_proc_info__back_date")).GetAttribute("value"); //返稿日
|
|
|
|
+ retObject.Reviewer = driver.FindElement(By.Id("p_proc_info__revise_user")).GetAttribute("value"); //核稿人
|
|
|
|
+ retObject.DoItemCoefficient = driver.FindElement(By.Id("p_proc_info__proc_coefficient")).GetAttribute("value"); //处理事项系数
|
|
|
|
+ retObject.WordCount = driver.FindElement(By.Id("p_proc_info__translate_count")).GetAttribute("value"); //翻译字数
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ driver.FindElement(By.Id("libase")).Click();
|
|
|
|
+
|
|
|
|
+ var p_case_info__case_name = wait.Until((d) =>
|
|
|
|
+ {
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ return d.FindElement(By.Id("p_case_info__case_name"));
|
|
|
|
+ }
|
|
|
|
+ catch
|
|
|
|
+ {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ });
|
|
|
|
+ //System.Threading.Thread.Sleep(500);
|
|
|
|
+ retObject.CaseName = p_case_info__case_name.GetAttribute("value"); //案件名称
|
|
|
|
+ retObject.CustomerName = driver.FindElement(By.Id("p_case_info__customer_id")).GetAttribute("value"); //客户名称
|
|
|
|
+ retObject.BusinessType = driver.FindElement(By.Id("p_case_info__business_type_id")).GetAttribute("value"); //业务类型
|
|
|
|
+
|
|
|
|
+ retObject.CaseState = GetSelectText(driver.FindElement(By.Id("p_case_info__case_status_id")));
|
|
|
|
+ retObject.ApplicationType = GetSelectText(driver.FindElement(By.Id("p_case_info__apply_type_id")));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ retObject.CaseType = driver.FindElement(By.Id("p_case_info__case_type_id")).GetAttribute("value"); //案件类型
|
|
|
|
+ retObject.EntrustingDate = driver.FindElement(By.Id("p_case_info__charge_date")).GetAttribute("value"); //委案日期
|
|
|
|
+ retObject.CaseMemo = driver.FindElement(By.Id("p_case_info__remark")).GetAttribute("value"); //案件备注
|
|
|
|
+
|
|
|
|
+ //driver.FindElement(By.XPath($"//span[contains(text(),'扩展信息')]")).Click();
|
|
|
|
+ //select[@id='p_case_info__case_coefficient_id']
|
|
|
|
+ //retObject.CaseCoefficient = GetSelectText(driver.FindElement(By.Id("p_case_info__case_coefficient_id")));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ catch (Exception ex)
|
|
|
|
+ {
|
|
|
|
+ throw new Exception(ex.Message, ex);
|
|
|
|
+ }
|
|
|
|
+ finally
|
|
|
|
+ {
|
|
|
|
+ driver.Quit();
|
|
|
|
+
|
|
|
|
+ killChromProcess();
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Service.Dispose();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return retObject;
|
|
|
|
+ }
|
|
|
|
+
|
|
private static void killChromProcess()
|
|
private static void killChromProcess()
|
|
{
|
|
{
|
|
try
|
|
try
|