如何通过CEWP

时间:2019-07-12 13:09:02

标签: javascript jquery sharepoint spservices cewp

问题描述:

我想解析XML,以在单击“加载”按钮后自动填充新/编辑表单上的某些列(单行文本)。

背景

XML来自外部资源,而不来自我或任何其他SP网站/列表/项目。 当前,用户在创建新项目或更新现有项目时,必须检查外部资源的网页并将所需的信息复制/粘贴到新/编辑表单中。 外部网站提供了一个API,该API可让我以XML格式获取信息,因此我正试图使该任务对我的网站用户来说更加容易。 这样的想法是,他们只需要输入一个6位数字来标识外部资源,然后就可以将所需的信息放入新/编辑表单中,因此他们只需要按Save即可提交/更新此列表中的项目。

我到目前为止所做的事情:

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

我做了一些研究,以使解析首先可以作为下面的代码运行,现在可以正常运行。 但是它仅将XML解析为我自己的CEWP,该CEWP被添加到新的/编辑表单中,而不是添加到新的/编辑表单中显示的列表列中。 理想情况下,如果我知道该列的html标签ID,那么我应该就能完成这项工作。

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

当前状态:

以下是图片和代码供您参考。

image01

以下代码在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>

1 个答案:

答案 0 :(得分:0)

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

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

如果看不到他的答案,我将无法完成此操作,因为我会因为代码中没有“要求归档”而陷入困境,并且不知道为什么当所有样本几乎相同但全部样本均不起作用时他们中的任何一个都行不通。我正在测试其他讨论中的所有示例,但是没有人提到。

使用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形式设置column(field)的值。

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);
}