问题描述:
我想解析XML以在单击加载按钮后自动填充新/编辑表单上的一些列(单行文本)。
背景:
XML 来自外部资源,而不是来自我的或任何其他 SP 站点/列表/项目。 目前,用户必须检查外部资源的网页,并在创建新项目或更新现有项目时将所需的信息复制/粘贴到新建/编辑表单中。 外部网站提供了一个 API,允许我获取 XML 格式的信息,因此我正在尝试使我的网站用户更轻松地完成此任务。 这个想法是他们只需要输入一个用于识别外部资源的 6 位数字,然后可以将所需的信息放入新/编辑表单中,这样他们只需按保存即可提交/更新此列表中的项目。
到目前为止我做了什么:
我只是一个SharePoint用户,不是开发人员,也不熟悉JS。 幸运的是,我可以找到一些文章作为说明和共享代码来实现一些功能,例如之前通过jQuery.SPservice级联下拉列表。
我做了一些研究,使解析首先作为以下代码工作,现在运行良好。 但它只将XML解析为我自己的CEWP,该CEWP被添加到新的/编辑表单中,而不是添加到新的/编辑表单上显示的列表列中。 理想情况下,如果我知道列的 html 标签 ID,我应该能够完成这项工作。
但是在查看了"SPCascadeDropdowns"如何识别目标列之后,似乎它不是通过标签 id 而是通过称为"静态名称"的东西来实现的,那么我在这里寻求帮助。
现状:
下面是供参考的图像和代码。
图片01
以下代码在 CEWP 中运行,该 CEWP 添加到新/编辑表单的顶部。
<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,这似乎很容易,但我并不:P所以这花了我一段时间才完成。
但是,仍然有一些棘手的事情要让它工作,LZ_MSFT在这个讨论中的第一个答案对我有很大帮助。
如果我没有看到他的答案,我就无法完成此操作,因为我会在代码中没有"要求归档"时陷入困境,并且不知道为什么当所有示例几乎相同但所有示例都不起作用时它不起作用,但所有这些都不起作用。我正在测试其他讨论中的所有样本,但没有人提到这一点。
你用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的值,所以这是我的情况下以来自XML的形式设置列(字段)值的代码。
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);
}