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=?
Tag: 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
-
Aras Innovator – 使用者檔案下載的資料流程圖(Innovator Server, OAuth Server & Vault Server)
以下為個人理解的 Aras Innovator 檔案下載流程,所有 Server 之間的溝通都使用 OAuth 的公鑰加密: (如有錯誤麻煩來信指正)

- Client 對 Innovator Server 請求檔案下載
- Innovator Server 確認使用者授權後回傳 Token
- Client 對 Vault Server 請求檔案下載
- Vault Server 對 Innovator Server 確認Token (資料流透過 OAuthServer 公鑰加密)
- Innovator Server 對 OAuth Server 請求解密 Vault Server 傳來的資料 (資料流透過 OAuthServer 公鑰加密)
- OAuth Server 確認請求來源為設定的合法 Innovator Server,回傳其請求的資料 (資料流透過 InnovatorServer公鑰加密)
- Innovator Server 對 OAuth Server 請求加密要回傳給 Vault Server 的使用者授權確認的結果
(資料流透過 OAuthServer 公鑰加密) - OAuth Server 確認請求來源為設定的合法 Innovator Server,回傳用 VaultServer 公鑰加密的資料
(資料流透過 InnovatorServer公鑰加密) - Innovator Server 回傳 OAuth Server 加密後的資料給 Vault Server
- 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,來調整表單[資料]的呈現方式,如字體大小等。

-
Aras Innovator – 查詢使用者活動資訊
Aras Innovator 系統並無提供使用者活動歷史紀錄的功能,但仍可透過以下方式取得使用者的活動紀錄:
- 在文件、料件等等各個ItemType項目的編輯、流程簽核紀錄
- Social 討論紀錄 (需付費訂閱成 Subscriber)
- 查詢當前在線使用者 (圖1)
- 查詢個別使用者最後登入時間 (圖2、圖3)

圖1 查詢當前在線使用者 
圖2 使用 root 帳號編輯 Itemtype – User 的 last_login_date 
圖3 在ItemType – User查看使用者的最後登入時間
