AngularJS应用程序/控制器的防弹密封

时间:2018-04-30 18:18:54

标签: angularjs servicenow jelly

我是ServiceNOW开发人员。最近,ServiceNOW用基于AngularJS的服务门户取代了基于Jelly的内容管理系统。此接口使用AngularJS小部件进行显示和数据操作,包括创建自定义小部件的功能。然而,履行者界面仍然是基于果冻的。

ServiceNOW具有称为UI宏和UI脚本的构造,可以在Jelly界面中使用它来开发OOTB构造不可传递的UI模块,例如服务门户中的小部件。我尝试创建一个基于AngularJS的UI宏,通过包含它们的UI脚本来引用AngularJS App / Controller。我为服务门户创建了一个镜像小部件,它基本上使用相同的AngularJS应用程序/控制器。

小部件在服务门户中运行良好。 UI宏在Service Catalog视图中工作得很漂亮。但是,当履行记录中包含相同的UI宏时,它不再正常运行。控制台日志表明存在Controller冲突。

我猜测ServiceNOW在哪里插入我的UI宏是在另一个AngularJS应用程序的中间,没有期望另一个AngularJS应用程序,只有Jelly。

因此,我的问题是,有没有办法以这样的方式封装我的AngularJS应用程序/控制器,它将完全独立运行,或者如果它被插入到其他一些AngularJS应用程序/控制器中,即它是真正的防弹并且独立于它周围的东西?

仅供参考:关于此问题的ServiceNOW HI事件的结果是UI宏应该只是Jelly。然而,必须为同一件事维护两种完全不同的技术的想法并不吸引人。因此,我正在探索所有可能性。

提前谢谢。

尊敬, 罗伯特

1 个答案:

答案 0 :(得分:0)

servicenow中常见的一个选项是使用< iframe> HTML元素,它使您能够拥有一个单独的页面,其中包含一个单独的范围和一个单独的JS窗口对象(将与内部角度app不冲突)

您可以将所有内容封装在UI页面中,将其视为Angular JS应用程序主文件,您可以参考以下UI页面:

enter code here

package hci.univie.ac.at.myapplication;

import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

/**
 * Created by Benne on 01.05.2018.
 */

public class SelectedGroupActivity extends AppCompatActivity implements 
View.OnClickListener{
TableLayout tableMembers;
TableLayout bills;
TableRow tmrow;
TableRow tmrow1;
TextView tv1, tv2, tv3, tv4, tv5;
Button btn_member;
Button btn_bill;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_selectedgroup);
    setTitle("Gruppenübersicht");
    Drawable d = getResources().getDrawable(R.drawable.button_border);

    tableMembers = (TableLayout)findViewById(R.id.tblmembers);
    bills = (TableLayout)findViewById(R.id.bill_history);

    btn_member = (Button)findViewById(R.id.add_new_member);
    btn_bill = (Button)findViewById(R.id.add_new_entry);
    btn_member.setOnClickListener(this);
    btn_bill.setOnClickListener(this);


    TableRow.LayoutParams lp= new 
TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT,
            TableRow.LayoutParams.WRAP_CONTENT);

    lp.setMargins(5, 5, 5, 5);

    //First Rows to the table Bills
    tmrow1 = new TableRow(this);
    tv3 = new TextView(this);
    tv4 = new TextView(this);
    tv5 = new TextView(this);

    tv3.setBackground(d);
    tv4.setBackground(d);
    tv5.setBackground(d);

    tv3.setHeight(110);
    tv4.setHeight(110);
    tv5.setHeight(110);

    tv3.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
    tv4.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
    tv5.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

    tv3.setTextSize(18);
    tv4.setTextSize(18);
    tv5.setTextSize(18);

    tv3.setTextColor(Color.rgb(255, 0, 0));
    tv4.setTextColor(Color.rgb(255, 0, 0));
    tv5.setTextColor(Color.rgb(255, 0, 0));

    tv3.setText("Beschreibung");
    tv4.setText("Summe");
    tv5.setText("Bezahlt von");

    tmrow1.setId(0);
    tmrow1.addView(tv3);
    tmrow1.addView(tv4);
    tmrow1.addView(tv5);

    tv3.setLayoutParams(lp);
    tv4.setLayoutParams(lp);
    tv5.setLayoutParams(lp);

    bills.addView(tmrow1, new 
TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
            TableLayout.LayoutParams.WRAP_CONTENT));

    bills.setColumnStretchable(0, true);
    bills.setColumnStretchable(1, true);
    bills.setColumnStretchable(2, true);



    for (int i = 0; i < MainActivity.mainGruppe.getMembers().size(); ++i) {
        //Adding members
        tmrow = new TableRow(this);
        tv1 = new TextView(this);
        tv2 = new TextView(this);

        tv1.setBackground(d);
        tv2.setBackground(d);

        tv1.setHeight(110);
        tv2.setHeight(110);

        tv1.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
        tv2.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

        tv1.setTextSize(18);
        tv2.setTextSize(18);

        tv1.setTextColor(Color.rgb(0, 0, 0));
        tv2.setTextColor(Color.rgb(0, 0, 0));

        tv1.setText(MainActivity.mainGruppe.getMembers().get(i));
        tv2.setText("");

        tmrow.setId(i);
        tmrow.addView(tv1);
        tmrow.addView(tv2);

       /* tv1.setLayoutParams(lp);
        tv2.setLayoutParams(lp);*/

        tableMembers.addView(tmrow);
        tableMembers.setColumnStretchable(0, true);
        tableMembers.setColumnStretchable(1, true);
    }
        //Adding bills
    for (int i = 0; i < MainActivity.mainGruppe.getBills().size(); ++i){
        tmrow1 = new TableRow(this);
        tv3 = new TextView(this);
        tv4 = new TextView(this);
        tv5 = new TextView(this);

        tv3.setBackground(d);
        tv4.setBackground(d);
        tv5.setBackground(d);

        tv3.setHeight(110);
        tv4.setHeight(110);
        tv5.setHeight(110);

        tv3.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
        tv4.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
        tv5.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

        tv3.setTextSize(18);
        tv4.setTextSize(18);
        tv5.setTextSize(18);

        tv3.setTextColor(Color.rgb(0, 0, 0));
        tv4.setTextColor(Color.rgb(0, 0, 0));
        tv5.setTextColor(Color.rgb(0, 0, 0));


tv3.setText(MainActivity.mainGruppe.getBills().get(i).getDescription());

    tv4.setText(String.valueOf(MainActivity.mainGruppe.getBills().get(i).getPrice())) ;
        tv5.setText(MainActivity.mainGruppe.getBills().get(i).getPayer());

        tmrow1.setId(i+1);
        tmrow1.addView(tv3);
        tmrow1.addView(tv4);
        tmrow1.addView(tv5);

        tv3.setLayoutParams(lp);
        tv4.setLayoutParams(lp);
        tv5.setLayoutParams(lp);

        bills.addView(tmrow1, new 
TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
                TableLayout.LayoutParams.WRAP_CONTENT));
        bills.setColumnStretchable(0, true);
        bills.setColumnStretchable(1, true);
        bills.setColumnStretchable(2, true);

    }

}

/**
 * Called when a view has been clicked.
 *
 * @param v The view that was clicked.
 */
@Override
public void onClick(View v) {
    int tempid = v.getId();
    Log.i("ID: ", String.valueOf(tempid));

    switch (tempid){
        case (R.id.add_new_member):
            Intent intent = new Intent(this, NewMemberActivity.class);
            startActivity(intent);
            break;
        case (R.id.add_new_entry):
            Intent intent1 = new Intent(this, NewBillActivity.class);
            startActivity(intent1);
            break;
    }

}
}