本文作者陈捌华,感谢捌老师倾情奉献
概述
Process builder是Delmia Apriso中主要的业务流程管理工具,也是DELMIA更广泛的Apriso制造运营管理解决方案的核心应用程序,Process Builder允许使用屏幕流管理设计方法和实体(如项目、屏幕、布局、视图和操作(函数))创作用户界面和业务逻辑。该应用程序能够快速方便地管理和修改开发的设计,使您能够根据需要随时更改业务流程。由于增强了对可重用性的支持,以前开发的逻辑可以在新的设计中快速重用。
本文介绍几个在常规培训学习中容易被忽略,但又能有效提升开发效率的Process builder中JavaScript使用技巧。
JavaScript应用说明
以下是在Process Builder中使用JavaScript的场景:
1、使用javascript进行数据验证,例如:验证输入的productNo是否在系统中存在。
2、转换数据-通常可以将查询的数据集转换为单个数据。或者将数据转换为所需的类型。
3、建立一些业务逻辑-您可以通过PB的公式建立一些特殊的业务逻辑。例如,控制操作步骤的路由。
4、控制UI元素-你可以建立一些html输出包括一些特殊的UI元素,包括一些特殊的javaScript函数到客户端或执行一些函数库或输出html。
5、ajax等web应用的先进特性
JavaScript使用方法
JavaScript主要用法有
1、 直接在HTML代码中使用,如:
<button onclick="alert('Hello World!')">Try it</button>
2、 在 <script>标签中使用
<button onclick="myFunction()">Try it</button>
<script>
function myFunction()
{
alert("Hello World!");
}
</script>
3、 在JavaScript Tab页中使用
Html Tab页中:
<button onclick="myFunction()">Try it</button>
Javascript Tab页中:
function myFunction()
{
alert("Hello World!");
}
4、 包含外部Iavascript文件:
在Html和Javascript Tab页中都可以使用占位符链接到外部Javascript文件,如:
选择器语法
有关选择器语法的内容,可以参照https://www.w3school.com.cn/html/index.asp,这里只列出几个主要和常见的用法
1、使用ID选择页面上的单个元素,而使用class 样式名称选择相似类型的多个元素,如:
2、属性选择器
选择器
1、一般都使用JQuery选择器:
如:设置样式: $( ".ErrorZone *" ).css( "border", "3px solid red" );
获取样式: $( ".ErrorZone *" ).css( "border");
如: $(“.myClass”).text ("Hello world!");
$(". myClass").attr('class', 'newClass');
如: ("p").text("Some text");
如: ("#test").text();
如: $("h2, div, span").css("background-color", "yellow");
2、有些设备可能不支持JQuery选择器,则可以使用原生的Javascript进行DOM元素的选择:
querySelector: document.querySelector(“div”);
ID选择: document.getElementById(id)
样式选择: document.getElementsByClassName(names)
3、Apriso 元素样式选择:
常用代码片段和方法
性能相关建议
var doc = document,
blah = doc.getElementById('myID'),
blah2 = doc.getElementById('myID2');
function renderProfiles(o){
var out = document.getElementById(‘profiles’);
for(var i=0;i<o.members.length;i++){
var ul = document.createElement(‘ul’);
var li = document.createElement(‘li’);
li.appendChild(document.createTextNode(data.members[i].name));
li.appendChild(addMemberData(o.members[i]));
}
out.appendChild(ul);
}
function addMemberData(member){
var ul = document.createElement(‘ul’);
for(var i=0;i<member.data.length;i++){
var li = document.createElement(‘li’);
li.appendChild(
document.createTextNode(
member.data[i].label + ‘ ‘ +
member.data[i].value
)
);
}
ul.appendChild(li);
return ul;
}
var names = ['George','Ringo','Paul','John'];
var all = names.length;
for(var i=0;i<all;i++){
doSomeThingWith(names[i]);
}
更短的写法是新建一个变量:
var names = ['George','Ringo','Paul','John'];
for(var i=0,j=names.length;i<j;i++){
doSomeThingWith(names[i]);
}
var arr = ['item 1', 'item 2', 'item 3', ...];
var list = '<ul><li>' + arr.join('</li><li>') + '</li></ul>';
var o = {};
var a = ['Joe','Plumber'];
var x = 9;
do { } while( x-- );
var table = $( "#myTable" );
var parent = table.parent();
table.detach();
// ... add lots and lots of rows to table
parent.append( table );
// Bad: This runs three functions before it
// realizes there's nothing in the selection
$( "#nosuchthing" ).slideUp();
// Better:
var elem = $( "#nosuchthing" );
if ( elem.length ) {
elem.slideUp();
}
// Best: Add a doOnce plugin.
jQuery.fn.doOnce = function( func ) {
this.length && func.apply( this );
return this;
}
$( "li.cartitems" ).doOnce(function() {
// make it ajax!
});
// Fine for up to 20 elements, slow after that:
$( "a.swedberg" ).css( "color", "#0769ad" );
// Much faster:
$( "<style type=\"text/css\">a.swedberg { color: #0769ad }</style>").appendTo( "head" );
最佳实践
$(View).onLoaded(function(){
// jQuery methods go here...
});
if(myState === 'testing') {
console.log('You are in testing');
} else {
console.log('You are in production');
}
var DudeNameSpace = {
name : 'Jeffrey',
lastName : 'Way',
doSomething : function() {...}
}
console.log(DudeNameSpace.name); // Jeffrey
var theform = document.forms["myform"];
var total = (+theform.elements["val1"].value) + (+theform.elements["val2"].value);
alert(total); // This will alert 3
var hamburger = 8.20;
var fries = 2.10;
var total = hamburger + fries;
console.log(total); //Outputs 10.299999999999999
hamburger = hamburger * 100;
fries = fries * 100;
total = hamburger + fries;
total = total / 100;
if(1 === '1') //Returns false
if(1 == '1') //Returns true
if(0 === '') //Returns false
if(0 == '') //Returns true