我是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。然而,必须为同一件事维护两种完全不同的技术的想法并不吸引人。因此,我正在探索所有可能性。
提前谢谢。
尊敬, 罗伯特
答案 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;
}
}
}