26.移转Aras PLM 大小事-打包压缩档案并下载

如果需要将相关的档案压缩Zip档
可以利用外部元件先打包好,然後储存到资料夹或Aras的Vault
1.储存到其他资料夹,就要回传给Javascript档案路径
2.储存到Vault,就要给Vault URL

我这里选用第一种方式
先在前端按钮Click执行下段程序码

var inn = new Innovator();

var body = "<id>"+document.thisItem.getProperty("id")+"</id>";
var result = inn.applyMethod("JPC_Zip_RFQ_AllFile",body);

if(result.isError()==false){
    // var fileId = itmFile.getProperty("fileId","");
    // var fileItem = inn.newItem("File","get");
    // fileItem.setProperty("id",fileId);
    // fileItem = fileItem.apply();
    // if (fileItem.isError()) {
    // top.aras.AlertError("File Not Found: " +fileItem.getErrorString());
    // return;
    // }
    // var fileName=fileItem.getProperty("filename");
    // // Get the URL to the file and download it
    // var fileURL = top.aras.getFileURLEx(fileItem.node);
    // var results = top.aras.vault.downloadFile(fileURL);
    // if (!results) {
    // top.aras.AlertError("Unable to retrieve the file ("+fileName+") from the vault");
    // return;
    // }   
    //开启连结
    window.open(result.getResult());
}

後端打包JPC_Zip_RFQ_AllFile

    inn = this.getInnovator();
    return main(this);
}
private void Log(string msg)
{
    Item log = inn.newItem("JPC_Method_Log", "add");
    log.setProperty("jpc_run_method", "JPC_Zip_RFQ_AllFile");
    log.setProperty("jpc_method_event", "action");
    log.setProperty("jpc_log", msg);
    log = log.apply();
}
private Item GetAllFileData(string rfw_id){
    string aml = @"<AML>
                    <Item action='get' type='JPC RFQ Flow' select='id,item_number'>
                        <id>{0}</id>
                        <Relationships>
                        <Item action='get' type='JPC RFQ Flow RFQ' select='related_id(id,item_number)'>
                            <related_id>
                            <Item type='JPC RFQ' action='get' select='id,item_number,jpc_rfq_note'>
                                <Relationships>
                                <Item action='get' type='JPC RFQ Work' select='jpc_part(id,name),jpc_cad(id,name),jpc_doc(id,filename)'>
                                    <jpc_part>
                                    <Item type='Part' action='get' select='id,item_number'>
                                        <Relationships>
                                        <Item action='get' type='Part File' select='related_id(id,filename)'>
                                        </Item>
                                        <Item action='get' type='Part CAD' select='related_id(id,item_number,name)'>
                                            <related_id>
                                            <Item type='CAD' action='get' select='id'>
                                                <Relationships>
                                                <Item action='get' type='cad files' select='related_id(id,filename)'>
                                                </Item>
                                                </Relationships>
                                            </Item>
                                            </related_id>
                                        </Item>
                                        <Item action='get' type='Part Document' select='related_id(id,item_number,name)'>
                                            <related_id>
                                            <Item type='Document' action='get' select='id'>
                                                <Relationships>
                                                <Item action='get' type='Document File' select='related_id(id,filename)'>
                                                </Item>
                                                </Relationships>
                                            </Item>
                                            </related_id>
                                        </Item>
                                        </Relationships>
                                    </Item>
                                    </jpc_part>
                                    <jpc_cad>
                                    <Item type='CAD' action='get' select='id,item_number'>
                                        <Relationships>
                                        <Item action='get' type='cad files' select='related_id(id,filename)'>
                                        </Item>
                                        </Relationships>
                                    </Item>
                                    </jpc_cad>
                                    <jpc_doc>
                                    <Item type='File' action='get' select='id,filename'>
                                    </Item>
                                    </jpc_doc>
                                </Item>
                                </Relationships>
                            </Item>
                            </related_id>
                        </Item>
                        </Relationships>
                    </Item>
                    </AML>";
    aml = string.Format(aml,rfw_id);
    return inn.applyAML(aml);
}
private void CreateDirectoryFolder(string dir,string folder_name){
    if (!Directory.Exists(dir+folder_name))
        Directory.CreateDirectory(dir+folder_name);
}
private string CreateZip(string dir,string folder_name,string comment){
    using (Ionic.Zip.ZipFile zip2 = new Ionic.Zip.ZipFile())
    {
        zip2.AddDirectory(dir+@"/"+folder_name, System.IO.Path.GetFileName(dir+@"/"+folder_name));
        zip2.Comment = comment;
        zip2.Save( dir+"/"+folder_name+".zip");               
    }
    return folder_name+".zip";
}
private Innovator inn;
private string error_log="";
private string baseFolder = @"C:\Program Files (x86)\Aras\Innovator\Innovator\Client\Files\RFQ\";
public Item main(Item thisItem){
    string rfw_id = thisItem.getProperty("id","");
    //rfw_id = "75401095B8EC4F78BB016C4B02BDF823";
    if(rfw_id=="") return inn.newError("RFW ID = null");

    Item itmRFW = GetAllFileData(rfw_id);
    string rfw_number = itmRFW.getProperty("item_number","");
    CreateDirectoryFolder(baseFolder,rfw_number);
    Item itmRFWRs = itmRFW.getRelationships("JPC RFQ Flow RFQ");
    for(int rfw_r = 0; rfw_r < itmRFWRs.getItemCount();rfw_r++)
    {
        Item itmRFQ = itmRFWRs.getItemByIndex(rfw_r).getRelatedItem();
        //return inn.newResult(itmRFQ.getProperty("item_number"));
        string item_number_RFQ = itmRFQ.getProperty("item_number","");
        string jpc_rfq_note = itmRFQ.getProperty("jpc_rfq_note","");
        string item_number_RFQ_Dir = rfw_number +@"/"+item_number_RFQ+"_"+jpc_rfq_note;
        CreateDirectoryFolder(baseFolder,item_number_RFQ_Dir);

        Item itmRFQWorks = itmRFQ.getRelationships("JPC RFQ Work");
        for(int rfq_w = 0; rfq_w < itmRFQWorks.getItemCount();rfq_w++)
        {
            Item itmWork = itmRFQWorks.getItemByIndex(rfq_w);
            string jpc_part = itmWork.getProperty("jpc_part","");
            string jpc_doc = itmWork.getProperty("jpc_doc","");
            string jpc_cad = itmWork.getProperty("jpc_cad","");
            if(jpc_part!=""){
                Item itmPart = itmWork.getPropertyItem("jpc_part");
                string part_number = itmPart.getProperty("item_number","");
                string part_Dir = item_number_RFQ_Dir + @"\" + part_number;
                CreateDirectoryFolder(baseFolder,part_Dir);
                
                Item itmPartFiles = itmPart.getRelationships("Part File");
                if(itmPartFiles.getItemCount()>0){
                    for(int indexPF=0;indexPF<itmPartFiles.getItemCount();indexPF++)
                    {
                        Item itmPartFile = itmPartFiles.getItemByIndex(indexPF).getRelatedItem();
                        itmPartFile.checkout(baseFolder+part_Dir);
                    }
                }

                Item itmPartDocument = itmPart.getRelationships("Part Document");
                if(itmPartDocument.getItemCount()>0){
                    for(int indexPF=0;indexPF<itmPartDocument.getItemCount();indexPF++)
                    {
                        Item itmDoc = itmPartDocument.getItemByIndex(indexPF).getRelatedItem();
                        Item itmDocFiles = itmDoc.getRelationships("Document File");
                        for(int indexDF=0;indexDF<itmDocFiles.getItemCount();indexDF++){
                            Item itmFile = itmDocFiles.getItemByIndex(indexDF).getRelatedItem();
                            itmFile.checkout(baseFolder+part_Dir);
                        }
                    }
                }
                Item itmPartCAD = itmPart.getRelationships("Part CAD");
                if(itmPartCAD.getItemCount()>0){
                    for(int indexPF=0;indexPF<itmPartCAD.getItemCount();indexPF++)
                    {
                        Item itmCAD = itmPartCAD.getItemByIndex(indexPF).getRelatedItem();
                        Item itmCADFiles = itmCAD.getRelationships("cad files");
                        for(int indexDF=0;indexDF<itmCADFiles.getItemCount();indexDF++){
                            Item itmFile = itmCADFiles.getItemByIndex(indexDF).getRelatedItem();
                            itmFile.checkout(baseFolder+part_Dir);
                        }
                    }
                }
            }
            if(jpc_doc!=""){
                string other_Dir = item_number_RFQ_Dir + @"\" + "Cost Analytics";
                CreateDirectoryFolder(baseFolder,other_Dir);
                Item itmFile = inn.newItem("File","get");
                itmFile.setID(jpc_doc);
                itmFile = itmFile.apply();
                itmFile.checkout(baseFolder+other_Dir);
            }
            if(jpc_cad!=""){
                 Item itmCAD = itmWork.getPropertyItem("jpc_cad");
                string cad_number = itmCAD.getProperty("item_number","");
                string cad_dir = item_number_RFQ_Dir + @"\" + cad_number;
                CreateDirectoryFolder(baseFolder,cad_dir);

                Item itmCADFiles = itmCAD.getRelationships("cad files");
                for(int indexDF=0;indexDF<itmCADFiles.getItemCount();indexDF++){
                    Item itmFile = itmCADFiles.getItemByIndex(indexDF).getRelatedItem();
                    itmFile.checkout(baseFolder+cad_dir);
                }
            }
        }
    }
    Item itmUser = inn.getItemById("User",inn.getUserID());
    Item itmHistory = inn.newItem("JPC RFQ Flow Download History","add");
    itmHistory.setProperty("source_id",rfw_id);
    itmHistory = itmHistory.apply();
    string fileZip = CreateZip(baseFolder,rfw_number,itmUser.getProperty("keyed_name",""));
    System.IO.Directory.Delete(baseFolder+@"/"+rfw_number, true);

    string url = @"http://localhost/plm/Client/X-salt=8_11.0.0.6920-X/Files/RFQ/"+fileZip;
    return inn.newResult(url);

<<:  Day 13:vim 设定档

>>:  Day 11 - 自订事件

企划实现(1)

常常有人说做好一个企划需要勇气,但绝非这麽简单,创业不只需要勇气还需要运气、人脉、实力 、执着 做好...

第 6 集:CSS 社交距离(下)

此篇会介绍使用 text-align、vertical-align 对齐时的注意事项以及常见问题,最...

Day 4 python回圈

今天我们要介绍的是python当中的FOR回圈,所谓的回圈就是只我们如果要在某个条件下要重复做某些事...

[Java Day11] 3.4. while / 3.5. do while

教材网址 https://coding104.blogspot.com/2021/06/java-w...

Day 22 关键字跟 SEO

在现今使用 Google 搜寻的人数占了将近九成以上,所以更可以知道搜寻引擎对於消费者来说,是一个很...