【问题标题】:Using C# WebClient to Update MULTI_CONTACT_CELL in Smartsheet使用 C# WebClient 更新 Smartsheet 中的 MULTI_CONTACT_CELL
【发布时间】:2019-10-23 14:54:32
【问题描述】:

我希望通过 C# 使用 smartsheets C# sdk 或 With 和 HTTP PUT 请求更新 Multi_Contact Cell。

我已阅读您必须执行 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;

        }
    }

【问题讨论】:

    标签: c# smartsheet-api smartsheet-c#-sdk-v2


    【解决方案1】:

    目前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"}
            })
            }
          }
        }
    });
    

    【讨论】:

    • 谢谢。我最终通过 HTTP Web 请求使用带有 JSON 的 HTTP 查询。我不知道他们现在的 SDK 中包含了 MultiContacts。
    【解决方案2】:

    我解决了我的问题。 这就是我最终发送请求的方式:

      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;
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多