我有一个脚本,如果不符合条件,则需要可变点走。
每个用户在他们的记录上都被分配到一个“部门”。我们的部门具有树形结构,因此用户分配给的部门可能在其整个“父级”部门的深处。我的脚本需要使用用户部门,然后爬上树以查看它是否属于特定的整体“父级”部门。如果有匹配项,我需要打破循环并显示部门,否则,它需要爬上树。如果它到达树的顶部并且没有匹配项,那么我将使用原始部门名称。
在我当前的代码中,我可以解释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)命令,但是我不确定这是否是正确的路由。
有什么想法吗?
答案 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
}
},