动态循环,每次遍历点遍历变量

时间:2019-02-12 00:24:59

标签: javascript servicenow

我有一个脚本,如果不符合条件,则需要可变点走。

每个用户在他们的记录上都被分配到一个“部门”。我们的部门具有树形结构,因此用户分配给的部门可能在其整个“父级”部门的深处。我的脚本需要使用用户部门,然后爬上树以查看它是否属于特定的整体“父级”部门。如果有匹配项,我需要打破循环并显示部门,否则,它需要爬上树。如果它到达树的顶部并且没有匹配项,那么我将使用原始部门名称。

在我当前的代码中,我可以解释3个层次的深度,但是可能需要动态地降低很多层次。

var dept1 = new DepartmentUtils().getParentDepartment(current.department.sys_id);
var dept2 = new DepartmentUtils().getParentDepartment(current.department.parent.parent.sys_id);
var dept3 = new DepartmentUtils().getParentDepartment(current.department.parent.parent.parent.sys_id);

if(!JSUtil.nil(dept1))
{
    retVal = dept1;
}
else if(!JSUtil.nil(dept2))
{
    retVal = dept2;
}
else if(!JSUtil.nil(dept3))
{
    retVal = dept3;
}
else
{
    retVal = current.department.name;
}

从本质上讲,我想我需要从当前部门级别开始,看看它是否是一个特定的名称,如果不是,请查看它的父名称,进行比较,然后重复直到我到达顶部(其中父为空)。

我的问题是我不知道该如何处理点走。我尝试使用“ .parent” .repeat(x)命令,但是我不确定这是否是正确的路由。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

您可以使用循环重复访问部门的g1属性。如果在该级别上未找到任何内容,请将.parent重新分配给下一个department

.parent

答案 1 :(得分:0)

我假设您具有类似这样的数据结构

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/content_main"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/app_bar_main">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/banner_main">

            <WebView
                android:id="@+id/web"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:minHeight="400dp" />

    </ScrollView>

    <RelativeLayout
        android:id="@+id/exit_popup"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="0dp"
        android:orientation="vertical"
        android:visibility="gone"
        android:background="#80111111"
        android:padding="0dp">

        <android.support.v7.widget.CardView
            android:id="@+id/cardView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_gravity="center"
            android:background="#fff"
            app:cardUseCompatPadding="true"
            app:cardElevation="10dp"
            app:cardCornerRadius="0dp"
            ads:contentPadding="10dp">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textAlignment="center"
                    android:padding="5dp"
                    android:text="ARE YOU SURE TO EXIT?"
                    android:textColor="#000"
                    android:textSize="18dp"
                    android:textStyle="bold" />

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:paddingBottom="0dp"
                    android:paddingLeft="0dp"
                    android:paddingRight="0dp"
                    android:paddingTop="7dp">

                    <Button
                        android:id="@+id/button_cancel"
                        android:drawableLeft="@drawable/ic_back"
                        style="@style/Widget.AppCompat.Button.Colored"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:padding="18dp"
                        android:layout_marginRight="7dp"
                        android:layout_weight="1"
                        android:text="Nope"
                        android:textColor="#fff"
                        android:textSize="14sp" />

                    <Button
                        android:id="@+id/button_exit"
                        android:drawableRight="@drawable/ic_arrow_forward"
                        style="@style/Widget.AppCompat.Button.Colored"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:padding="18dp"
                        android:layout_weight="1"
                        android:text="Yes"
                        android:textColor="#fff"
                        android:textSize="14sp" />

                </LinearLayout>
            </LinearLayout>
        </android.support.v7.widget.CardView>
    </RelativeLayout>
</RelativeLayout>

您可以定义一个递归函数来搜索树中的数据。

var current = {
    department: {
        parent: {
            sys_id: "parent_1",
            parent: {
                sys_id: "parent_2",
                parent: {
                    sys_id: "parent_3",
                    parent: {
                        sys_id: "parent_4"
                    }
                }
            }
        }
    }
}

答案 2 :(得分:0)

我实际上尝试了一种不同的方法,并且似乎可行。我创建了一个遍历每次的循环检查和查看当前sys_id是否匹配3个特定sys_ids之一的函数。如果是这样,则显示该名称,否则,检查父级,等等。

var dept1 = new DepartmentUtils().getParent(current.department.sys_id);

getParent: function(request)
{
    var parent_name = '';
    var current_name = request;
    var lookup= new GlideRecord('cmn_department');

    lookup.addQuery('sys_id', current_name);
    lookup.query();
    if(lookup.next())
    {

        if(lookup.sys_id == 'xxxxxxx' || lookup.sys_id == 'yyyyyyyy' || lookup.sys_id == 'zzzzzzzzzz')
        {
            return current_name;
        }
        else{

            current_name = lookup.parent.sys_id;
            parent_name = getParent(current_name); // this is recursive functionality the function will get call until last most parent record find        
        }
    }
    if(!JSUtil.nil(parent_name))
    {
        return parent_name; // It will return most parent record
    }
    else
    {
        return current_name; // If we don't have any parent it will return what you passed in parameter above to call function
    }
},