Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有方法使用Microsoft.SharePoint.Client命名空间与其他用户一起创建新的列表项_C#_.net_Sharepoint_Sharepoint Clientobject - Fatal编程技术网

C# 是否有方法使用Microsoft.SharePoint.Client命名空间与其他用户一起创建新的列表项

C# 是否有方法使用Microsoft.SharePoint.Client命名空间与其他用户一起创建新的列表项,c#,.net,sharepoint,sharepoint-clientobject,C#,.net,Sharepoint,Sharepoint Clientobject,我们有一个SharePoint列表,其中每个用户都有权仅查看自己创建的记录 我的任务是编写一个生成列表项的服务, 列表项必须由服务器的身份验证用户以外的其他用户创建(出于开头提到的原因),以便“创建”该项的用户查看该项。 问题:我们尝试了很多,无法将列表项的创建者更改为经过身份验证的服务器用户以外的其他用户(不会引发异常,并且该项已成功创建)。我们如何才能做到这一点 约束: 该服务将在SharePoint server未安装的服务器上运行 我们使用的是Microsoft.SharePoin

我们有一个SharePoint列表,其中每个用户都有权仅查看自己创建的记录

我的任务是编写一个生成列表项的服务, 列表项必须由服务器的身份验证用户以外的其他用户创建(出于开头提到的原因),以便“创建”该项的用户查看该项。

问题:我们尝试了很多,无法将列表项的创建者更改为经过身份验证的服务器用户以外的其他用户(不会引发异常,并且该项已成功创建)。我们如何才能做到这一点


约束:

  • 该服务将在SharePoint server未安装的服务器上运行
  • 我们使用的是
    Microsoft.SharePoint.Client
    命名空间,但如果需要,我们也可以使用sharepointsoap服务
这是守则草案:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.SharePoint.Client;
using System.Security;
using Microsoft.SharePoint.Client.UserProfiles;
using System.Net;

namespace SharePointClientSaveWithItherUser
{
    class Program
    {
        static void Main(string[] args)
        {
            UpdateListItem();
        }

        public static void UpdateListItem()
        {
            var siteURL = "http://oportalXXXXXXXXXXXXX";
            var listName = "XXXXX";
            var createdBy = "XXXXXX";
            var modifiedBy = "XXXXXX";

            ClientContext context = new ClientContext(siteURL);

            var login = "XXXXXX";
            var password = "XXXXXX!";

            var securePassword = new SecureString();
            foreach (char c in password)
            {
                securePassword.AppendChar(c);
            }


       //     SharePointOnlineCredentials credentials = new SharePointOnlineCredentials(login, securePassword);
            context.Credentials = new NetworkCredential(login, securePassword, "XXXX"); ;

            List list = context.Web.Lists.GetByTitle(listName);
            FieldUserValue author = GetUsers(context, createdBy);
            FieldUserValue editor = GetUsers(context, modifiedBy);
            ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
            ListItem oListItem = list.AddItem(itemCreateInfo);
            oListItem["Title"] = "TEST";
            oListItem["Author"] = author; // its not working the creator of the record is the authanticated user and not the author 
           // oListItem["Editor"] = editor;

            oListItem.Update();
            context.ExecuteQuery();
        }

        //get user by username
        public static FieldUserValue GetUsers(ClientContext clientContext, string UserName)
        {

            FieldUserValue _userValue = new FieldUserValue();

            User _newUser = clientContext.Web.EnsureUser(UserName);

            clientContext.Load(_newUser);

            clientContext.ExecuteQuery();

            _userValue.LookupId = _newUser.Id;

            return _userValue;

        }
    }
}

您只需使用
EnsureUser
方法并传递用户的电子邮件地址(
user)。name@domain.com
)或域名(
i:0#.w | domain\username
)来解析用户,然后将其分配给作者字段:

ListItem item = list.AddItem(itemCreateInfo);
//use email address of user or login name
var emailAddress = "user.name@tenantname.com"  //or  i:0#.w|domain\username;

var user = context.Web.EnsureUser(emailAddress);
context.Load(user);
context.ExecuteQuery();

ListItem oListItem = list.AddItem(itemCreateInfo);
oListItem["Title"] = "TEST";
oListItem["Author"] = user;                    

oListItem.Update();
context.ExecuteQuery();

两天的挫折终于结束了!如果可以,我会投10票。在这里填写免费回答这个问题:干杯!乐意帮忙:)