如何通过 CEWP 将 XML 解析为 new/edit 表单上 SharePoint 列表的列(字段)

How to parse XML to a column(field) of SharePoint List on a new/edit form via CEWP

问题描述:

我想解析 XML 以在单击加载按钮后自动填充 new/edit 表单上的某些列(单行文本)。

背景:

XML 来自外部资源,而不是来自我或任何其他 SP site/list/item。 目前,用户在创建新项目或更新现有项目时必须检查外部资源的网页和 copy/paste 他们需要的信息到 new/edit 表单。 外部网站提供了一个 API,它允许我以 XML 格式获取信息,因此我试图让我网站的用户更轻松地完成这项任务。 这个想法是他们只需要输入一个用于识别外部资源的 6 位数字,然后可以将所需的信息放入 new/edit 表单中,这样他们只需要按保存到 submit/update此列表中的项目。

到目前为止我做了什么:

我只是一个 SharePoint 用户,不是开发人员,也不熟悉 JS。 幸运的是,我可以找到一些文章作为指导和共享代码,供我实现一些功能,例如通过 jQuery.SPservice 之前的级联下拉列表。

我做了一些研究以使解析首先作为以下代码运行,现在运行良好。 但它只将 XML 解析为我自己的 CEWP,该 CEWP 添加到 new/edit 表单,而不是 new/edit 表单上显示的列表列。 理想情况下,如果我知道列的 html 标记 ID,我应该能够完成这项工作。

但是在查看了 "SPCascadeDropdowns" 如何识别目标列之后,似乎它不是通过标记 ID 而是通过名为 "StaticName" 的东西实现的,那么我在这里寻求帮助。

当前状态:

这是图片和代码供您参考。

image01

以下代码是 CEWP 中的 运行 添加在 new/edit 表格顶部的代码。

<script type="text/javascript" language="javascript" src="../../CEWP%20Libraries/jquery-1.12.4.min.js"></script>
<b>PR number:</b> PR-<input type="text" id="PRNumber" value="6 digits" maxlength="6" size="3"></input>
<input type="button" value="Load PR" onclick="loadPR($('#PRNumber').val());"></input>
<b>PR Title:</b> <p id="prTitle"></p></br>
<script type="text/javascript">
function loadXMLDoc(dname) 
{
try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    }
  catch(e) {alert(e.message)}
  }
try 
  {
  xmlDoc.async=false;
  xmlDoc.load(dname);
  return(xmlDoc);
  }
catch(e) {alert(e.message)}
return(null);
}
function loadPR(PRNumber)
{
    xmlDocPrInfo=loadXMLDoc("http://fakeurl"+PRNumber);

    document.getElementById("prTitle").innerHTML = xmlDocPrInfo.getElementsByTagName("Title")[0].childNodes[0].nodeValue;

}
</script>

好吧,这些天我做了更多的研究,解决方案比我想象的 jQuery 更容易。(如果我熟悉 jQuery,这似乎很容易,但我'我不是 :P 所以这花了我一段时间才完成。)

但是,要使其正常工作还有一些棘手的问题,LZ_MSFT in this discussion 的第一个答案对我帮助很大。

如果我没有看到他的回答,我将无法完成这项工作,因为我会因为 "Require Filed" 不在代码中而陷入困境,并且不知道为什么当所有样本都差不多时它不起作用相同,但所有这些都不起作用。我正在测试其他讨论中的所有样本,但没有人提到这一点。

您设置jQuery列(字段)的模板是

$("input[title='the display name in the form']").val("the text value you want to set");

而如果是必填列(字段),则需要

$("input[title='the display name in the form Require Field']").val("the text value you want to set");

请注意,这只是显示名称,而不是 FieldInternalName,如果 title= 后跟 FieldInternalName代码。因此,我想如果您要使用此代码使其工作,您将需要在表单中使用唯一的显示名称。

此外,在我的例子中,我需要来自 XML 的值,所以在我的例子中,这是设置来自 [= 的表单中的列(字段)值的代码34=].

function loadPR(PRNumber)
{
    xmlDocPrInfo=loadXMLDoc("fakeurl"+PRNumber);
    xmlDocSwPrInfo=loadXMLDoc("fakeurl"+PRNumber);


    $("input[title='Title Required Field']").val(xmlDocPrInfo.getElementsByTagName("Title")[0].childNodes[0].nodeValue);
    $("input[title='PR Status Required Field']").val(xmlDocPrInfo.getElementsByTagName("State")[0].childNodes[0].nodeValue);
    $("input[title='Version Reported Required Field']").val(xmlDocSwPrInfo.getElementsByTagName("VersionReported")[0].childNodes[0].nodeValue);
    $("input[title='Version Fixed']").val(xmlDocSwPrInfo.getElementsByTagName("VersionFixed")[0].childNodes[0].nodeValue);
}