AtTask (Workfront) 外部页面:发送参数到外部服务器

AtTask (Workfront) External Page: Send parameter to external server

我需要在 Workfront 中显示一些与任务相关的外部数据。我可以创建一个显示来自私有本地服务器的静态 "External Page" 的仪表板。我需要在 URL 中传递一个参数,其中包含有关当前任务的一些信息,因此我可以从与该任务相关的本地 ERP 数据库获得响应(我的 ERP 系统中的一个字段用于关联quotes/orders/invoices 到 Workfront 任务)。例如,我必须定义一个看起来像 http://my.intranet/report?ref=$$REFNUM ... And the $$REFNUM token would be replaced with the reference number for the task where the dashboard is located. My server would see a request that looks like http://my.intranet/report?ref=12345 的 URL,以及与参考号为 12345 的任务相关的 return 信息。

我有两位顾问的建议表明这是可能的,但我找不到任何文档来解释如何在外部页面中传递动态信息 URL。有什么建议吗?

更新:通过一些额外的黑客攻击,我发现我可以使用以下语法获得会话 ID returned:

some.url/query?session={!$$SESSION}

我可以使用以下语法获取用户 ID:

some.url/query?userid={!$$USER.ID}

我还没有成功获取与任务相关的详细信息。 {!$$TASK.ID} returns null,无论是从仪表板创建页面调用,还是从任务布局中嵌入的选项卡调用。

是否还有其他秘密通配符变量以及如何使用它们?

已找到解决方案。以下语法将导致 Workfront return 调用它的对象的会话和 ID:

some.url/query?session={!$$SESSION}&object={!ID}

这些对象可用于 API 调用以获取与该对象相关的其他信息,例如 referenceNumber。感谢 AtAppStore 的这个页面,这是我找到语法的地方。 http://store.atappstore.com/index.php/executive-summary/

我知道这是一个老问题,

同时 Adob​​e 购买了 Workfront,我们公司开始使用它。

我花了几天时间在网上寻找同样问题的解决方案。

最后这就是我想出的:(这些重点是在 WF TASK 对象视图上呈现值,其他对象会给出不同的结果或没有结果)

也回答了同样的问题:https://one.workfront.com/s/question/0D54X00006pnbPvSAI/how-tp-pass-wildcards-as-url-parameter-to-external-pages

taskID={!ID}
taskURL={!URL}
taskDuration={!Duration}
taskName={!Name}
taskDescription={!Description} - (breaks if it includes HTML)
taskStatus={!Status}
taskPriority={!Priority}
taskProgressStatus={!Progress Status}
taskPercentComplete={!Percent Complete}
taskPlannedHours={!Planned Hours}
taskProjectedCompletionDate={!Projected Completion Date}
taskRefNumber={!Reference Number}
taskNumber={!Task Number}
taskHasDocuments={!Has Documents}
projectName={!Project} OR {!Project.Name}
projectID={!Project ID} OR {!Project.ID} - (In PROJ object one gives a value but other one renders null)
assignedToID={!Assigned To.ID}
assignedToName={!Assigned To.Name}
assignedToFirstName={!Assigned To.FirstName}
assignedToLastName={!Assigned To.LastName}
assignedToEmail={!Assigned To.Email Address}
assignedToUsername={!Assigned To.Username}
sessionID={!$$SESSION}
userID={!$$USER.ID}
userName={!$$USER.Name}
userFirstName={!$$USER.First Name}
userLastName={!$$USER.Last Name}
userEmail={!$$USER.Email Address}
userUsername={!$$USER.Username}
userRoleID={!$$USER.Role ID}
enteredByID={!Entered By ID}
hasMessages={!Has Messages}
hasNotes={!Has Notes}
hasReminderNotifications={!Has Reminder Notifications}
iterationID={!Iteration ID}
lastConditionNoteID={!Last Condition Note ID}
lastNoteID={!Last Note ID}
numberOfChildren={!Number of Children}
securityRootObjCode={!securityRootObjCode}
securityRootID={!securityRootID}
submittedByID={!Submitted By ID}
version={!Version}
trackingMode={!Tracking Mode}
lastNote={!Last Note}
parent={!Parent}
objID={!ObjID} - (Will give some ID on Dashboard view)

There are a few more like {!Planned Cost}, {!Revenue Type} etc.

我想在 iframe src 调用中获取当前 WF 对象的 objectType 或 objCode,这样我就可以在目标页面上删除 1 到 2 API 个查询。 事实证明你不能那样做。 但我可以获得 securityRootObjCode。 这让我可以做到:

如果当前 WF 对象是 TASK,则 {!securityRootObjCode} 将呈现 PROJ,{!Project} 不会为空且 {!Project ID} 不会为空

如果当前 WF 对象是 PROJ,则 {!securityRootObjCode} 将呈现为 null,{!Project} 将为 null 而 {!Project ID} 将不会为 null

如果当前 WF 对象是仪表板,则所有值都将为空。