我有三个SharePoint 2016列表:

  • 组织
  • 部门
  • 群组

  • 组按部门分类,部门按组织分类。

    每个列表中的标题字段用于表示组,组织或部门的名称,并且每个列表中都有一个下拉列表,用于选择相应项目的父项。

    在我的一种形式中,用户应选择拥有特定软件标题的组织,部门和组。我正在尝试使用SPServices.SPCascadeDropdowns仅显示所选组织的部门,但它根本没有做任何事情。

    表单中的相关字段为:
    <td valign="top" class="ms-formlabel">
      <H3 class="ms-standardheader">
        <nobr>Organization<span class="ms-formvalidation"> *</span></nobr>
      </H3>
    </td>
    <td valign="top" class="ms-formbody">
      <SharePoint:FormField runat="server" id="ff9{$Pos}" ControlMode="New"
       FieldName="Organization"
       __designer:bind="{ddwrt:DataBind('i',concat('ff9',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Organization')}"/>
      <SharePoint:FieldDescription runat="server" id="ff9description{$Pos}" FieldName="Organization" ControlMode="New"/>
    </td>
    <td valign="top" class="ms-formlabel">
      <H3 class="ms-standardheader">
        <nobr>Department<span class="ms-formvalidation"> *</span></nobr>
      </H3>
    </td>
    <td valign="top" class="ms-formbody">
      <SharePoint:FormField runat="server" id="ff10{$Pos}" ControlMode="New"
      FieldName="Department"
      __designer:bind="{ddwrt:DataBind('i',concat('ff10',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Department')}"/>
      <SharePoint:FieldDescription runat="server" id="ff10description{$Pos}" FieldName="Department" ControlMode="New"/>
    </td>
    

    我使用的Javascript是:
    $(document).ready(function(){
        $().SPServices.SPCascadeDropdowns({
            relationshipList: "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",
            relationshipListParentColumn: "Organization",
            relationshipListChildColumn: "Title",
            parentColumn: "Organization",
            childColumn: "Department",
            debug: true
        });
    });
    

    我已经加载了jQuery 3.2.1和jQuery.SPServices-2014.02.min.js。我在Chrome控制台中没有出现任何错误,它根本没有做任何事情。如果我在$()。SPServices处休息一下,它确实会命中,所以我知道它正在被调用。知道我在做什么错吗?

    最佳答案

    考虑到您没有提供数据结构,我带来了我的;)

    使用此PowerShell脚本在特定网站集中创建结构:

    $web = get-spweb <YOUR URL>
    $template = $web.ListTemplates | where name -eq 'Custom List'
    $organizationsListId = $web.Lists.Add("Organizations", "", $template)
    $departmentsListId = $web.Lists.Add("Departments", "", $template)
    $groupsListId = $web.Lists.Add("Groups", "", $template)
    
    $organizationsLookup = $web.Fields.AddLookup("OrganizationsLookup", $organizationsListId, $false)
    $departmentsLookup = $web.Fields.AddLookup("DepartmentsLookup", $departmentsListId, $false)
    
    $organizations = $web.Lists[$organizationsListId]
    $departments = $web.Lists[$departmentsListId]
    $groups = $web.Lists[$groupsListId]
    
    $departments.Fields.Add($web.Fields.GetFieldByInternalName("OrganizationsLookup"))
    $groups.Fields.Add($web.Fields.GetFieldByInternalName("DepartmentsLookup"))
    $groups.Fields.Add($web.Fields.GetFieldByInternalName("OrganizationsLookup"))
    
    $organizationsLookupInList = $departments.Fields.GetFieldByInternalName("OrganizationsLookup");
    $organizationsLookupInList.LookupField = "Title"
    $organizationsLookupInList.Update()
    
    $departmentsLookupInList = $groups.Fields.GetFieldByInternalName("DepartmentsLookup");
    $departmentsLookupInList.LookupField = "Title"
    $departmentsLookupInList.Update()
    
    $organizationsLookupInList1 = $groups.Fields.GetFieldByInternalName("OrganizationsLookup");
    $organizationsLookupInList1.LookupField = "Title"
    $organizationsLookupInList1.Update()
    
    function AddListItem($list, $title)
    {
        $itm = $list.AddItem()
        $itm["Title"] = $title
        $itm.Update()
        return $itm
    }
    
    function AddListItemDepartments($list, $title, $lookupIdOrg)
    {
        $itm = AddListItem $list $title
        $itm["OrganizationsLookup"] = $lookupIdOrg
        $itm.Update();
        return $itm
    }
    
    function AddListItemGroups($list, $title, $lookupIdOrg, $lookupIdDep)
    {
        $itm = AddListItemDepartments $list $title $lookupIdOrg
        $itm["DepartmentsLookup"] = $lookupIdDep
        $itm.Update();
        return $itm
    }
    
    $org1Id = (AddListItem $organizations "AAA NET").ID
    $org2Id = (AddListItem $organizations "BBB NET").ID
    $org3Id = (AddListItem $organizations "CCC NET").ID
    $org4Id = (AddListItem $organizations "DDD NET").ID
    
    
    $dep1Id = (AddListItemDepartments $departments "Finance" $org1Id).ID
    $dep2Id = (AddListItemDepartments $departments "IT" $org1Id).ID
    $dep3Id = (AddListItemDepartments $departments "Finance" $org2Id).ID
    $dep4Id = (AddListItemDepartments $departments "Social" $org2Id).ID
    $dep5Id = (AddListItemDepartments $departments "Fun" $org2Id).ID
    $dep6Id = (AddListItemDepartments $departments "Sport" $org2Id).ID
    $dep7Id = (AddListItemDepartments $departments "Knowledge" $org3Id).ID
    $dep8Id = (AddListItemDepartments $departments "Sport" $org3Id).ID
    

    下一个:
  • 打开组列表新表单页面。
  • 点击右上角的编辑页面。
  • 编辑xsltlistviewformwebpart,将jQuery和spservices附加到JSLink属性
    即:
    ~site/siteassets/jquery-3.2.1.min.js | ~site/siteassets/jquery.SPServices-2014.02.min.js
  • 将CEWP添加到页面,将其移动到表单Webpart下,并插入js级联下拉代码:

  • 代码(请参阅注释)
    $(document).ready(function(){
        $().SPServices.SPCascadeDropdowns({
            relationshipList: "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}", // Your departments list id
            relationshipListParentColumn: "OrganizationsLookup",
            relationshipListChildColumn: "Title",
            parentColumn: "OrganizationsLookup",
            childColumn: "DepartmentsLookup",
            debug: true
        });
    });
    

    这应该工作(也适用于jQuery 3.2.1)

    09-16 22:13