您的当前位置:首页正文

Aras Innovator二次开发的一些常用代码段

2021-12-04 来源:好走旅游网
Aras Innovator二次开发的一些常用代码段。(笔记)

分类: Aras Innovator 2013-08-02 01:19 473人阅读 评论(0) 收藏 举报

///每个关系类对应一张表

例如part和BOM关系表为Part BOM javascript方法可以不写return this; ///Innovator连接服务器 Example:

HttpServerConnection connection=IOMFactory.CreateHttpServerConnecton(\"服务器名\数据库名\用户名\密码\");大部分版本可以。 Item login_result = connection.Login(); Aras执行存储过程,注意区分大小写:

Item resItem = inn.newItem(\"SQL\ resItem.setProperty(\"name\ resItem.setProperty(\"PROCESS\ resItem.setProperty(\"ARG1\ resItem.setProperty(\"ARG2\ resItem.setProperty(\"ARG3\ resItem = resItem.apply();

////Innovator查询,查询中的字段应严格注意大小写,属性一般都为小写 Example:

Item MyItem = MyInnovator.newItem(\"User\MyItem.setAttribute(\"select\Item MyResult = MyItem.apply();

for (int i=0; imsgBox.AppendText(\"\\n \" + i + \" \" +

MyResult.getItemByIndex(i).getProperty(\"first_name\MyResult.getItemByIndex(i).getProperty(\"last_name\ }

///Document实例的添加

注:必填项属性必须设置,属性名一般为小写,若为大写将不可识别, 属性的空格用_代替, 若属性值为系统已有的内置属性,则必须与系统内置属性值相等,区分大小写 Example:

Innovator innovator = new Innovator(connection); Item item = innovator.newItem(\"Document\

item.setProperty(\"item_number\ item.setProperty(\"name\

item.setProperty(\"classification\ item.setProperty(\"authoring_tool\ item.setProperty(\"effective_date\ item = item.apply();

///修改多语言字段

注:itemtype为对象类名称,lang为多语言字段缩写,name为字段名 Example: string lang=\"zh\";

Item resultitem = innovator.newItem(itemtype, \"edit\"); resultitem.setAttribute(\"id\

resultitem.setProperty(name, value, lang); resultitem = resultitem.apply(); ///提升版本 方法1:

Item resultitem = innovator.newItem(itemtype, \"edit\"); resultitem.setAttribute(\"id\

resultitem.promote(\"active\ resultitem = resultitem.apply(); 方法2:

q.setAttribute(\"action\

q.setAttribute(\"typeId\ q.setID(thisItem.getID()); q.setProperty(\"state\ r = q.apply();

///Innovator RelationShip的添加

注:添加RelationShip时,relationshipType需指定一个联系的对象(item) 添加关系时应特别注意,向文档中添加文件时的关系添加,

如向Part中添加BOM的关系操作不同,不同对象的关系添加方式不同 Example:

此例子为向文档中添加已存在的文件

Innovator innovator = new Innovator(connection);

Item item = innovator.newItem(\"Document\ item.setProperty(\"item_number\

item.setProperty(\"classification\ item.setProperty(\"name\

item.setProperty(\"authoring_tool\ item.setProperty(\"effective_date\ ///获取关联文件

Item file = innovator.newItem(\"File\

file.setProperty(\"select\

file.setProperty(\"id\ file = file.apply();

///Document File表存储了文档和文件的关系

Item docfile = innovator.newItem(\"Document File\ docfile.setProperty(\"source_id\

docfile.setPropertyAttribute(\"source_id\item.getProperty(\"keyed_name\"));

docfile.getPropertyAttribute(\"source_id\ docfile.setProperty(\"related_id\

docfile.setPropertyAttribute(\"related_id\ docfile.setPropertyAttribute(\"related_id\ item.addRelationship(docfile); item.apply();

判断当前窗体对象是否被锁定: if (!document.thisItem.isNew() &&

document.thisItem.getAttribute(\"action\") != \"add\" &&

document.thisItem.isLocked() != 1 ) {return top.aras.newError(\"请先锁定窗体!\");} 方法简化:为Document添加File关系为:

Item relationship=innovator.newItem(\"Document File\ relationship.setRelatedItem(file); item.addRelationship(relationship); item.apply(); ///C# 连接excel

string strconn = \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'\"; ///连接字符串中的空格不可去掉

string command = string.Format(\"select * from [{0}$]\不可去掉 using (OleDbConnection oleconnection = new OleDbConnection(string.Format(strconn, filepath))) {

oleconnection.Open(); DataTable st =

oleconnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); OleDbDataAdapter oleadapter = new OleDbDataAdapter(command, oleconnection);

DataSet ds = new DataSet(); oleadapter.Fill(ds); return ds; } ///小知识点

activity表的message为显示在Inbasket中的介绍(introduction)

///关于Item.apply()方法的说明

当Item.apply()提交的数据与数据库中数据产生冲突时,会自动不予提交 ///上传文件 path文件路径

Item item = innovator.newItem(\"File\ int index=path.LastIndexOf(\"\\\\\"); string filename=path.subString(index+1); item.setProperty(\"filename\ item.attachPhysicalFile(path); item = item.apply(); 提升生命周期状态:

actionitem=innovator.newItem(\"Action Item\

actionitem.setAttribute(\"where\actionitem.promote(\"active\actionitem=actionitem.apply(); AML关系查找示例:

1

2

///javascript操作页面元素

var results=document.thisItem;///获取页面元素

var element=results.getItemsByXpath('//Item[@type=\"TPK_Millstone\"]'); document.thisItem.isLocked()=1表示页面元素被锁定 document.thisItem.isNew() 判断页面对象是否为新建对象

document.thisItem.getAttribute(\"action\") != \"add\" 判断当前的操作是否为add

///获取属性的子属性

string newitem = resulitem.getPropertyAttribute(\"current_state\///赋予权限,applySQL只有当前用户为Administrator或super user身份时可用,Aras PLM也具有applySQL的权限,一般在系统内部使用 其他身份若要使用applySQL需要先赋予权限 Aras.Server.Security.Identity plmIdentity =

Aras.Server.Security.Identity.GetByName(\"Aras PLM\");

bool PermissionWasSet = Aras.Server.Security.Permissions.GrantIdentity(plmIdentity); if (PermissionWasSet) Aras.Server.Security.Permissions.RevokeIdentity(plmIdentity);

/// 工作流实例间的关系,当工作流实例根据模板建立后,基本与模板没有关系, (a.source_type=itemtype.id a.source_id=item.id)

Workflow(a)----1:1---->Workflow Process(b)----1:N---->Workflow Process Activity(c)-----1:1----->Activity(d)---1:N-->Activity Assignment(e) a.related_id=b.id, c.source_id=b.id c.source_id=b.id, c.related_id=d.id e.source_id=d.id,e.related_id=identity.id Workflow Process Path:source_id(源activity),related_id(关联activity)

当为工作流添加权限时,它会自动从activity处获得权限。如果是动态添加activity则必须

在Activity添加后再为添加path,这样权限会自动添加。手工设置权限将无效(applySQL除外)。

更新缓存 在页面中填写值完毕后通过此方法更新缓存中的值,否则依然为原数据 handleItemChange(字段id,字段值);

打开某个对象的方法: function showorkflowprocess() {

var itemNd = top.aras.getItemById(\"对象类名称\对象类id\ var myLock =false;

top.aras.uiShowItemEx(itemNd,

top.aras.getPreferenceItemProperty(\"Core_GlobalLayoutop.aras.getVariable('TearOff') == 'true'); }

隐藏Pr页签中的Files页签: top.hideIssueTabs=function(){

if(!parent.relationships||!parent.relationships.relTabbarReady||parent.relationships.relTabbar.GetTabOrder(\"|\")===\"\") {

setTimeout(\"top.hideIssueTabs()\ return; }

var tabbar=parent.relationships.relTabbar;

var tabID=tabbar.getTabId(\"Files\");///得到Files的tabId

if(tabID!=\"undifined\"){tabbar.SetTabVisible(tabID,false); }///将Visible设置为false };

setTimeout(\"top.hideIssueTabs()\

快速获取数据库连接字符串的方法:建一个后缀名为udl的文件 ///项目模板的存储 Project Template的存储:

project_template.wbs_id=wbs_element.id project_template.wbs_id=sub_wbs.source_id sub_wbs.related_id=wbs_element.id

wbs_element和Activity2的对应关系为WBS_Activity2

打开workflow签核页需要传递的参数: 1 var params=new Object(); params.aras=top.aras;

params.activity=top.aras.getItemById(\"activity\ params.wflName=wflName; ///workflow process的名称 params.wflId=workflowProcessID; ///workflow process的id params.assignmentId=assignmentId;///activity assignment的id params.itemId=itemId; ///item的id

showModalDialogWithDelay(\"InBasket-VoteDialog.html\dialogHeight:400px; dialogWidth:700px; status:1; help:0', true); 打开Project签核页需要传递的参数: var params=new Array(); params[0]=window;

params[1]=activityID; ///activity2的ID

showModalDialog('../../Solutions/Project/scripts/ActivityCompletionWorksheet/ACWDialog.html', params, 'dialogHeight: 320px; dialogWidth:400px; status:1; help:0; resizable:1', true);

javascript获取对象类关系:

top.aras.getItemRelationShips(\"Project\Inbasket中workflow activities的数据来自Activity 和Activity Assignment. Inbasket中Project Activities的数据来自Activity2 和Activity2 Assignment. 当前状态(Pending-Active-Complate)由Activity2.state字段标识。

activity2的date_start_sched,date_due_sched分别表示计划开始时间和计划结束时间。 9.2版本下notification_control在中文模式下报错:

修改aras\\Innovator\\Innovator\\Client\\javascript\notifications.js中 if (!notification_control) { return;

throw new Error(1, \"ArgumentException: notification_control can't be undefined\"); }

这不是最好的办法,只是暂时不报错 ///获取网格中的选中对象

mainTreeApplet=parent.tree.treeApplet;

var selectedRowId = mainTreeApplet.getSelectedId();

熟悉[STAThread]

javascript操作gridApplet:

gridApplet.cells(relationshipID,'列数').GetValue()获取某行某列的值

gridApplet.cells(relationshipID,'列数').setEditType(1)将单元格设置为编辑状态 javascirpt禁用元素:disabled=true ,设置元素为只读:readOnly=true(注意大小写) Javascript 获取时间日期的各种格式 var myDate = new Date();

myDate.getYear(); //获取当前年份(2位)

myDate.getFullYear(); //获取完整的年份(4位,1970-) myDate.getMonth(); //获取当前月份(0-11,0代表1月) myDate.getDate(); //获取当前日(1-31)

myDate.getDay(); //获取当前星期X(0-6,0代表星期天) myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数) myDate.getHours(); //获取当前小时数(0-23) myDate.getMinutes(); //获取当前分钟数(0-59) myDate.getSeconds(); //获取当前秒数(0-59) myDate.getMilliseconds(); //获取当前毫秒数(0-999) myDate.toLocaleDateString(); //获取当前日期 myDate.getUTCYear() ///获取格林威治年份 1-12 myDate.getUTCMonth() ///获取格林威治月份 0-11 myDate.getUTCDate() //获取当前日(1-31)

var mytime=myDate.toLocaleTimeString(); //获取当前时间 myDate.toLocaleString( ); //获取日期与时间

Date.parse(datestring) -- 解析一个日期的字符串,并返回该日期距1970年1月1日午夜之间的毫秒数(时间戳)

关于Federated Date的几篇文章:

http://www.aras.com/community/wikis/kb/further-example-of-federated-data.aspx

ItemType可换版与InBasket的显示:

ApplicationForm设置为可换版时,不能在InBasket中显示(9.2)。其他版本无此问题。 关于外部数据类型的理解: 参考地址:

http://www.aras.com/Community/wikis/kb/further-example-of-federated-data.aspx

http://www.aras.com/Community/wikis/kb/how-to-use-federation.aspx 外部数据类型表示数据从外部数据库获取,基本思路为: 1 定义某属性为外部数据类型;

2 在该对象类ServerEvents的OnGet事件中,根据对应关系从外部数据库读取数据;并将其设置到对应属性。

页面aras的一些使用方法:

top.aras.applyAML()(此方法返回字符串)或Aras.IOM.Innovator.applyAML(此方法返回Item对象)

top.aras.applyItem(aml)

top.aras.createXMLDocument()创建xml文档对象 aras.getItemProperty(ItemType,Property) aras.getItemById(ItemType,id)

top.aras.getItem(typeName,\"id='\"+id+'\") aras.clearStatusMessage(statusId)清空状态信息 aras.getUserID()得到当前用户ID aras.getLoggedUserItem()

aras.isLockedByUser(itemid)判断对象是否被当前用户锁定 aras.removeFromCache(itemid) aras.AlertError()弹出错误信息 aras.AlertSuccess()弹出成功信息

top.aras.getDotNetDatePattern(\"short_time\")

top.aras.convertFromNeutral(dtstr,\"date\var inn=top.aras.newIOMInnovator();

top.aras.getScriptsURL() ///获取到client/scripts/的路径

系统从模板生成Project Tree的方法为:onCreateNewProject

查找时尽量精确的查找办法:采用可唯一确定对象的查找办法,或多添加一些已确定的搜索条件

客制页面searchDialog1.html的使用:

GridApplet的按列排序:gridApplet.Sort(1,true); 列下标从0开始,1表示第二列,true表示按升序排列 Form取值:

document.getElementsByName(\"属性名\")[0]获取页面元素

document.thisItem.getProperty(\"Property Name\")获取属性名 ///此方法即使Form中未显示的属性也可以查找

签核页面投票选项的修改(路径scripts\\InBaske\\InBasket-VoteDialog.html): if (CanDelegate == \"1\") { var newOption = new Option(); newOption.text = \"委托\"; newOption.textname = \"委托\"; newOption.value = path_id; VoteList.options[voteIndex++] = newOption; } if (CanRefuse == \"1\") { var newOption = new Option(); newOption.text = \"拒绝\"; newOption.textname = \"拒绝\"; newOption.value = path_id; VoteList.options[voteIndex++] = newOption; 打开文件

URl:http://localhost/InnovatorServer/vault/vaultserver.aspx?dbName={db}&fileID={id}&fileName={name}

下载文件内容的一个参考网

址:http://www.aras.com/Community/forums/t/648.aspx?PageIndex=2 sql int类型相除取两位小数:

问题:两个int 型的值 ,比如:10和3 ,我想让10除以3得到3.33(保留两位小数,四舍五入)

解决办法:convert(decimal(10,2),round(@a*1.00/@b,2)) @a,@b分别为int型

Project Tree中将某列设置为不可修改:在OnEditCell方法中添加判断:if(colId==\"列序号\"){return false;}

xpath同时匹配属性和属性值:resItem.dom.selectSingleNode(\"//Item[@type='Activity2 Assignment'][is_complete='1']/related_id/Item\")

使用AML或setProperty同时更新多项数据时,注意加上serverEvents=\"0\"的限制条件,在某些情况下,若不加此行数据将更新失败,错误提示为\"the item is not locked\"。 创建Document,预置一些属性并打开(最初用于Client/scripts/relationshipsGrid.html的newRelationship方法):

var doc=top.aras.newItem(\"Document\");

var prjele=doc.ownerDocument.createElement(\"tpk_doc_prj\"); prjele.text=\"test\"; doc.appendClild(prjele); top.aras.uiShowItemEx(doc);

发送邮件方法:

CCO.Email.SendEmailToIdentityEx(ref fromuser, ref subject, ref body, ref body_html, ref sender);

注:sender为发件人,取值为User的login_name; fromuser为收件人取值为Identity的keyed_name.

同一页面中关系对象更新父对象(关系页签下的对象更新父窗体信息,在TPK的Yield Report处用到此方法):

可用parent.item获取父元素,然后更改父元素属性对应的xml即可。 具体写法为(注意父对象是否被锁定):

parent.item.selectSingleNode(\"属性名\").text=属性值

配置configureableGrid时:若需要某一字段可编辑,则此字段属性不能为Federated. 在窗体中获取relationship的页面:

var subForm=top.document.frames[2].document; 中立时间转化为本地时间:

I18NSessionContext i18=this.getInnovator().getI18NSessionContext(); string currDate

=i18.ConvertNeutralToUtcDateTime(prsub.getProperty(\"due_date\"),\"yyyy-MM-dd HH:mm:ss\");

top.aras.uiShowItemEx(item)方法的注意事项:item的格式类似innovator.getItemById(\"ItemType\其他格式将出错。

引入dll的参考文章:

http://www.aras.com/community/wikis/kb/how-to-consume-a-web-service-in-a-server-method.aspx

获取applyMethod的返回结果: var

result=innovator.applyMethod(\"tpk_CheckIdentity\nnerText;

关于Innovator的Date类型的说明:

若一个窗体包含多个Date类型的field,且Date类型包含long date和short date两种类型,则时间控件将默认为是long date型,short date型的field将保存出错;建议将同一Form的date设置一致.

加载字符串成xml文档并设置行的颜色

(最初用于改变Inbasket的任务颜色,Client/scripts/Inbasket/Inbasket.html的

populateActivityGrid方法,修改top.aras.getAssignedTasks方法(aras_object.js文件)): var tmpDom=top.aras.createXMLDocument();

string tmpstring=\"\"; tmpDom.loadXML(tmpstring); var

bgcol=tmpDom.selectSingleNode(\"//tr[@id='\"+actid+\"']\").ownerDocument.createAttribute(\"BGCOLOR\"); bgcol.text=\"#0099FF\";

tmpDom.selectSingleNode(\"//tr[@id='\"+actid+\"']\").setAttributeNode(bgcol);

top.aras下的方法(client\\javascirpt文件夹下):

aras_object.js,field_method.js,generic_method.js,itemtype_method.js item_methods.js,item_methodsEx.js,ui_method.js,ui_methodsEx.js widget_method.js,workflow_method.js

窗体小知识点:

1 窗体的字段有时显示为灰色,是由于disabled属性引起的,将其设置为false则显示为黑

色;

2 DropDownList字段只读状态下都为灰色,目前没有比较好的处理办法;

3 Date类型某些情况下即使设置disabled=false依然显示为灰色,将其修改为text格式则显示为黑色;

4 foreign字段默认显示为灰色(View和edit,若需将其显示为黑色,需自定义方法实现)。 以下方法将所有的input的disabled设置为false,一般用于查看模式: var allInput=document.getElementsByTagName(\"input\"); if(allInput!==undefined) {

for(var k=0;kallInput[k].disabled = false; allInput[k].readOnly= true; } }

Innovator工作流签核人为多人Identity的说明:若某工作流节点指定多人identity(包含a,b,c等)为Assignment,且同时启用delegate,当Identity中某一成员(例如a)delegate给其他人后,将自动把Identity中的除该成员以外(除a以外的成员)的所有成员添加到assignment. 查找某对象的所有版本:添加查找条件null即可

执行Project的Update Project方法时,有时会出现错误,但没有错误详细信息。这是因为方法individualUpdate中使用的是getErrorDetail()方法,修改为getErrorString()方法可获取错误详细信息。 关闭当前窗体:top.close();

删除关系同时新增新的关系,以Document---Document File为例: Item document=inn.newItem(\"Document\document.setAttribute(\"id\

Item deldocFile=inn.newItem(\"Document File\deldocFile.setAttribute(\"id\document.addRelationship(deldocFile);

Item docFile=inn.newItem(\"Document File\document.addRelationship(docFile); document.apply();

VB编程getItemById如果查找不到结果返回Nothing,如果用get若查找不到结果返回的不是Nothing.

nash.aspx页面applyMethod方法:

value1value2 管理员登入系统,新增用户,随之也在identity,新增了角色,在角色里我们可以给角色添加角色成员。 Aras9.3调试

在InnovatorServerConfig.xml中加入:

在method中加入Debug断点(.net

(System.Diagnostics.Debugger.Break();),JavaScript(debugger;)) 配置客户端不用登陆直接使用http URL访问file

0 还原数据库执行存储过程

EXEC sp_change_users_login 'Update_One', 'innovator', 'innovator' 得到 created_by_id

getPropertyAttribute(\"created_by_id\

因篇幅问题不能全部显示,请点此查看更多更全内容