[Aras笔记] 从Excel快速贴上受影响物件并建立变更单

###本文章内容皆由我本人开发撰写与分享

在变更单建立时,经常会花时间编辑受影响物件
经常是为了从Excel档案填写到PLM系统上
此快速贴上并汇入变更单就因此而生

准备如下
1.自订一个表单
2.在表单上的Import新增Click程序
3.在Action新增开启表单程序

如下示意操作
https://ithelp.ithome.com.tw/upload/images/20210127/20106503psZONLBkhR.png
https://ithelp.ithome.com.tw/upload/images/20210127/20106503CjpI62BGh6.png
https://ithelp.ithome.com.tw/upload/images/20210127/20106503HqpJcaNZho.png
https://ithelp.ithome.com.tw/upload/images/20210127/20106503eFlT6YCMYa.png


1.新增一份表单,并设计出适合的介面,拉出一个按钮且新增click程序,下面程序码可参考自己的系统现况去调整
https://ithelp.ithome.com.tw/upload/images/20210127/20106503fJkjTIqzOd.png

var inn = new Innovator();
var prt = typeof(parent.document.item) == "object" ? parent.document : parent.parent;
var tmpThisItem = typeof(parent.document.thisItem) == "object" ? parent.document.thisItem : parent.thisItem;
var topWnd = aras.getMostTopWindowWithAras(window);
topWnd = topWnd.main || topWnd;

//console.log(topWnd.dialogArguments.cur_item);
var theItem = topWnd.cur_item;
var changesItemtype= theItem.getAttribute("type","");

//取得要汇入的文字框
var textarea_import = document.getElementsByName("txtBOM")[1];
var textarea_log = document.getElementsByName("txtLog")[1];
if(textarea_import.value==="" || textarea_import.value===undefined){
    aras.AlertError("Parts List is null.");
}

var logs = "";
//解析每一行的编号
var rows = textarea_import.value.split("\n");

for(var i=0;i<rows.length;i++){
    var part_num = rows[i];
    if(part_num==="") continue;
    //若为D_开头编码为Document或CAD
    if(part_num.substring(0,1)=='D'){
        var partItem = inn.newItem("Document","get");
            partItem.setProperty("item_number",part_num);
            partItem.setProperty("is_current","1");
            partItem = partItem.apply();
        if(partItem.isError()){
            partItem = inn.newItem("CAD","get");
            partItem.setProperty("item_number",part_num);
            partItem.setProperty("is_current","1");
            partItem = partItem.apply();
        }
        if(partItem.isError()==false){
            //若是草稿就新增料号
            if(partItem.getProperty("state","")==="Preliminary"){
                var changeItem = inn.newItem("Affected Item","add");
                    changeItem.setProperty("action","Add");
                    changeItem.setProperty("new_item_id",partItem.getID());
                    
                var affectItem = inn.newItem(changesItemtype+" Affected Item","add");
                    affectItem.setProperty("source_id",theItem.getID());
                    affectItem.setPropertyItem("related_id",changeItem);
                    affectItem = affectItem.apply();
                    if(affectItem.isError()){
                        logs+=part_num +" Error : "+affectItem.getErrorString()+"\n";
                    }else{
                        logs+=part_num +" OK.\n";
                    }
            }else{
                //反之则变更
                var changeItem = inn.newItem("Affected Item","add");
                    changeItem.setProperty("action","Change");
                    changeItem.setProperty("affected_id",partItem.getID());

                var affectItem = inn.newItem(changesItemtype+" Affected Item","add");
                    affectItem.setProperty("source_id",theItem.getID());
                    affectItem.setPropertyItem("related_id",changeItem);
                    affectItem = affectItem.apply();
                    if(affectItem.isError()){
                        logs+=part_num +" Error : "+affectItem.getErrorString()+"\n";
                    }else{
                        logs+=part_num +" OK.\n";
                    }
            }
        }else{
            logs+=part_num +" Error : "+partItem.getErrorString()+"\n";
        }
    }else{
        //搜寻该料号
        var partItem = inn.newItem("Part","get");
            partItem.setProperty("item_number",part_num);
            partItem.setProperty("is_current","1");
            partItem = partItem.apply();
        if(partItem.isError()){
            logs+=part_num +" Error : "+partItem.getErrorString()+"\n";
        }else{
            if(partItem.getProperty("state","")==="Preliminary"){
                var changeItem = inn.newItem("Affected Item","add");
                    changeItem.setProperty("action","Add");
                    changeItem.setProperty("new_item_id",partItem.getID());
                    
                var affectItem = inn.newItem(changesItemtype+" Affected Item","add");
                    affectItem.setProperty("source_id",theItem.getID());
                    affectItem.setPropertyItem("related_id",changeItem);
                    affectItem = affectItem.apply();
                    if(affectItem.isError()){
                        logs+=part_num +" Error : "+affectItem.getErrorString()+"\n";
                    }else{
                        logs+=part_num +" OK.\n";
                    }
            }else{
                var changeItem = inn.newItem("Affected Item","add");
                    changeItem.setProperty("action","Change");
                    changeItem.setProperty("affected_id",partItem.getID());

                var affectItem = inn.newItem(changesItemtype+" Affected Item","add");
                    affectItem.setProperty("source_id",theItem.getID());
                    affectItem.setPropertyItem("related_id",changeItem);
                    affectItem = affectItem.apply();
                    if(affectItem.isError()){
                        logs+=part_num +" Error : "+affectItem.getErrorString()+"\n";
                    }else{
                        logs+=part_num +" OK.\n";
                    }
            }
        }
    }
}
textarea_log.value = logs;

  1. 打开汇入视窗Action程序
    https://ithelp.ithome.com.tw/upload/images/20210127/20106503WZer7li5zn.png
var prt = typeof(parent.document.item) == "object" ? parent.document : parent.parent;
var tmpThisItem = typeof(parent.document.thisItem) == "object" ? parent.document.thisItem : parent.thisItem;

if(tmpThisItem.isNew()){
    aras.AlertError("Please save the item. 请先存档并解锁後再执行。");
}
if(tmpThisItem.isLocked()===1 || tmpThisItem.isLocked()===2){
    aras.AlertError("The item is Lock. 物件已上锁中");
    return ;
}

if(tmpThisItem.getProperty("state","")==="New"){
    var topWnd = aras.getMostTopWindowWithAras(window);
    topWnd = topWnd.main || topWnd;


    // get form
    var formName = "JPC_ImportChangeData";
    var fetchForm = this.getInnovator().newItem("Form","get");
    fetchForm.setProperty("name",formName);
    fetchForm = fetchForm.apply("get"); 

    // check form for error
    if (fetchForm.isError())
        return alert("Can't find a form called " + formName);

    // get form params
    var params = {
        title: 'Parts Change Import', 
        formId: fetchForm.getID(),       // put your form's id here
        aras: aras,
        dialogWidth: 600,                // set width int
        dialogHeight: 400,               // set height int
        content: 'ShowFormAsADialog.html',
        cur_item : tmpThisItem
    };
    topWnd.cur_item = tmpThisItem;

    var callback = function(res) {
        //Perform logic using dialog result here
        var parentID = document.itemID;
        var parentAction = 'edit'; // or 'view'
        top.aras.uiReShowItem(parentID,parentID,parentAction,'tab view');
        return ;
    }
    // call form in dialog
    topWnd.ArasModules.MaximazableDialog.show("iframe", params).promise.then(callback);

    return null;
}else{
    aras.AlertError("Changes is not Preliminary.此非编辑系统状态,不能执行。");
}


<<:  [Aras 笔记] Report报表-多阶BOM+替代料R1R2

>>:  OpenCart + Journal 版型 = 地球表面最强的电商版型

[Day30] swift & kotlin 总结!双平台差异

结语 不知不觉~来到最後一天了! 来针对Swift与Kotlin开发上做个总结吧! 开发难度 首先谈...

[Day25] 忘记压缩档密码怎麽办? 用Python多重处理快速破解压缩档密码!

因为公司政策规定,传机密压缩档的时候都要加上密码, 但是收到的档案这麽多,每次都要翻信找密码真的太麻...

Day 08 : ML 工程师职责与分工

资料团队组建 当各行业意识数据带来业务成长新动能时,追求卓越的企业意识到要充分运用企业数据,必须组建...

Day 27 - 强化学习 Reinforcement Learning(1)

马可夫决策过程 Markov decision process MDP 在概率论和统计学中,马可夫决...

[Python 爬虫这样学,一定是大拇指拉!] DAY30 - 结语

结语 终於来到尾声了,今天这篇文章,就是本系列文最後一篇了。先恭喜各位读者完成了整个系列,希望本系列...