/// <summary> /// Gets values in the given table with given select and filter params /// </summary> /// <returns> /// Returns list of values which match the given parameters /// </returns> public async Task <JArray> GetValues(string tableName, string[] selectColumns, string filterUrlParam) { // Select parameter in Dataverse API accepts comma separated column names var selectQueryColumns = string.Join(",", selectColumns); // Params for select query var selectUrlParam = $"$select={selectQueryColumns}"; UriBuilder requestUri = new UriBuilder("https", dataverseConfig.Value.ApiBaseUrl); requestUri.Path = tableName; requestUri.Query = $"{selectUrlParam}&$filter={filterUrlParam}"; var response = await dataverseClient.GetAsync(requestUri.Uri); if (!response.IsSuccessStatusCode) { throw new DataverseException(Constant.InvalidInsertDataColumns); } // Parse response var responseString = await response.Content.ReadAsStringAsync(); // Dataverse get response model var responseJson = DataverseGetResponse.FromJson(responseString); return(responseJson.Values); }
/// <summary> /// Update existing data row /// 1. Get guid of row with given baseId and isLatestColumnName 1 /// 2. Create batch request for the 3 operations /// </summary> /// <returns> /// Task /// </returns> public async Task UpdateAddData( string baseRowGuid, dynamic updatedData, string updateTableName, string updateTableIdColumn, dynamic newData, string addTableName, string addTableIdColumn) { // 1. Get guid of row with given baseId and isLatestColumnName 1 string[] requiredColumns = { updateTableIdColumn, Constant.baseIdColumnName, Constant.isLatestColumnName }; // Select parameter in Dataverse API accepts comma separated column names var selectQueryColumns = string.Join(",", requiredColumns); // Params for select query var selectUrlParam = $"$select={selectQueryColumns}"; // Params for select query var filterUrlParam = $"$filter={Constant.baseIdColumnName} eq {baseRowGuid} and {Constant.isLatestColumnName} eq '{Constant.IsLatestTrue}'"; UriBuilder requestUri = new UriBuilder("https", dataverseConfig.Value.ApiBaseUrl); requestUri.Path = updateTableName; requestUri.Query = $"{selectUrlParam}&{filterUrlParam}"; var response = await dataverseClient.GetAsync(requestUri.Uri); if (!response.IsSuccessStatusCode) { throw new DataverseException(Constant.InvalidUpdateDataColumns); } // All current records var responseString = await response.Content.ReadAsStringAsync(); // Dataverse get response model var responseJson = DataverseGetResponse.FromJson(responseString); var values = responseJson.Values; // There should be exactly one row with {isLatestColumnNameName} == 1 if (values.Count != 1) { throw new DataverseException(Constant.InvalidUpdateDataColumns); } var firstValue = values[0]; var oldStringGuid = Convert.ToString(firstValue[updateTableIdColumn], cultureInfo); // 2. Create batch request for the 3 operations await BatchUpdateAdd(oldStringGuid, baseRowGuid, updatedData, updateTableName, newData, addTableIdColumn, addTableName); }
/// <summary> /// Update existing data row /// 1. Get guid of row with given baseId and isLatestColumnName 1 /// 2. Set isLatestColumnName to 0 for this row /// 3. Insert new row with updated data columns with given baseId and isLatestColumnName set to 1 /// </summary> /// <returns> /// Task /// </returns> public async Task UpdateData(string baseRowGuid, dynamic newDataRow, string idColumn, string tableName) { string[] requiredColumns = { idColumn, Constant.baseIdColumnName, Constant.isLatestColumnName }; // Select parameter in Dataverse API accepts comma separated column names var selectQueryColumns = string.Join(",", requiredColumns); // Params for select query var selectUrlParam = $"$select={selectQueryColumns}"; // Params for select query var filterUrlParam = $"$filter={Constant.baseIdColumnName} eq {baseRowGuid} and {Constant.isLatestColumnName} eq '{Constant.IsLatestTrue}'"; UriBuilder requestUri = new UriBuilder("https", dataverseConfig.Value.ApiBaseUrl); requestUri.Path = tableName; requestUri.Query = $"{selectUrlParam}&{filterUrlParam}"; var response = await dataverseClient.GetAsync(requestUri.Uri); if (!response.IsSuccessStatusCode) { throw new DataverseException(Constant.InvalidUpdateDataColumns); } // All current records var responseString = await response.Content.ReadAsStringAsync(); // Dataverse get response model var responseJson = DataverseGetResponse.FromJson(responseString); var values = responseJson.Values; // There should be exactly one row with {isLatestColumnNameName} = 1 if (values.Count != 1) { throw new DataverseException(Constant.InvalidUpdateDataColumns); } var firstValue = values[0]; var oldStringGuid = Convert.ToString(firstValue[idColumn], cultureInfo); // 1. Mark existing record as old. Passing the record's GUID to be marked as old // 2. Insert updated record as new await BatchUpdate(oldStringGuid, baseRowGuid, newDataRow, tableName); }