Mar 30, 2023
10:45 AM
Do you see any hints in the logs? Is there any log activity showing at least an attempt to sync catalog items to ServiceNow? Some things to check would be verifying that the integration account has the correct roles in ServiceNow, checking that sync has been enabled within App Broker (on the ServiceNow Integration page within the App Broker admin UI), and checking that individual catalog items have been marked for sync to ServiceNow (you can do this on the properties dialog for individual catalog items, or there is a button on the ServiceNow Integration page within the App Broker admin UI that allows you to enable all catalog items for sync into ServiceNow). Also, keep in mind that General catalog items do not sync into ServiceNow. Only Software catalog items will be synced to ServiceNow, so if you only have General catalog items, that would explain it.
... View more
Mar 30, 2023
10:39 AM
I guess I should add that if there isn't already an Idea posted for this, I would encourage you to submit one (if it's important to you). It's certainly possible that Flexera could offer the workflow in both formats for those customers that are already using Flow Designer for other things.
... View more
Mar 30, 2023
10:31 AM
Some people may recall that when App Broker for ServiceNow was originally released, it was leveraging ServiceNow Orchestration. Flexera later changed the workflow to not use Orchestration because of push-back from customers around the added cost of Orchestration licenses. I believe Flow Designer poses a similar scenario, but I'm not an expert on ServiceNow licensing. This is a question better asked to ServiceNow to understand their licensing for Flow Designer and the impact if you were to switch the App Broker workflow from Workflow Editor to Flow Designer. At this time, Flexera still has no plans to switch this to Flow Designer.
... View more
Mar 25, 2023
10:11 PM
2 Kudos
And here is the Jamf documentation that states a package must be indexed in order to be uninstalled.
... View more
Mar 21, 2023
11:18 AM
Yes, you can upgrade App Portal to 2022 R1 and it will work fine with FNMS 2022 R2.
... View more
Mar 17, 2023
01:28 PM
Yes, that is an unfortunate side effect of using a non-SCCM source. The sync process is actually different between an SCCM source and a non-SCCM source, and the non-SCCM source method is definitely less efficient. If this performance is going to be an issue, then the only other option I could think of would be to either put your custom table in the SCCM database and use a custom sync with the ConfigMgr sync type; or if you're allowed to run "linked queries" across SQL servers, you could write the custom query in a way that uses the ConfigMgr sync type, connecting to the SCCM database, but then joins to your data on the App Broker SQL server using fully qualified references (e.g. [ServerName].[AppPortal].[dbo].[Custom_ActiveUsers]).
... View more
Mar 17, 2023
12:23 PM
When you use a custom sync query that doesn't go directly against your SCCM database, you need to change the sync type.
Change "Syncing Users" to "Not Defined". If you have it configured for "ConfigMgr", it will try to build the connection string from the server/database settings on the ConfigMgr tab instead of using the connection string you provide with the custom query.
... View more
Mar 14, 2023
03:42 PM
1 Kudo
Thanks for the link. It looks like they have not updated that page of the documentation for the last few releases of App Broker. I'll ask that they update it. Please note that after March 31, 2023, any version of App Portal/App Broker older than 2022 R1 will no longer work with Flexera One ITAM (but should continue to work with FNMS on-prem). This is due to authentication changes in Flexera One (referenced here and here).
... View more
Mar 14, 2023
02:35 PM
I have multiple customers on App Portal 2022 R1 SP1 that are connecting to Flexera One ITAM or FNMS 2022 R2, and Flexera Engineering doesn't generally make changes to the API interface used by App Broker. So, that's why I'd be surprised if there is anything in the Flexera documentation that says these versions are incompatible. Please note that absence of an explicit statement about specific versions does not imply incompatibility. It generally just means that the documentation will be updated at the next release cycle or that nothing has changed that would cause issues with the previous compatibility.
... View more
Mar 14, 2023
01:39 PM
Can you please provide a link to the page that says these versions are incompatible? As far as I'm aware, there should be no compatibility issues between these versions. If you can point me to where that's stated, I can put in a request to have that information validated/updated.
... View more
Mar 14, 2023
01:45 AM
1 Kudo
Are you able to configure your ITSM actions at the global level (i.e. applying to all catalog items)? Or do you need to apply them selectively to specific catalog items?
To get rid of the existing Remedy actions, I believe you could use something like this...
$SCRIPT:logfile = "C:\Path\To\Logfile.log"
$SCRIPT:ConnectionStringAppPortal = "EnterYourAppPortalConnectionStringHere"
##########################################################################
# Log
##########################################################################
function Log([object]$logobj) {
ForEach ($obj in $logobj) {
(Get-Date -Format G) + ' ' + $obj.ToString() | Out-File -FilePath $SCRIPT:logfile -Append
# Write-Host (Get-Date -Format G) $obj.ToString()
}
}
##########################################################################
# ExecuteSimpleSQLQuery1
##########################################################################
function ExecuteSimpleSQLQuery1($szConnect, $szQuery, $szParam1) {
$szResult = ""
$result = 0
$con = New-Object System.Data.SqlClient.SqlConnection
Try {
$con.ConnectionString = $szConnect
$con.Open()
$command = $con.CreateCommand()
$command.CommandText = $szQuery
$res = $command.Parameters.AddWithValue('@Param1', $szParam1)
$result = $command.ExecuteScalar()
}
Catch [System.Exception] {
Log ('EXCEPTION: ' + $_.Exception)
$Error.Clear()
}
Finally {
$con.Close()
}
if ($result -ne $null) {
$szResult = $result.ToString()
}
return $szResult
}
##########################################################################
# ExecuteSimpleNonSQLQuery1
##########################################################################
function ExecuteSimpleNonSQLQuery1($szConnect, $szQuery, $szParam1) {
$result = 0
$con = New-Object System.Data.SqlClient.SqlConnection
Try {
$con.ConnectionString = $szConnect
$con.Open()
$command = $con.CreateCommand()
$command.CommandText = $szQuery
$res = $command.Parameters.AddWithValue('@Param1', $szParam1)
$result = $command.ExecuteNonQuery()
}
Catch [System.Exception] {
Log ('EXCEPTION: ' + $_.Exception)
$Error.Clear()
}
Finally {
$con.Close()
}
return $result
}
##########################################################################
# RemoveAllItsmActions
##########################################################################
function RemoveAllItsmActions($APPackageID) {
# Check to see if there are actions configured for the specified catalog item
$Query = 'SELECT [ID] from [WD_ITSM_Actions] WHERE [PackageID] = @Param1'
[int] $ExistingAction = ExecuteSimpleSQLQuery1 $SCRIPT:ConnectionStringAppPortal $Query $APPackageID
if ($ExistingAction -eq 0) {
return
}
Log ("Removing all ITSM actions")
# Update the database to remove all actions from the specified catalog item
$Query = 'DELETE FROM [WD_ITSM_Actions] WHERE [PackageID] = @Param1'
$Rows = ExecuteSimpleNonSQLQuery1 $SCRIPT:ConnectionStringAppPortal $Query $APPackageID
Log (' Deleted ' + $Rows.ToString() + ' row(s) from WD_ITSM_Actions')
if ($Rows -gt 0) {
Log (" Successfully removed all ITSM actions.")
}
else {
Log (" Failed to remove all ITSM actions")
}
}
Then to add your ServiceNow actions, add them in the global actions configuration (if possible). If that isn't possible and you need to add them to individual catalog items, then you could probably modify this code to suit your needs (this is written for command line actions like PowerShell scripts rather than ITSM actions, so it won't work as-is for your purposes).
##########################################################################
# ExecuteSimpleSQLQuery3
##########################################################################
function ExecuteSimpleSQLQuery3($szConnect, $szQuery, $szParam1, $szParam2, $szParam3) {
$szResult = ""
$result = 0
$con = New-Object System.Data.SqlClient.SqlConnection
Try {
$con.ConnectionString = $szConnect
$con.Open()
$command = $con.CreateCommand()
$command.CommandText = $szQuery
$res = $command.Parameters.AddWithValue('@Param1', $szParam1)
$res = $command.Parameters.AddWithValue('@Param2', $szParam2)
$res = $command.Parameters.AddWithValue('@Param3', $szParam3)
$result = $command.ExecuteScalar()
}
Catch [System.Exception] {
Log ('EXCEPTION: ' + $_.Exception)
$Error.Clear()
}
Finally {
$con.Close()
}
if ($result -ne $null) {
$szResult = $result.ToString()
}
return $szResult
}
##########################################################################
# ExecuteSimpleNonSQLQuery3
##########################################################################
function ExecuteSimpleNonSQLQuery3($szConnect, $szQuery, $szParam1, $szParam2, $szParam3) {
$result = 0
$con = New-Object System.Data.SqlClient.SqlConnection
Try {
$con.ConnectionString = $szConnect
$con.Open()
$command = $con.CreateCommand()
$command.CommandText = $szQuery
$res = $command.Parameters.AddWithValue('@Param1', $szParam1)
$res = $command.Parameters.AddWithValue('@Param2', $szParam2)
$res = $command.Parameters.AddWithValue('@Param3', $szParam3)
$result = $command.ExecuteNonQuery()
}
Catch [System.Exception] {
Log ('EXCEPTION: ' + $_.Exception)
$Error.Clear()
}
Finally {
$con.Close()
}
return $result
}
##########################################################################
# AddScriptCommandToEvent - This function is not currently being used
##########################################################################
function AddScriptCommandToEvent($APPackageID, $ActionName, $EventName) {
Log ("Adding Script Command '" + $ActionName + "' to event '" + $EventName + "'.")
# Map EventName to EventID
switch ($EventName) {
"On Submit" {$EventID = 0}
"On Submit No Approval" {$EventID = 12}
"On Submit Approval" {$EventID = 13}
"On Approver Approval" {$EventID = 1}
"On Request Approval" {$EventID = 2}
"On Request Rejected" {$EventID = 8}
"On Submit For Install" {$EventID = 3}
"On Submit For Uninstall" {$EventID = 4}
"On Success Install" {$EventID = 5}
"On Fail Install" {$EventID = 6}
"On Success Uninstall" {$EventID = 10}
"On Fail Uninstall" {$EventID = 11}
"By URL" {$EventID = 7}
"On Cancel" {$EventID = 9}
"On Check Status" {$EventID = 99}
Default {Log ("ERROR: Invalid event name '" + $EventName + "' specified."); return}
}
Log (" EventID = " + $EventID.ToString())
# Look up the ActionID associated with the specified ActionName
$Query = 'SELECT [ExtensionID] from [WD_ClientCommands] WHERE [ExtensionName] = @Param1'
[int] $ActionID = ExecuteSimpleSQLQuery1 $ConnectionStringAppPortal $Query $ActionName
if ($ActionID -eq 0) {
Log (" Failed to add Script Command '" + $ActionName + "' to event '" + $EventName + "'. No such Script Command found.")
return
}
Log (" ActionID = " + $ActionID.ToString())
# Check to see if there is already an action configured for the specified ActionID, EventID, and PackageID
$Query3 = 'SELECT [ID] from [WD_Actions] WHERE [EventID] = @Param1 AND [ActionID] = @Param2 AND [PackageID] = @Param3'
[int] $ExistingAction = ExecuteSimpleSQLQuery3 $ConnectionStringAppPortal $Query3 $EventID $ActionID $APPackageID
if ($ExistingAction -gt 0) {
Log (" Script Command '" + $ActionName + "' is already connected to event '" + $EventName + "' for Package ID " + $APPackageID + ".")
return
}
# Update the database to add the specified action to the specified event for the specified catalog item
$Query3 = 'INSERT INTO [WD_Actions] ([ActionClass], [EventID], [ActionID], [PackageID], [OrderIndex], [StatusID], [WorkflowName])
VALUES (1, @Param1, @Param2, @Param3, 0, 0, NULL)'
$Rows = ExecuteSimpleNonSQLQuery3 $ConnectionStringAppPortal $Query3 $EventID $ActionID $APPackageID
Log (' Inserted ' + $Rows.ToString() + ' row(s) into WD_Actions')
if ($Rows -gt 0) {
Log (" Successfully added Script Command '" + $ActionName + "' to event '" + $EventName + "'.")
}
else {
Log (" Failed to add Script Command '" + $ActionName + "' to event '" + $EventName + "'.")
}
}
... View more
Mar 09, 2023
04:34 PM
1 Kudo
The attached SQL will create 6 views that can be used as App Portal "Legacy" Reports. Be sure to change the "USE [AppPortal]" statement to reflect the name of your App Broker database if using something other than "AppPortal".
v_rep_PackageApprovalMapping simply shows you what approval workflows are attached to which catalog items.
v_rep_ApprovalProcessingTimes shows you how long the entire approval process took to complete for any completed approval workflows. This is shown in days, where 0 means it was approved the same day the request was received. Weekends are excluded from the calculation but holidays are not. This is intended to be used for calculating business day SLA attainment.
v_rep_RequestApprovals shows raw approval data for each approval tied to each request. This is likely what you're most interested in, since you can see how long each approval step took within a request.
v_rep_RequestApprovalsSummary_Completed shows stats for individual approvers for completed approvals. The WHERE clause limits this summary to the approvals that were started during the previous calendar month. So, if you run the report on March 9, 2023, it would show you the summary for February 2023. Again, calculations exclude weekends, but not holidays. The summary provides average and total processing times for each approver.
v_rep_RequestApprovalsSummary_Pending shows a count of how many approvals are pending for an individual approver. Just like the "completed" summary, the WHERE clause limits this summary to the previous calendar month.
v_rep_RequestApprovalsSummary is a roll-up of both the "completed" and "pending" summary views into a single report.
For these reports, I've used the WD_User.UniqueName field for the Approver column. If you prefer to use DisplayName or UserName or some other value from the WD_User table, you can update v_rep_RequestApprovals to use whatever you like for the "Approver" column. Also note that I'm using the WD_Profile table for the ADGUID mapping/lookup, so if your WD_Profile table does not have a comprehensive list of users/GUIDs, you may need to consider something like Charlie's custom user sync and changing v_rep_RequestApprovals to JOIN WD_ApprovalProcess.ADGUID directly to WD_User.ADGUID instead of going through the WD_Profile table.
... View more
Mar 09, 2023
02:30 PM
2 Kudos
What I have done in several cases is to create a custom table in the App Broker database and then run my custom sync queries against that custom table. If I'm using SCCM or Jamf or some other DB source to combine with other custom data/logic, I usually set up an external sync process to sync those sources into App Broker as well. For example, I might have a PowerShell script (or SQL job) that syncs v_R_User to a table in the App Broker database called Custom_v_R_User or SCCM_v_R_User or something like that, and then I'll have another table with my data to be joined (e.g. Custom_ActiveUserData). Then my custom sync query can run a JOIN against those tables (or I guess you could "pre-join" everything into one table and custom query against that). As for naming of tables, it doesn't really matter, though I would avoid using WD_xxxxx. I normally either use Custom_ as a prefix or <InsertCustomerNameHere>_ as a prefix for the table names.
... View more
Mar 09, 2023
11:01 AM
1 Kudo
I vaguely recall doing something like that for a customer a few years back. When I get a chance later, I'll take a look and see if I can find it.
... View more
Feb 18, 2023
07:19 PM
1 Kudo
Try the attached script. It will return a list of all non-archived catalog items with their Package ID, Title, and Group Name (written to CSV). If you only want catalog items that have an AD group associated, you should be able to just remove the "LEFT" from the SQL query. Before running the script, you'll need to edit the config file to update your connection string and domain controller.
... View more
Latest posts by jdempsey
Subject | Views | Posted |
---|---|---|
35 | Mar 30, 2023 10:45 AM | |
38 | Mar 30, 2023 10:39 AM | |
43 | Mar 30, 2023 10:31 AM | |
95 | Mar 25, 2023 10:11 PM | |
246 | Mar 21, 2023 11:18 AM | |
287 | Mar 17, 2023 01:28 PM | |
297 | Mar 17, 2023 12:23 PM | |
499 | Mar 14, 2023 03:42 PM | |
512 | Mar 14, 2023 02:35 PM | |
536 | Mar 14, 2023 01:39 PM |
Activity Feed
- Posted Re: App Broker Integration with Servicenow on App Broker Forum. Mar 30, 2023 10:45 AM
- Posted Re: Is there a plan on migrating all AppPortal workflows used in ServiceNow from Workflow to the new Flow Designer? on App Broker Forum. Mar 30, 2023 10:39 AM
- Posted Re: Is there a plan on migrating all AppPortal workflows used in ServiceNow from Workflow to the new Flow Designer? on App Broker Forum. Mar 30, 2023 10:31 AM
- Got a Kudo for Re: JAMF policy for APP Portal to create catalog item uninstall policy. Mar 28, 2023 10:31 AM
- Got a Kudo for Re: JAMF policy for APP Portal to create catalog item uninstall policy. Mar 26, 2023 02:03 PM
- Posted Re: JAMF policy for APP Portal to create catalog item uninstall policy on App Broker Forum. Mar 25, 2023 10:11 PM
- Kudoed Re: Bash script to call App Portal APIs for CharlesW. Mar 24, 2023 02:06 PM
- Kudoed Re: App Broker/Portal Release Schedule for CharlesW. Mar 21, 2023 01:12 PM
- Posted Re: App Portal / FNMS Version Compatibility on App Broker Forum. Mar 21, 2023 11:18 AM
- Posted Re: User Custom query to limit AppPortal import from SCCM to only include AD users with Enabled=True on App Broker Forum. Mar 17, 2023 01:28 PM
- Posted Re: User Custom query to limit AppPortal import from SCCM to only include AD users with Enabled=True on App Broker Forum. Mar 17, 2023 12:23 PM
- Got a Kudo for Re: User Custom query to limit AppPortal import from SCCM to only include AD users with Enabled=True. Mar 15, 2023 11:34 AM
- Got a Kudo for Re: App Portal / FNMS Version Compatibility. Mar 14, 2023 06:31 PM
- Posted Re: App Portal / FNMS Version Compatibility on App Broker Forum. Mar 14, 2023 03:42 PM
- Kudoed Re: App Portal / FNMS Version Compatibility for ext-smmason. Mar 14, 2023 03:42 PM
- Posted Re: App Portal / FNMS Version Compatibility on App Broker Forum. Mar 14, 2023 02:35 PM
- Kudoed Re: "Your system is not licensed to use this application." for Big_Kev. Mar 14, 2023 02:15 PM
- Kudoed Re: "Your system is not licensed to use this application." for CharlesW. Mar 14, 2023 02:14 PM
- Posted Re: App Portal / FNMS Version Compatibility on App Broker Forum. Mar 14, 2023 01:39 PM
- Got a Kudo for Re: Bulk Update Catalog Items Actions. Mar 14, 2023 06:49 AM