Category: Aras Innovator

Software that empowers product-driven organizations to embrace what makes them unique, to overcome challenge, and to seize opportunity.

  • Aras Innovator – Project 展 WBS

    SELECT DISTINCT PROJECT.ID
    , PROJECT.PROJECT_NUMBER, PROJECT.[NAME], PROJECT.DATE_START_SCHED, PROJECT.DATE_DUE_SCHED
    , EMT_1_NAME=EMT_1.[NAME]
    , EMT_2_NAME=EMT_2.[NAME]
    , ACT_2_NAME=ACT_2.[NAME], ACT_2_DATE_START_SCHED=ACT_2.DATE_START_SCHED, ACT_2_DATE_START_ACT=ACT_2.DATE_START_ACT, ACT_2_DATE_DUE_SCHED=ACT_2.DATE_DUE_SCHED, ACT_2_DATE_DUE_ACT=ACT_2.DATE_DUE_ACT
    , EMT_3_NAME=EMT_3.[NAME]
    , ACT_3_NAME=ACT_3.[NAME], ACT_3_DATE_START_SCHED=ACT_3.DATE_START_SCHED, ACT_3_DATE_START_ACT=ACT_3.DATE_START_ACT, ACT_3_DATE_DUE_SCHED=ACT_3.DATE_DUE_SCHED, ACT_3_DATE_DUE_ACT=ACT_3.DATE_DUE_ACT
    , EMT_4_NAME=EMT_4.[NAME]
    , ACT_4_NAME=ACT_4.[NAME], ACT_4_DATE_START_SCHED=ACT_4.DATE_START_SCHED, ACT_4_DATE_START_ACT=ACT_4.DATE_START_ACT, ACT_4_DATE_DUE_SCHED=ACT_4.DATE_DUE_SCHED, ACT_4_DATE_DUE_ACT=ACT_4.DATE_DUE_ACT
    FROM PROJECT
    INNER JOIN WBS_ELEMENT EMT_1 ON EMT_1.ID=PROJECT.WBS_ID    -- Level 1 item
    -- WBS level 1 do not have activity items
    --LEFT JOIN WBS_ACTIVITY2 WA_1 ON WA_1.SOURCE_ID=EMT_1.ID
    --LEFT JOIN ACTIVITY2 ACT_1 ON ACT_1.ID=WA_1.RELATED_ID
    LEFT JOIN SUB_WBS SW_1 ON SW_1.SOURCE_ID=EMT_1.ID
    LEFT JOIN WBS_ELEMENT EMT_2 ON EMT_2.ID=SW_1.RELATED_ID    -- Level 2 item
    LEFT JOIN WBS_ACTIVITY2 WA_2 ON WA_2.SOURCE_ID=EMT_2.ID
    LEFT JOIN ACTIVITY2 ACT_2 ON ACT_2.ID=WA_2.RELATED_ID
    LEFT JOIN SUB_WBS SW_2 ON SW_2.SOURCE_ID=EMT_2.ID
    LEFT JOIN WBS_ELEMENT EMT_3 ON EMT_3.ID=SW_2.RELATED_ID    -- Level 3 item
    LEFT JOIN WBS_ACTIVITY2 WA_3 ON WA_3.SOURCE_ID=EMT_3.ID
    LEFT JOIN ACTIVITY2 ACT_3 ON ACT_3.ID=WA_3.RELATED_ID
    LEFT JOIN SUB_WBS SW_3 ON SW_3.SOURCE_ID=EMT_3.ID
    LEFT JOIN WBS_ELEMENT EMT_4 ON EMT_4.ID=SW_3.RELATED_ID    -- Level 4 item
    LEFT JOIN WBS_ACTIVITY2 WA_4 ON WA_4.SOURCE_ID=EMT_4.ID
    LEFT JOIN ACTIVITY2 ACT_4 ON ACT_4.ID=WA_4.RELATED_ID
    LEFT JOIN SUB_WBS SW_4 ON SW_4.SOURCE_ID=EMT_4.ID
    WHERE PROJECT.ID=?
  • Aras Innovator – 使用者檔案下載的資料流程圖(Innovator Server, OAuth Server & Vault Server)

    以下為個人理解的 Aras Innovator 檔案下載流程,所有 Server 之間的溝通都使用 OAuth 的公鑰加密: (如有錯誤麻煩來信指正)

    1. Client 對 Innovator Server 請求檔案下載
    2. Innovator Server 確認使用者授權後回傳 Token
    3. Client 對 Vault Server 請求檔案下載
    4. Vault Server 對 Innovator Server 確認Token (資料流透過 OAuthServer 公鑰加密)
    5. Innovator Server 對 OAuth Server 請求解密 Vault Server 傳來的資料 (資料流透過 OAuthServer 公鑰加密)
    6. OAuth Server 確認請求來源為設定的合法 Innovator Server,回傳其請求的資料 (資料流透過 InnovatorServer公鑰加密)
    7. Innovator Server 對 OAuth Server 請求加密要回傳給 Vault Server 的使用者授權確認的結果
      (資料流透過 OAuthServer 公鑰加密)
    8. OAuth Server 確認請求來源為設定的合法 Innovator Server,回傳用 VaultServer 公鑰加密的資料
      (資料流透過 InnovatorServer公鑰加密)
    9. Innovator Server 回傳 OAuth Server 加密後的資料給 Vault Server
    10. Vault Server 確認 Token 無誤後回應檔案串流給 Client

  • Aras Innovator – 表單新增時自動新增單身資料

    在表單單頭 View 的 onFormLoad Client Event,透過 is new 或 action 是否為 add,來判斷是否為新單據,然後新增關係

    var itmThis = document.thisItem;
    if (itmThis.isNew() || itmThis.getAction()=='add') {
    var inno = itmThis.newInnovator();
        for (var i=0; i<10; i++) {
            var relItem = inno.newItem('{RELATIONSHIP ITEMTYPE}', 'add');

    // set properties if needed

            itmThis.addRelationship(relItem);
        }
    }
  • Aras Innovator – 修改表單上面Item/Element的Show/Hidden

    JavaScript

    var myElement = getFieldByName(“myFieldName”);
    myElement.style.visibility = “hidden”;
    myElement.style.visibility = “visible”;
  • Aras Innovator – 檔案下載記錄

    檔案的下載動作是透過 ItemType:Vault 來運行。

    檔案 ItemType:File 與 ItemType:Vault 是透過 ItemType:Locate 關聯。

    因此,當使用者有下載檔案動作時,便會觸發 ItemType:Vault 和 ItemType:Locate 的 [Get] 動作。故我們可以藉由在 ItemType:Locate 的 Server Method : OnAfterGet,實作檔案下載記錄。透過 source_id 取得包含檔案名稱等檔案資訊、透過呼叫 Innovator.getUserID() 取得下載人的資料。

    Aras.Server.Security.Identity plmIdentity = Aras.Server.Security.Identity.GetByName("Aras PLM");
    bool permissionWasSet = Aras.Server.Security.Permissions.GrantIdentity(plmIdentity);

    Innovator inno = this.getInnovator();

    try {
    string sqlCommandText = string.Format(
    @"INSERT INTO file_get_records(username,filename)
    SELECT [USER].KEYED_NAME,[FILE].[FILENAME]
    FROM [USER],[FILE]
    WHERE [USER].ID='{0}' AND [FILE].ID='{1}'", inno.getUserID(), this.getProperty("source_id"));
    inno.applySQL(sqlCommandText);
    }
    finally {
    if (permissionWasSet) {
    Aras.Server.Security.Permissions.RevokeIdentity(plmIdentity);
    }
    }

    return this;
  • Aras Innovator – Method臨時提升權限及使用時機

    當Method需要用到SQL指令時,需透過臨時提升權限的方式來執行。而其他情境則幾乎不適用!即使臨時提升權限,仍無法以目標Identity的權限對ItemType做異動。

    Aras.Server.Security.Identity plmIdentity = Aras.Server.Security.Identity.GetByName(“Innovator Admin”);
    bool PermissionWasSet = Aras.Server.Security.Permissions.GrantIdentity(plmIdentity);
    Innovator inno = this.getInnovator();

    string sqlCmd = “UPDATE Document SET ineffective_date=GETUTCDATE() WHERE ID=’”+this.getID()+”‘”;
    inno.applySQL(sqlCmd);

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

    return this;

  • Aras Innovator – Convert date string format for Date property

    // Convert date string format for Date property.
    // Example: 2022/11/16
    var i18n = inno.getI18NSessionContext();
    finishedProductDate = i18n.ConvertToNeutral(finishedProductDate,"date","short_date");
  • Aras Innovator – 調整表單資料的字體大小

    透過撰寫 Form 的 CSS,來調整表單[資料]的呈現方式,如字體大小等。