2017-04-12 38 views
0

我已经完成了我的头撞墙。我曾尝试MS代码,代码从这里 Set "Assigned To" on SharePoint task using Javascript object model用于设置SharePoint任务的JavaScript分配到

https://social.msdn.microsoft.com/Forums/SqlServer/en-US/2d9775ad-459c-46bc-989b-5d04d40a2f2f/javascript-how-to-reset-task-list-assigned-to-peoplepicker-field?forum=sharepointdevelopment

https://sharepoint.stackexchange.com/questions/137252/add-task-to-tasks-list-through-javascript-in-sharepoint-2013

https://msdn.microsoft.com/en-us/library/office/jj163201.aspx

和其他网站。

我有100%的工作代码,在我的共享点上创建一个新的任务。唯一的问题是我似乎无法设置分配给字段。

这是我有...

// Start creating of new Tasks 

    function createListItem(siteUrl) { 
     var clientContext = new SP.ClientContext(siteUrl); 
     var oList = clientContext.get_web().get_lists().getByTitle('Tasks'); 

     var itemCreateInfo = new SP.ListItemCreationInformation(); 
     this.oListItem = oList.addItem(itemCreateInfo); 
     oListItem.set_item('Title', 'My New Item!'); 
     //oListItem.set_item('AssignedTo', "SID"); 
     oListItem.update(); 

     clientContext.load(oListItem); 
     clientContext.executeQueryAsync(
      Function.createDelegate(this, this.onQuerySucceededCreate), 
      Function.createDelegate(this, this.onQueryFailedCreate) 
     ); 
    } 

    function onQuerySucceededCreate() { 
     alert('Item created: ' + oListItem.get_id()); 
     retrieveListItems(site); 
    } 

    function onQueryFailedCreate(sender, args) { 
     alert('Request failed. ' + args.get_message() + 
      '\n' + args.get_stackTrace()); 
    } 
    createListItem(site); 
    //End Create Task 

我滚一切回到这一点上,工作没有分配对象简单地创建任务。所以我尝试过的所有东西都列在上面的链接中。我完全被困在一个点上,它把任务分配给公司里的一些随机的人,而不是一件好事。

+0

你是怎么看给谁您要分配任务的用户?例如,[这个答案](http://stackoverflow.com/a/38758635/2701677)很好,但只有当你碰巧知道用户在当前网站集的用户信息列表中的相应项目的ID时,如果你问我,相当深奥。您可以更好地调用'ensureUser'来获取对有效别名的用户引用,如[本答案](http://sharepoint.stackexchange.com/a/197497/38950)中所述。 – Thriggle

+0

用户代码可能存在问题?您需要使用SharePoint用户ID,然后您可以创建'新的SP.FieldUserValue()'并将其设置为AssignedTo字段。 –

+0

如果我手动创建一个条目,我们会将Assign To字段放入一个标准ID,并查找我们的名字。我尝试添加标准,但没有选择弹出的查找名称,并且填充的方式与我选择它相同。所以我假设有一些查找项目。我尝试将它与没有分配给的任务进行匹配,我尝试的代码给了我一个随机的人。让我看看Thriggles的链接,因为Dmitiri告诉我任何我还没有尝试过的东西,其中的代码导致错误的人被分配任务。 – reddragon72

回答

0

首先使用web.ensureUser()函数获取对用户对象的引用。 ensureUser()接受用户的别名,例如他们的登录名或电子邮件地址(其他别名字段可以在SharePoint用户配置文件服务中定义)。

然后,您可以获取用户的id属性并使用它来设置人员选择器字段的查找值。

以下是一个演示你如何能做到这一点的例子:

(function(siteUrl){ 

    var clientContext = new SP.ClientContext(siteUrl); 

    getUser("contoso/JIMBO", // any valid user alias 
     assignTask, // function to call on success 
     alert // function to call on error 
    ); 

    function getUser(username, onSuccess, onError){ 
     var user = clientContext.get_web().ensureUser(username); 
     clientContext.load(user); 
     clientContext.executeQueryAsync(
      function(){ 
       onSuccess(user); 
      }, 
      function(sender, args){ onError(args.get_message()); } 
     ); 
    } 

    function assignTask(user){ 
     var oList = clientContext.get_web().get_lists().getByTitle('Tasks'); 
     var itemCreateInfo = new SP.ListItemCreationInformation(); 
     var oListItem = oList.addItem(itemCreateInfo); 
     oListItem.set_item('Title', 'My New Item!'); 
     var assignedToValue = new SP.FieldUserValue(); 
     assignedToValue.set_lookupId(user.get_id()); 
     oListItem.set_item('AssignedTo',assignedToValue); 
     oListItem.update(); 
     clientContext.load(oListItem); 
     clientContext.executeQueryAsync(
      function(){ 
       onQuerySucceededCreate(oListItem); 
      }, 
      function(sender, args){ 
       alert(args.get_message()); 
      } 
     ); 
    } 

    function onQuerySucceededCreate(oListItem) { 
     alert('Item created: ' + oListItem.get_id()); 
     //retrieveListItems(site); 
    } 

})("http://contoso.com"); // site URL