Использование C # WebClient для обновления MULTI_CONTACT_CELL в Smartsheet - PullRequest
0 голосов
/ 23 октября 2019

Я хочу обновить ячейку Multi_Contact с помощью смарт-таблиц C # sdk или With и HTTP PUT-запроса через C #.

Я прочитал, что вы должны сделать HTTP-запрос для этого. Я сделал WebClient и отправил запросы, но я продолжаю получать неверный ответ. Я явно поражаю правильную цель, но я предполагаю, что у меня плохой заголовок или что-то в этом роде. (Любой отредактированный код записывается как ##) Куда я иду не так?

class APIHELPER
{
        /// <summary>
        /// 
        /// </summary>
        /// <param name="value"> value[i][0] is email .  value[i][1] is name First Last. </param>
        public static void SendMultiEmailPut(Int64 SheetID, Int64 columnID, Int64 rowID, List<List<string>> value)
        {
            HttpClient ApiClient = new HttpClient();
            ApiClient.DefaultRequestHeaders.Accept.Clear();
            ApiClient.BaseAddress = new Uri(@"https://api.smartsheet.com/2.0/sheets/"+ SheetID.ToString() + @"/rows");
            ApiClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            ApiClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "#########"); //the authentication code is here
            string myJsonRequest = @"[{""id"": " + rowID.ToString() + @", ""cells"": [ {""columnId"": "+columnID.ToString()+@",""objectValue"": {""objectType"": ""MULTI_CONTACT"",""values"": [";
            List<string> LastElement = value.Last();
            foreach (List<string> NE in value)
            {
                if (NE == LastElement)
                {
                    myJsonRequest = myJsonRequest + @"{""objectType"": ""CONTACT"",""email"": """ + NE[0] + @""",""name"": """+ NE[1] +@"""}";
                }
                else
                {
                    myJsonRequest = myJsonRequest + @"{""objectType"": ""CONTACT"",""email"": """ + NE[0] + @""",""name"": """ + NE[1] + @"""},";
                }
            }
            myJsonRequest = myJsonRequest + @"] } }]}]";
            var Response = ApiClient.PutAsJsonAsync(ApiClient.BaseAddress, myJsonRequest).Result;

        }
    }

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Я решил мою проблему. Вот так я и отправил запрос:

  public static string PutWebRequest(string Target, string JsonRequest)
        {
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(Target);
            httpWebRequest.Accept = "application/json";
            httpWebRequest.Method = "PUT";
            httpWebRequest.Headers.Add("Authorization", "Bearer " + MYSMARTSHEETSKEY);

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                streamWriter.Write(JsonRequest);
            }
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                return result;
            }
        }
0 голосов
/ 23 октября 2019

Текущий клиент c # поддерживает обновление нескольких ячеек контактов:

Smartsheet.Api.SmartsheetClient a = new 
Smartsheet.Api.SmartsheetBuilder().SetAccessToken("yourtoken").Build();

a.SheetResources.RowResources.UpdateRows(sheetId, new List<Row>
{
    new Row{ Id =rowId, Cells = new List<Cell>{
        new Cell{ ColumnId = columnId, ObjectValue = new  MultiContactObjectValue(new List<ContactObjectValue>{
            new ContactObjectValue{ Name = "Name", Email = "test@email.com"},
            new ContactObjectValue{ Name = "Name2", Email = "tes2t@email.com"}
        })
        }
      }
    }
});
...