分类: 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; 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关系查找示例: ///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=\" 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;k Innovator工作流签核人为多人Identity的说明:若某工作流节点指定多人identity(包含a,b,c等)为Assignment,且同时启用delegate,当Identity中某一成员(例如a)delegate给其他人后,将自动把Identity中的除该成员以外(除a以外的成员)的所有成员添加到assignment. 查找某对象的所有版本:添加查找条件 执行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方法: 在InnovatorServerConfig.xml中加入: (System.Diagnostics.Debugger.Break();),JavaScript(debugger;)) 配置客户端不用登陆直接使用http URL访问file EXEC sp_change_users_login 'Update_One', 'innovator', 'innovator' 得到 created_by_id getPropertyAttribute(\"created_by_id\ 因篇幅问题不能全部显示,请点此查看更多更全内容 \"; tmpDom.loadXML(tmpstring); var