/// <summary> /// Service callable code to get all RWR issues /// </summary> /// <returns>A IssuesCD object with a Issues DataTable</returns> public static IssuesCD GetIssues() { IssuesCD cd = new IssuesCD(); IssuesTableAdapter ta = new IssuesTableAdapter(); ta.Fill(cd.Issues); ta.Dispose(); return(cd); }
/// <summary> /// Service callable code to Delete/Insert/Update Issues /// </summary> /// <param name="cd">A ClientDataSet of type IssuesCD</param> /// <returns>A IssuesCD ClientDataSet. If ALL OK contains updated data, if not contains the RowErrors</returns> public static IssuesCD UpdateIssues(IssuesCD cd) { if (cd == null || cd.Tables["Issues"] == null || cd.Tables["Issues"].Rows.Count == 0) { throw new Exception("The DataSet and/or DataTable is null or empty."); } TasksTD.TasksDataTable tt = new TasksTD.TasksDataTable(); IssuesCD.IssuesDataTable ct = new IssuesCD.IssuesDataTable(); foreach (IssuesRow modifiedRow in cd.Issues.Select("", "", DataViewRowState.ModifiedCurrent)) { ct.Clear(); // clear for next row to import ct.ImportRow(modifiedRow); // import single row into Table for merge tt.Merge(TasksTD.GetTask(modifiedRow.TaskId)); // populate with all current columns tt.Merge(ct, false, MissingSchemaAction.Ignore); // overlay with updated columns } TasksTD td = new TasksTD(); td.Tasks.BeginLoadData(); td.Tasks.Merge(cd.Issues, false, MissingSchemaAction.Ignore); td.Tasks.Merge(tt, false, MissingSchemaAction.Ignore); SqlTransaction transaction = null; try { TasksTD.UpdateTasks(td, ref transaction); SqlUtils.CommitTransaction(transaction); if (transaction.Connection != null && transaction.Connection.State == ConnectionState.Open) { transaction.Connection.Close(); } transaction.Dispose(); } catch (Exception ex) { SqlUtils.RollbackTransaction(transaction); throw ex; } return(cd); }
/// <summary> /// Client callable code to Delete/Insert/Update Issues /// </summary> /// <returns>True if update is successful. If False, check for RowErrors.</returns> public bool ClientUpdateIssues(bool async) { PrepareDataBeforeUpdate(); IssuesCD updatedIssues = new IssuesCD(); updatedIssues.Merge(Tables["Issues"].Select("", "", DataViewRowState.Deleted), false, MissingSchemaAction.Ignore); updatedIssues.Merge(Tables["Issues"].Select("", "", DataViewRowState.Added), false, MissingSchemaAction.Ignore); updatedIssues.Merge(Tables["Issues"].Select("", "", DataViewRowState.ModifiedCurrent), false, MissingSchemaAction.Ignore); if (updatedIssues.Issues.Rows.Count > 0) { if (UseWcfService) { try { WCF.IssuesContractClient svWCF = new WCF.IssuesContractClient(); WCF.UpdateIssuesRequest rqWCF = new WCF.UpdateIssuesRequest(); rqWCF.IssuesCD = new IssuesServiceWCF.IssuesCD(); rqWCF.IssuesCD.Merge(updatedIssues, false, MissingSchemaAction.Ignore); if (async) { string ping = svWCF.Ping(); if (String.IsNullOrEmpty(ping)) { throw new Exception("WCF is offline."); } svWCF.BeginUpdateIssues(rqWCF, wcf_ClientUpdateIssuesCompleted, svWCF); return(true); } else { WCF.UpdateIssuesResponse rsWCF = svWCF.UpdateIssues(rqWCF); Merge(rsWCF.IssuesCD, false, MissingSchemaAction.Ignore); PrepareDataAfterUpdate(); return(true); } } catch { UseWcfService = false; } // ignore if not responding } if (UseAsmxService) { try { ASMX.IssuesServiceASMX svASMX = new ASMX.IssuesServiceASMX(); ASMX.UpdateIssuesRequest rqASMX = new ASMX.UpdateIssuesRequest(); rqASMX.IssuesCD = new IssuesServiceASMX.IssuesCD(); rqASMX.IssuesCD.Merge(updatedIssues, false, MissingSchemaAction.Ignore); if (async) { svASMX.UpdateIssuesCompleted += asmx_ClientUpdateIssuesCompleted; svASMX.UpdateIssuesAsync(rqASMX); return(true); } else { ASMX.UpdateIssuesResponse rsASMX = svASMX.UpdateIssues(rqASMX); Merge(rsASMX.IssuesCD, false, MissingSchemaAction.Ignore); PrepareDataAfterUpdate(); return(true); } } catch { UseAsmxService = false; } // ignore if not responding } if (UseClientServer) { try { Merge(UpdateIssues(updatedIssues), false, MissingSchemaAction.Ignore); PrepareDataAfterUpdate(); return(true); } catch { UseClientServer = false; } // ignore if not responding } } return(false); }