InfoPath自动编号字段

时间:2009-04-20 06:10:17

标签: infopath autonumber

我正在设计一个infopath(变更请求)表格:

1)如何在创建新表单时添加一个自动递增到下一个数字的文本框(将新的“变更请求”表单添加到表单库中)。

2)如何从现有表单中检索信息到新表单。

注意:该字段不在重复表中。我需要在每个新的变更申请表上生成下一个变更请求编号。

TIA!

2 个答案:

答案 0 :(得分:2)

没有内置方法可以做到这一点,但有几种方法可以实现您想要的(数据库查询或SPList查询)。但是这种要求在某种程度上闻起来像是另一个问题的解决方法。 增加数量的常见情况是:

  • 唯一ID
  • 计算请求数
  • 通过外部列表(与ID相同)进行引用
  • 使ID可猜测(时间戳不是)

如果您需要ID:在大多数情况下,您不必使用整数ID。只需使用表单标题作为自然ID。 (例如客户+时间戳)

如果您需要可猜测的ID,则需要它们,因为外部系统想要访问或引用请求。在这种情况下,尝试将拉方向更改为推方向(例如,通过使用工作流)或让您的其他系统提供“getID”函数,您的表单可以调用该函数来获取已知ID(无需猜测)。

无论如何 - 对我来说,看起来你想要实现这个来解决其他一些问题。也许这个问题有不同的解决方案吗?

答案 1 :(得分:0)

您可以在要自动编号的表单上的文本标题中输入一个标记,例如#num#,然后使用javascript或jquery查找这些标记,并用递增的数字替换它们。

这样做的缺点是,如果将列表导出为ex​​cel,则令牌不会转换为数字。但它是屏幕渲染的一个很好的解决方案。

使用Firebug来确定容纳自动编号标签的容器的类。 也许你可以这样做

function TokenReplacement(){
    var ClassName = 'ms-formlabel';
    var elements = new Array();
    var elements = document.getElementsByTagName('td'); 
    var numerator=0;
    //Now do find and replace on everything else
    for(var e=0;e<elements.length;e++){
        thiselement = elements[e];
        if(thiselement.className == ClassName){
            //autonumber the questions by replacing the #num# token
            if(thiselement.innerHTML.search('#num#') > -1){
                numerator++
                var replacenum = "<b>" + numerator + ".&nbsp;&nbsp;</b>";
                thiselement.innerHTML = elements[e].innerHTML.replace('#num#',replacenum);  
            }
        }
    }
}