代码之家  ›  专栏  ›  技术社区  ›  Leon Tayson

infopath自动编号字段

  •  2
  • Leon Tayson  · 技术社区  · 15 年前

    我正在设计一个infopath(更改请求)表单:

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

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

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

    蒂亚!

    2 回复  |  直到 15 年前
        1
  •  2
  •   MrFox    15 年前

    没有内置的方法可以做到这一点,但是有几种方法可以实现您想要的功能(数据库查询或splist查询)。但这种请求似乎是解决另一个问题的办法。 增加人数的常见情况有:

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

    如果您需要一个id:在大多数情况下,您不必使用整数id。只需使用表单标题作为自然id(例如customer+timestamp)

    如果需要可猜测的id,则需要它们,因为外部系统希望访问或引用请求。在这种情况下,尝试将pull方向更改为push方向(例如,使用工作流),或者让其他系统提供一个“getid”函数,表单可以调用该函数来获取已知的id(无需猜测)。

    不管怎样-对我来说,看起来你想实现这一点来解决其他问题。也许这个问题也有不同的解决方案?

        2
  •  0
  •   bgmCoder    12 年前

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

    这样做的缺点是,如果将列表导出到excel,则标记不会转换为数字。但这是一个很好的屏幕渲染解决方案。

    使用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);  
                }
            }
        }
    }
    
    推荐文章